Since it seems we still want to debate this a little, I've modified the
initial set of implicit-coercion-allowed flags to allow silent coercions
from the standard datatypes to text.  This un-breaks most of the
regression tests that were failing before.  I still want to debate the
wisdom of allowing this, but there's no point in changing the regress
tests until we're agreed.

An interesting breakage that remained was that the foreign_key tests
were assuming a "text = integer" comparison would fail, while a
"varchar = integer" comparison would succeed ... which is not only
pretty bogus in itself, but becomes even more so when you notice that
there isn't a varchar = integer operator.  Apparently, because we had
implicit coercions in *both* directions between text and integer,
the system couldn't figure out how to resolve text = integer; but
since there was an int->varchar and no varchar->int coercion, it
would resolve varchar = integer as varchar = integer::varchar.

With the attached settings, both cases are accepted as doing text =
int::text.  I'm not convinced that this is a step forward; I'd prefer
to see explicit coercion needed to cross type categories.  But that's
the matter for debate.

The lines marked XXX are the ones that I enabled since yesterday, and
would like to disable again:

 implicit |   result    |    input    |                        prosrc
----------+-------------+-------------+--------------------------------------
 no       | abstime     | timestamp   | timestamp_abstime
 no       | abstime     | timestamptz | timestamptz_abstime
 no       | box         | circle      | circle_box
 no       | box         | polygon     | poly_box
 yes      | bpchar      | char        | char_bpchar
 yes      | bpchar      | name        | name_bpchar
 yes      | char        | text        | text_char
 no       | cidr        | text        | text_cidr
 no       | circle      | box         | box_circle
 no       | circle      | polygon     | poly_circle
 no       | date        | abstime     | abstime_date
 no       | date        | text        | text_date
 no       | date        | timestamp   | timestamp_date
 no       | date        | timestamptz | timestamptz_date
 yes      | float4      | float8      | dtof
 yes      | float4      | int2        | i2tof
 yes      | float4      | int4        | i4tof
 no       | float4      | numeric     | numeric_float4
 no       | float4      | text        | text_float4
 yes      | float8      | float4      | ftod
 yes      | float8      | int2        | i2tod
 yes      | float8      | int4        | i4tod
 yes      | float8      | int8        | i8tod
 no       | float8      | numeric     | numeric_float8
 no       | float8      | text        | text_float8
 no       | inet        | text        | text_inet
 no       | int2        | float4      | ftoi2
 no       | int2        | float8      | dtoi2
 yes      | int2        | int4        | i4toi2
 yes      | int2        | int8        | int82
 no       | int2        | numeric     | numeric_int2
 no       | int2        | text        | text_int2
 no       | int4        | float4      | ftoi4
 no       | int4        | float8      | dtoi4
 yes      | int4        | int2        | i2toi4
 yes      | int4        | int8        | int84
 no       | int4        | numeric     | numeric_int4
 no       | int4        | text        | text_int4
 no       | int8        | float8      | dtoi8
 yes      | int8        | int2        | int28
 yes      | int8        | int4        | int48
 no       | int8        | numeric     | numeric_int8
 no       | int8        | text        | text_int8
 yes      | interval    | reltime     | reltime_interval
 no       | interval    | text        | text_interval
 yes      | interval    | time        | time_interval
 no       | lseg        | box         | box_diagonal
 no       | macaddr     | text        | text_macaddr
 yes      | name        | bpchar      | bpchar_name
 yes      | name        | text        | text_name
 yes      | name        | varchar     | text_name
 yes      | numeric     | float4      | float4_numeric
 yes      | numeric     | float8      | float8_numeric
 yes      | numeric     | int2        | int2_numeric
 yes      | numeric     | int4        | int4_numeric
 yes      | numeric     | int8        | int8_numeric
 no       | oid         | text        | text_oid
 no       | path        | polygon     | poly_path
 no       | point       | box         | box_center
 no       | point       | circle      | circle_center
 no       | point       | lseg        | lseg_center
 no       | point       | path        | path_center
 no       | point       | polygon     | poly_center
 no       | polygon     | box         | box_poly
 no       | polygon     | circle      | select polygon(12, $1)
 no       | polygon     | path        | path_poly
 no       | reltime     | int4        | int4reltime
 no       | reltime     | interval    | interval_reltime
 yes      | text        | char        | char_text
 XXX      | text        | date        | date_text
 XXX      | text        | float4      | float4_text
 XXX      | text        | float8      | float8_text
 no       | text        | inet        | network_show
 XXX      | text        | int2        | int2_text
 XXX      | text        | int4        | int4_text
 XXX      | text        | int8        | int8_text
 XXX      | text        | interval    | interval_text
 no       | text        | macaddr     | macaddr_text
 yes      | text        | name        | name_text
 no       | text        | oid         | oid_text
 XXX      | text        | time        | time_text
 XXX      | text        | timestamp   | timestamp_text
 XXX      | text        | timestamptz | timestamptz_text
 XXX      | text        | timetz      | timetz_text
 no       | time        | abstime     | select time(cast($1 as timestamp without time 
zone))
 no       | time        | interval    | interval_time
 no       | time        | text        | text_time
 no       | time        | timestamp   | timestamp_time
 yes      | time        | timetz      | timetz_time
 yes      | timestamp   | abstime     | abstime_timestamp
 yes      | timestamp   | date        | date_timestamp
 no       | timestamp   | text        | text_timestamp
 yes      | timestamp   | timestamptz | timestamptz_timestamp
 yes      | timestamptz | abstime     | abstime_timestamptz
 yes      | timestamptz | date        | date_timestamptz
 no       | timestamptz | text        | text_timestamptz
 yes      | timestamptz | timestamp   | timestamp_timestamptz
 no       | timetz      | text        | text_timetz
 yes      | timetz      | time        | time_timetz
 no       | timetz      | timestamptz | timestamptz_timetz
 no       | varchar     | int4        | int4_text
 no       | varchar     | int8        | int8_text
 yes      | varchar     | name        | name_text
(103 rows)



                        regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to