Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions __fixtures__/generated/generated.json
Original file line number Diff line number Diff line change
Expand Up @@ -21220,6 +21220,43 @@
"original/alter/alter-table-column-7.sql": "ALTER TABLE public.books\nADD COLUMN tags TEXT[] DEFAULT '{}'",
"original/alter/alter-table-column-8.sql": "CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral')",
"original/alter/alter-table-column-9.sql": "ALTER TABLE public.profiles\nADD COLUMN current_mood mood DEFAULT 'neutral'",
"misc/xmlserialize-indent-1.sql": "SELECT xmlserialize(DOCUMENT '<foo><bar><val x=\"y\">42</val></bar></foo>' AS text INDENT)",
"misc/xmlserialize-indent-2.sql": "SELECT xmlserialize(CONTENT '<foo><bar><val x=\"y\">42</val></bar></foo>' AS text INDENT)",
"misc/xmlserialize-indent-3.sql": "SELECT xmlserialize(DOCUMENT '<foo><bar><val x=\"y\">42</val></bar></foo>' AS text NO INDENT)",
"misc/xmlserialize-indent-4.sql": "SELECT xmlserialize(CONTENT doc AS varchar INDENT) FROM xmltest",
"misc/transaction-chain-1.sql": "START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE",
"misc/transaction-chain-2.sql": "COMMIT AND CHAIN",
"misc/transaction-chain-3.sql": "ROLLBACK AND CHAIN",
"misc/transaction-chain-4.sql": "COMMIT AND NO CHAIN",
"misc/transaction-chain-5.sql": "ROLLBACK AND NO CHAIN",
"misc/transaction-chain-6.sql": "END AND CHAIN",
"misc/transaction-chain-7.sql": "ABORT AND CHAIN",
"misc/tablespace-clauses-1.sql": "CREATE TABLE testschema.foo (i int) TABLESPACE regress_tblspace",
"misc/tablespace-clauses-2.sql": "CREATE TABLE t (a int) ON COMMIT DROP TABLESPACE ts",
"misc/tablespace-clauses-3.sql": "CREATE TABLE t (a int) USING heap TABLESPACE ts",
"misc/tablespace-clauses-4.sql": "CREATE TABLE testschema.dflt (a int PRIMARY KEY USING INDEX TABLESPACE regress_tblspace) PARTITION BY LIST (a) TABLESPACE pg_default",
"misc/tablespace-clauses-5.sql": "CREATE TABLE testschema.part_1 PARTITION OF testschema.part FOR VALUES IN (1) TABLESPACE \"My Space\"",
"misc/tablespace-clauses-6.sql": "CREATE TABLE t (a int, b int, PRIMARY KEY (a) INCLUDE (b) WITH (fillfactor=10) USING INDEX TABLESPACE ts DEFERRABLE)",
"misc/tablespace-clauses-7.sql": "CREATE TABLE t (a int UNIQUE NULLS NOT DISTINCT USING INDEX TABLESPACE \"My Space\")",
"misc/tablespace-clauses-8.sql": "CREATE TABLE t (a int, CONSTRAINT u UNIQUE (a) INCLUDE (a) WITH (fillfactor=50))",
"misc/tablespace-clauses-9.sql": "CREATE TABLE t (a int, EXCLUDE USING gist (a WITH =) INCLUDE (a) WITH (fillfactor=10) USING INDEX TABLESPACE ts WHERE (a > 0))",
"misc/tablespace-clauses-10.sql": "ALTER TABLE testschema.atable ADD CONSTRAINT anindex_t UNIQUE (column1) USING INDEX TABLESPACE regress_tblspace",
"misc/tablespace-clauses-11.sql": "ALTER TABLE t ADD CONSTRAINT pk PRIMARY KEY USING INDEX \"My Index\"",
"misc/tablespace-clauses-12.sql": "ALTER TABLE t ADD UNIQUE USING INDEX idx DEFERRABLE INITIALLY DEFERRED",
"misc/tablespace-clauses-13.sql": "CREATE TABLESPACE \"My Space\" OWNER regress_user LOCATION '/tmp' WITH (random_page_cost = 3, seq_page_cost = '1.5')",
"misc/tablespace-clauses-14.sql": "ALTER TABLESPACE \"My Space\" SET (random_page_cost = 1.5, effective_io_concurrency = 2)",
"misc/tablespace-clauses-15.sql": "ALTER TABLESPACE \"My Space\" RESET (random_page_cost)",
"misc/tablespace-clauses-16.sql": "DROP TABLESPACE IF EXISTS \"My Space\"",
"misc/show-quoting-1.sql": "SHOW \"TimeZone\"",
"misc/show-quoting-2.sql": "SHOW \"Foo\".\"Bar\"",
"misc/show-quoting-3.sql": "SHOW \"my.ext\".setting",
"misc/show-quoting-4.sql": "SHOW \"ALL\"",
"misc/show-quoting-5.sql": "SHOW ALL",
"misc/show-quoting-6.sql": "SHOW TIME ZONE",
"misc/show-quoting-7.sql": "SHOW TRANSACTION ISOLATION LEVEL",
"misc/show-quoting-8.sql": "SHOW SESSION AUTHORIZATION",
"misc/show-quoting-9.sql": "SHOW search_path",
"misc/show-quoting-10.sql": "SHOW plpgsql.extra_warnings",
"misc/rename-qualified-and-sequence-privs-1.sql": "ALTER TYPE app.t2 RENAME TO t",
"misc/rename-qualified-and-sequence-privs-2.sql": "ALTER DOMAIN app.d2 RENAME TO d",
"misc/rename-qualified-and-sequence-privs-3.sql": "GRANT ALL ON SEQUENCE app.seq TO bob",
Expand Down Expand Up @@ -21719,6 +21756,14 @@
"misc/generated-columns-6.sql": "ALTER TABLE generated_misc_test\nALTER COLUMN c SET EXPRESSION AS (a - b)",
"misc/generated-columns-7.sql": "ALTER TABLE generated_misc_test\nALTER COLUMN c DROP EXPRESSION",
"misc/generated-columns-8.sql": "ALTER TABLE generated_misc_test\nALTER COLUMN c DROP EXPRESSION IF EXISTS",
"misc/fetch-with-ties-1.sql": "SELECT thousand FROM onek WHERE thousand < 5 ORDER BY thousand FETCH FIRST 2 ROW WITH TIES",
"misc/fetch-with-ties-2.sql": "SELECT thousand FROM onek WHERE thousand < 5 ORDER BY thousand FETCH FIRST ROWS WITH TIES",
"misc/fetch-with-ties-3.sql": "SELECT thousand FROM onek WHERE thousand < 5 ORDER BY thousand OFFSET 2 ROWS FETCH NEXT (1 + 1) ROWS WITH TIES",
"misc/fetch-with-ties-4.sql": "CREATE VIEW limit_thousand_v_1 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand FETCH FIRST 5 ROWS WITH TIES OFFSET 10",
"misc/fetch-with-ties-5.sql": "CREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES",
"misc/fetch-with-ties-6.sql": "CREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand FETCH FIRST NULL ROWS ONLY",
"misc/fetch-with-ties-7.sql": "SELECT * FROM t ORDER BY a FETCH FIRST $1 ROWS WITH TIES",
"misc/fetch-with-ties-8.sql": "SELECT * FROM t ORDER BY a FETCH FIRST -1 ROWS WITH TIES",
"misc/extract-1.sql": "SELECT EXTRACT(EPOCH FROM now())",
"misc/extract-2.sql": "SELECT EXTRACT(EPOCH FROM DATE '1970-01-01')",
"misc/extract-3.sql": "SELECT EXTRACT(EPOCH FROM TIMESTAMP '1970-01-01')",
Expand All @@ -21737,6 +21782,10 @@
"misc/extract-16.sql": "SELECT EXTRACT(TIMEZONE FROM CURRENT_TIMESTAMP)",
"misc/extract-17.sql": "SELECT EXTRACT(TIMEZONE_HOUR FROM CURRENT_TIMESTAMP)",
"misc/extract-18.sql": "SELECT EXTRACT(TIMEZONE_MINUTE FROM CURRENT_TIMESTAMP)",
"misc/copy-option-values-1.sql": "COPY t FROM STDIN (HEADER false)",
"misc/copy-option-values-2.sql": "COPY t FROM STDIN (HEADER true, FREEZE false)",
"misc/copy-option-values-3.sql": "COPY t FROM STDIN (FORMAT \"CSV\")",
"misc/copy-option-values-4.sql": "COPY t FROM STDIN (FORMAT 'csv', HEADER off)",
"misc/cascades-1.sql": "DROP TABLE IF EXISTS some_table CASCADE",
"misc/cascades-2.sql": "DROP VIEW IF EXISTS some_view CASCADE",
"misc/cascades-3.sql": "DROP MATERIALIZED VIEW IF EXISTS some_mat_view CASCADE",
Expand Down Expand Up @@ -21765,6 +21814,9 @@
"misc/booleans-cast-1.sql": "SELECT * FROM myschema.mytable WHERE a = TRUE",
"misc/booleans-cast-2.sql": "SELECT * FROM myschema.mytable WHERE a = CAST('t' AS boolean)",
"misc/booleans-cast-3.sql": "SELECT * FROM myschema.mytable WHERE a = 't'::boolean",
"misc/alter-trigger-rename-1.sql": "ALTER TRIGGER p ON grandp RENAME TO q",
"misc/alter-trigger-rename-2.sql": "ALTER TRIGGER \"Mixed Trig\" ON \"My Schema\".\"My Table\" RENAME TO \"New Trig\"",
"misc/alter-trigger-rename-3.sql": "ALTER TRIGGER modified_a ON main_table RENAME TO modified_modified_a",
"latest/postgres/create_view-1.sql": "CREATE FUNCTION interpt_pp(path, path)\n RETURNS point\n AS 'regresslib'\n LANGUAGE C STRICT",
"latest/postgres/create_view-2.sql": "CREATE TABLE real_city (\n\tpop\t\t\tint4,\n\tcname\t\ttext,\n\toutline \tpath\n)",
"latest/postgres/create_view-3.sql": "COPY real_city FROM 'filename'",
Expand Down
5 changes: 5 additions & 0 deletions __fixtures__/kitchen-sink/misc/alter-trigger-rename.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-- ALTER TRIGGER name ON table RENAME TO (RenameStmt OBJECT_TRIGGER keeps subname)
-- Ref: PostgreSQL regress triggers.sql
ALTER TRIGGER p ON grandp RENAME TO q;
ALTER TRIGGER "Mixed Trig" ON "My Schema"."My Table" RENAME TO "New Trig";
ALTER TRIGGER modified_a ON main_table RENAME TO modified_modified_a;
5 changes: 5 additions & 0 deletions __fixtures__/kitchen-sink/misc/copy-option-values.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-- COPY option values keep their meaning
COPY t FROM STDIN (HEADER false);
COPY t FROM STDIN (HEADER true, FREEZE false);
COPY t FROM STDIN (FORMAT "CSV");
COPY t FROM STDIN (FORMAT 'csv', HEADER off);
10 changes: 10 additions & 0 deletions __fixtures__/kitchen-sink/misc/fetch-with-ties.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
-- FETCH FIRST n ROWS WITH TIES (SelectStmt.limitOption)
-- Ref: PostgreSQL regress limit.sql
SELECT thousand FROM onek WHERE thousand < 5 ORDER BY thousand FETCH FIRST 2 ROW WITH TIES;
SELECT thousand FROM onek WHERE thousand < 5 ORDER BY thousand FETCH FIRST ROWS WITH TIES;
SELECT thousand FROM onek WHERE thousand < 5 ORDER BY thousand OFFSET 2 ROWS FETCH NEXT (1 + 1) ROWS WITH TIES;
CREATE VIEW limit_thousand_v_1 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand FETCH FIRST 5 ROWS WITH TIES OFFSET 10;
CREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES;
CREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995 ORDER BY thousand FETCH FIRST NULL ROWS ONLY;
SELECT * FROM t ORDER BY a FETCH FIRST $1 ROWS WITH TIES;
SELECT * FROM t ORDER BY a FETCH FIRST -1 ROWS WITH TIES;
11 changes: 11 additions & 0 deletions __fixtures__/kitchen-sink/misc/show-quoting.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-- SHOW keeps identifier quoting (VariableShowStmt.name)
SHOW "TimeZone";
SHOW "Foo"."Bar";
SHOW "my.ext".setting;
SHOW "ALL";
SHOW ALL;
SHOW TIME ZONE;
SHOW TRANSACTION ISOLATION LEVEL;
SHOW SESSION AUTHORIZATION;
SHOW search_path;
SHOW plpgsql.extra_warnings;
18 changes: 18 additions & 0 deletions __fixtures__/kitchen-sink/misc/tablespace-clauses.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
-- TABLESPACE / USING INDEX TABLESPACE / INCLUDE / WITH on table and constraint definitions
-- Ref: PostgreSQL regress tablespace.sql, create_table.sql, constraints.sql
CREATE TABLE testschema.foo (i int) TABLESPACE regress_tblspace;
CREATE TABLE t (a int) ON COMMIT DROP TABLESPACE ts;
CREATE TABLE t (a int) USING heap TABLESPACE ts;
CREATE TABLE testschema.dflt (a int PRIMARY KEY USING INDEX TABLESPACE regress_tblspace) PARTITION BY LIST (a) TABLESPACE pg_default;
CREATE TABLE testschema.part_1 PARTITION OF testschema.part FOR VALUES IN (1) TABLESPACE "My Space";
CREATE TABLE t (a int, b int, PRIMARY KEY (a) INCLUDE (b) WITH (fillfactor=10) USING INDEX TABLESPACE ts DEFERRABLE);
CREATE TABLE t (a int UNIQUE NULLS NOT DISTINCT USING INDEX TABLESPACE "My Space");
CREATE TABLE t (a int, CONSTRAINT u UNIQUE (a) INCLUDE (a) WITH (fillfactor=50));
CREATE TABLE t (a int, EXCLUDE USING gist (a WITH =) INCLUDE (a) WITH (fillfactor=10) USING INDEX TABLESPACE ts WHERE (a > 0));
ALTER TABLE testschema.atable ADD CONSTRAINT anindex_t UNIQUE (column1) USING INDEX TABLESPACE regress_tblspace;
ALTER TABLE t ADD CONSTRAINT pk PRIMARY KEY USING INDEX "My Index";
ALTER TABLE t ADD UNIQUE USING INDEX idx DEFERRABLE INITIALLY DEFERRED;
CREATE TABLESPACE "My Space" OWNER regress_user LOCATION '/tmp' WITH (random_page_cost = 3, seq_page_cost = '1.5');
ALTER TABLESPACE "My Space" SET (random_page_cost = 1.5, effective_io_concurrency = 2);
ALTER TABLESPACE "My Space" RESET (random_page_cost);
DROP TABLESPACE IF EXISTS "My Space";
9 changes: 9 additions & 0 deletions __fixtures__/kitchen-sink/misc/transaction-chain.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
-- COMMIT/ROLLBACK AND CHAIN (TransactionStmt.chain)
-- Ref: PostgreSQL regress transactions.sql
START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE;
COMMIT AND CHAIN;
ROLLBACK AND CHAIN;
COMMIT AND NO CHAIN;
ROLLBACK AND NO CHAIN;
END AND CHAIN;
ABORT AND CHAIN;
6 changes: 6 additions & 0 deletions __fixtures__/kitchen-sink/misc/xmlserialize-indent.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-- XMLSERIALIZE ... INDENT (XmlSerialize.indent)
-- Ref: PostgreSQL regress xml.sql
SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val></bar></foo>' AS text INDENT);
SELECT xmlserialize(CONTENT '<foo><bar><val x="y">42</val></bar></foo>' AS text INDENT);
SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val></bar></foo>' AS text NO INDENT);
SELECT xmlserialize(CONTENT doc AS varchar INDENT) FROM xmltest;
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

