From 9b0e20574b6e57e6eeb4cb2d70eb64e1a1335023 Mon Sep 17 00:00:00 2001 From: Michael Meskes 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 114500850c..f6e425b958 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 b74febcd1c..0643571a01 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 80ac7444b2..26e1cf3f90 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 071dc4731d..1585e395b0 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -248,7 +248,8 @@ cppline {space}*#.*(\\{space}*\n)*\n* } {xqstop} { BEGIN(SQL); - yylval.str = mm_strdup(scanstr(literal)); + /* yylval.str = mm_strdup(scanstr(literal));*/ + yylval.str = mm_strdup(literal); return SCONST; } {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 bed83f9638..9f7e2de52e 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