diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index 29a59fa320767b21843dafd710515bb915731a08..6f292eeb4c3558dd6213b7fb429b3074a5119b77 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -919,4 +919,9 @@ Mon May 15 10:51:31 CEST 2000 - Added patch by SAKAIDA Masaaki <sakaida@psn.co.jp> to fix segfault. - Set ecpg version to 2.7.1. +Wed May 17 07:52:59 CEST 2000 + + - Added patch by SAKAIDA Masaaki <sakaida@psn.co.jp> to fix array + handling. + - Set library version to 3.1.1. diff --git a/src/interfaces/ecpg/lib/Makefile.in b/src/interfaces/ecpg/lib/Makefile.in index 20f5c314dd1ed5e7569f763566ceb5bb02423cb9..d48c75ea2308b658ed8321c06ed62d6e299caadc 100644 --- a/src/interfaces/ecpg/lib/Makefile.in +++ b/src/interfaces/ecpg/lib/Makefile.in @@ -6,13 +6,13 @@ # Copyright (c) 1994, Regents of the University of California # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.65 2000/03/30 11:41:34 meskes Exp $ +# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.66 2000/05/17 06:03:13 meskes Exp $ # #------------------------------------------------------------------------- NAME= ecpg SO_MAJOR_VERSION= 3 -SO_MINOR_VERSION= 1.0 +SO_MINOR_VERSION= 1.1 SRCDIR= @top_srcdir@ include $(SRCDIR)/Makefile.global diff --git a/src/interfaces/ecpg/lib/data.c b/src/interfaces/ecpg/lib/data.c index 29675a8972830f42c420e64a1231a03e9f34ae3d..18ac49805bdb16d8ad61606984caf0998a8fcbd8 100644 --- a/src/interfaces/ecpg/lib/data.c +++ b/src/interfaces/ecpg/lib/data.c @@ -1,4 +1,5 @@ #include <stdlib.h> +#include <string.h> #include <ecpgtype.h> #include <ecpglib.h> @@ -26,8 +27,18 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno, ECPGraise(lineno, ECPG_DATA_NOT_ARRAY, NULL); return (false); } - else - ++pval; + + switch (type) + { + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_varchar: + break; + + default: + pval++; + break; + } } /* We will have to decode the value */ @@ -144,7 +155,14 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno, case ECPGt_double: if (pval) { - dres = strtod(pval, &scan_length); + if (isarray && *pval == '"') + dres = strtod(pval + 1, &scan_length); + else + dres = strtod(pval, &scan_length); + + if (isarray && *scan_length == '"') + scan_length++; + if ((isarray && *scan_length != ',' && *scan_length != '}') || (!isarray && *scan_length != '\0')) /* Garbage left */ { diff --git a/src/interfaces/ecpg/test/Makefile b/src/interfaces/ecpg/test/Makefile index 72f38035d3ab9be247e19fad034e038233a0e6bb..0b9135a5afbc5a773a6e4a6ec0f192062c237aee 100644 --- a/src/interfaces/ecpg/test/Makefile +++ b/src/interfaces/ecpg/test/Makefile @@ -2,7 +2,8 @@ all: test1 test2 test3 test4 perftest dyntest dyntest2 LDFLAGS=-g -I /usr/local/pgsql/include -L/usr/local/pgsql/lib -lecpg -lpq -ECPG=../preproc/ecpg -I../include +ECPG=/usr/local/pgsql/bin/ecpg -I../include +#ECPG=../preproc/ecpg -I../include .SUFFIXES: .pgc .c @@ -18,4 +19,4 @@ dyntest2: dyntest2.c $(ECPG) $? clean: - rm -f test1 test2 test3 test4 perftest *.c *.o log dyntest dyntest2 + rm -f test1 test2 test3 test4 perftest *.c log dyntest dyntest2 diff --git a/src/interfaces/ecpg/test/test1.pgc b/src/interfaces/ecpg/test/test1.pgc index 67c1aa847fcfd40433d487ec8a6f87625f89bd7d..f98719d56f8ea6dd7fa997e3cec94f277bac3418 100644 --- a/src/interfaces/ecpg/test/test1.pgc +++ b/src/interfaces/ecpg/test/test1.pgc @@ -1,5 +1,3 @@ - - exec sql include sqlca; exec sql whenever sqlerror do PrintAndStop(msg); @@ -88,8 +86,9 @@ exec sql end declare section; strcpy(msg, "commit"); exec sql commit; - /* Stop automatic transactioning for connection pm. */ - exec sql at pm set autocommit to off; + /* Start automatic transactioning for connection pm. */ + exec sql at pm set autocommit to on; + exec sql at pm begin transaction; strcpy(msg, "select"); exec sql select name, amount, letter into :name, :amount, :letter from "Test"; @@ -117,14 +116,17 @@ exec sql end declare section; for (i=0, j=sqlca.sqlerrd[2]; i<j; i++) printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]); - strcpy(msg, "drop"); - exec sql drop table "Test"; - exec sql at pm drop table "Test"; - strcpy(msg, "commit"); exec sql commit; exec sql at pm commit; + /* Start automatic transactioning for connection main. */ + exec sql set autocommit to on; + + strcpy(msg, "drop"); + exec sql drop table "Test"; + exec sql at pm drop table "Test"; + strcpy(msg, "disconnect"); exec sql disconnect main; exec sql disconnect pm; diff --git a/src/interfaces/ecpg/test/test4.pgc b/src/interfaces/ecpg/test/test4.pgc index 0ac00008e495cc122ae006d6a75565fdd61f0854..a45abc1ae6a348d2a2a639494c49de22c31d775e 100644 --- a/src/interfaces/ecpg/test/test4.pgc +++ b/src/interfaces/ecpg/test/test4.pgc @@ -8,7 +8,7 @@ int main () { EXEC SQL BEGIN DECLARE SECTION; - int i = 3; + int i = 1; int *did = &i; int a[10] = {9,8,7,6,5,4,3,2,1,0}; char text[10] = "klmnopqrst"; @@ -31,7 +31,7 @@ EXEC SQL END DECLARE SECTION; EXEC SQL CREATE TABLE test (f float, i int, a int[10], text char(10), b bool); - EXEC SQL INSERT INTO test(f,i,a,text,b) VALUES(404.90,1,'{0,1,2,3,4,5,6,7,8,9}','abcdefghij', 'f'); + EXEC SQL INSERT INTO test(f,i,a,text,b) VALUES(404.90,3,'{0,1,2,3,4,5,6,7,8,9}','abcdefghij', 'f'); EXEC SQL INSERT INTO test(f,i,a,text,b) VALUES(140787.0,2,:a,:text,'t'); @@ -48,7 +48,7 @@ EXEC SQL END DECLARE SECTION; printf("Found f=%f text=%10.10s b=%d\n", f, text, b); - f=14.07; + f=140787; EXEC SQL SELECT a,text INTO :a,:t FROM test