import { FixtureTestUtils } from '../../test-utils';
const fixtures = new FixtureTestUtils();

it('misc-alter-trigger-rename', async () => {
await fixtures.runFixtureTests([
"misc/alter-trigger-rename-1.sql",
"misc/alter-trigger-rename-2.sql",
"misc/alter-trigger-rename-3.sql"
]);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

import { FixtureTestUtils } from '../../test-utils';
const fixtures = new FixtureTestUtils();

it('misc-copy-option-values', async () => {
await fixtures.runFixtureTests([
"misc/copy-option-values-1.sql",
"misc/copy-option-values-2.sql",
"misc/copy-option-values-3.sql",
"misc/copy-option-values-4.sql"
]);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

import { FixtureTestUtils } from '../../test-utils';
const fixtures = new FixtureTestUtils();

it('misc-fetch-with-ties', async () => {
await fixtures.runFixtureTests([
"misc/fetch-with-ties-1.sql",
"misc/fetch-with-ties-2.sql",
"misc/fetch-with-ties-3.sql",
"misc/fetch-with-ties-4.sql",
"misc/fetch-with-ties-5.sql",
"misc/fetch-with-ties-6.sql",
"misc/fetch-with-ties-7.sql",
"misc/fetch-with-ties-8.sql"
]);
});
18 changes: 18 additions & 0 deletions packages/deparser/__tests__/kitchen-sink/misc-show-quoting.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

import { FixtureTestUtils } from '../../test-utils';
const fixtures = new FixtureTestUtils();

it('misc-show-quoting', async () => {
await fixtures.runFixtureTests([
"misc/show-quoting-1.sql",
"misc/show-quoting-2.sql",
"misc/show-quoting-3.sql",
"misc/show-quoting-4.sql",
"misc/show-quoting-5.sql",
"misc/show-quoting-6.sql",
"misc/show-quoting-7.sql",
"misc/show-quoting-8.sql",
"misc/show-quoting-9.sql",
"misc/show-quoting-10.sql"
]);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

import { FixtureTestUtils } from '../../test-utils';
const fixtures = new FixtureTestUtils();

it('misc-tablespace-clauses', async () => {
await fixtures.runFixtureTests([
"misc/tablespace-clauses-1.sql",
"misc/tablespace-clauses-2.sql",
"misc/tablespace-clauses-3.sql",
"misc/tablespace-clauses-4.sql",
"misc/tablespace-clauses-5.sql",
"misc/tablespace-clauses-6.sql",
"misc/tablespace-clauses-7.sql",
"misc/tablespace-clauses-8.sql",
"misc/tablespace-clauses-9.sql",
"misc/tablespace-clauses-10.sql",
"misc/tablespace-clauses-11.sql",
"misc/tablespace-clauses-12.sql",
"misc/tablespace-clauses-13.sql",
"misc/tablespace-clauses-14.sql",
"misc/tablespace-clauses-15.sql",
"misc/tablespace-clauses-16.sql"
]);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

import { FixtureTestUtils } from '../../test-utils';
const fixtures = new FixtureTestUtils();

it('misc-transaction-chain', async () => {
await fixtures.runFixtureTests([
"misc/transaction-chain-1.sql",
"misc/transaction-chain-2.sql",
"misc/transaction-chain-3.sql",
"misc/transaction-chain-4.sql",
"misc/transaction-chain-5.sql",
"misc/transaction-chain-6.sql",
"misc/transaction-chain-7.sql"
]);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

import { FixtureTestUtils } from '../../test-utils';
const fixtures = new FixtureTestUtils();

it('misc-xmlserialize-indent', async () => {
await fixtures.runFixtureTests([
"misc/xmlserialize-indent-1.sql",
"misc/xmlserialize-indent-2.sql",
"misc/xmlserialize-indent-3.sql",
"misc/xmlserialize-indent-4.sql"
]);
});
21 changes: 21 additions & 0 deletions packages/deparser/__tests__/misc/copy-boolean-options.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { Deparser } from '../../src';

// The parser only emits Boolean(true) COPY option args (e.g. `CSV HEADER`), and the
// JSON AST omits `boolval` when it is false, so a false Boolean must be hand-built.
const copyWith = (defname: string, arg: any) => ({
CopyStmt: {
relation: { relname: 't', inh: true, relpersistence: 'p' },
is_from: true,
options: [{ DefElem: { defname, arg, defaction: 'DEFELEM_UNSPEC' } }]
}
});

describe('COPY Boolean option args', () => {
it.each([
['false (boolval omitted)', { Boolean: {} }, 'COPY t FROM STDIN WITH (HEADER false)'],
['false', { Boolean: { boolval: false } }, 'COPY t FROM STDIN WITH (HEADER false)'],
['true', { Boolean: { boolval: true } }, 'COPY t FROM STDIN WITH (HEADER)']
])('keeps a %s Boolean value', (_label, arg, expected) => {
expect(Deparser.deparse(copyWith('header', arg) as any)).toBe(expected);
});
});
Loading
Loading