Skip to content

Commit 4d28821

Browse files
committed
postgresql: CREATE TRIGGER EXECUTE FUNCTION
Also implement CREATE PROCEDURE
1 parent fee0407 commit 4d28821

File tree

13 files changed

+195
-4
lines changed

13 files changed

+195
-4
lines changed

internal/endtoend/testdata/ddl_create_procedure/postgresql/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/ddl_create_procedure/postgresql/go/models.go

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

internal/endtoend/testdata/ddl_create_procedure/postgresql/go/query.sql.go

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- name: Placeholder :exec
2+
SELECT 1;
3+
4+
-- FIXME: Implement CALL
5+
-- name: CallInsertData :select
6+
CALL insert_data(1, 2);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE TABLE tbl (
2+
value integer
3+
);
4+
5+
-- https://www.postgresql.org/docs/current/sql-createprocedure.html
6+
CREATE PROCEDURE insert_data(a integer, b integer)
7+
LANGUAGE SQL
8+
AS $$
9+
INSERT INTO tbl VALUES (a);
10+
INSERT INTO tbl VALUES (b);
11+
$$;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"name": "querytest",
8+
"schema": "schema.sql",
9+
"queries": "query.sql"
10+
}
11+
]
12+
}

internal/endtoend/testdata/ddl_create_trigger/postgresql/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/ddl_create_trigger/postgresql/go/models.go

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

internal/endtoend/testdata/ddl_create_trigger/postgresql/go/query.sql.go

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: Placeholder :exec
2+
SELECT 1;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
CREATE SCHEMA tdd;
2+
3+
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
4+
CREATE EXTENSION IF NOT EXISTS pgcrypto
5+
SCHEMA public
6+
VERSION "1.3";
7+
8+
CREATE FUNCTION tdd.trigger_set_timestamp() RETURNS trigger
9+
LANGUAGE plpgsql
10+
AS $$BEGIN
11+
NEW.ts_updated = NOW();
12+
RETURN NEW;
13+
END;
14+
$$;
15+
16+
CREATE TABLE tdd.tests (
17+
test_id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
18+
title text DEFAULT ''::text NOT NULL,
19+
descr text DEFAULT ''::text NOT NULL,
20+
ts_created timestamp with time zone DEFAULT now() NOT NULL,
21+
ts_updated timestamp with time zone DEFAULT now() NOT NULL
22+
);
23+
24+
CREATE TRIGGER set_timestamp BEFORE UPDATE ON tdd.tests FOR EACH ROW EXECUTE FUNCTION tdd.trigger_set_timestamp();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"name": "querytest",
8+
"schema": "schema.sql",
9+
"queries": "query.sql"
10+
}
11+
]
12+
}

internal/engine/postgresql/parse.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -420,13 +420,17 @@ func translate(node *nodes.Node) (ast.Node, error) {
420420
if err != nil {
421421
return nil, err
422422
}
423-
rt, err := parseRelationFromNodes(n.ReturnType.Names)
424-
if err != nil {
425-
return nil, err
423+
var rt *ast.TypeName
424+
if n.ReturnType != nil {
425+
rel, err := parseRelationFromNodes(n.ReturnType.Names)
426+
if err != nil {
427+
return nil, err
428+
}
429+
rt = rel.TypeName()
426430
}
427431
stmt := &ast.CreateFunctionStmt{
428432
Func: fn.FuncName(),
429-
ReturnType: rt.TypeName(),
433+
ReturnType: rt,
430434
Replace: n.Replace,
431435
Params: &ast.List{},
432436
}

0 commit comments

Comments
 (0)