MCPcopy Create free account
hub / github.com/go-pg/pg / m2mQuery

Method m2mQuery

orm/join.go:100–151  ·  view source on GitHub ↗
(fmter QueryFormatter, q *Query)

Source from the content-addressed store, hash-verified

98}
99
100func (j *join) m2mQuery(fmter QueryFormatter, q *Query) (*Query, error) {
101 m2mModel := newM2MModel(j)
102 if m2mModel == nil {
103 return nil, nil
104 }
105
106 q = q.Model(m2mModel)
107 if j.ApplyQuery != nil {
108 var err error
109 q, err = j.ApplyQuery(q)
110 if err != nil {
111 return nil, err
112 }
113 }
114
115 if len(q.columns) == 0 {
116 q.columns = append(q.columns, &hasManyColumnsAppender{j})
117 }
118
119 index := j.JoinModel.ParentIndex()
120 baseTable := j.BaseModel.Table()
121
122 //nolint
123 var join []byte
124 join = append(join, "JOIN "...)
125 join = fmter.FormatQuery(join, string(j.Rel.M2MTableName))
126 join = append(join, " AS "...)
127 join = append(join, j.Rel.M2MTableAlias...)
128 join = append(join, " ON ("...)
129 for i, col := range j.Rel.M2MBaseFKs {
130 if i > 0 {
131 join = append(join, ", "...)
132 }
133 join = append(join, j.Rel.M2MTableAlias...)
134 join = append(join, '.')
135 join = types.AppendIdent(join, col, 1)
136 }
137 join = append(join, ") IN ("...)
138 join = appendChildValues(join, j.BaseModel.Root(), index, baseTable.PKs)
139 join = append(join, ")"...)
140 q = q.Join(internal.BytesToString(join))
141
142 joinTable := j.JoinModel.Table()
143 for i, col := range j.Rel.M2MJoinFKs {
144 pk := joinTable.PKs[i]
145 q = q.Where("?.? = ?.?",
146 joinTable.Alias, pk.Column,
147 j.Rel.M2MTableAlias, types.Ident(col))
148 }
149
150 return q, nil
151}
152
153func (j *join) hasParent() bool {
154 if j.Parent != nil {

Callers 1

selectM2MMethod · 0.95

Calls 12

AppendIdentFunction · 0.92
BytesToStringFunction · 0.92
IdentTypeAlias · 0.92
newM2MModelFunction · 0.85
appendChildValuesFunction · 0.85
WhereMethod · 0.80
ModelMethod · 0.65
ParentIndexMethod · 0.65
TableMethod · 0.65
FormatQueryMethod · 0.65
RootMethod · 0.65
JoinMethod · 0.65

Tested by

no test coverage detected