Re: Check constraint on domain over an array not executed for array literals
Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
From: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: "Florian G. Pflug" <fgp@phlo.org>, Postgresql-Hackers <pgsql-hackers@postgresql.org>
Date: 2009-11-13T19:50:11Z
Lists: pgsql-hackers
Heikki Linnakangas wrote: > Tom Lane wrote: >> Hm. I concur that this special-case code is failing to consider the >> possibility that the target type is domain-over-array-type rather than >> just array-type. I think though that this patch is a bit of a kluge, >> because it delivers a mislabeled expression tree. The result of the >> transformArrayExpr() is not really of type myintarray. What it is is >> a plain int[] value; we shouldn't label it as being already myintarray, >> because it hasn't passed the domain checks. At the moment there is >> probably not any visible effect of that, but in the future it could >> lead to misoptimization, so I think it's important to get it right. >> >> My inclination is to apply getBaseTypeAndTypmod to the targetType and >> pass that as the array type to transformArrayExpr, then instead of >> considering the job done, fall through to transformTypeCast, which will >> either do nothing or attach a domain coercion node. > > Hmm, yeah that's more accurate. Ok, committed another patch doing exactly that. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com