From 9b0e20574b6e57e6eeb4cb2d70eb64e1a1335023 Mon Sep 17 00:00:00 2001 From: Michael Meskes <meskes@postgresql.org> Date: Tue, 29 Jun 1999 09:25:25 +0000 Subject: [PATCH] *** empty log message *** --- src/interfaces/ecpg/TODO | 2 ++ src/interfaces/ecpg/lib/ecpglib.c | 46 +--------------------------- src/interfaces/ecpg/preproc/Makefile | 3 +- src/interfaces/ecpg/preproc/pgc.l | 9 ++++-- src/interfaces/ecpg/test/test1.pgc | 18 +++++------ src/interfaces/ecpg/test/test3.pgc | 8 ++--- 6 files changed, 24 insertions(+), 62 deletions(-) diff --git a/src/interfaces/ecpg/TODO b/src/interfaces/ecpg/TODO index 114500850c6..f6e425b958a 100644 --- a/src/interfaces/ecpg/TODO +++ b/src/interfaces/ecpg/TODO @@ -13,6 +13,8 @@ support for dynamic SQL with unknown number of variables with DESCRIPTORS The line numbering is not exact. +Inside an SQL statement quoting only works with SQL92 style double quotes: ''. + Missing statements: - exec sql allocate - exec sql deallocate diff --git a/src/interfaces/ecpg/lib/ecpglib.c b/src/interfaces/ecpg/lib/ecpglib.c index b74febcd1cc..0643571a018 100644 --- a/src/interfaces/ecpg/lib/ecpglib.c +++ b/src/interfaces/ecpg/lib/ecpglib.c @@ -241,41 +241,6 @@ quote_postgres(char *arg, int lineno) return res; } -/* This function returns a newly malloced string that has the \ - in the strings inside the argument quoted with another \. - */ -static -char * -quote_strings(char *arg, int lineno) -{ - char *res = (char *) ecpg_alloc(2 * strlen(arg) + 1, lineno); - int i, - ri; - bool string = false; - - if (!res) - return (res); - - for (i = 0, ri = 0; arg[i]; i++, ri++) - { - switch (arg[i]) - { - case '\'': - string = string ? false : true; - break; - case '\\': - res[ri++] = '\\'; - default: - ; - } - - res[ri] = arg[i]; - } - res[ri] = '\0'; - - return res; -} - /* * create a list of variables * The variables are listed with input variables preceeding outputvariables @@ -544,17 +509,8 @@ ECPGexecute(struct statement * stmt) strncpy(newcopy, (char *) var->value, slen); newcopy[slen] = '\0'; - if (!(mallocedval = (char *) ecpg_alloc(2 * strlen(newcopy) + 1, stmt->lineno))) - return false; - - tmp = quote_strings(newcopy, stmt->lineno); - if (!tmp) - return false; - strcat(mallocedval, tmp); - free(newcopy); - - tobeinserted = mallocedval; + tobeinserted = newcopy; } break; case ECPGt_varchar: diff --git a/src/interfaces/ecpg/preproc/Makefile b/src/interfaces/ecpg/preproc/Makefile index 80ac7444b2e..26e1cf3f902 100644 --- a/src/interfaces/ecpg/preproc/Makefile +++ b/src/interfaces/ecpg/preproc/Makefile @@ -9,8 +9,9 @@ CFLAGS+=-I../include -DMAJOR_VERSION=$(MAJOR_VERSION) \ -DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \ -DINCLUDE_PATH=\"$(HEADERDIR)\" -OBJ=preproc.o pgc.o type.o ecpg.o ecpg_keywords.o ../../../backend/parser/scansup.o \ +OBJ=preproc.o pgc.o type.o ecpg.o ecpg_keywords.o \ keywords.o c_keywords.o ../lib/typename.o +#../../../backend/parser/scansup.o all:: ecpg diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index 071dc4731d0..1585e395b0c 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -248,7 +248,8 @@ cppline {space}*#.*(\\{space}*\n)*\n* } <xq>{xqstop} { BEGIN(SQL); - yylval.str = mm_strdup(scanstr(literal)); + /* yylval.str = mm_strdup(scanstr(literal));*/ + yylval.str = mm_strdup(literal); return SCONST; } <xq>{xqdouble} | @@ -609,7 +610,8 @@ cppline {space}*#.*(\\{space}*\n)*\n* if (strcmp(old, ptr->old) == 0) { free(ptr->new); - ptr->new = mm_strdup(scanstr(literal)); + /* ptr->new = mm_strdup(scanstr(literal));*/ + ptr->new = mm_strdup(literal); } } if (ptr == NULL) @@ -618,7 +620,8 @@ cppline {space}*#.*(\\{space}*\n)*\n* /* initial definition */ this->old = old; - this->new = mm_strdup(scanstr(literal)); + /* this->new = mm_strdup(scanstr(literal));*/ + this->new = mm_strdup(literal); this->next = defines; defines = this; } diff --git a/src/interfaces/ecpg/test/test1.pgc b/src/interfaces/ecpg/test/test1.pgc index bed83f96380..9f7e2de52e8 100644 --- a/src/interfaces/ecpg/test/test1.pgc +++ b/src/interfaces/ecpg/test/test1.pgc @@ -6,7 +6,7 @@ exec sql include sqlca; exec sql define AMOUNT 4; exec sql type intarray is int[AMOUNT]; -exec sql type string is char(6); +exec sql type string is char(8); typedef int intarray[AMOUNT]; @@ -16,7 +16,7 @@ main () exec sql begin declare section; intarray amount; int increment=100; - char name[AMOUNT][6]; + char name[AMOUNT][8]; char letter[AMOUNT][1]; char command[128]; exec sql end declare section; @@ -35,8 +35,8 @@ exec sql end declare section; exec sql connect to pm; strcpy(msg, "create"); - exec sql at main create table test(name char(6), amount int, letter char(1)); - exec sql create table test(name char(6), amount int, letter char(1)); + exec sql at main create table test(name char(8), amount int, letter char(1)); + exec sql create table test(name char(8), amount int, letter char(1)); strcpy(msg, "commit"); exec sql at main commit; @@ -46,13 +46,13 @@ exec sql end declare section; exec sql set connection to main; strcpy(msg, "execute insert 1"); - sprintf(command, "insert into test(name, amount, letter) values ('db: mm', 1, 'f')"); + sprintf(command, "insert into test(name, amount, letter) values ('db: ''mm''', 1, 'f')"); exec sql execute immediate :command; - sprintf(command, "insert into test(name, amount, letter) values ('db: mm', 2, 't')"); + sprintf(command, "insert into test(name, amount, letter) values ('db: ''mm''', 2, 't')"); exec sql execute immediate :command; strcpy(msg, "execute insert 2"); - sprintf(command, "insert into test(name, amount, letter) values ('db: pm', 1, 'f')"); + sprintf(command, "insert into test(name, amount, letter) values ('db: ''pm''', 1, 'f')"); exec sql at pm execute immediate :command; strcpy(msg, "execute insert 3"); @@ -78,12 +78,12 @@ exec sql end declare section; exec sql select name, amount, letter into :name, :amount, :letter from test; for (i=0, j=sqlca.sqlerrd[2]; i<j; i++) - printf("name[%d]=%6.6s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]); + printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]); exec sql at pm select name, amount, letter into :name, :amount, :letter from test; for (i=0, j=sqlca.sqlerrd[2]; i<j; i++) - printf("name[%d]=%6.6s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]); + 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; diff --git a/src/interfaces/ecpg/test/test3.pgc b/src/interfaces/ecpg/test/test3.pgc index 03341221431..13786518f05 100644 --- a/src/interfaces/ecpg/test/test3.pgc +++ b/src/interfaces/ecpg/test/test3.pgc @@ -18,7 +18,7 @@ exec sql begin declare section; int children; int ind_children; str *married = NULL; - char *testname="Petra"; + char *wifesname="Petra"; char *query="select name, born, age, married, children from meskes where name = :var1"; exec sql end declare section; @@ -32,13 +32,13 @@ exec sql end declare section; ECPGdebug(1, dbgs); strcpy(msg, "connect"); - exec sql connect to unix:postgresql://localhost:5432/mm; + exec sql connect to unix:postgresql://localhost:5432/mm; strcpy(msg, "create"); exec sql create table meskes(name char(8), born integer, age smallint, married date, children integer); strcpy(msg, "insert"); - exec sql insert into meskes(name, married, children) values ('Petra', '19900404', 3); + exec sql insert into meskes(name, married, children) values (:wifesname, '19900404', 3); exec sql insert into meskes(name, born, age, married, children) values ('Michael', 19660117, 33, '19900404', 3); exec sql insert into meskes(name, born, age) values ('Carsten', 19910103, 8); exec sql insert into meskes(name, born, age) values ('Marc', 19930907, 5); @@ -78,7 +78,7 @@ exec sql end declare section; exec sql declare prep cursor for MM; strcpy(msg, "open"); - exec sql open prep using :testname; + exec sql open prep using :wifesname; exec sql whenever not found do break; -- GitLab