diff --git a/callbacks/query.go b/callbacks/query.go index 11753472..a10f1a62 100644 --- a/callbacks/query.go +++ b/callbacks/query.go @@ -121,7 +121,7 @@ func BuildQuerySQL(db *gorm.DB) { clauseSelect.Columns = append(clauseSelect.Columns, clause.Column{ Table: tableAliasName, Name: s, - Alias: tableAliasName + "__" + s, + Alias: tableAliasName + gorm.DoubleUnderscore + s, }) } diff --git a/scan.go b/scan.go index acd637a4..a8bb0c15 100644 --- a/scan.go +++ b/scan.go @@ -10,6 +10,11 @@ import ( "gorm.io/gorm/schema" ) +const ( + // DoubleUnderscore for FieldSchema.LookUpField or column Alias Delimiter + DoubleUnderscore = "__" +) + func prepareValues(values []interface{}, db *DB, columnTypes []*sql.ColumnType, columns []string) { if db.Statement.Schema != nil { for idx, name := range columns { @@ -121,9 +126,9 @@ func Scan(rows *sql.Rows, db *DB, initialized bool) { for idx, column := range columns { if field := Schema.LookUpField(column); field != nil && field.Readable { fields[idx] = field - } else if names := strings.Split(column, "__"); len(names) > 1 { + } else if names := strings.Split(column, DoubleUnderscore); len(names) > 1 { if rel, ok := Schema.Relationships.Relations[names[0]]; ok { - if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], "__")); field != nil && field.Readable { + if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], DoubleUnderscore)); field != nil && field.Readable { fields[idx] = field if len(joinFields) == 0 { @@ -200,9 +205,9 @@ func Scan(rows *sql.Rows, db *DB, initialized bool) { for idx, column := range columns { if field := Schema.LookUpField(column); field != nil && field.Readable { values[idx] = reflect.New(reflect.PtrTo(field.IndirectFieldType)).Interface() - } else if names := strings.Split(column, "__"); len(names) > 1 { + } else if names := strings.Split(column, DoubleUnderscore); len(names) > 1 { if rel, ok := Schema.Relationships.Relations[names[0]]; ok { - if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], "__")); field != nil && field.Readable { + if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], DoubleUnderscore)); field != nil && field.Readable { values[idx] = reflect.New(reflect.PtrTo(field.IndirectFieldType)).Interface() continue } @@ -219,9 +224,9 @@ func Scan(rows *sql.Rows, db *DB, initialized bool) { for idx, column := range columns { if field := Schema.LookUpField(column); field != nil && field.Readable { field.Set(db.Statement.ReflectValue, values[idx]) - } else if names := strings.Split(column, "__"); len(names) > 1 { + } else if names := strings.Split(column, DoubleUnderscore); len(names) > 1 { if rel, ok := Schema.Relationships.Relations[names[0]]; ok { - if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], "__")); field != nil && field.Readable { + if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], DoubleUnderscore)); field != nil && field.Readable { relValue := rel.Field.ReflectValueOf(db.Statement.ReflectValue) value := reflect.ValueOf(values[idx]).Elem()