diff options
author | Tom Lane | 2011-06-08 16:52:12 +0000 |
---|---|---|
committer | Tom Lane | 2011-06-08 16:52:58 +0000 |
commit | b7e8feb33e5d948c66720643fe32cfb06980c3d1 (patch) | |
tree | ce857d48d94ccb16746978b718ebd16fa0e9529e /src/test | |
parent | 8f9622bbb3c02b06176760c3ca2d33c5b5f629a7 (diff) |
Allow domains over arrays to match ANYARRAY parameters again.
This use-case was broken in commit 529cb267a6843a6a8190c86b75d091771d99d6a9
of 2010-10-21, in which I commented "For the moment, we just forbid such
matching. We might later wish to insert an automatic downcast to the
underlying array type, but such a change should also change matching of
domains to ANYELEMENT for consistency". We still lack consensus about what
to do with ANYELEMENT; but not matching ANYARRAY is a clear loss of
functionality compared to prior releases, so let's go ahead and make that
happen. Per complaint from Regina Obe and extensive subsequent discussion.
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/domain.out | 36 | ||||
-rw-r--r-- | src/test/regress/sql/domain.sql | 7 |
2 files changed, 43 insertions, 0 deletions
diff --git a/src/test/regress/expected/domain.out b/src/test/regress/expected/domain.out index 7d72791e5ef..2586b07241e 100644 --- a/src/test/regress/expected/domain.out +++ b/src/test/regress/expected/domain.out @@ -127,6 +127,16 @@ select testint4arr[1], testchar4arr[2:2] from domarrtest; | {{d,e,f}} (5 rows) +select array_dims(testint4arr), array_dims(testchar4arr) from domarrtest; + array_dims | array_dims +------------+------------ + [1:2] | [1:2][1:2] + [1:2][1:2] | [1:1][1:2] + [1:2] | [1:3][1:2] + [1:2] | [1:2][1:1] + | [1:2][1:3] +(5 rows) + COPY domarrtest FROM stdin; COPY domarrtest FROM stdin; -- fail ERROR: value too long for type character varying(4) @@ -146,6 +156,32 @@ select * from domarrtest; drop table domarrtest; drop domain domainint4arr restrict; drop domain domainchar4arr restrict; +create domain dia as int[]; +select '{1,2,3}'::dia; + dia +--------- + {1,2,3} +(1 row) + +select array_dims('{1,2,3}'::dia); + array_dims +------------ + [1:3] +(1 row) + +select pg_typeof('{1,2,3}'::dia); + pg_typeof +----------- + dia +(1 row) + +select pg_typeof('{1,2,3}'::dia || 42); -- should be int[] not dia + pg_typeof +----------- + integer[] +(1 row) + +drop domain dia; create domain dnotnull varchar(15) NOT NULL; create domain dnull varchar(15); create domain dcheck varchar(15) NOT NULL CHECK (VALUE = 'a' OR VALUE = 'c' OR VALUE = 'd'); diff --git a/src/test/regress/sql/domain.sql b/src/test/regress/sql/domain.sql index 545af626220..1cc447b8a24 100644 --- a/src/test/regress/sql/domain.sql +++ b/src/test/regress/sql/domain.sql @@ -87,6 +87,7 @@ INSERT INTO domarrtest values (NULL, '{{"a","b","c"},{"d","e","f"}}'); INSERT INTO domarrtest values (NULL, '{{"toolong","b","c"},{"d","e","f"}}'); select * from domarrtest; select testint4arr[1], testchar4arr[2:2] from domarrtest; +select array_dims(testint4arr), array_dims(testchar4arr) from domarrtest; COPY domarrtest FROM stdin; {3,4} {q,w,e} @@ -103,6 +104,12 @@ drop table domarrtest; drop domain domainint4arr restrict; drop domain domainchar4arr restrict; +create domain dia as int[]; +select '{1,2,3}'::dia; +select array_dims('{1,2,3}'::dia); +select pg_typeof('{1,2,3}'::dia); +select pg_typeof('{1,2,3}'::dia || 42); -- should be int[] not dia +drop domain dia; create domain dnotnull varchar(15) NOT NULL; create domain dnull varchar(15); |