mirror of
https://github.com/postgres/postgres.git
synced 2025-06-05 23:56:58 +03:00
Add some regression tests for missing DDL patterns
The following commands gain increased coverage for some of the errors they can trigger: - ALTER TABLE .. ALTER COLUMN - CREATE DOMAIN - CREATE TYPE (LIKE) This has come up while discussing the possibility to add more information about the location of the error in such queries, and it is useful on its own as there was no coverage until now for the patterns added in this commit. Author: Jian He, Kirill Reshke Reviewed-By: Álvaro Herrera, Michael Paquier Discussion: https://postgr.es/m/CALdSSPhqfvKbDwqJaY=yEePi_aq61GmMpW88i6ZH7CMG_2Z4Cg@mail.gmail.com
This commit is contained in:
parent
430a5952de
commit
0172b4c944
@ -3413,6 +3413,13 @@ ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int;
|
||||
ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE text;
|
||||
ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE int;
|
||||
ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE bigint;
|
||||
-- Some error cases.
|
||||
ALTER TABLE comment_test ALTER COLUMN xmin SET DATA TYPE x;
|
||||
ERROR: cannot alter system column "xmin"
|
||||
ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE x;
|
||||
ERROR: type "x" does not exist
|
||||
ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int COLLATE "C";
|
||||
ERROR: collations are not supported by type integer
|
||||
-- Check that the comments are intact.
|
||||
SELECT col_description('comment_test'::regclass, 1) as comment;
|
||||
comment
|
||||
|
@ -15,6 +15,33 @@ NOTICE: drop cascades to type dependenttypetest
|
||||
-- this should fail because already gone
|
||||
drop domain domaindroptest cascade;
|
||||
ERROR: type "domaindroptest" does not exist
|
||||
-- some error cases
|
||||
create domain d_fail as no_such_type;
|
||||
ERROR: type "no_such_type" does not exist
|
||||
create domain d_fail as int constraint cc REFERENCES this_table_not_exists(i);
|
||||
ERROR: foreign key constraints not possible for domains
|
||||
create domain d_fail as int4 not null no inherit;
|
||||
ERROR: not-null constraints for domains cannot be marked NO INHERIT
|
||||
create domain d_fail as int4 not null null;
|
||||
ERROR: conflicting NULL/NOT NULL constraints
|
||||
create domain d_fail as int4 not null default 3 default 3;
|
||||
ERROR: multiple default expressions
|
||||
create domain d_fail int4 DEFAULT 3 + 'h';
|
||||
ERROR: invalid input syntax for type integer: "h"
|
||||
create domain d_fail int4 collate "C";
|
||||
ERROR: collations are not supported by type integer
|
||||
create domain d_fail as anyelement;
|
||||
ERROR: "anyelement" is not a valid base type for a domain
|
||||
create domain d_fail as int4 unique;
|
||||
ERROR: unique constraints not possible for domains
|
||||
create domain d_fail as int4 PRIMARY key;
|
||||
ERROR: primary key constraints not possible for domains
|
||||
create domain d_fail as int4 constraint cc generated by default as identity;
|
||||
ERROR: specifying GENERATED not supported for domains
|
||||
create domain d_fail as int4 constraint cc check (values > 1) no inherit;
|
||||
ERROR: check constraints for domains cannot be marked NO INHERIT
|
||||
create domain d_fail as int4 constraint cc check (values > 1) deferrable;
|
||||
ERROR: specifying constraint deferrability not supported for domains
|
||||
-- Test domain input.
|
||||
-- Note: the point of checking both INSERT and COPY FROM is that INSERT
|
||||
-- exercises CoerceToDomain while COPY exercises domain_in.
|
||||
|
@ -1024,6 +1024,8 @@ create function xfloat8out(xfloat8) returns cstring immutable strict
|
||||
NOTICE: argument type xfloat8 is only a shell
|
||||
LINE 1: create function xfloat8out(xfloat8) returns cstring immutabl...
|
||||
^
|
||||
create type xfloat8 (input = xfloat8in, output = xfloat8out, like = no_such_type);
|
||||
ERROR: type "no_such_type" does not exist
|
||||
create type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);
|
||||
create cast (xfloat8 as float8) without function;
|
||||
create cast (float8 as xfloat8) without function;
|
||||
|
@ -43,6 +43,8 @@ CREATE TABLE itest4 (a int, b text);
|
||||
ALTER TABLE itest4 ALTER COLUMN a ADD GENERATED ALWAYS AS IDENTITY; -- error, requires NOT NULL
|
||||
ERROR: column "a" of relation "itest4" must be declared NOT NULL before identity can be added
|
||||
ALTER TABLE itest4 ALTER COLUMN a SET NOT NULL;
|
||||
ALTER TABLE itest4 ALTER COLUMN c ADD GENERATED ALWAYS AS IDENTITY; -- error, column c does not exist
|
||||
ERROR: column "c" of relation "itest4" does not exist
|
||||
ALTER TABLE itest4 ALTER COLUMN a ADD GENERATED ALWAYS AS IDENTITY; -- ok
|
||||
ALTER TABLE itest4 ALTER COLUMN a DROP NOT NULL; -- error, disallowed
|
||||
ERROR: column "a" of relation "itest4" is an identity column
|
||||
|
@ -2145,6 +2145,11 @@ ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE text;
|
||||
ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE int;
|
||||
ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE bigint;
|
||||
|
||||
-- Some error cases.
|
||||
ALTER TABLE comment_test ALTER COLUMN xmin SET DATA TYPE x;
|
||||
ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE x;
|
||||
ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int COLLATE "C";
|
||||
|
||||
-- Check that the comments are intact.
|
||||
SELECT col_description('comment_test'::regclass, 1) as comment;
|
||||
SELECT indexrelid::regclass::text as index, obj_description(indexrelid, 'pg_class') as comment FROM pg_index where indrelid = 'comment_test'::regclass ORDER BY 1, 2;
|
||||
|
@ -16,6 +16,20 @@ drop domain domaindroptest cascade;
|
||||
-- this should fail because already gone
|
||||
drop domain domaindroptest cascade;
|
||||
|
||||
-- some error cases
|
||||
create domain d_fail as no_such_type;
|
||||
create domain d_fail as int constraint cc REFERENCES this_table_not_exists(i);
|
||||
create domain d_fail as int4 not null no inherit;
|
||||
create domain d_fail as int4 not null null;
|
||||
create domain d_fail as int4 not null default 3 default 3;
|
||||
create domain d_fail int4 DEFAULT 3 + 'h';
|
||||
create domain d_fail int4 collate "C";
|
||||
create domain d_fail as anyelement;
|
||||
create domain d_fail as int4 unique;
|
||||
create domain d_fail as int4 PRIMARY key;
|
||||
create domain d_fail as int4 constraint cc generated by default as identity;
|
||||
create domain d_fail as int4 constraint cc check (values > 1) no inherit;
|
||||
create domain d_fail as int4 constraint cc check (values > 1) deferrable;
|
||||
|
||||
-- Test domain input.
|
||||
|
||||
|
@ -328,6 +328,7 @@ create function xfloat8in(cstring) returns xfloat8 immutable strict
|
||||
language internal as 'int8in';
|
||||
create function xfloat8out(xfloat8) returns cstring immutable strict
|
||||
language internal as 'int8out';
|
||||
create type xfloat8 (input = xfloat8in, output = xfloat8out, like = no_such_type);
|
||||
create type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);
|
||||
create cast (xfloat8 as float8) without function;
|
||||
create cast (float8 as xfloat8) without function;
|
||||
|
@ -19,6 +19,7 @@ SELECT pg_get_serial_sequence('itest1', 'a');
|
||||
CREATE TABLE itest4 (a int, b text);
|
||||
ALTER TABLE itest4 ALTER COLUMN a ADD GENERATED ALWAYS AS IDENTITY; -- error, requires NOT NULL
|
||||
ALTER TABLE itest4 ALTER COLUMN a SET NOT NULL;
|
||||
ALTER TABLE itest4 ALTER COLUMN c ADD GENERATED ALWAYS AS IDENTITY; -- error, column c does not exist
|
||||
ALTER TABLE itest4 ALTER COLUMN a ADD GENERATED ALWAYS AS IDENTITY; -- ok
|
||||
ALTER TABLE itest4 ALTER COLUMN a DROP NOT NULL; -- error, disallowed
|
||||
ALTER TABLE itest4 ALTER COLUMN a ADD GENERATED ALWAYS AS IDENTITY; -- error, already set
|
||||
|
Loading…
x
Reference in New Issue
Block a user