Skip to content

Commit efc4795

Browse files
committed
Fix PG procedure output type for separate schema
1 parent 08fbcd8 commit efc4795

File tree

4 files changed

+208
-31
lines changed

4 files changed

+208
-31
lines changed

internal/compiler/output_columns.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ func (c *Compiler) outputColumns(qc *QueryCatalog, node ast.Node) ([]*Column, er
7171
typeName := arg.Type.Name
7272
if arg.Type.Names != nil && len(arg.Type.Names.Items) > 0 {
7373
typeName = astutils.Join(arg.Type.Names, ".")
74+
} else if arg.Type.Schema != "" {
75+
typeName = arg.Type.Schema + "." + arg.Type.Name
7476
}
7577
cols = append(cols, &Column{Name: name, DataType: typeName, NotNull: false})
7678
}

internal/endtoend/testdata/ddl_create_procedure_with_out_args/postgresql/pgx/v5/go/query.sql.go

Lines changed: 142 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
-- name: CallInsertData :one
2-
CALL insert_data($1, $2, null);
2+
CALL insert_data($1, $2, null, null, null, null, null, null, null, null, null, null, null);
33

4-
-- name: CallInsertDataNoArgs :exec
5-
CALL insert_data(1, 2, null);
4+
-- name: CallInsertDataNoArgs :one
5+
CALL insert_data(1, 2, null, null, null, null, null, null, null, null, null, null, null);
66

77
-- name: CallInsertDataNamed :one
8-
CALL insert_data(b => $1, a => $2, c => null);
8+
CALL insert_data(
9+
b => $1,
10+
a => $2,
11+
c => null,
12+
i => null,
13+
j => null,
14+
k => null,
15+
d => null,
16+
h => null,
17+
e => null,
18+
m => null,
19+
f => null,
20+
g => null,
21+
l => null
22+
);
923

10-
-- name: CallInsertDataSqlcArgs :exec
11-
CALL insert_data(sqlc.arg('foo'), sqlc.arg('bar'), sqlc.arg('с'));
24+
-- name: CallInsertDataSqlcArgs :one
25+
CALL insert_data(sqlc.arg('foo'), sqlc.arg('bar'), null, null, null, null, null, null, null, null, null, null, null);
Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,55 @@
1-
CREATE TABLE tbl (
2-
value integer
1+
CREATE TABLE tbl
2+
(
3+
value integer
34
);
45

56
-- https://www.postgresql.org/docs/current/sql-createprocedure.html
6-
CREATE PROCEDURE insert_data(IN a integer, IN b integer, OUT c integer)
7+
CREATE PROCEDURE insert_data(
8+
IN a integer,
9+
IN b integer,
10+
-- Numbers
11+
OUT c integer,
12+
OUT i float,
13+
OUT j numeric,
14+
OUT k real,
15+
-- Text
16+
OUT d varchar,
17+
OUT h text,
18+
-- Time
19+
OUT e timestamp,
20+
OUT m interval,
21+
-- Other
22+
OUT f jsonb,
23+
OUT g bytea,
24+
OUT l boolean
25+
)
726
LANGUAGE plpgsql
8-
AS $$
27+
AS
28+
$$
929
BEGIN
1030
INSERT INTO tbl VALUES (a);
1131
INSERT INTO tbl VALUES (b);
1232

1333
c := 777;
34+
35+
-- Numbers assignments
36+
i := random() * 100;
37+
j := (random() * 500)::numeric(10, 2);
38+
k := (random() * 50)::real;
39+
40+
-- Text assignments
41+
d := 'Varchar val ' || floor(random() * 100);
42+
h := 'Text val ' || md5(random()::text);
43+
44+
-- Time assignments
45+
e := now();
46+
m := make_interval(hours => floor(random() * 24)::int);
47+
48+
-- Other assignments
49+
f := '{
50+
"key": "random"
51+
}'::jsonb;
52+
g := '\xDEADBEEF'::bytea;
53+
l := (random() > 0.5);
1454
END;
1555
$$;

0 commit comments

Comments
 (0)