From b17b7fae8c1418f924915348afaa2250d1360bc4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 29 Oct 2007 19:40:40 +0000 Subject: 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. --- src/test/regress/expected/domain.out | 10 +++++++++- src/test/regress/sql/domain.sql | 8 +++++++- 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'src/test') diff --git a/src/test/regress/expected/domain.out b/src/test/regress/expected/domain.out index c7d5b503345..b951ce8caa8 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 7da99719911..7a4ec383d20 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; -- cgit v1.2.3