Unknown 6 лет назад
Родитель
Сommit
06359a917a
4 измененных файлов с 42 добавлено и 36 удалено
  1. 9 2
      dialect_mssql.go
  2. 8 12
      dialect_mysql.go
  3. 16 20
      dialect_postgres.go
  4. 9 2
      dialect_sqlite3.go

+ 9 - 2
dialect_mssql.go

@@ -535,8 +535,15 @@ func (db *mssql) ForUpdateSql(query string) string {
 
 func (db *mssql) CreateIndexSql(tableName string, index *core.Index) string {
 	quote := db.Quote
-	return fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(tableName, index.Name)),
-		quote(tableName), quote(strings.Join(index.Cols, quote(","))))
+	var unique string
+	var idxName string
+	if index.Type == core.UniqueType {
+		unique = " UNIQUE"
+	}
+	idxName = index.XName(tableName)
+	return fmt.Sprintf("CREATE%s INDEX %v ON %v (%v)", unique,
+		quote(idxName), quote(tableName),
+		quote(strings.Join(index.Cols, quote(","))))
 }
 
 func (db *mssql) Filters() []core.Filter {

+ 8 - 12
dialect_mysql.go

@@ -509,19 +509,15 @@ func (db *mysql) GetIndexes(tableName string) (map[string]*core.Index, error) {
 
 func (db *mysql) CreateIndexSql(tableName string, index *core.Index) string {
 	quote := db.Quote
-	//return fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(tableName, index.Name)),
-	//	quote(tableName), quote(strings.Join(index.Cols, quote(","))))
-	switch index.Type {
-	case 1:
-		return fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(tableName, index.Name)),
-			quote(tableName), quote(strings.Join(index.Cols, quote(","))))
-	case 2:
-		return fmt.Sprintf("CREATE UNIQUE INDEX %v ON %v (%v);", quote(indexName(tableName, index.Name)),
-			quote(tableName), quote(strings.Join(index.Cols, quote(","))))
-	default:
-		return fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(tableName, index.Name)),
-			quote(tableName), quote(strings.Join(index.Cols, quote(","))))
+	var unique string
+	var idxName string
+	if index.Type == core.UniqueType {
+		unique = " UNIQUE"
 	}
+	idxName = index.XName(tableName)
+	return fmt.Sprintf("CREATE%s INDEX %v ON %v (%v)", unique,
+		quote(idxName), quote(tableName),
+		quote(strings.Join(index.Cols, quote(","))))
 }
 
 func (db *mysql) CreateTableSql(table *core.Table, tableName, storeEngine, charset string) string {

+ 16 - 20
dialect_postgres.go

@@ -911,38 +911,34 @@ func (db *postgres) ModifyColumnSql(tableName string, col *core.Column) string {
 
 func (db *postgres) CreateIndexSql(tableName string, index *core.Index) string {
 	quote := db.Quote
-	idxName := index.Name
-
-	tableName = strings.Replace(tableName, `"`, "", -1)
-	tableName = strings.Replace(tableName, `.`, "_", -1)
-
+	var unique string
+	var idxName string
+	if index.Type == core.UniqueType {
+		unique = " UNIQUE"
+	}
+	idxName = index.XName(tableName)
 	if db.Uri.Schema != "" {
 		idxName = db.Uri.Schema + "." + idxName
 	}
 
-	return fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(tableName, idxName)),
-		quote(tableName), quote(strings.Join(index.Cols, quote(","))))
+	return fmt.Sprintf("CREATE%s INDEX %v ON %v (%v)", unique,
+		quote(idxName), quote(tableName),
+		quote(strings.Join(index.Cols, quote(","))))
 }
 
 func (db *postgres) DropIndexSql(tableName string, index *core.Index) string {
 	quote := db.Quote
-	idxName := index.Name
-
-	tableName = strings.Replace(tableName, `"`, "", -1)
-	tableName = strings.Replace(tableName, `.`, "_", -1)
-
-	if !strings.HasPrefix(idxName, "UQE_") &&
-		!strings.HasPrefix(idxName, "IDX_") {
-		if index.Type == core.UniqueType {
-			idxName = fmt.Sprintf("UQE_%v_%v", tableName, index.Name)
-		} else {
-			idxName = fmt.Sprintf("IDX_%v_%v", tableName, index.Name)
-		}
+	var idxName string
+	if index.IsRegular {
+		idxName = index.XName(tableName)
+	} else {
+		idxName = index.Name
 	}
+
 	if db.Uri.Schema != "" {
 		idxName = db.Uri.Schema + "." + idxName
 	}
-	return fmt.Sprintf("DROP INDEX %v", quote(idxName))
+	return fmt.Sprintf("DROP INDEX %v ON %s", quote(idxName), quote(tableName))
 }
 
 func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) {

+ 9 - 2
dialect_sqlite3.go

@@ -230,8 +230,15 @@ func (db *sqlite3) TableCheckSql(tableName string) (string, []interface{}) {
 
 func (db *sqlite3) CreateIndexSql(tableName string, index *core.Index) string {
 	quote := db.Quote
-	return fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(tableName, index.Name)),
-		quote(tableName), quote(strings.Join(index.Cols, quote(","))))
+	var unique string
+	var idxName string
+	if index.Type == core.UniqueType {
+		unique = " UNIQUE"
+	}
+	idxName = index.XName(tableName)
+	return fmt.Sprintf("CREATE%s INDEX %v ON %v (%v)", unique,
+		quote(idxName), quote(tableName),
+		quote(strings.Join(index.Cols, quote(","))))
 }
 
 func (db *sqlite3) DropIndexSql(tableName string, index *core.Index) string {