Skip to content

Commit a8d5cfe

Browse files
committed
feat: PostgreSQL 18 support (libpg-query 18.1.1, @pgsql/types 18)
1 parent 60fb866 commit a8d5cfe

413 files changed

Lines changed: 38298 additions & 6187 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

__fixtures__/generated/generated.json

Lines changed: 77 additions & 52 deletions
Large diffs are not rendered by default.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
-- PG18: RETURNING OLD/NEW aliases (ReturningClause options)
2+
INSERT INTO t (a) VALUES (1) RETURNING WITH (OLD AS o, NEW AS n) o.a, n.a;
3+
UPDATE t SET a = 2 WHERE a = 1 RETURNING WITH (OLD AS prev, NEW AS next) prev.a AS before, next.a AS after;
4+
DELETE FROM t WHERE a = 2 RETURNING WITH (OLD AS o) o.*;
5+
MERGE INTO t USING s ON t.id = s.id WHEN MATCHED THEN UPDATE SET a = s.a RETURNING WITH (OLD AS o, NEW AS n) merge_action(), o.a, n.a;
6+
INSERT INTO t (a) VALUES (1) RETURNING new.a;
7+
UPDATE t SET a = 2 RETURNING old.a, new.a;
8+
9+
-- PG18: VIRTUAL generated columns
10+
CREATE TABLE gtest (a int, b int GENERATED ALWAYS AS (a * 2) VIRTUAL);
11+
CREATE TABLE gtest2 (a int, b int GENERATED ALWAYS AS (a * 2) STORED, c int GENERATED ALWAYS AS (a + 1) VIRTUAL);
12+
13+
-- PG18: NOT ENFORCED constraints
14+
CREATE TABLE enf (a int, CONSTRAINT chk CHECK (a > 0) NOT ENFORCED);
15+
CREATE TABLE enf2 (a int CHECK (a > 0) NOT ENFORCED);
16+
ALTER TABLE enf ADD CONSTRAINT fk FOREIGN KEY (a) REFERENCES other (a) NOT ENFORCED;
17+
ALTER TABLE enf ALTER CONSTRAINT chk NOT ENFORCED;
18+
ALTER TABLE enf ALTER CONSTRAINT chk ENFORCED;
19+
20+
-- PG18: ALTER CONSTRAINT INHERIT / NO INHERIT
21+
ALTER TABLE enf ALTER CONSTRAINT chk NO INHERIT;
22+
ALTER TABLE enf ALTER CONSTRAINT chk INHERIT;
23+
ALTER TABLE enf ALTER CONSTRAINT fk DEFERRABLE INITIALLY DEFERRED;
24+
ALTER TABLE enf ALTER CONSTRAINT fk NOT DEFERRABLE;
25+
26+
-- PG18: temporal primary keys / unique WITHOUT OVERLAPS and PERIOD foreign keys
27+
CREATE TABLE temporal_rng (id int4range, valid_at daterange, CONSTRAINT temporal_rng_pk PRIMARY KEY (id, valid_at WITHOUT OVERLAPS));
28+
CREATE TABLE temporal_rng_uq (id int4range, valid_at daterange, CONSTRAINT temporal_rng_uq UNIQUE (id, valid_at WITHOUT OVERLAPS));
29+
CREATE TABLE temporal_fk_rng2rng (id int4range, valid_at daterange, parent_id int4range, CONSTRAINT temporal_fk_rng2rng_fk FOREIGN KEY (parent_id, PERIOD valid_at) REFERENCES temporal_rng (id, PERIOD valid_at));
30+
ALTER TABLE temporal_fk_rng2rng ADD CONSTRAINT temporal_fk_rng2rng_fk2 FOREIGN KEY (parent_id, PERIOD valid_at) REFERENCES temporal_rng (id, PERIOD valid_at) ON DELETE CASCADE;
31+
32+
-- PG18: named NOT NULL table constraints
33+
CREATE TABLE nn (a int, CONSTRAINT a_not_null NOT NULL a);
34+
ALTER TABLE nn ADD CONSTRAINT b_not_null NOT NULL a;
35+
ALTER TABLE nn ADD NOT NULL a NOT VALID;
36+
CREATE TABLE nn2 (a int, NOT NULL a NO INHERIT);

__fixtures__/plpgsql-generated/generated.json

Lines changed: 174 additions & 178 deletions
Large diffs are not rendered by default.

__fixtures__/proto/18-latest.proto

Lines changed: 4188 additions & 0 deletions
Large diffs are not rendered by default.

config/versions.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@
3434
"pgsql-deparser": "17.11.2",
3535
"@pgsql/types": "17.6.1",
3636
"npmTag": "pg17"
37+
},
38+
"18": {
39+
"libpg-query": "18.1.1",
40+
"pgsql-parser": "18.0.0",
41+
"pgsql-deparser": "18.0.0",
42+
"@pgsql/types": "18.0.0",
43+
"npmTag": "pg18"
3744
}
3845
}
3946
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
2+
import { FixtureTestUtils } from '../../test-utils';
3+
const fixtures = new FixtureTestUtils();
4+
5+
it('misc-pg18', async () => {
6+
await fixtures.runFixtureTests([
7+
"misc/pg18-1.sql",
8+
"misc/pg18-2.sql",
9+
"misc/pg18-3.sql",
10+
"misc/pg18-4.sql",
11+
"misc/pg18-5.sql",
12+
"misc/pg18-6.sql",
13+
"misc/pg18-7.sql",
14+
"misc/pg18-8.sql",
15+
"misc/pg18-9.sql",
16+
"misc/pg18-10.sql",
17+
"misc/pg18-11.sql",
18+
"misc/pg18-12.sql",
19+
"misc/pg18-13.sql",
20+
"misc/pg18-14.sql",
21+
"misc/pg18-15.sql",
22+
"misc/pg18-16.sql",
23+
"misc/pg18-17.sql",
24+
"misc/pg18-18.sql",
25+
"misc/pg18-19.sql",
26+
"misc/pg18-20.sql",
27+
"misc/pg18-21.sql",
28+
"misc/pg18-22.sql",
29+
"misc/pg18-23.sql",
30+
"misc/pg18-24.sql",
31+
"misc/pg18-25.sql"
32+
]);
33+
});

packages/deparser/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@
5353
"database"
5454
],
5555
"devDependencies": {
56-
"libpg-query": "17.7.3",
56+
"libpg-query": "18.1.1",
5757
"makage": "^0.1.8"
5858
},
5959
"dependencies": {
6060
"@pgsql/quotes": "workspace:*",
61-
"@pgsql/types": "^17.6.2"
61+
"@pgsql/types": "^18.0.0"
6262
}
6363
}

packages/deparser/scripts/clean-utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ export const cleanTree = (tree: any) => {
6464
stmt_len: noop,
6565
stmt_location: noop,
6666
location: noop,
67+
rexpr_list_start: noop,
68+
rexpr_list_end: noop,
69+
list_start: noop,
70+
list_end: noop,
6771
DefElem: (obj: any) => {
6872
if (obj.defname === 'as') {
6973
if (Array.isArray(obj.arg) && obj.arg.length) {

0 commit comments

Comments
 (0)