Re: Domain Support -- another round - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: Domain Support -- another round |
Date | |
Msg-id | 200203190216.g2J2GpR08507@candle.pha.pa.us Whole thread Raw |
In response to | Re: Domain Support -- another round ("Rod Taylor" <rbt@zort.ca>) |
List | pgsql-patches |
Patch applied. I am attaching the expected/domain.out file that I generated when I added your domain test file to the regression tests. Please verify that the output is correct. Thanks. --------------------------------------------------------------------------- Rod Taylor wrote: > New set with most of Peters comments corrected. Left the deal about > schema though :) Took nearly an hour to do a cvs diff for some reason > this time (normally a couple of minutes is enough). > > > Random nitpicking below. Also, have you created a regression test? > > They had been posted a few times and haven't changed. (Attached > anyway) > > > > > + <structfield>typnotnull</structfield> represents a NOT NULL > > > + constraint on a type. Normally used only for domains. > > > > And unnormally...? > > Unnormally is when someone sets it by hand on a type which isn't a > domain -- I guess. Corrected. > > > > + <!entity createDomain system "create_domain.sgml"> > > > > I don't see this file included. > > Other messages. Full package included on this one however. > > > > > > + * MergeDomainAttributes > > > + * Returns a new table schema with the constraints, types, > and other > > > + * attributes of the domain resolved for fields using the > domain as > > > + * their type. > > > > I didn't know we had schemas yet. You should probably not overload > that > > term to mean "a list of database objects". > > Merge attributes says something very similar about inheritance and > table schemas. Kinda correct considering > the variable used in both cases is *schema. > > > The diff weirdness in regards to DROP DATABASE is probably because I > started by copying the DROP DATABASE element, then altered it. I > don't know why it chose that method to do the diff though, but it is > accurate. Using -cd flags didn't make it any prettier. [ Attachment, skipping... ] [ Attachment, skipping... ] [ Attachment, skipping... ] [ Attachment, skipping... ] -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026 -- Test Comment / Drop create domain domaindroptest int4; comment on domain domaindroptest is 'About to drop this..'; create domain basetypetest domaindroptest; ERROR: DefineDomain: domaindroptest is not a basetype drop domain domaindroptest; ERROR: parser: parse error at or near ";" drop domain domaindroptest restrict; -- TEST Domains. create domain domainvarchar varchar(5); create domain domainnumeric numeric(8,2); create domain domainint4 int4; create domain domaintext text; -- Test tables using domains create table basictest ( testint4 domainint4 , testtext domaintext , testvarchar domainvarchar , testnumeric domainnumeric ); INSERT INTO basictest values ('88', 'haha', 'short', '123.12'); -- Good INSERT INTO basictest values ('88', 'haha', 'short text', '123.12'); -- Bad varchar ERROR: value too long for type character varying(5) INSERT INTO basictest values ('88', 'haha', 'short', '123.1212'); -- Truncate numeric select * from basictest; testint4 | testtext | testvarchar | testnumeric ----------+----------+-------------+------------- 88 | haha | short | 123.12 88 | haha | short | 123.12 (2 rows) drop table basictest; drop domain domainvarchar restrict; drop domain domainnumeric restrict; drop domain domainint4 restrict; drop domain domaintext restrict; -- Array Test create domain domainint4arr int4[1]; create domain domaintextarr text[2][3]; create table domarrtest ( testint4arr domainint4arr , testtextarr domaintextarr ); INSERT INTO domarrtest values ('{2,2}', '{{"a","b"}{"c","d"}}'); INSERT INTO domarrtest values ('{{2,2}{2,2}}', '{{"a","b"}}'); INSERT INTO domarrtest values ('{2,2}', '{{"a","b"}{"c","d"}{"e"}}'); INSERT INTO domarrtest values ('{2,2}', '{{"a"}{"c"}}'); INSERT INTO domarrtest values (NULL, '{{"a","b"}{"c","d","e"}}'); drop table domarrtest; drop domain domainint4arr restrict; drop domain domaintextarr restrict; create domain dnotnull varchar(15) NOT NULL; create domain dnull varchar(15) NULL; create table nulltest ( col1 dnotnull , col2 dnotnull NULL -- NOT NULL in the domain cannot be overridden , col3 dnull NOT NULL , col4 dnull ); INSERT INTO nulltest DEFAULT VALUES; ERROR: ExecAppend: Fail to add null value in not null attribute col1 INSERT INTO nulltest values ('a', 'b', 'c', 'd'); -- Good INSERT INTO nulltest values (NULL, 'b', 'c', 'd'); ERROR: ExecAppend: Fail to add null value in not null attribute col1 INSERT INTO nulltest values ('a', NULL, 'c', 'd'); ERROR: ExecAppend: Fail to add null value in not null attribute col2 INSERT INTO nulltest values ('a', 'b', NULL, 'd'); ERROR: ExecAppend: Fail to add null value in not null attribute col3 INSERT INTO nulltest values ('a', 'b', 'c', NULL); -- Good select * from nulltest; col1 | col2 | col3 | col4 ------+------+------+------ a | b | c | d a | b | c | (2 rows) drop table nulltest; drop domain dnotnull restrict; drop domain dnull restrict; create domain ddef1 int4 DEFAULT 3; create domain ddef2 oid DEFAULT '12'; -- Type mixing, function returns int8 create domain ddef3 text DEFAULT 5; create sequence ddef4_seq; create domain ddef4 int4 DEFAULT nextval(cast('ddef4_seq' as text)); create domain ddef5 numeric(8,2) NOT NULL DEFAULT '12.12'; create table defaulttest ( col1 ddef1 , col2 ddef2 , col3 ddef3 , col4 ddef4 , col5 ddef1 NOT NULL DEFAULT NULL , col6 ddef2 DEFAULT '88' , col7 ddef4 DEFAULT 8000 , col8 ddef5 ); insert into defaulttest default values; insert into defaulttest default values; insert into defaulttest default values; select * from defaulttest; col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 ------+------+------+------+------+------+------+------- 3 | 12 | 5 | 1 | 3 | 88 | 8000 | 12.12 3 | 12 | 5 | 2 | 3 | 88 | 8000 | 12.12 3 | 12 | 5 | 3 | 3 | 88 | 8000 | 12.12 (3 rows) drop sequence ddef4_seq; drop table defaulttest; drop domain ddef1 restrict; drop domain ddef2 restrict; drop domain ddef3 restrict; drop domain ddef4 restrict; drop domain ddef5 restrict;
pgsql-patches by date: