Re: array of domain types
От | Thom Brown |
---|---|
Тема | Re: array of domain types |
Дата | |
Msg-id | CAA-aLv6dQ1S+Wze3AZsbstW0TiP8O9q2AAg0nM22vekOHziktw@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: array of domain types (konstantin knizhnik <k.knizhnik@postgrespro.ru>) |
Ответы |
Re: array of domain types
|
Список | pgsql-hackers |
On 2 June 2016 at 10:13, konstantin knizhnik <k.knizhnik@postgrespro.ru> wrote:
On Jun 1, 2016, at 4:37 PM, Thom Brown wrote:On 1 June 2016 at 14:20, Konstantin Knizhnik <k.knizhnik@postgrespro.ru> wrote:I wonder why domain types can not be used for specification of array element:
create domain objref as bigint;
create table foo(x objref[]);
ERROR: type "objref[]" does not exist
create table foo(x bigint[]);
CREATE TABLE
Is there some principle problem here or it is just not implemented?It's not implemented, but patches welcome.
ThomThe patch is trivial: just use typbasetype in get_array_type if typtype is TYPTYPE_DOMAIN:diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.cindex cb26d79..ecfbb20 100644--- a/src/backend/utils/cache/lsyscache.c+++ b/src/backend/utils/cache/lsyscache.c@@ -2486,7 +2486,18 @@ get_array_type(Oid typid)if (HeapTupleIsValid(tp)){result = ((Form_pg_type) GETSTRUCT(tp))->typarray;- ReleaseSysCache(tp);+ if (result == InvalidOid && ((Form_pg_type) GETSTRUCT(tp))->typtype == TYPTYPE_DOMAIN) {+ typid = ((Form_pg_type) GETSTRUCT(tp))->typbasetype;+ ReleaseSysCache(tp);+ tp = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));+ if (HeapTupleIsValid(tp))+ {+ result = ((Form_pg_type) GETSTRUCT(tp))->typarray;+ ReleaseSysCache(tp);+ }+ } else {+ ReleaseSysCache(tp);+ }}return result;}Any problems with it?
Yes, it doesn't work:
# CREATE DOMAIN teenager AS int CHECK (VALUE BETWEEN 13 AND 19);
# CREATE DOMAIN teenager AS int CHECK (VALUE BETWEEN 13 AND 19);
CREATE DOMAIN
# SELECT 14::teenager;teenager
----------
14
(1 row)
# SELECT 20::teenager;
ERROR: value for domain teenager violates check constraint "teenager_check"
teenager
----------
{14,20}
(1 row)
Thom
В списке pgsql-hackers по дате отправления: