Fix panic when using invalid data, close #3193
This commit is contained in:
		
							parent
							
								
									c3f52cee8b
								
							
						
					
					
						commit
						69d8111893
					
				| @ -51,7 +51,7 @@ func Create(config *Config) func(db *gorm.DB) { | |||||||
| 					db.Statement.Build("INSERT", "VALUES", "ON CONFLICT") | 					db.Statement.Build("INSERT", "VALUES", "ON CONFLICT") | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if !db.DryRun { | 				if !db.DryRun && db.Error == nil { | ||||||
| 					result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | 					result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | ||||||
| 
 | 
 | ||||||
| 					if err == nil { | 					if err == nil { | ||||||
| @ -130,7 +130,7 @@ func CreateWithReturning(db *gorm.DB) { | |||||||
| 				db.Statement.WriteQuoted(field.DBName) | 				db.Statement.WriteQuoted(field.DBName) | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if !db.DryRun { | 			if !db.DryRun && db.Error == nil { | ||||||
| 				rows, err := db.Statement.ConnPool.QueryContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | 				rows, err := db.Statement.ConnPool.QueryContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | ||||||
| 
 | 
 | ||||||
| 				if err == nil { | 				if err == nil { | ||||||
| @ -179,7 +179,7 @@ func CreateWithReturning(db *gorm.DB) { | |||||||
| 					db.AddError(err) | 					db.AddError(err) | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} else if !db.DryRun { | 		} else if !db.DryRun && db.Error == nil { | ||||||
| 			if result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...); err == nil { | 			if result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...); err == nil { | ||||||
| 				db.RowsAffected, _ = result.RowsAffected() | 				db.RowsAffected, _ = result.RowsAffected() | ||||||
| 			} else { | 			} else { | ||||||
|  | |||||||
| @ -60,7 +60,7 @@ func Delete(db *gorm.DB) { | |||||||
| 			db.Statement.Build("DELETE", "FROM", "WHERE") | 			db.Statement.Build("DELETE", "FROM", "WHERE") | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if !db.DryRun { | 		if !db.DryRun && db.Error == nil { | ||||||
| 			result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | 			result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | ||||||
| 
 | 
 | ||||||
| 			if err == nil { | 			if err == nil { | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ func Query(db *gorm.DB) { | |||||||
| 			BuildQuerySQL(db) | 			BuildQuerySQL(db) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if !db.DryRun { | 		if !db.DryRun && db.Error == nil { | ||||||
| 			rows, err := db.Statement.ConnPool.QueryContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | 			rows, err := db.Statement.ConnPool.QueryContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				db.AddError(err) | 				db.AddError(err) | ||||||
|  | |||||||
| @ -74,7 +74,7 @@ func Update(db *gorm.DB) { | |||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if !db.DryRun { | 		if !db.DryRun && db.Error == nil { | ||||||
| 			result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | 			result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...) | ||||||
| 
 | 
 | ||||||
| 			if err == nil { | 			if err == nil { | ||||||
|  | |||||||
| @ -7,20 +7,14 @@ import ( | |||||||
| var ( | var ( | ||||||
| 	// ErrRecordNotFound record not found error
 | 	// ErrRecordNotFound record not found error
 | ||||||
| 	ErrRecordNotFound = errors.New("record not found") | 	ErrRecordNotFound = errors.New("record not found") | ||||||
| 	// ErrInvalidSQL invalid SQL error, happens when you passed invalid SQL
 |  | ||||||
| 	ErrInvalidSQL = errors.New("invalid SQL") |  | ||||||
| 	// ErrInvalidTransaction invalid transaction when you are trying to `Commit` or `Rollback`
 | 	// ErrInvalidTransaction invalid transaction when you are trying to `Commit` or `Rollback`
 | ||||||
| 	ErrInvalidTransaction = errors.New("no valid transaction") | 	ErrInvalidTransaction = errors.New("no valid transaction") | ||||||
| 	// ErrUnaddressable unaddressable value
 |  | ||||||
| 	ErrUnaddressable = errors.New("using unaddressable value") |  | ||||||
| 	// ErrNotImplemented not implemented
 | 	// ErrNotImplemented not implemented
 | ||||||
| 	ErrNotImplemented = errors.New("not implemented") | 	ErrNotImplemented = errors.New("not implemented") | ||||||
| 	// ErrMissingWhereClause missing where clause
 | 	// ErrMissingWhereClause missing where clause
 | ||||||
| 	ErrMissingWhereClause = errors.New("WHERE conditions required") | 	ErrMissingWhereClause = errors.New("WHERE conditions required") | ||||||
| 	// ErrUnsupportedRelation unsupported relations
 | 	// ErrUnsupportedRelation unsupported relations
 | ||||||
| 	ErrUnsupportedRelation = errors.New("unsupported relations") | 	ErrUnsupportedRelation = errors.New("unsupported relations") | ||||||
| 	// ErrPtrStructSupported only ptr of struct supported
 |  | ||||||
| 	ErrPtrStructSupported = errors.New("only ptr of struct supported") |  | ||||||
| 	// ErrorPrimaryKeyRequired primary keys required
 | 	// ErrorPrimaryKeyRequired primary keys required
 | ||||||
| 	ErrorPrimaryKeyRequired = errors.New("primary key required") | 	ErrorPrimaryKeyRequired = errors.New("primary key required") | ||||||
| 	// ErrorModelValueRequired model value required
 | 	// ErrorModelValueRequired model value required
 | ||||||
|  | |||||||
| @ -95,7 +95,9 @@ func (stmt *Statement) QuoteTo(writer clause.Writer, field interface{}) { | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if v.Name == clause.PrimaryKey { | 		if v.Name == clause.PrimaryKey { | ||||||
| 			if stmt.Schema != nil && stmt.Schema.PrioritizedPrimaryField != nil { | 			if stmt.Schema == nil { | ||||||
|  | 				stmt.DB.AddError(ErrorModelValueRequired) | ||||||
|  | 			} else if stmt.Schema.PrioritizedPrimaryField != nil { | ||||||
| 				stmt.DB.Dialector.QuoteTo(writer, stmt.Schema.PrioritizedPrimaryField.DBName) | 				stmt.DB.Dialector.QuoteTo(writer, stmt.Schema.PrioritizedPrimaryField.DBName) | ||||||
| 			} else if len(stmt.Schema.DBNames) > 0 { | 			} else if len(stmt.Schema.DBNames) > 0 { | ||||||
| 				stmt.DB.Dialector.QuoteTo(writer, stmt.Schema.DBNames[0]) | 				stmt.DB.Dialector.QuoteTo(writer, stmt.Schema.DBNames[0]) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu