MCPcopy
hub / github.com/pocketbase/pocketbase / Build

Method Build

tools/search/multi_match_subquery.go:32–70  ·  view source on GitHub ↗

Build converts the expression into a SQL fragment. Implements [dbx.Expression] interface.

(db *dbx.DB, params dbx.Params)

Source from the content-addressed store, hash-verified

30//
31// Implements [dbx.Expression] interface.
32func (m *MultiMatchSubquery) Build(db *dbx.DB, params dbx.Params) string {
33 if m.TargetTableAlias == "" || m.FromTableName == "" || m.FromTableAlias == "" {
34 return "0=1"
35 }
36
37 if params == nil {
38 params = m.Params
39 } else {
40 // merge by updating the parent params
41 for k, v := range m.Params {
42 params[k] = v
43 }
44 }
45
46 var mergedJoins strings.Builder
47 for i, j := range m.Joins {
48 if i > 0 {
49 mergedJoins.WriteString(" ")
50 }
51 mergedJoins.WriteString("LEFT JOIN ")
52 mergedJoins.WriteString(db.QuoteTableName(j.TableName))
53 mergedJoins.WriteString(" ")
54 mergedJoins.WriteString(db.QuoteTableName(j.TableAlias))
55 if j.On != nil {
56 mergedJoins.WriteString(" ON ")
57 mergedJoins.WriteString(j.On.Build(db, params))
58 }
59 }
60
61 return fmt.Sprintf(
62 `SELECT %s as [[multiMatchValue]] FROM %s %s %s WHERE %s = %s`,
63 db.QuoteColumnName(m.ValueIdentifier),
64 db.QuoteTableName(m.FromTableName),
65 db.QuoteTableName(m.FromTableAlias),
66 mergedJoins.String(),
67 db.QuoteColumnName(m.FromTableAlias+".id"),
68 db.QuoteColumnName(m.TargetTableAlias+".id"),
69 )
70}

Callers 1

Calls 1

StringMethod · 0.45

Tested by 1