|
1 | 1 | package ast |
2 | 2 |
|
| 3 | +import "github.com/sqlc-dev/sqlc/internal/sql/format" |
| 4 | + |
3 | 5 | type A_Expr struct { |
4 | 6 | Kind A_Expr_Kind |
5 | 7 | Name *List |
@@ -31,75 +33,75 @@ func (n *A_Expr) isNamedParam() (string, bool) { |
31 | 33 | return "", false |
32 | 34 | } |
33 | 35 |
|
34 | | -func (n *A_Expr) Format(buf *TrackedBuffer) { |
| 36 | +func (n *A_Expr) Format(buf *TrackedBuffer, d format.Dialect) { |
35 | 37 | if n == nil { |
36 | 38 | return |
37 | 39 | } |
38 | 40 |
|
39 | 41 | // Check for named parameter first (works regardless of Kind) |
40 | 42 | if name, ok := n.isNamedParam(); ok { |
41 | | - buf.WriteString(buf.NamedParam(name)) |
| 43 | + buf.WriteString(d.NamedParam(name)) |
42 | 44 | return |
43 | 45 | } |
44 | 46 |
|
45 | 47 | switch n.Kind { |
46 | 48 | case A_Expr_Kind_IN: |
47 | | - buf.astFormat(n.Lexpr) |
| 49 | + buf.astFormat(n.Lexpr, d) |
48 | 50 | buf.WriteString(" IN (") |
49 | | - buf.astFormat(n.Rexpr) |
| 51 | + buf.astFormat(n.Rexpr, d) |
50 | 52 | buf.WriteString(")") |
51 | 53 | case A_Expr_Kind_LIKE: |
52 | | - buf.astFormat(n.Lexpr) |
| 54 | + buf.astFormat(n.Lexpr, d) |
53 | 55 | buf.WriteString(" LIKE ") |
54 | | - buf.astFormat(n.Rexpr) |
| 56 | + buf.astFormat(n.Rexpr, d) |
55 | 57 | case A_Expr_Kind_ILIKE: |
56 | | - buf.astFormat(n.Lexpr) |
| 58 | + buf.astFormat(n.Lexpr, d) |
57 | 59 | buf.WriteString(" ILIKE ") |
58 | | - buf.astFormat(n.Rexpr) |
| 60 | + buf.astFormat(n.Rexpr, d) |
59 | 61 | case A_Expr_Kind_SIMILAR: |
60 | | - buf.astFormat(n.Lexpr) |
| 62 | + buf.astFormat(n.Lexpr, d) |
61 | 63 | buf.WriteString(" SIMILAR TO ") |
62 | | - buf.astFormat(n.Rexpr) |
| 64 | + buf.astFormat(n.Rexpr, d) |
63 | 65 | case A_Expr_Kind_BETWEEN: |
64 | | - buf.astFormat(n.Lexpr) |
| 66 | + buf.astFormat(n.Lexpr, d) |
65 | 67 | buf.WriteString(" BETWEEN ") |
66 | 68 | if l, ok := n.Rexpr.(*List); ok && len(l.Items) == 2 { |
67 | | - buf.astFormat(l.Items[0]) |
| 69 | + buf.astFormat(l.Items[0], d) |
68 | 70 | buf.WriteString(" AND ") |
69 | | - buf.astFormat(l.Items[1]) |
| 71 | + buf.astFormat(l.Items[1], d) |
70 | 72 | } |
71 | 73 | case A_Expr_Kind_NOT_BETWEEN: |
72 | | - buf.astFormat(n.Lexpr) |
| 74 | + buf.astFormat(n.Lexpr, d) |
73 | 75 | buf.WriteString(" NOT BETWEEN ") |
74 | 76 | if l, ok := n.Rexpr.(*List); ok && len(l.Items) == 2 { |
75 | | - buf.astFormat(l.Items[0]) |
| 77 | + buf.astFormat(l.Items[0], d) |
76 | 78 | buf.WriteString(" AND ") |
77 | | - buf.astFormat(l.Items[1]) |
| 79 | + buf.astFormat(l.Items[1], d) |
78 | 80 | } |
79 | 81 | case A_Expr_Kind_DISTINCT: |
80 | | - buf.astFormat(n.Lexpr) |
| 82 | + buf.astFormat(n.Lexpr, d) |
81 | 83 | buf.WriteString(" IS DISTINCT FROM ") |
82 | | - buf.astFormat(n.Rexpr) |
| 84 | + buf.astFormat(n.Rexpr, d) |
83 | 85 | case A_Expr_Kind_NOT_DISTINCT: |
84 | | - buf.astFormat(n.Lexpr) |
| 86 | + buf.astFormat(n.Lexpr, d) |
85 | 87 | buf.WriteString(" IS NOT DISTINCT FROM ") |
86 | | - buf.astFormat(n.Rexpr) |
| 88 | + buf.astFormat(n.Rexpr, d) |
87 | 89 | case A_Expr_Kind_NULLIF: |
88 | 90 | buf.WriteString("NULLIF(") |
89 | | - buf.astFormat(n.Lexpr) |
| 91 | + buf.astFormat(n.Lexpr, d) |
90 | 92 | buf.WriteString(", ") |
91 | | - buf.astFormat(n.Rexpr) |
| 93 | + buf.astFormat(n.Rexpr, d) |
92 | 94 | buf.WriteString(")") |
93 | 95 | default: |
94 | 96 | // Standard operator (including A_Expr_Kind_OP) |
95 | 97 | if set(n.Lexpr) { |
96 | | - buf.astFormat(n.Lexpr) |
| 98 | + buf.astFormat(n.Lexpr, d) |
97 | 99 | buf.WriteString(" ") |
98 | 100 | } |
99 | | - buf.astFormat(n.Name) |
| 101 | + buf.astFormat(n.Name, d) |
100 | 102 | if set(n.Rexpr) { |
101 | 103 | buf.WriteString(" ") |
102 | | - buf.astFormat(n.Rexpr) |
| 104 | + buf.astFormat(n.Rexpr, d) |
103 | 105 | } |
104 | 106 | } |
105 | 107 | } |
0 commit comments