diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-10-29 19:40:40 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-10-29 19:40:40 +0000 |
| commit | b17b7fae8c1418f924915348afaa2250d1360bc4 (patch) | |
| tree | de530f59c165dc2a578adbafc5af4dedca94e78f /src/test | |
| parent | bf5ccf382c606b09e17dbcefc101d62417c4db33 (diff) | |
| download | postgresql-b17b7fae8c1418f924915348afaa2250d1360bc4.tar.gz | |
Remove the hack in the grammar that "optimized away" DEFAULT NULL clauses.
Instead put in a test to drop a NULL default at the last moment before
storing the catalog entry. This changes the behavior in a couple of ways:
* Specifying DEFAULT NULL when creating an inheritance child table will
successfully suppress inheritance of any default expression from the
parent's column, where formerly it failed to do so.
* Specifying DEFAULT NULL for a column of a domain type will correctly
override any default belonging to the domain; likewise for a sub-domain.
The latter change happens because by the time the clause is checked,
it won't be a simple null Const but a CoerceToDomain expression.
Personally I think this should be back-patched, but there doesn't seem to
be consensus for that on pgsql-hackers, so refraining.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/domain.out | 10 | ||||
| -rw-r--r-- | src/test/regress/sql/domain.sql | 8 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/test/regress/expected/domain.out b/src/test/regress/expected/domain.out index c7d5b50334..b951ce8caa 100644 --- a/src/test/regress/expected/domain.out +++ b/src/test/regress/expected/domain.out @@ -205,7 +205,15 @@ create table defaulttest , col8 ddef5 ); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "defaulttest_pkey" for table "defaulttest" -insert into defaulttest default values; +insert into defaulttest(col4) values(0); -- fails, col5 defaults to null +ERROR: null value in column "col5" violates not-null constraint +alter table defaulttest alter column col5 drop default; +insert into defaulttest default values; -- succeeds, inserts domain default +-- We used to treat SET DEFAULT NULL as equivalent to DROP DEFAULT; wrong +alter table defaulttest alter column col5 set default null; +insert into defaulttest(col4) values(0); -- fails +ERROR: null value in column "col5" violates not-null constraint +alter table defaulttest alter column col5 drop default; insert into defaulttest default values; insert into defaulttest default values; -- Test defaults with copy diff --git a/src/test/regress/sql/domain.sql b/src/test/regress/sql/domain.sql index 7da9971991..7a4ec383d2 100644 --- a/src/test/regress/sql/domain.sql +++ b/src/test/regress/sql/domain.sql @@ -168,7 +168,13 @@ create table defaulttest , col7 ddef4 DEFAULT 8000 , col8 ddef5 ); -insert into defaulttest default values; +insert into defaulttest(col4) values(0); -- fails, col5 defaults to null +alter table defaulttest alter column col5 drop default; +insert into defaulttest default values; -- succeeds, inserts domain default +-- We used to treat SET DEFAULT NULL as equivalent to DROP DEFAULT; wrong +alter table defaulttest alter column col5 set default null; +insert into defaulttest(col4) values(0); -- fails +alter table defaulttest alter column col5 drop default; insert into defaulttest default values; insert into defaulttest default values; |
