Skip to content

Commit 6b5f4d6

Browse files
fix(compiler): Set RV for TargetList items on updates (#1252)
* fix(compiler): Set RV for TargetList items on updates * test(compiler): Test CTE updates
1 parent 805759d commit 6b5f4d6

File tree

11 files changed

+399
-0
lines changed

11 files changed

+399
-0
lines changed

internal/compiler/find_params.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,20 @@ func (p paramSearch) Visit(node ast.Node) astutils.Visitor {
107107
}
108108
}
109109

110+
case *ast.UpdateStmt:
111+
for _, item := range n.TargetList.Items {
112+
target, ok := item.(*ast.ResTarget)
113+
if !ok {
114+
continue
115+
}
116+
ref, ok := target.Val.(*ast.ParamRef)
117+
if !ok {
118+
continue
119+
}
120+
*p.refs = append(*p.refs, paramRef{parent: target, ref: ref, rv: n.Relation})
121+
p.seen[ref.Location] = struct{}{}
122+
}
123+
110124
case *ast.RangeVar:
111125
p.rangeVar = n
112126

internal/endtoend/testdata/update_cte/pgx/go/db.go

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/update_cte/pgx/go/models.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/update_cte/pgx/go/query.sql.go

Lines changed: 72 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
-- FILE: schema.sql
2+
3+
DROP SCHEMA IF EXISTS td3 CASCADE;
4+
CREATE SCHEMA td3;
5+
6+
CREATE TABLE td3.codes (
7+
id SERIAL PRIMARY KEY,
8+
ts_created timestamptz DEFAULT now() NOT NULL,
9+
ts_updated timestamptz DEFAULT now() NOT NULL,
10+
created_by text NOT NULL,
11+
updated_by text NOT NULL,
12+
13+
code text,
14+
hash text,
15+
is_private boolean
16+
);
17+
18+
19+
CREATE TABLE td3.test_codes (
20+
id SERIAL PRIMARY KEY,
21+
ts_created timestamptz DEFAULT now() NOT NULL,
22+
ts_updated timestamptz DEFAULT now() NOT NULL,
23+
created_by text NOT NULL,
24+
updated_by text NOT NULL,
25+
26+
test_id integer NOT NULL,
27+
code_hash text NOT NULL
28+
);
29+
30+
-- FILE: query.sql
31+
32+
-- name: UpdateCode :one
33+
WITH cc AS (
34+
UPDATE td3.codes
35+
SET
36+
created_by = $1,
37+
updated_by = $1,
38+
code = $2,
39+
hash = $3,
40+
is_private = false
41+
RETURNING hash
42+
)
43+
UPDATE td3.test_codes
44+
SET
45+
created_by = $1,
46+
updated_by = $1,
47+
test_id = $4,
48+
code_hash = cc.hash
49+
FROM cc
50+
RETURNING *;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"sql_package": "pgx/v4",
8+
"name": "querytest",
9+
"schema": "query.sql",
10+
"queries": "query.sql"
11+
}
12+
]
13+
}

internal/endtoend/testdata/update_cte/stdlib/go/db.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/update_cte/stdlib/go/models.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/update_cte/stdlib/go/query.sql.go

Lines changed: 72 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)