Re: bug? non working casts for domain
От | Bruce Momjian |
---|---|
Тема | Re: bug? non working casts for domain |
Дата | |
Msg-id | 200605062310.k46NA7913100@candle.pha.pa.us обсуждение исходный текст |
Ответ на | bug? non working casts for domain (Fabien COELHO <coelho@cri.ensmp.fr>) |
Ответы |
Re: bug? non working casts for domain
|
Список | pgsql-hackers |
I can confirm that this is a bug. The attached SQL shows that creating a CAST _to_ a domain type doesn't work, though the cast can be created. The attached SQL provided by Fabien shows the failure. The error is coming from parse_expr.c::typecast_expression, and its call to typenameTypeId(). I wish I understood how we do domains better to fix this properly. Anyone? --------------------------------------------------------------------------- Fabien COELHO wrote: > > Dear PostgreSQL developer. > > Although it is allowed to create a cast for a domain, it seems that there > is no way to trigger it. You can find attached an sql script to illustrate > the issue with postgresql 8.1.3. The create cast and create domain > documentations do not seem to discuss this point. > > ISTM that it is a pg bug. Indeed, either > > (1) the create cast should be rejected if it is not allowed for domains. > > or > > (2) the function should be triggered by explicit casts to the domain. -- Bruce Momjian http://candle.pha.pa.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. + DROP DOMAIN a_year CASCADE; -- a simple domain CREATE DOMAIN a_year AS INTEGER CHECK (VALUE BETWEEN 1 AND 3000); -- ok SELECT 1::a_year; SELECT CAST('2000' AS a_year); -- fails as expected SELECT 0::a_year; CREATE FUNCTION date2year(DATE) RETURNS a_year IMMUTABLE STRICT AS $$ SELECT EXTRACT(YEAR FROM $1)::a_year; $$ LANGUAGE sql; -- ok SELECT date2year(CURRENT_DATE); -- fails as expected SELECT date2year(DATE '3001-01-01'); CREATE CAST (DATE AS a_year) WITH FUNCTION date2year(DATE); -- fails, I would expect 1970 SELECT (DATE '1970-03-20')::a_year; -- fails, I would expect the current year SELECT CURRENT_DATE::a_year; SELECT CAST(CURRENT_DATE AS a_year);
В списке pgsql-hackers по дате отправления: