aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1999-01-31 19:56:28 +0000
committerMarc G. Fournier <scrappy@hub.org>1999-01-31 19:56:28 +0000
commit91fed81c7762a56c536ce65ab8fd52bd8449a8e7 (patch)
tree73f110da1f8b5f755a83582fb1d1e84b8f1227ef /src
parentf7c4ec5085b1fe2ae9e5d924702a502748c41acc (diff)
downloadpostgresql-91fed81c7762a56c536ce65ab8fd52bd8449a8e7.tar.gz
postgresql-91fed81c7762a56c536ce65ab8fd52bd8449a8e7.zip
From: Michael Meskes <Michael.Meskes@usa.net>
+ + Wed Jan 27 12:42:22 CET 1999 + + - Fixed bug that caused ecpg to lose 'goto' information. + - Set ecpg version to 2.4.7 + + Fri Jan 29 18:03:52 CET 1999 + + - Fixed bug that caused 'enum' to be rejected in pure C code. + - Fixed bug that caused function names to be translated to lower case. + - Set ecpg version to 2.4.8 +
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/ecpg/ChangeLog12
-rw-r--r--src/interfaces/ecpg/preproc/Makefile2
-rw-r--r--src/interfaces/ecpg/preproc/pgc.l36
-rw-r--r--src/interfaces/ecpg/preproc/preproc.y20
-rw-r--r--src/interfaces/ecpg/test/header_test.h4
5 files changed, 50 insertions, 24 deletions
diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 9675f482272..9e4389dac27 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -383,3 +383,15 @@ Thu Jan 21 21:29:00 CET 1999
- Set library version to 2.6.3
- Added 'exec sql whenever sqlwarning'.
- Set ecpg version to 2.4.6
+
+Wed Jan 27 12:42:22 CET 1999
+
+ - Fixed bug that caused ecpg to lose 'goto' information.
+ - Set ecpg version to 2.4.7
+
+Fri Jan 29 18:03:52 CET 1999
+
+ - Fixed bug that caused 'enum' to be rejected in pure C code.
+ - Fixed bug that caused function names to be translated to lower case.
+ - Set ecpg version to 2.4.8
+
diff --git a/src/interfaces/ecpg/preproc/Makefile b/src/interfaces/ecpg/preproc/Makefile
index 2a3f5b26335..7d13a7a98ad 100644
--- a/src/interfaces/ecpg/preproc/Makefile
+++ b/src/interfaces/ecpg/preproc/Makefile
@@ -3,7 +3,7 @@ include $(SRCDIR)/Makefile.global
MAJOR_VERSION=2
MINOR_VERSION=4
-PATCHLEVEL=6
+PATCHLEVEL=8
CFLAGS+=-I../include -DMAJOR_VERSION=$(MAJOR_VERSION) \
-DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \
diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l
index 2af1e3e522b..e6ef819a595 100644
--- a/src/interfaces/ecpg/preproc/pgc.l
+++ b/src/interfaces/ecpg/preproc/pgc.l
@@ -333,22 +333,23 @@ cppline {space}*#.*(\\{space}*\n)*\n*
<SQL>{identifier}/{space}*-{number} {
int i;
ScanKeyword *keyword;
+ char lower_text[NAMEDATALEN];
BEGIN(xm);
- for(i = 0; yytext[i]; i++)
- if (isascii((unsigned char)yytext[i]) && isupper(yytext[i]))
- yytext[i] = tolower(yytext[i]);
-
- if (i >= NAMEDATALEN)
- yytext[NAMEDATALEN-1] = '\0';
-
- keyword = ScanKeywordLookup((char*)yytext);
+ /* this should leave the last byte set to '\0' */
+ strncpy(lower_text, yytext, NAMEDATALEN-1);
+ for(i = 0; lower_text[i]; i++)
+ if (isascii((unsigned char)lower_text[i]) && isupper(lower_text[i]))
+ lower_text[i] = tolower(lower_text[i]);
+
+printf("yyt= %s, lt = %s\n", yytext, lower_text);
+ keyword = ScanKeywordLookup((char*)lower_text);
if (keyword != NULL) {
return keyword->value;
}
else
{
- keyword = ScanECPGKeywordLookup((char*)yytext);
+ keyword = ScanECPGKeywordLookup((char*)lower_text);
if (keyword != NULL) {
return keyword->value;
}
@@ -475,21 +476,22 @@ cppline {space}*#.*(\\{space}*\n)*\n*
<SQL>{identifier} {
int i;
ScanKeyword *keyword;
+ char lower_text[NAMEDATALEN];
- for(i = 0; yytext[i]; i++)
- if (isascii((unsigned char)yytext[i]) && isupper(yytext[i]))
- yytext[i] = tolower(yytext[i]);
-
- if (i >= NAMEDATALEN)
- yytext[NAMEDATALEN-1] = '\0';
+ /* this should leave the last byte set to '\0' */
+ strncpy(lower_text, yytext, NAMEDATALEN-1);
+ for(i = 0; lower_text[i]; i++)
+ if (isascii((unsigned char)lower_text[i]) && isupper(lower_text[i]))
+ lower_text[i] = tolower(lower_text[i]);
- keyword = ScanKeywordLookup((char*)yytext);
+printf("yyt= %s, lt = %s\n", yytext, lower_text);
+ keyword = ScanKeywordLookup((char*)lower_text);
if (keyword != NULL) {
return keyword->value;
}
else
{
- keyword = ScanECPGKeywordLookup((char*)yytext);
+ keyword = ScanECPGKeywordLookup((char*)lower_text);
if (keyword != NULL) {
return keyword->value;
}
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index 0e34aa36dcd..cda77f5281c 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -521,7 +521,8 @@ output_statement(char * stmt, int mode)
/* special embedded SQL token */
%token SQL_BREAK SQL_CALL SQL_CONNECT SQL_CONNECTION SQL_CONTINUE
%token SQL_DISCONNECT SQL_FOUND SQL_GO SQL_GOTO
-%token SQL_IDENTIFIED SQL_IMMEDIATE SQL_INDICATOR SQL_OPEN SQL_RELEASE
+%token SQL_IDENTIFIED SQL_IMMEDIATE SQL_INDICATOR SQL_OPEN
+%token SQL_PREPARE SQL_RELEASE
%token SQL_SECTION SQL_SEMI SQL_SQLERROR SQL_SQLPRINT SQL_START
%token SQL_STOP SQL_WHENEVER SQL_SQLWARNING
@@ -813,6 +814,9 @@ stmt: AddAttrStmt { output_statement($1, 0); }
output_line_number();
free($1);
}
+ | ECPGPrepare {
+ yyerror("PREPARE is not supported yet.");
+ }
/*
* We start with a lot of stuff that's very similar to the backend's parsing
@@ -4671,12 +4675,12 @@ action : SQL_CONTINUE {
}
| SQL_GOTO name {
$<action>$.code = W_GOTO;
- $<action>$.command = $2;
+ $<action>$.command = strdup($2);
$<action>$.str = cat2_str(make1_str("goto "), $2);
}
| SQL_GO TO name {
$<action>$.code = W_GOTO;
- $<action>$.command = $3;
+ $<action>$.command = strdup($3);
$<action>$.str = cat2_str(make1_str("goto "), $3);
}
| DO name '(' dotext ')' {
@@ -4695,8 +4699,15 @@ action : SQL_CONTINUE {
$<action>$.str = cat2_str(make1_str("call"), mm_strdup($<action>$.command));
}
-/* some other stuff for ecpg */
+/*
+ * As long as the prepare statement in not supported by the backend, we will
+ * try to simulate it here so we get dynamic SQL
+ */
+ECPGPrepare: SQL_PREPARE name FROM name
+ {
+ }
+/* some other stuff for ecpg */
ecpg_expr: attr opt_indirection
{
$$ = cat2_str($1, $2);
@@ -5032,6 +5043,7 @@ c_anything: IDENT { $$ = $1; }
| S_CHAR { $$ = make1_str("char"); }
| S_CONST { $$ = make1_str("const"); }
| S_DOUBLE { $$ = make1_str("double"); }
+ | S_ENUM { $$ = make1_str("enum"); }
| S_EXTERN { $$ = make1_str("extern"); }
| S_FLOAT { $$ = make1_str("float"); }
| S_INT { $$ = make1_str("int"); }
diff --git a/src/interfaces/ecpg/test/header_test.h b/src/interfaces/ecpg/test/header_test.h
index 5050113e184..d6a84322b17 100644
--- a/src/interfaces/ecpg/test/header_test.h
+++ b/src/interfaces/ecpg/test/header_test.h
@@ -1,9 +1,9 @@
exec sql include sqlca;
-exec sql whenever sqlerror do print_and_stop();
+exec sql whenever sqlerror do PrintAndStop();
exec sql whenever sqlwarning do warn();
-void print_and_stop(void)
+void PrintAndStop(void)
{
sqlprint();
exit(-1);