summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-05-11 17:57:14 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-05-11 17:57:14 +0000
commitbc8036fc666a8f846b1d4b2f935af7edd90eb5aa (patch)
tree7915d1a5cce3d9b5acdff19d8f12382ad5299485 /src/test
parentb1110aaa8bc7da6f7ebdc12fb550ed378b72ef6e (diff)
downloadpostgresql-bc8036fc666a8f846b1d4b2f935af7edd90eb5aa.tar.gz
Support arrays of composite types, including the rowtypes of regular tables
and views (but not system catalogs, nor sequences or toast tables). Get rid of the hardwired convention that a type's array type is named exactly "_type", instead using a new column pg_type.typarray to provide the linkage. (It still will be named "_type", though, except in odd corner cases such as maximum-length type names.) Along the way, make tracking of owner and schema dependencies for types more uniform: a type directly created by the user has these dependencies, while a table rowtype or auto-generated array type does not have them, but depends on its parent object instead. David Fetter, Andrew Dunstan, Tom Lane
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/alter_table.out1
-rw-r--r--src/test/regress/expected/oidjoins.out16
-rw-r--r--src/test/regress/expected/type_sanity.out10
-rw-r--r--src/test/regress/sql/oidjoins.sql8
-rw-r--r--src/test/regress/sql/type_sanity.sql7
5 files changed, 41 insertions, 1 deletions
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 11b8c24c3d..99f0c0b049 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -1456,7 +1456,6 @@ select alter2.plus1(41);
-- clean up
drop schema alter2 cascade;
-NOTICE: drop cascades to composite type alter2.ctype
NOTICE: drop cascades to type alter2.ctype
NOTICE: drop cascades to type alter2.posint
NOTICE: drop cascades to function alter2.plus1(integer)
diff --git a/src/test/regress/expected/oidjoins.out b/src/test/regress/expected/oidjoins.out
index 5945753a1b..b7ad2b813c 100644
--- a/src/test/regress/expected/oidjoins.out
+++ b/src/test/regress/expected/oidjoins.out
@@ -409,6 +409,14 @@ WHERE indrelid != 0 AND
------+----------
(0 rows)
+SELECT ctid, lanowner
+FROM pg_catalog.pg_language fk
+WHERE lanowner != 0 AND
+ NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.lanowner);
+ ctid | lanowner
+------+----------
+(0 rows)
+
SELECT ctid, lanvalidator
FROM pg_catalog.pg_language fk
WHERE lanvalidator != 0 AND
@@ -721,6 +729,14 @@ WHERE typelem != 0 AND
------+---------
(0 rows)
+SELECT ctid, typarray
+FROM pg_catalog.pg_type fk
+WHERE typarray != 0 AND
+ NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type pk WHERE pk.oid = fk.typarray);
+ ctid | typarray
+------+----------
+(0 rows)
+
SELECT ctid, typinput
FROM pg_catalog.pg_type fk
WHERE typinput != 0 AND
diff --git a/src/test/regress/expected/type_sanity.out b/src/test/regress/expected/type_sanity.out
index b2db870da4..702cf7eecf 100644
--- a/src/test/regress/expected/type_sanity.out
+++ b/src/test/regress/expected/type_sanity.out
@@ -69,6 +69,16 @@ WHERE p1.typtype in ('b','e') AND p1.typname NOT LIKE E'\\_%' AND NOT EXISTS
705 | unknown
(2 rows)
+-- Make sure typarray points to a varlena array type of our own base
+SELECT p1.oid, p1.typname as basetype, p2.typname as arraytype,
+ p2.typelem, p2.typlen
+FROM pg_type p1 LEFT JOIN pg_type p2 ON (p1.typarray = p2.oid)
+WHERE p1.typarray <> 0 AND
+ (p2.oid IS NULL OR p2.typelem <> p1.oid OR p2.typlen <> -1);
+ oid | basetype | arraytype | typelem | typlen
+-----+----------+-----------+---------+--------
+(0 rows)
+
-- Text conversion routines must be provided.
SELECT p1.oid, p1.typname
FROM pg_type as p1
diff --git a/src/test/regress/sql/oidjoins.sql b/src/test/regress/sql/oidjoins.sql
index 5eb440f0f5..7d2dd3dd1f 100644
--- a/src/test/regress/sql/oidjoins.sql
+++ b/src/test/regress/sql/oidjoins.sql
@@ -205,6 +205,10 @@ SELECT ctid, indrelid
FROM pg_catalog.pg_index fk
WHERE indrelid != 0 AND
NOT EXISTS(SELECT 1 FROM pg_catalog.pg_class pk WHERE pk.oid = fk.indrelid);
+SELECT ctid, lanowner
+FROM pg_catalog.pg_language fk
+WHERE lanowner != 0 AND
+ NOT EXISTS(SELECT 1 FROM pg_catalog.pg_authid pk WHERE pk.oid = fk.lanowner);
SELECT ctid, lanvalidator
FROM pg_catalog.pg_language fk
WHERE lanvalidator != 0 AND
@@ -361,6 +365,10 @@ SELECT ctid, typelem
FROM pg_catalog.pg_type fk
WHERE typelem != 0 AND
NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type pk WHERE pk.oid = fk.typelem);
+SELECT ctid, typarray
+FROM pg_catalog.pg_type fk
+WHERE typarray != 0 AND
+ NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type pk WHERE pk.oid = fk.typarray);
SELECT ctid, typinput
FROM pg_catalog.pg_type fk
WHERE typinput != 0 AND
diff --git a/src/test/regress/sql/type_sanity.sql b/src/test/regress/sql/type_sanity.sql
index b1caa33efb..e549fd7489 100644
--- a/src/test/regress/sql/type_sanity.sql
+++ b/src/test/regress/sql/type_sanity.sql
@@ -59,6 +59,13 @@ WHERE p1.typtype in ('b','e') AND p1.typname NOT LIKE E'\\_%' AND NOT EXISTS
WHERE p2.typname = ('_' || p1.typname)::name AND
p2.typelem = p1.oid);
+-- Make sure typarray points to a varlena array type of our own base
+SELECT p1.oid, p1.typname as basetype, p2.typname as arraytype,
+ p2.typelem, p2.typlen
+FROM pg_type p1 LEFT JOIN pg_type p2 ON (p1.typarray = p2.oid)
+WHERE p1.typarray <> 0 AND
+ (p2.oid IS NULL OR p2.typelem <> p1.oid OR p2.typlen <> -1);
+
-- Text conversion routines must be provided.
SELECT p1.oid, p1.typname