MCPcopy
hub / github.com/go-gorm/gorm / BuildQuerySQL

Function BuildQuerySQL

callbacks/query.go:36–275  ·  callbacks/query.go::BuildQuerySQL
(db *gorm.DB)

Source from the content-addressed store, hash-verified

34}
35
36func BuildQuerySQL(db *gorm.DB) {
37 if db.Statement.Schema != nil {
38 for _, c := range db.Statement.Schema.QueryClauses {
39 db.Statement.AddClause(c)
40 }
41 }
42
43 if db.Statement.SQL.Len() == 0 {
44 db.Statement.SQL.Grow(100)
45 clauseSelect := clause.Select{Distinct: db.Statement.Distinct}
46
47 if db.Statement.ReflectValue.Kind() == reflect.Struct && db.Statement.ReflectValue.Type() == db.Statement.Schema.ModelType {
48 var conds []clause.Expression
49 for _, primaryField := range db.Statement.Schema.PrimaryFields {
50 if v, isZero := primaryField.ValueOf(db.Statement.Context, db.Statement.ReflectValue); !isZero {
51 conds = append(conds, clause.Eq{Column: clause.Column{Table: db.Statement.Table, Name: primaryField.DBName}, Value: v})
52 }
53 }
54
55 if len(conds) > 0 {
56 db.Statement.AddClause(clause.Where{Exprs: conds})
57 }
58 }
59
60 if len(db.Statement.Selects) > 0 {
61 clauseSelect.Columns = make([]clause.Column, len(db.Statement.Selects))
62 for idx, name := range db.Statement.Selects {
63 if db.Statement.Schema == nil {
64 clauseSelect.Columns[idx] = clause.Column{Name: name, Raw: true}
65 } else if f := db.Statement.Schema.LookUpField(name); f != nil {
66 clauseSelect.Columns[idx] = clause.Column{Name: f.DBName}
67 } else {
68 clauseSelect.Columns[idx] = clause.Column{Name: name, Raw: true}
69 }
70 }
71 } else if db.Statement.Schema != nil && len(db.Statement.Omits) > 0 {
72 selectColumns, _ := db.Statement.SelectAndOmitColumns(false, false)
73 clauseSelect.Columns = make([]clause.Column, 0, len(db.Statement.Schema.DBNames))
74 for _, dbName := range db.Statement.Schema.DBNames {
75 if v, ok := selectColumns[dbName]; (ok && v) || !ok {
76 clauseSelect.Columns = append(clauseSelect.Columns, clause.Column{Table: db.Statement.Table, Name: dbName})
77 }
78 }
79 } else if db.Statement.Schema != nil && db.Statement.ReflectValue.IsValid() {
80 queryFields := db.QueryFields
81 if !queryFields {
82 switch db.Statement.ReflectValue.Kind() {
83 case reflect.Struct:
84 queryFields = db.Statement.ReflectValue.Type() != db.Statement.Schema.ModelType
85 case reflect.Slice:
86 queryFields = db.Statement.ReflectValue.Type().Elem() != db.Statement.Schema.ModelType
87 }
88 }
89
90 if queryFields {
91 stmt := gorm.Statement{DB: db}
92 // smaller struct
93 if err := stmt.Parse(db.Statement.Dest); err == nil && (db.QueryFields || stmt.Schema.ModelType != db.Statement.Schema.ModelType) {

Callers 2

QueryFunction · 0.85
RowQueryFunction · 0.85

Calls 12

AddClauseMethod · 0.95
SelectAndOmitColumnsMethod · 0.95
ParseMethod · 0.95
NestedRelationNameFunction · 0.92
LenMethod · 0.80
LookUpFieldMethod · 0.80
AddClauseIfNotExistsMethod · 0.80
TypeMethod · 0.65
BuildMethod · 0.65
BindVarToMethod · 0.65
ReplaceMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected