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:

Previous
From: Bruce Momjian
Date:
Subject: Re: fix for bison warnings
Next
From: Bruce Momjian
Date:
Subject: Re: psql domains