for FieldSchema.LookUpField or column Alias Delimiter
This commit is contained in:
		
							parent
							
								
									b7d4fe1a34
								
							
						
					
					
						commit
						10ef50b606
					
				@ -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,
 | 
			
		||||
						})
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								scan.go
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								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()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user