Skip to content

Commit 9e9a48f

Browse files
authored
Merge pull request #18 from n-r-w/fix_cte_placeholder
fix cte PlaceholderFormat
2 parents d50e331 + a5a5cb6 commit 9e9a48f

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

.golangci.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ linters-settings:
3737
- octalLiteral
3838
- whyNoLint
3939
- wrapperFunc
40-
- unlabelStmt # выдает ошибку там где ее нет
41-
- sloppyReassign # довольно странный линтер, предлагает выполнять "shadows declaration" внутри if
40+
- unlabelStmt # false positive
41+
- sloppyReassign # quite strange linter, suggests performing "shadows declaration" inside if.
4242
settings:
4343
# don't forget to run "golangci-lint cache clean" after changes in the .go files below
4444
hugeParam:

cte.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ func (d *commonTableExpressionsData) toSql() (sqlStr string, args []any, err err
5353
return "", nil, err
5454
}
5555

56-
sqlStr = sql.String()
57-
return sqlStr, args, nil
56+
sqlStr, err = d.PlaceholderFormat.ReplacePlaceholders(sql.String())
57+
return sqlStr, args, err
5858
}
5959

6060
func (d *commonTableExpressionsData) ToSql() (sql string, args []any, err error) {

cte_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,25 @@ func TestWithAsQuery_Update(t *testing.T) {
129129

130130
assert.Equal(t, expectedSql, q)
131131
}
132+
133+
func TestCTEPlaceholderFormat(t *testing.T) {
134+
q := With("table1").As(
135+
Select("col1", "col2").
136+
From("table1").
137+
Where(Eq{"col1": 1})).
138+
Update(
139+
Update("table2").
140+
Set("col3", 2))
141+
142+
sql, _, err := q.PlaceholderFormat(Question).ToSql()
143+
assert.NoError(t, err)
144+
145+
expectedSql := "WITH table1 AS (SELECT col1, col2 FROM table1 WHERE col1 = ?) UPDATE table2 SET col3 = ?"
146+
assert.Equal(t, expectedSql, sql)
147+
148+
sql, _, err = q.PlaceholderFormat(Dollar).ToSql()
149+
assert.NoError(t, err)
150+
151+
expectedSql = "WITH table1 AS (SELECT col1, col2 FROM table1 WHERE col1 = $1) UPDATE table2 SET col3 = $2"
152+
assert.Equal(t, expectedSql, sql)
153+
}

0 commit comments

Comments
 (0)