]> granicus.if.org Git - postgresql/commitdiff
*** empty log message ***
authorMichael Meskes <meskes@postgresql.org>
Sat, 20 Mar 1999 19:46:54 +0000 (19:46 +0000)
committerMichael Meskes <meskes@postgresql.org>
Sat, 20 Mar 1999 19:46:54 +0000 (19:46 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/include/ecpgerrno.h
src/interfaces/ecpg/include/ecpglib.h
src/interfaces/ecpg/lib/ecpglib.c
src/interfaces/ecpg/preproc/keywords.c
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/preproc.y

index 1ecce5d4718cb2a2eb31c54a06213d2e36d9bcc2..36b592670cbf3180f56d8d6f712f60c2a4c191cb 100644 (file)
@@ -519,5 +519,21 @@ Thu Mar 18 18:57:31 CET 1999
 
        - Synced preproc.y with gram.y.
        - Added '%' operator.
+
+Thu Mar 18 19:44:10 CET 1999
+
+       - Added ECPGstatus() function.
+       - Cleaned up some error messages.
+
+Fri Mar 19 08:49:32 CET 1999
+
+       - Synced preproc.y with gram.y.
+       - Synced keywords.c.
+       - Synced pgc.l with scan.l.
+
+Sat Mar 20 19:57:42 CET 1999
+
+       - Synced preproc.y with gram.y.
+       - Fixed handling of ';' character.
        - Set library version to 3.0.0
        - Set ecpg version to 2.6.0
index 5fa7e704715773cc3dd3759eaec3a465c55f5103..a3bc132497d6bacf39f89a76ad8961d7a4a0e144 100644 (file)
@@ -23,8 +23,6 @@
 #define ECPG_CONVERT_BOOL      -207
 #define ECPG_EMPTY             -208
 
-#define ECPG_UNDECLARED_CURSOR -210
-
 #define ECPG_NO_CONN           -220
 #define ECPG_NOT_CONN          -221
 
index 98153747f6f8f37a954da5cd402e9f07036c8759..a5af239f79059c42867d4f860a33a8026444a91c 100644 (file)
@@ -6,6 +6,7 @@ extern          "C"
 #endif
 
        void            ECPGdebug(int, FILE *);
+       bool            ECPGstatus(int, const char *);
        bool            ECPGsetconn(int, const char *);
        bool            ECPGconnect(int, const char *, const char *, const char *, const char *);
        bool            ECPGdo(int, const char *, char *,...);
index 742cc5a1d8d054c30b06018e51e68c7abc570117..4d13f6dcb1cbc41513e567747e221f4e7600ae78 100644 (file)
@@ -183,7 +183,7 @@ ecpg_alloc(long size, int lineno)
        if (!new)
        {
                ECPGlog("out of memory\n");
-               register_error(ECPG_OUT_OF_MEMORY, "out of memory in line %d", lineno);
+               register_error(ECPG_OUT_OF_MEMORY, "Out of memory in line %d", lineno);
                return NULL;
        }
        
@@ -199,7 +199,7 @@ ecpg_strdup(const char *string, int lineno)
        if (!new)
        {
                ECPGlog("out of memory\n");
-               register_error(ECPG_OUT_OF_MEMORY, "out of memory in line %d", lineno);
+               register_error(ECPG_OUT_OF_MEMORY, "Out of memory in line %d", lineno);
                return NULL;
        }
 
@@ -336,7 +336,7 @@ create_statement(int lineno, struct connection *connection, struct statement **
                        if (var->pointer == NULL)
                        {
                                ECPGlog("create_statement: invalid statement name\n");
-                               register_error(ECPG_INVALID_STMT, "Invalid statement name in line %d", lineno);
+                               register_error(ECPG_INVALID_STMT, "Invalid statement name in line %d.", lineno);
                                free(var);
                                return false;
                        }
@@ -387,7 +387,7 @@ next_insert(char *text)
 static bool
 ECPGexecute(struct statement * stmt)
 {
-       bool            status = false;
+       bool        status = false;
        char       *copiedquery;
        PGresult   *results;
        PGnotify   *notify;
@@ -637,7 +637,7 @@ ECPGexecute(struct statement * stmt)
        {
                if ((results = PQexec(stmt->connection->connection, "begin transaction")) == NULL)
                {
-                       register_error(ECPG_TRANS, "Error starting transaction line %d.", stmt->lineno);
+                       register_error(ECPG_TRANS, "Error in transaction processing line %d.", stmt->lineno);
                        return false;
                }
                PQclear(results);
@@ -708,7 +708,7 @@ ECPGexecute(struct statement * stmt)
                                        /*
                                         * allocate memory for NULL pointers
                                         */                                      
-                                       if (var->arrsize == 0 || var->varcharsize == 0)
+                                       if ((var->arrsize == 0 || var->varcharsize == 0) && var->value == NULL)
                                        {
                                            int len = 0;
                                            
@@ -716,34 +716,28 @@ ECPGexecute(struct statement * stmt)
                                            {
                                                case ECPGt_char:
                                                case ECPGt_unsigned_char:
-                                                       if (var->value == NULL)
+                                                       var->varcharsize = 0;
+                                                       /* check strlen for each tuple */
+                                                       for (act_tuple = 0; act_tuple < ntuples; act_tuple++)
                                                        {
-                                                               var->varcharsize = 0;
-                                                               /* check strlen for each tuple */
-                                                               for (act_tuple = 0; act_tuple < ntuples; act_tuple++)
-                                                               {
-                                                                       int len = strlen(PQgetvalue(results, act_tuple, act_field)) + 1;
-                                                                       
-                                                                       if (len > var->varcharsize)
-                                                                               var->varcharsize = len;
-                                                               }
-                                                               var->offset *= var->varcharsize;
-                                                               len = var->offset * ntuples;
+                                                               int len = strlen(PQgetvalue(results, act_tuple, act_field)) + 1;
+                                                               
+                                                               if (len > var->varcharsize)
+                                                                       var->varcharsize = len;
                                                        }
+                                                       var->offset *= var->varcharsize;
+                                                       len = var->offset * ntuples;
                                                        break;
                                                case ECPGt_varchar:
-                                                       if (var->value == NULL)
-                                                               len = ntuples * (var->varcharsize + sizeof (int));
+                                                       len = ntuples * (var->varcharsize + sizeof (int));
                                                        break;                                                                      
                                                default:
-                                                       if (var->value == NULL)
-                                                               len = var->offset * ntuples;
+                                                       len = var->offset * ntuples;
                                                        break;
                                            }
-                                           
-                                           var->pointer = (void *) ecpg_alloc(len, stmt->lineno);
-                                           var->value = (void **) var->pointer;
-                                           add_mem((void *) var->value, stmt->lineno);
+                                           var->value = (void *) ecpg_alloc(len, stmt->lineno);
+                                            *((void **) var->pointer) = var->value;
+                                            add_mem(var->value, stmt->lineno);
                                        }
                                                                        
                                        for (act_tuple = 0; act_tuple < ntuples && status; act_tuple++)
@@ -1004,7 +998,7 @@ ECPGexecute(struct statement * stmt)
                        case PGRES_BAD_RESPONSE:
                                ECPGlog("ECPGexecute line %d: Error: %s",
                                                stmt->lineno, PQerrorMessage(stmt->connection->connection));
-                               register_error(ECPG_PGSQL, "Error: %s line %d.",
+                               register_error(ECPG_PGSQL, "Postgres error: %s line %d.",
                                                           PQerrorMessage(stmt->connection->connection), stmt->lineno);
                                status = false;
                                break;
@@ -1019,7 +1013,8 @@ ECPGexecute(struct statement * stmt)
                        default:
                                ECPGlog("ECPGexecute line %d: Got something else, postgres error.\n",
                                                stmt->lineno);
-                               register_error(ECPG_PGSQL, "Postgres error line %d.", stmt->lineno);
+                               register_error(ECPG_PGSQL, "Postgres error: %s line %d.", 
+                                                          PQerrorMessage(stmt->connection->connection), stmt->lineno);
                                status = false;
                                break;
                }
@@ -1046,7 +1041,7 @@ ECPGdo(int lineno, const char *connection_name, char *query,...)
 
        if (con == NULL)
        {
-               register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name, lineno);
+               register_error(ECPG_NO_CONN, "No such connection %s in line %d.", connection_name, lineno);
                return (false);
        }
                
@@ -1059,13 +1054,34 @@ ECPGdo(int lineno, const char *connection_name, char *query,...)
        if (con == NULL || con->connection == NULL)
        {
                ECPGlog("ECPGdo: not connected to %s\n", con->name);
-               register_error(ECPG_NOT_CONN, "Not connected in line %d", lineno);
+               register_error(ECPG_NOT_CONN, "Not connected in line %d.", lineno);
                return false;
        }
 
        return (ECPGexecute(stmt));
 }
 
+bool
+ECPGstatus(int lineno, const char *connection_name)
+{
+       struct connection *con = get_connection(connection_name);
+
+       if (con == NULL)
+       {
+               register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name, lineno);
+               return (false);
+       }
+               
+       /* are we connected? */
+       if (con->connection == NULL)
+       {
+               ECPGlog("ECPGdo: not connected to %s\n", con->name);
+               register_error(ECPG_NOT_CONN, "Not connected in line %d", lineno);
+               return false;
+       }
+
+       return (true);
+}
 
 bool
 ECPGtrans(int lineno, const char *connection_name, const char *transaction)
index bcbb3242de9bca202dd9f75db95d0561c00b2886..dbfd7002e64ebc40a001e6049db15b9f3df8c771 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.11 1999/02/20 07:01:00 scrappy Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.12 1999/03/20 19:46:53 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -188,7 +188,6 @@ static ScanKeyword ScanKeywords[] = {
        {"procedure", PROCEDURE},
        {"public", PUBLIC},
        {"read", READ},
-       {"recipe", RECIPE},
        {"references", REFERENCES},
        {"relative", RELATIVE},
        {"rename", RENAME},
index 82369690763a1ad45c73145fb02866498031edf2..ab75a552cf3de63433ef00d07315326af2a73011 100644 (file)
@@ -134,8 +134,8 @@ identifier          {letter}{letter_or_digit}*
 
 typecast               "::"
 
-self                   [,()\[\].$\:\+\-\*\/\<\>\=\|]
-op_and_self            [\~\!\@\#\%\^\&\|\`\?\$\:\+\-\*\/\<\>\=]
+self                   [,()\[\].;$\:\+\-\*\/\%\<\>\=\|]
+op_and_self            [\~\!\@\#\^\&\|\\1c?\$\:\+\-\*\/\%\<\>\=]
 operator               {op_and_self}+
 
 xmstop                 -
@@ -299,7 +299,15 @@ cppline            {space}*#.*(\\{space}*\n)*\n*
                                        BEGIN(xm);
                                        return yytext[0];
                                }
-<SQL>{self}                            {       return yytext[0]; }
+<SQL>{self}                    { /* 
+                                  * We may find a ';' inside a structure
+                                  * definition in a TYPE or VAR statement.
+                                  * This is not an EOL marker.
+                                  */
+                                 if (yytext[0] == ';' && struct_level == 0)
+                                        BEGIN C;
+                                 return yytext[0];
+                               }
 <SQL>{operator}/-[\.0-9]       {
                                        yylval.str = mm_strdup((char*)yytext);
                                        return Op;
@@ -510,14 +518,6 @@ cppline            {space}*#.*(\\{space}*\n)*\n*
                                        }
                                }
 <SQL>{space}                   { /* ignore */ }
-<SQL>";"                       { /* 
-                                  * We may find a ';' inside a structure
-                                  * definition in a TYPE or VAR statement.
-                                  * This is not a EOL marker.
-                                  */
-                                 if (struct_level == 0)
-                                        BEGIN C;
-                                 return SQL_SEMI; }
 <SQL>{other}                   { return yytext[0]; }
 <C>{exec}{space}{sql}          { BEGIN SQL; return SQL_START; }
 <C>{ccomment}                  { /* ignore */ } 
index f2728af7ed77131c336ea2fda7883a3654c422c9..820a941719862ca0abc6cc2d4e3437ab0d1bc513 100644 (file)
@@ -652,7 +652,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
 %token         SQL_FOUND SQL_FREE SQL_GO SQL_GOTO
 %token         SQL_IDENTIFIED SQL_IMMEDIATE SQL_INDICATOR SQL_INT SQL_LONG
 %token         SQL_OPEN SQL_PREPARE SQL_RELEASE SQL_REFERENCE
-%token         SQL_SECTION SQL_SEMI SQL_SHORT SQL_SIGNED SQL_SQLERROR SQL_SQLPRINT
+%token         SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQLERROR SQL_SQLPRINT
 %token         SQL_SQLWARNING SQL_START SQL_STOP SQL_STRUCT SQL_UNSIGNED
 %token         SQL_VAR SQL_WHENEVER
 
@@ -710,7 +710,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
                 LANCOMPILER, LIMIT, LISTEN, UNLISTEN, LOAD, LOCATION, LOCK_P, MAXVALUE, MINVALUE, MOVE,
                 NEW,  NOCREATEDB, NOCREATEUSER, NONE, NOTHING, NOTIFY, NOTNULL,
                OFFSET, OIDS, OPERATOR, PASSWORD, PROCEDURAL,
-                RECIPE, RENAME, RESET, RETURNS, ROW, RULE,
+                RENAME, RESET, RETURNS, ROW, RULE,
                 SERIAL, SEQUENCE, SETOF, SHOW, START, STATEMENT, STDIN, STDOUT, TRUSTED,
                 UNLISTEN, UNTIL, VACUUM, VALID, VERBOSE, VERSION
 
@@ -734,6 +734,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
 %left          Op                              /* multi-character ops and user-defined operators */
 %nonassoc      NOTNULL
 %nonassoc      ISNULL
+%nonassoc      NULL_P
 %nonassoc      IS
 %left          '+' '-'
 %left          '*' '/' '%'
@@ -839,8 +840,8 @@ prog: statements;
 statements: /* empty */
        | statements statement
 
-statement: ecpgstart opt_at stmt SQL_SEMI { connection = NULL; }
-       | ecpgstart stmt SQL_SEMI
+statement: ecpgstart opt_at stmt ';' { connection = NULL; }
+       | ecpgstart stmt ';'
        | ECPGDeclaration
        | c_thing                       { fprintf(yyout, "%s", $1); free($1); }
        | cpp_line                      { fprintf(yyout, "%s", $1); free($1); }
@@ -3587,6 +3588,8 @@ a_expr:  attr opt_indirection
                                {       $$ = cat3_str($1, make1_str(">"), $3); }
                | a_expr '=' NULL_P
                                 {       $$ = cat2_str($1, make1_str("= NULL")); }
+               | NULL_P '=' a_expr
+                                {       $$ = cat2_str(make1_str("= NULL"), $3); }
                | a_expr '=' a_expr
                                {       $$ = cat3_str($1, make1_str("="), $3); }
 /* not possible in embedded sql                | ':' a_expr
@@ -4798,9 +4801,9 @@ ECPGDeclaration: sql_startdeclare
                output_line_number();
        }
 
-sql_startdeclare : ecpgstart BEGIN_TRANS DECLARE SQL_SECTION SQL_SEMI {}
+sql_startdeclare : ecpgstart BEGIN_TRANS DECLARE SQL_SECTION ';' {}
 
-sql_enddeclare: ecpgstart END_TRANS DECLARE SQL_SECTION SQL_SEMI {}
+sql_enddeclare: ecpgstart END_TRANS DECLARE SQL_SECTION ';' {}
 
 variable_declarations: /* empty */
        {
@@ -5389,7 +5392,7 @@ sql_declaration: ctype
                actual_type[struct_level].type_dimension = $1.type_dimension;
                actual_type[struct_level].type_index = $1.type_index;
        }
-       sql_variable_list SQL_SEMI
+       sql_variable_list ';'
        {
                $$ = cat3_str($1.type_str, $3, make1_str(";"));
        }