diff --git a/packages/ast/deploy/schemas/deparser/procedures/deparse.sql b/packages/ast/deploy/schemas/deparser/procedures/deparse.sql index fa09cb20..ad96c017 100644 --- a/packages/ast/deploy/schemas/deparser/procedures/deparse.sql +++ b/packages/ast/deploy/schemas/deparser/procedures/deparse.sql @@ -1772,8 +1772,7 @@ BEGIN IF (has_pk_attrs AND has_fk_attrs) THEN IF (node->'conname' IS NOT NULL) THEN output = array_append(output, 'CONSTRAINT'); - -- TODO needs quote? - output = array_append(output, node->>'conname'); + output = array_append(output, quote_ident(node->>'conname')); END IF; output = array_append(output, 'FOREIGN KEY'); output = array_append(output, deparser.parens(deparser.list_quotes(node->'fk_attrs'))); @@ -1787,8 +1786,7 @@ BEGIN ELSIF (has_fk_attrs) THEN IF (node->'conname' IS NOT NULL) THEN output = array_append(output, 'CONSTRAINT'); - -- TODO needs quote? - output = array_append(output, node->>'conname'); + output = array_append(output, quote_ident(node->>'conname')); END IF; output = array_append(output, 'FOREIGN KEY'); output = array_append(output, deparser.parens(deparser.list_quotes(node->'fk_attrs'))); diff --git a/packages/ast/sql/ast--13.0.4.sql b/packages/ast/sql/ast--13.0.4.sql index 41b59e72..33564f3b 100644 --- a/packages/ast/sql/ast--13.0.4.sql +++ b/packages/ast/sql/ast--13.0.4.sql @@ -6989,8 +6989,7 @@ BEGIN IF (has_pk_attrs AND has_fk_attrs) THEN IF (node->'conname' IS NOT NULL) THEN output = array_append(output, 'CONSTRAINT'); - -- TODO needs quote? - output = array_append(output, node->>'conname'); + output = array_append(output, quote_ident(node->>'conname')); END IF; output = array_append(output, 'FOREIGN KEY'); output = array_append(output, deparser.parens(deparser.list_quotes(node->'fk_attrs'))); @@ -7004,8 +7003,7 @@ BEGIN ELSIF (has_fk_attrs) THEN IF (node->'conname' IS NOT NULL) THEN output = array_append(output, 'CONSTRAINT'); - -- TODO needs quote? - output = array_append(output, node->>'conname'); + output = array_append(output, quote_ident(node->>'conname')); END IF; output = array_append(output, 'FOREIGN KEY'); output = array_append(output, deparser.parens(deparser.list_quotes(node->'fk_attrs'))); diff --git a/packages/ast/test/__fixtures__/alter/alter.sql b/packages/ast/test/__fixtures__/alter/alter.sql index fb0177c3..f6f82573 100644 --- a/packages/ast/test/__fixtures__/alter/alter.sql +++ b/packages/ast/test/__fixtures__/alter/alter.sql @@ -24,62 +24,66 @@ ALTER TABLE foo ALTER COLUMN foo_timestamp SET DEFAULT now(); ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id); ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT "MyConstraintKey" + FOREIGN KEY (order_id) REFERENCES othr.orders (id); + +ALTER TABLE scha.foo + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE CASCADE; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE RESTRICT; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE NO ACTION; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE SET NULL; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET DEFAULT; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE CASCADE; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE RESTRICT; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE NO ACTION; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET NULL; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET DEFAULT; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET DEFAULT ON DELETE SET NULL ; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (a,b) REFERENCES othr.orders (c,d) MATCH FULL; ALTER TABLE scha.foo - ADD CONSTRAINT my_constraint_fey + ADD CONSTRAINT my_constraint_key FOREIGN KEY (a, b) REFERENCES othr.orders (c,d) MATCH SIMPLE; ALTER TABLE ONLY collections.mfield @@ -92,7 +96,7 @@ ALTER TABLE collections.mfield -- TODO MATCH after upgrading to newer engine: https://github.com/lfittl/libpg_query/issues/66 -- ALTER TABLE scha.foo --- ADD CONSTRAINT my_constraint_fey +-- ADD CONSTRAINT my_constraint_key -- FOREIGN KEY (order_id) REFERENCES othr.orders (id) -- MATCH FULL -- ON UPDATE SET DEFAULT @@ -102,7 +106,7 @@ ALTER TABLE collections.mfield -- MATCH PARTIAL not yet implemented -- ALTER TABLE scha.foo --- ADD CONSTRAINT my_constraint_fey +-- ADD CONSTRAINT my_constraint_key -- FOREIGN KEY (a,b) REFERENCES othr.orders (c,d) MATCH PARTIAL; ALTER TABLE schema_name.table_name ALTER COLUMN column_name SET DATA TYPE new_column_type USING column_name::new_column_type; diff --git a/packages/ast/test/__tests__/__snapshots__/kitchen-sink.test.js.snap b/packages/ast/test/__tests__/__snapshots__/kitchen-sink.test.js.snap index 72fda995..43d443b5 100644 --- a/packages/ast/test/__tests__/__snapshots__/kitchen-sink.test.js.snap +++ b/packages/ast/test/__tests__/__snapshots__/kitchen-sink.test.js.snap @@ -373,20 +373,21 @@ foo_timestamp timestampz DEFAULT (CURRENT_DATE) ); ALTER TABLE foo RENAME COLUMN name TO city; ALTER TABLE foo ALTER COLUMN foo_timestamp DROP DEFAULT, ALTER COLUMN foo_timestamp TYPE pg_catalog.timestamptz USING 'epoch'::pg_catalog.timestamptz + (foo_timestamp * '1 second'::interval), ALTER COLUMN foo_timestamp SET DEFAULT now(); -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE CASCADE ; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE RESTRICT ; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE SET NULL ; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET DEFAULT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE CASCADE; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE RESTRICT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET NULL; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET DEFAULT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE SET NULL ON UPDATE SET DEFAULT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (a, b) REFERENCES othr.orders (c, d) MATCH FULL; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY (a, b) REFERENCES othr.orders (c, d) ; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ; +ALTER TABLE scha.foo ADD CONSTRAINT \\"MyConstraintKey\\" FOREIGN KEY (order_id) REFERENCES othr.orders (id) ; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE CASCADE ; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE RESTRICT ; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE SET NULL ; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET DEFAULT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE CASCADE; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE RESTRICT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET NULL; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON UPDATE SET DEFAULT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (order_id) REFERENCES othr.orders (id) ON DELETE SET NULL ON UPDATE SET DEFAULT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (a, b) REFERENCES othr.orders (c, d) MATCH FULL; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY (a, b) REFERENCES othr.orders (c, d) ; ALTER TABLE ONLY collections.mfield ADD CONSTRAINT col_field_pkey PRIMARY KEY (id); ALTER TABLE collections.mfield ADD CONSTRAINT col_field_pkey PRIMARY KEY (id); ALTER TABLE schema_name.table_name ALTER COLUMN column_name TYPE new_column_type USING column_name::new_column_type; @@ -481,20 +482,21 @@ foo_timestamp timestampz DEFAULT ( CURRENT_DATE ) ); ALTER TABLE foo RENAME name TO city; ALTER TABLE foo ALTER COLUMN foo_timestamp DROP DEFAULT, ALTER COLUMN foo_timestamp TYPE pg_catalog.timestamptz USING 'epoch'::pg_catalog.timestamptz + (foo_timestamp * '1 second'::interval), ALTER COLUMN foo_timestamp SET DEFAULT now(); -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ); -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON DELETE CASCADE; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON DELETE RESTRICT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ); -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON DELETE SET NULL; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE SET DEFAULT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE CASCADE; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE RESTRICT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ); -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE SET NULL; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE SET DEFAULT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON DELETE SET NULL ON UPDATE SET DEFAULT; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( a, b ) REFERENCES othr.orders ( c, d ) MATCH FULL; -ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_fey FOREIGN KEY ( a, b ) REFERENCES othr.orders ( c, d ); +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ); +ALTER TABLE scha.foo ADD CONSTRAINT \\"MyConstraintKey\\" FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ); +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON DELETE CASCADE; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON DELETE RESTRICT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ); +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON DELETE SET NULL; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE SET DEFAULT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE CASCADE; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE RESTRICT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ); +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE SET NULL; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON UPDATE SET DEFAULT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( order_id ) REFERENCES othr.orders ( id ) ON DELETE SET NULL ON UPDATE SET DEFAULT; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( a, b ) REFERENCES othr.orders ( c, d ) MATCH FULL; +ALTER TABLE scha.foo ADD CONSTRAINT my_constraint_key FOREIGN KEY ( a, b ) REFERENCES othr.orders ( c, d ); ALTER TABLE ONLY collections.mfield ADD CONSTRAINT col_field_pkey PRIMARY KEY ( id ); ALTER TABLE collections.mfield ADD CONSTRAINT col_field_pkey PRIMARY KEY ( id ); ALTER TABLE schema_name.table_name ALTER COLUMN column_name TYPE new_column_type USING column_name::new_column_type;