]> granicus.if.org Git - postgresql/commitdiff
From: Michael Meskes <Michael.Meskes@usa.net>
authorMarc G. Fournier <scrappy@hub.org>
Sun, 31 Jan 1999 19:56:28 +0000 (19:56 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Sun, 31 Jan 1999 19:56:28 +0000 (19:56 +0000)
+
+ 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
+

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/Makefile
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/test/header_test.h

index 9675f4822728417e230a1959306d953aecfb1a91..9e4389dac27d666935510498687f46bb871ee984 100644 (file)
@@ -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
index 2a3f5b26335be9f50f772ede6230fc6bbdb11919..7d13a7a98ad813aca25e6ce6af3beb4292bf6d40 100644 (file)
@@ -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) \
index 2af1e3e522befd03a2fea0062ee24f2bb2b2861f..e6ef819a595821df005ed8deea562917ca98ac3d 100644 (file)
@@ -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;
                                                }
index 0e34aa36dcdb7eba0ca08efe27a1cd1df1baafcf..cda77f5281c4d7c21a567ab54b1c67f3314167fc 100644 (file)
@@ -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"); }
index 5050113e1844d502eab558de77744c67c9f18b9f..d6a84322b175a40e94e1ae13708d5b7f656474a2 100644 (file)
@@ -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);