Thread: INSERT VALUES error in ecpg.
Hi, In ecpg, the error occurs in value lists of the INSERT statement, when 'short' or 'unsigned short' host variables are used. 1. Program sample exec sql begin declare section; short s ; unsigned short us; exec sql end declare section; exec sql createtable test(s smallint, us smallint); exec sql commit; s = 1; us =32000; exec sql insert into test values( :s, :us) ; <== error 2. Error messege Following error message are output. "i4toi2: '-600309759' causes int2 underflow" 3. Patch The error does not occur, when following patches were applied. Is this patch right? please confirm it. -- Regards. SAKAIDA Masaaki <sakaida@psn.co.jp> Personal Software, Inc. Osaka Japan *** postgresql-6.5/src/interfaces/ecpg/lib/ecpglib.c.orig Wed Jun 24 15:21:30 1999 --- postgresql-6.5/src/interfaces/ecpg/lib/ecpglib.c Wed Jun 24 15:31:57 1999 *************** *** 469,480 **** --- 469,488 ---- switch (var->type) { case ECPGt_short: + sprintf(buff, "%d", *(short *) var->value); + tobeinserted = buff; + break; + case ECPGt_int: sprintf(buff, "%d", *(int *) var->value); tobeinserted= buff; break; case ECPGt_unsigned_short: + sprintf(buff, "%d", *(unsigned short *) var->value); + tobeinserted = buff; + break; + case ECPGt_unsigned_int: sprintf(buff, "%d", *(unsigned int *) var->value); tobeinserted = buff;
This patch looks good. Comments? > Hi, > > In ecpg, the error occurs in value lists of the INSERT statement, > when 'short' or 'unsigned short' host variables are used. > > 1. Program sample > > exec sql begin declare section; > short s ; > unsigned short us; > exec sql end declare section; > exec sql create table test(s smallint, us smallint); > exec sql commit; > s = 1; us =32000; > exec sql insert into test values( :s, :us ) ; <== error > > 2. Error messege > > Following error message are output. > "i4toi2: '-600309759' causes int2 underflow" > > 3. Patch > > The error does not occur, when following patches were applied. > Is this patch right? please confirm it. > > -- > Regards. > > SAKAIDA Masaaki <sakaida@psn.co.jp> > Personal Software, Inc. Osaka Japan > > > *** postgresql-6.5/src/interfaces/ecpg/lib/ecpglib.c.orig Wed Jun 24 15:21:30 1999 > --- postgresql-6.5/src/interfaces/ecpg/lib/ecpglib.c Wed Jun 24 15:31:57 > 1999 > *************** > *** 469,480 **** > --- 469,488 ---- > switch (var->type) > { > case ECPGt_short: > + sprintf(buff, "%d", *(short *) var->value); > + tobeinserted = buff; > + break; > + > case ECPGt_int: > sprintf(buff, "%d", *(int *) var->value); > tobeinserted = buff; > break; > > case ECPGt_unsigned_short: > + sprintf(buff, "%d", *(unsigned short *) var->value); > + tobeinserted = buff; > + break; > + > case ECPGt_unsigned_int: > sprintf(buff, "%d", *(unsigned int *) var->value); > tobeinserted = buff; > > > -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
I have applied this patch, and it will appear in 6.5.1. > Hi, > > In ecpg, the error occurs in value lists of the INSERT statement, > when 'short' or 'unsigned short' host variables are used. > > 1. Program sample > > exec sql begin declare section; > short s ; > unsigned short us; > exec sql end declare section; > exec sql create table test(s smallint, us smallint); > exec sql commit; > s = 1; us =32000; > exec sql insert into test values( :s, :us ) ; <== error > > 2. Error messege > > Following error message are output. > "i4toi2: '-600309759' causes int2 underflow" > > 3. Patch > > The error does not occur, when following patches were applied. > Is this patch right? please confirm it. > > -- > Regards. > > SAKAIDA Masaaki <sakaida@psn.co.jp> > Personal Software, Inc. Osaka Japan > > > *** postgresql-6.5/src/interfaces/ecpg/lib/ecpglib.c.orig Wed Jun 24 15:21:30 1999 > --- postgresql-6.5/src/interfaces/ecpg/lib/ecpglib.c Wed Jun 24 15:31:57 > 1999 > *************** > *** 469,480 **** > --- 469,488 ---- > switch (var->type) > { > case ECPGt_short: > + sprintf(buff, "%d", *(short *) var->value); > + tobeinserted = buff; > + break; > + > case ECPGt_int: > sprintf(buff, "%d", *(int *) var->value); > tobeinserted = buff; > break; > > case ECPGt_unsigned_short: > + sprintf(buff, "%d", *(unsigned short *) var->value); > + tobeinserted = buff; > + break; > + > case ECPGt_unsigned_int: > sprintf(buff, "%d", *(unsigned int *) var->value); > tobeinserted = buff; > > > -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026