Fix mssql rename index, has column
This commit is contained in:
		
							parent
							
								
									2b56fa0472
								
							
						
					
					
						commit
						58bc0f51c1
					
				| @ -3,7 +3,6 @@ package callbacks | |||||||
| import ( | import ( | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"sort" | 	"sort" | ||||||
| 	"time" |  | ||||||
| 
 | 
 | ||||||
| 	"github.com/jinzhu/gorm" | 	"github.com/jinzhu/gorm" | ||||||
| 	"github.com/jinzhu/gorm/clause" | 	"github.com/jinzhu/gorm/clause" | ||||||
| @ -152,7 +151,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) { | |||||||
| 		if !stmt.DisableUpdateTime { | 		if !stmt.DisableUpdateTime { | ||||||
| 			for _, field := range stmt.Schema.FieldsByDBName { | 			for _, field := range stmt.Schema.FieldsByDBName { | ||||||
| 				if field.AutoUpdateTime > 0 && value[field.Name] == nil && value[field.DBName] == nil { | 				if field.AutoUpdateTime > 0 && value[field.Name] == nil && value[field.DBName] == nil { | ||||||
| 					now := time.Now() | 					now := stmt.DB.NowFunc() | ||||||
| 					set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: now}) | 					set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: now}) | ||||||
| 					assignValue(field, now) | 					assignValue(field, now) | ||||||
| 				} | 				} | ||||||
| @ -168,7 +167,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) { | |||||||
| 						value, isZero := field.ValueOf(stmt.ReflectValue) | 						value, isZero := field.ValueOf(stmt.ReflectValue) | ||||||
| 						if !stmt.DisableUpdateTime { | 						if !stmt.DisableUpdateTime { | ||||||
| 							if field.AutoUpdateTime > 0 { | 							if field.AutoUpdateTime > 0 { | ||||||
| 								value = time.Now() | 								value = stmt.DB.NowFunc() | ||||||
| 								isZero = false | 								isZero = false | ||||||
| 							} | 							} | ||||||
| 						} | 						} | ||||||
|  | |||||||
| @ -1,7 +1,10 @@ | |||||||
| package mssql | package mssql | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
| 	"github.com/jinzhu/gorm" | 	"github.com/jinzhu/gorm" | ||||||
|  | 	"github.com/jinzhu/gorm/clause" | ||||||
| 	"github.com/jinzhu/gorm/migrator" | 	"github.com/jinzhu/gorm/migrator" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @ -20,6 +23,24 @@ func (m Migrator) HasTable(value interface{}) bool { | |||||||
| 	return count > 0 | 	return count > 0 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (m Migrator) HasColumn(value interface{}, field string) bool { | ||||||
|  | 	var count int64 | ||||||
|  | 	m.RunWithValue(value, func(stmt *gorm.Statement) error { | ||||||
|  | 		currentDatabase := m.DB.Migrator().CurrentDatabase() | ||||||
|  | 		name := field | ||||||
|  | 		if field := stmt.Schema.LookUpField(field); field != nil { | ||||||
|  | 			name = field.DBName | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return m.DB.Raw( | ||||||
|  | 			"SELECT count(*) FROM INFORMATION_SCHEMA.columns WHERE table_catalog = ? AND table_name = ? AND column_name = ?", | ||||||
|  | 			currentDatabase, stmt.Table, name, | ||||||
|  | 		).Row().Scan(&count) | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	return count > 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (m Migrator) HasIndex(value interface{}, name string) bool { | func (m Migrator) HasIndex(value interface{}, name string) bool { | ||||||
| 	var count int | 	var count int | ||||||
| 	m.RunWithValue(value, func(stmt *gorm.Statement) error { | 	m.RunWithValue(value, func(stmt *gorm.Statement) error { | ||||||
| @ -35,6 +56,16 @@ func (m Migrator) HasIndex(value interface{}, name string) bool { | |||||||
| 	return count > 0 | 	return count > 0 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (m Migrator) RenameIndex(value interface{}, oldName, newName string) error { | ||||||
|  | 	return m.RunWithValue(value, func(stmt *gorm.Statement) error { | ||||||
|  | 
 | ||||||
|  | 		return m.DB.Exec( | ||||||
|  | 			"sp_rename @objname = ?, @newname = ?, @objtype = 'INDEX';", | ||||||
|  | 			fmt.Sprintf("%s.%s", stmt.Table, oldName), clause.Column{Name: newName}, | ||||||
|  | 		).Error | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (m Migrator) HasConstraint(value interface{}, name string) bool { | func (m Migrator) HasConstraint(value interface{}, name string) bool { | ||||||
| 	var count int64 | 	var count int64 | ||||||
| 	m.RunWithValue(value, func(stmt *gorm.Statement) error { | 	m.RunWithValue(value, func(stmt *gorm.Statement) error { | ||||||
|  | |||||||
| @ -2,7 +2,6 @@ package mssql | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"database/sql" | 	"database/sql" | ||||||
| 	"database/sql/driver" |  | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"regexp" | 	"regexp" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| @ -81,15 +80,6 @@ func (dialector Dialector) QuoteTo(writer clause.Writer, str string) { | |||||||
| var numericPlaceholder = regexp.MustCompile("@p(\\d+)") | var numericPlaceholder = regexp.MustCompile("@p(\\d+)") | ||||||
| 
 | 
 | ||||||
| func (dialector Dialector) Explain(sql string, vars ...interface{}) string { | func (dialector Dialector) Explain(sql string, vars ...interface{}) string { | ||||||
| 	for idx, v := range vars { |  | ||||||
| 		if valuer, ok := v.(driver.Valuer); ok { |  | ||||||
| 			v, _ = valuer.Value() |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if v, ok := v.(bool); ok { |  | ||||||
| 			vars[idx] = strconv.FormatBool(v) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return logger.ExplainSQL(sql, numericPlaceholder, `'`, vars...) | 	return logger.ExplainSQL(sql, numericPlaceholder, `'`, vars...) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -11,9 +11,9 @@ for dialect in "${dialects[@]}" ; do | |||||||
| 
 | 
 | ||||||
|     if [ "$GORM_VERBOSE" = "" ] |     if [ "$GORM_VERBOSE" = "" ] | ||||||
|     then |     then | ||||||
|       DEBUG=false GORM_DIALECT=${dialect} go test -race ./... |       DEBUG=false GORM_DIALECT=${dialect} go test -race -count=1 ./... | ||||||
|     else |     else | ||||||
|       DEBUG=false GORM_DIALECT=${dialect} go test -race -v ./... |       DEBUG=false GORM_DIALECT=${dialect} go test -race -count=1 -v ./... | ||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
| done | done | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu