Disabled updates to the primary key using cockroachdb
This commit is contained in:
		
							parent
							
								
									a80bfb8bc5
								
							
						
					
					
						commit
						039a759a53
					
				@ -43,6 +43,11 @@ func Update(scope *Scope) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if updateAttrs, ok := scope.InstanceGet("gorm:update_attrs"); ok {
 | 
							if updateAttrs, ok := scope.InstanceGet("gorm:update_attrs"); ok {
 | 
				
			||||||
			for key, value := range updateAttrs.(map[string]interface{}) {
 | 
								for key, value := range updateAttrs.(map[string]interface{}) {
 | 
				
			||||||
 | 
									if !scope.Dialect().SupportUpdatePrimaryKey() {
 | 
				
			||||||
 | 
										if field, ok := scope.Fields()[key]; ok && field.IsPrimaryKey {
 | 
				
			||||||
 | 
											continue
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				if scope.changeableDBColumn(key) {
 | 
									if scope.changeableDBColumn(key) {
 | 
				
			||||||
					sqls = append(sqls, fmt.Sprintf("%v = %v", scope.Quote(key), scope.AddToVars(value)))
 | 
										sqls = append(sqls, fmt.Sprintf("%v = %v", scope.Quote(key), scope.AddToVars(value)))
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@ -50,6 +55,9 @@ func Update(scope *Scope) {
 | 
				
			|||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			fields := scope.Fields()
 | 
								fields := scope.Fields()
 | 
				
			||||||
			for _, field := range fields {
 | 
								for _, field := range fields {
 | 
				
			||||||
 | 
									if field.IsPrimaryKey && !scope.Dialect().SupportUpdatePrimaryKey() {
 | 
				
			||||||
 | 
										continue
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				if scope.changeableField(field) && !field.IsPrimaryKey && field.IsNormal {
 | 
									if scope.changeableField(field) && !field.IsPrimaryKey && field.IsNormal {
 | 
				
			||||||
					sqls = append(sqls, fmt.Sprintf("%v = %v", scope.Quote(field.DBName), scope.AddToVars(field.Field.Interface())))
 | 
										sqls = append(sqls, fmt.Sprintf("%v = %v", scope.Quote(field.DBName), scope.AddToVars(field.Field.Interface())))
 | 
				
			||||||
				} else if relationship := field.Relationship; relationship != nil && relationship.Kind == "belongs_to" {
 | 
									} else if relationship := field.Relationship; relationship != nil && relationship.Kind == "belongs_to" {
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,10 @@ func (cockroach) SupportUniquePrimaryKey() bool {
 | 
				
			|||||||
	return false
 | 
						return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (cockroach) SupportUpdatePrimaryKey() bool {
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (cockroach) NewUniqueKey(scope *Scope) uint64 {
 | 
					func (cockroach) NewUniqueKey(scope *Scope) uint64 {
 | 
				
			||||||
	rows, err := scope.NewDB().Raw(`SELECT experimental_unique_int()`).Rows()
 | 
						rows, err := scope.NewDB().Raw(`SELECT experimental_unique_int()`).Rows()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,10 @@ func (commonDialect) SupportUniquePrimaryKey() bool {
 | 
				
			|||||||
	return true
 | 
						return true
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (commonDialect) SupportUpdatePrimaryKey() bool {
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (commonDialect) NewUniqueKey(scope *Scope) uint64 {
 | 
					func (commonDialect) NewUniqueKey(scope *Scope) uint64 {
 | 
				
			||||||
	panic("NewUniqueKey not supported by commonDialect")
 | 
						panic("NewUniqueKey not supported by commonDialect")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@ type Dialect interface {
 | 
				
			|||||||
	BinVar(i int) string
 | 
						BinVar(i int) string
 | 
				
			||||||
	SupportLastInsertId() bool
 | 
						SupportLastInsertId() bool
 | 
				
			||||||
	SupportUniquePrimaryKey() bool
 | 
						SupportUniquePrimaryKey() bool
 | 
				
			||||||
 | 
						SupportUpdatePrimaryKey() bool
 | 
				
			||||||
	NewUniqueKey(scope *Scope) uint64
 | 
						NewUniqueKey(scope *Scope) uint64
 | 
				
			||||||
	HasTop() bool
 | 
						HasTop() bool
 | 
				
			||||||
	SqlTag(value reflect.Value, size int, autoIncrease bool) string
 | 
						SqlTag(value reflect.Value, size int, autoIncrease bool) string
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user