mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
*** empty log message ***
This commit is contained in:
parent
68be513f8b
commit
5933f1857f
@ -799,5 +799,15 @@ Tue Feb 15 11:14:07 CET 2000
|
|||||||
|
|
||||||
- Synced keyword.c.
|
- Synced keyword.c.
|
||||||
- Synced preproc.y with gram.y.
|
- Synced preproc.y with gram.y.
|
||||||
|
|
||||||
|
Tue Feb 15 17:39:19 CET 2000
|
||||||
|
|
||||||
|
- Do only write the first 70 bytes of the error message to the
|
||||||
|
sqlca structure since there are only 70 bytes free space.
|
||||||
- Set library version to 3.0.10.
|
- Set library version to 3.0.10.
|
||||||
|
|
||||||
|
Wed Feb 16 11:57:02 CET 2000
|
||||||
|
|
||||||
|
- Fixed library to be able to input complete arrays.
|
||||||
|
- Set library version to 3.1.0.
|
||||||
- Set ecpg version to 2.7.0.
|
- Set ecpg version to 2.7.0.
|
||||||
|
@ -13,7 +13,8 @@ stderr. Instead it should be listed as a warning.
|
|||||||
The error handling has to be improved by adding additional error-rules to
|
The error handling has to be improved by adding additional error-rules to
|
||||||
the parser.
|
the parser.
|
||||||
|
|
||||||
it would be nice to be able to use :var[:index] as cvariable for an array var
|
it would be nice to be able to use :var[:index] or :var[<integer>] as
|
||||||
|
cvariable for an array var
|
||||||
|
|
||||||
How can one insert arrays from c variables?
|
How can one insert arrays from c variables?
|
||||||
|
|
||||||
|
@ -6,13 +6,13 @@
|
|||||||
# Copyright (c) 1994, Regents of the University of California
|
# Copyright (c) 1994, Regents of the University of California
|
||||||
#
|
#
|
||||||
# IDENTIFICATION
|
# IDENTIFICATION
|
||||||
# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.56 2000/01/18 13:03:47 meskes Exp $
|
# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.57 2000/02/16 11:52:24 meskes Exp $
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
NAME= ecpg
|
NAME= ecpg
|
||||||
SO_MAJOR_VERSION= 3
|
SO_MAJOR_VERSION= 3
|
||||||
SO_MINOR_VERSION= 0.10
|
SO_MINOR_VERSION= 1.0
|
||||||
|
|
||||||
SRCDIR= @top_srcdir@
|
SRCDIR= @top_srcdir@
|
||||||
include $(SRCDIR)/Makefile.global
|
include $(SRCDIR)/Makefile.global
|
||||||
|
@ -414,7 +414,7 @@ ECPGexecute(struct statement * stmt)
|
|||||||
char *mallocedval = NULL;
|
char *mallocedval = NULL;
|
||||||
char *tobeinserted = NULL;
|
char *tobeinserted = NULL;
|
||||||
char *p;
|
char *p;
|
||||||
char buff[20];
|
char buff[20];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some special treatment is needed for records since we want
|
* Some special treatment is needed for records since we want
|
||||||
@ -450,49 +450,132 @@ ECPGexecute(struct statement * stmt)
|
|||||||
{
|
{
|
||||||
switch (var->type)
|
switch (var->type)
|
||||||
{
|
{
|
||||||
|
int element;
|
||||||
|
|
||||||
case ECPGt_short:
|
case ECPGt_short:
|
||||||
sprintf(buff, "%d", *(short *) var->value);
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%d,", ((short *) var->value)[element]);
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_int:
|
case ECPGt_int:
|
||||||
sprintf(buff, "%d", *(int *) var->value);
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%d,", ((int *) var->value)[element]);
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_unsigned_short:
|
case ECPGt_unsigned_short:
|
||||||
sprintf(buff, "%d", *(unsigned short *) var->value);
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%d,", ((unsigned short *) var->value)[element]);
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_unsigned_int:
|
case ECPGt_unsigned_int:
|
||||||
sprintf(buff, "%d", *(unsigned int *) var->value);
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%d,", ((unsigned int *) var->value)[element]);
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_long:
|
case ECPGt_long:
|
||||||
sprintf(buff, "%ld", *(long *) var->value);
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%ld,", ((long *) var->value)[element]);
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_unsigned_long:
|
case ECPGt_unsigned_long:
|
||||||
sprintf(buff, "%ld", *(unsigned long *) var->value);
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%ld,", ((unsigned long *) var->value)[element]);
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_float:
|
case ECPGt_float:
|
||||||
sprintf(buff, "%.14g", *(float *) var->value);
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%.14g,", ((float *) var->value)[element]);
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_double:
|
case ECPGt_double:
|
||||||
sprintf(buff, "%.14g", *(double *) var->value);
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%.14g,", ((double *) var->value)[element]);
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_bool:
|
case ECPGt_bool:
|
||||||
sprintf(buff, "'%c'", (*(char *) var->value ? 't' : 'f'));
|
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
|
||||||
tobeinserted = buff;
|
return false;
|
||||||
|
|
||||||
|
sprintf(mallocedval, "%s", (var->arrsize > 1) ? "'{" : "");
|
||||||
|
|
||||||
|
for (element = 0; element < var->arrsize; element++)
|
||||||
|
sprintf(mallocedval + strlen(mallocedval), "%c,", (((char *) var->value)[element]) ? 't' : 'f');
|
||||||
|
|
||||||
|
sprintf(mallocedval + strlen(mallocedval) - 1, "%s", (var->arrsize > 1) ? "}'" : "");
|
||||||
|
|
||||||
|
tobeinserted = mallocedval;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ECPGt_char:
|
case ECPGt_char:
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
all: stp.so test1 test2 test3 test4 test5 perftest
|
all: stp.so test1 test2 test3 test4 test5 perftest
|
||||||
|
|
||||||
#LDFLAGS=-g -I /usr/local/pgsql/include -L/usr/local/pgsql/lib -lecpg -lpq -lcrypt
|
#LDFLAGS=-g -I /usr/local/pgsql/include -L/usr/local/pgsql/lib -lecpg -lpq -lcrypt
|
||||||
LDFLAGS=-g -I../include -I/usr/include/postgresql -L/usr/lib/postgresql -L../lib -lecpg -lpq -lcrypt
|
#LDFLAGS=-g -I../include -I/usr/include/postgresql -L/usr/lib/postgresql -L../lib -lecpg -lpq -lcrypt
|
||||||
#LDFLAGS=-g -I/usr/include/postgresql -lecpg -lpq -lcrypt
|
LDFLAGS=-g -I/usr/include/postgresql -lecpg -lpq -lcrypt
|
||||||
|
|
||||||
#ECPG=/usr/local/pgsql/bin/ecpg
|
#ECPG=/usr/local/pgsql/bin/ecpg
|
||||||
ECPG=../preproc/ecpg -I../include
|
ECPG=../preproc/ecpg -I../include
|
||||||
|
@ -18,7 +18,7 @@ void warn(void)
|
|||||||
exec sql include sqlca;
|
exec sql include sqlca;
|
||||||
|
|
||||||
/* comment */
|
/* comment */
|
||||||
exec sql define AMOUNT 4;
|
exec sql define AMOUNT 6;
|
||||||
|
|
||||||
exec sql type intarray is int[AMOUNT];
|
exec sql type intarray is int[AMOUNT];
|
||||||
exec sql type string is char(8);
|
exec sql type string is char(8);
|
||||||
@ -97,12 +97,18 @@ exec sql end declare section;
|
|||||||
printf("Database: mm\n");
|
printf("Database: mm\n");
|
||||||
for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
|
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]);
|
exec sql begin declare section;
|
||||||
amount[i]+=1000;
|
char n[8], l = letter[i][0];
|
||||||
}
|
int a = amount[i];
|
||||||
|
exec sql end declare section;
|
||||||
|
|
||||||
strcpy(msg, "insert");
|
strncpy(n, name[i], 8);
|
||||||
exec sql at pm insert into "Test" (name, amount, letter) values (:name, :amount, :letter);
|
printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l);
|
||||||
|
amount[i]+=1000;
|
||||||
|
|
||||||
|
strcpy(msg, "insert");
|
||||||
|
exec sql at pm insert into "Test" (name, amount, letter) values (:n, :a, :l);
|
||||||
|
}
|
||||||
|
|
||||||
strcpy(msg, "select");
|
strcpy(msg, "select");
|
||||||
exec sql at pm select * into :name, :amount, :letter from "Test";
|
exec sql at pm select * into :name, :amount, :letter from "Test";
|
||||||
|
@ -30,7 +30,7 @@ EXEC SQL END DECLARE SECTION;
|
|||||||
|
|
||||||
EXEC SQL INSERT INTO test(f,i,a) VALUES(404.90,1,'{0,1,2,3,4,5,6,7,8,9}');
|
EXEC SQL INSERT INTO test(f,i,a) VALUES(404.90,1,'{0,1,2,3,4,5,6,7,8,9}');
|
||||||
|
|
||||||
/* EXEC SQL INSERT INTO test(f,i,a) VALUES(140787.0,2,:a);*/
|
EXEC SQL INSERT INTO test(f,i,a) VALUES(140787.0,2,:a);
|
||||||
|
|
||||||
EXEC SQL COMMIT;
|
EXEC SQL COMMIT;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user