BUG #1267: Suggest TEXTOID parameters be treated like UNKNOWNOID

Started by PostgreSQL Bugs Listover 21 years ago2 messagesbugs
Jump to latest
#1PostgreSQL Bugs List
pgsql-bugs@postgresql.org

The following bug has been logged online:

Bug reference: 1267
Logged by: Colin Chapman

Email address: c0linchapman@btinternet.com

PostgreSQL version: 8.0 Beta

Operating system: fedora linux

Description: Suggest TEXTOID parameters be treated like UNKNOWNOID

Details:

postgresql-8.0.0beta2

JSP likes to transfer data in parameters as text. When putting values into
a int column you get exception

this can be demonstrated by.

create table d ( numb int );
insert into d values ( '1' );
insert into d values ( '2'::text );
drop table d;

--- ./parse_coerce.c    2004-08-29 06:06:44.000000000 +0100
+++ /usr/local/postgresql-8.0.0beta2/src/backend/parser/parse_coerce.c  
2004-09-23 13:05:34.383199696 +0100 
@@ -137,7 +137,7 @@
                /* NB: we do NOT want a RelabelType here */
                return node;
        }
-       if (inputTypeId == UNKNOWNOID && IsA(node, Const))
+       if ( ( ( ( inputTypeId == UNKNOWNOID) || (inputTypeId == TEXTOID ) ) 
&& IsA(node, Const))&& IsA(node, Const) ) 
        {
                /*
                 * Input is a string constant with previously undetermined 
type. 
@@ -197,7 +197,7 @@
                return result;
        }
-       if (inputTypeId == UNKNOWNOID && IsA(node, Param) &&
+       if ( ( ( inputTypeId == UNKNOWNOID ) || ( inputTypeId == TEXTOID ) ) 
&& IsA(node, Param) && 
                ((Param *) node)->paramkind == PARAM_NUM &&
                pstate != NULL && pstate->p_variableparams)
        {
@@ -220,7 +220,7 @@

(errcode(ERRCODE_UNDEFINED_PARAMETER),
errmsg("there is no parameter $%d",
paramno)));

-               if (toppstate->p_paramtypes[paramno - 1] == UNKNOWNOID)
+               if ( (toppstate->p_paramtypes[paramno - 1] == UNKNOWNOID) || 
(toppstate->p_paramtypes[paramno - 1] == TEXTOID ) ) 
                {
                        /* We've successfully resolved the type */
                        toppstate->p_paramtypes[paramno - 1] = targetTypeId;
@@ -373,7 +373,7 @@
                 * If input is an untyped string constant, assume we can 
convert 
                 * it to anything.
                 */
-               if (inputTypeId == UNKNOWNOID)
+                if ( ( inputTypeId == UNKNOWNOID) || (inputTypeId == 
TEXTOID ) )  
                        continue;

/*

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PostgreSQL Bugs List (#1)
Re: BUG #1267: Suggest TEXTOID parameters be treated like UNKNOWNOID

"PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:

-       if (inputTypeId == UNKNOWNOID && IsA(node, Const))
+       if ( ( ( ( inputTypeId == UNKNOWNOID) || (inputTypeId == TEXTOID ) ) 
&& IsA(node, Const))&& IsA(node, Const) ) 

No thank you. Fix your broken client code, rather than screwing up type
coercion behavior for everyone else. If you've explicitly specified
that something is TEXT, then the system should treat it as TEXT.

regards, tom lane