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
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:
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];
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;
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;
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");
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;
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;
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);
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;