Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

Re: Insert SHRT_MIN fails for int2 column


  • From: Kelly Burkhart <kelly(at)tradebotsystems(dot)com>
  • To: pgsql-odbc(at)postgresql(dot)org
  • Subject: Re: Insert SHRT_MIN fails for int2 column
  • Date: Mon, 07 Mar 2005 12:42:34 -0600
  • Message-id: <1110220954.3206.20.camel@krb06> <text/plain>

On Mon, 2005-03-07 at 11:44, Tom Lane wrote:
> Kelly Burkhart <kelly(at)tradebotsystems(dot)com> writes:
> > The ::int2 cast is added in convert.c on line 3024 (for 08.00.0005)
> > preceded by a comment stating it is necessary:
> 
> > 	/* needs cast because there is no automatic downcast from
> > 		int4 constants */
> > 	CVT_APPEND_STR(qb, "::int2");
> 
> > Is this really necessary?  On my 7.4.2 database, the following works
> > just fine:
> 
> > create table tst ( i16 int2 );
> > insert into tst ( i16 ) values ( -32768 );
> 
> In that context the down-conversion will work because it's considered an
> assignment coercion.  However there are other cases where an explicit
> cast is indeed needed, for instance
> 
> 	select foo(42::int2)
> 
> where foo is declared as taking an int2 parameter.
> 
> The best thing would be to leave the cast in place but add parentheses
> around the value being casted.

Attached is a patch to resolve this.  BTW, is it appropriate for me to
send pgsqlodbc patches to this list?  Or should I send all patches to
psql-patches?

-K

--- psqlodbc-08.00.0101/convert.c	2005-01-17 04:12:52.000000000 -0600
+++ psqlodbc-08.00.0101.patch/convert.c	2005-03-07 12:14:18.653080285 -0600
@@ -2989,6 +2989,11 @@
 			if (param_sqltype == SQL_BIT)
 				CVT_APPEND_CHAR(qb, '\'');		/* Open Quote */
 
+			if (param_sqltype == SQL_SMALLINT)
+			{
+				CVT_APPEND_STR(qb, "(");
+			}
+
 			if (buf)
 			{
 				switch (used)
@@ -3008,7 +3013,7 @@
 			if (param_sqltype == SQL_SMALLINT)
 			{
 				/* needs cast because there is no automatic downcast from int4 constants */
-				CVT_APPEND_STR(qb, "::int2");
+				CVT_APPEND_STR(qb, ")::int2");
 			}
 
 			if (param_sqltype == SQL_BIT)


Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group