- Fixed bug in a connect statement using varchars.
authorMichael Meskes <meskes@postgresql.org>
Fri, 22 Dec 2000 12:43:14 +0000 (12:43 +0000)
committerMichael Meskes <meskes@postgresql.org>
Fri, 22 Dec 2000 12:43:14 +0000 (12:43 +0000)
- Synced parser.

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/test/Makefile
src/interfaces/ecpg/test/test4.pgc

index f16ca0175b12c49ac2b6fb84ea93fc8c96aa83be..d6906f2b6fe1949c50f5a474076661cbdd3bb8f9 100644 (file)
@@ -1029,5 +1029,10 @@ Mon Dec 18 12:27:52 CET 2000
    - Synced gram.y and preproc.y.
    - Synced keyword.c.
    - Added several small patches from Christof.
+
+Fri Dec 22 13:33:31 CET 2000
+
+   - Fixed bug in a connect statement using varchars.
+   - Synced gram.y and preproc.y.   
    - Set ecpg version to 2.8.0. 
    - Set library version to 3.2.0.
index a29dd22948a86809064f3c97ed80175d57a67e2e..2312d0ccc742856be446e2495c7ce656cc92000c 100644 (file)
@@ -313,7 +313,7 @@ make_name(void)
 %type  <str>    index_list func_index index_elem opt_class access_method_clause
 %type  <str>    index_opt_unique IndexStmt func_return ConstInterval
 %type  <str>    func_args_list func_args opt_with ProcedureStmt def_arg
-%type  <str>    def_elem def_list definition def_name def_type DefineStmt
+%type  <str>    def_elem def_list definition DefineStmt
 %type  <str>    opt_instead event event_object RuleActionList opt_using
 %type  <str>   RuleActionStmtOrEmpty RuleActionMulti func_as reindex_type
 %type  <str>    RuleStmt opt_column opt_name oper_argtypes sysid_clause
@@ -1335,7 +1335,7 @@ OptSeqElem:  CACHE IntConst
  *****************************************************************************/
 
 CreatePLangStmt:  CREATE PLangTrusted opt_procedural LANGUAGE StringConst 
-           HANDLER def_name LANCOMPILER StringConst
+           HANDLER func_name LANCOMPILER StringConst
            {
                $$ = cat_str(9, make_str("create"), $2, $3, make_str("language"), $5, make_str("handler"), $7, make_str("langcompiler"), $9);
            }
@@ -1482,23 +1482,20 @@ DropTrigStmt:  DROP TRIGGER name ON relation_name
  *
  *****************************************************************************/
 
-DefineStmt:  CREATE def_type def_name definition
-               {
-                   $$ = cat_str(3, make_str("create"), $2, $3, $4);
-               }
-       ;
-
-def_type:  OPERATOR        { $$ = make_str("operator"); }
-       | TYPE_P    { $$ = make_str("type"); }
-       | AGGREGATE { $$ = make_str("aggregate"); }
+DefineStmt:  CREATE AGGREGATE func_name definition
+       {
+           $$ = cat_str(3, make_str("create aggregate"), $3, $4);
+       }
+                | CREATE OPERATOR all_Op definition
+       {
+           $$ = cat_str(3, make_str("create operator"), $3, $4);
+       }
+                | CREATE TYPE_P name definition  
+       {
+           $$ = cat_str(3, make_str("create type"), $3, $4);
+       }
        ;
 
-def_name:  PROCEDURE       { $$ = make_str("procedure"); }
-       | JOIN      { $$ = make_str("join"); }
-       | all_Op    { $$ = $1; }
-       | ColId     { $$ = $1; }
-       ;
-
 definition:  '(' def_list ')'              { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
        ;
 
@@ -1506,17 +1503,13 @@ def_list:  def_elem                 { $$ = $1; }
        | def_list ',' def_elem         { $$ = cat_str(3, $1, make_str(","), $3); }
        ;
 
-def_elem:  def_name '=' def_arg    {
+def_elem:  ColLabel '=' def_arg    {
                    $$ = cat_str(3, $1, make_str("="), $3);
                }
-       | def_name
+       | ColLabel
                {
                    $$ = $1;
                }
-       | DEFAULT '=' def_arg
-               {
-                   $$ = cat2_str(make_str("default ="), $3);
-               }
        ;
 
 def_arg:  func_return      {  $$ = $1; }
@@ -1977,7 +1970,7 @@ RemoveFuncStmt:  DROP FUNCTION func_name func_args
                }
        ;
 
-RemoveAggrStmt:  DROP AGGREGATE name aggr_argtype
+RemoveAggrStmt:  DROP AGGREGATE func_name aggr_argtype
                {
                        $$ = cat_str(3, make_str("drop aggregate"), $3, $4);
                }
@@ -3964,8 +3957,20 @@ connection_target: database_name opt_server opt_port
        {
          if ($1[0] == '\"')
            $$ = $1;
-         else if (strcmp($1, "?") == 0)
-           $$ = mm_strdup(argsinsert->variable->name);
+         else if (strcmp($1, "?") == 0) /* variable */
+                  {
+                        enum ECPGttype typ = argsinsert->variable->type->typ;
+                        /* if array see what's inside */
+                        if (typ == ECPGt_array)
+                                typ = argsinsert->variable->type->u.element->typ;
+                        /* handle varchars */
+                        if (typ == ECPGt_varchar)
+                                $$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
+                        else
+                                $$ = mm_strdup(argsinsert->variable->name);
+                  }
          else
            $$ = make3_str(make_str("\""), $1, make_str("\""));
        }
@@ -4040,6 +4045,20 @@ user_name: UserId       {
         | StringConst   { 
              if ($1[0] == '\"')
                $$ = $1;
+             else if (strcmp($1, "?") == 0) /* variable */
+                     {
+                           enum ECPGttype typ = argsinsert->variable->type->typ;
+                           /* if array see what's inside */
+                           if (typ == ECPGt_array)
+                                   typ = argsinsert->variable->type->u.element->typ;
+                           /* handle varchars */
+                           if (typ == ECPGt_varchar)
+                                   $$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
+                           else
+                                   $$ = mm_strdup(argsinsert->variable->name);
+                     }
              else
                $$ = make3_str(make_str("\""), $1, make_str("\""));
            }
@@ -5033,6 +5052,7 @@ TokenId:  ABSOLUTE            { $$ = make_str("absolute"); }
    | PRIOR             { $$ = make_str("prior"); }
    | PRIVILEGES            { $$ = make_str("privileges"); }
    | PROCEDURAL            { $$ = make_str("procedural"); }
+   | PROCEDURE         { $$ = make_str("procedure"); }
    | READ              { $$ = make_str("read"); }
    | REINDEX           { $$ = make_str("reindex"); }
    | RELATIVE          { $$ = make_str("relative"); }
@@ -5180,7 +5200,6 @@ ECPGColLabel:  ECPGColId  { $$ = $1; }
        | POSITION  { $$ = make_str("position"); }
        | PRECISION { $$ = make_str("precision"); }
        | PRIMARY   { $$ = make_str("primary"); }
-       | PROCEDURE { $$ = make_str("procedure"); }
        | PUBLIC    { $$ = make_str("public"); }
        | REFERENCES    { $$ = make_str("references"); }
        | RESET     { $$ = make_str("reset"); }
index b2bffa168e760239fd03938641935dac465527ed..2ddbb185e0f9a77f583135bac9c3aea6dde9ef66 100644 (file)
@@ -23,4 +23,4 @@ test_init: test_init.c
    $(ECPG) $? 
 
 clean:
-   rm -f test1 test2 test3 test4 perftest *.c log dyntest dyntest2 test_notice test_code100
+   rm -f test1 test2 test3 test4 perftest *.c log dyntest dyntest2 test_notice test_code100 test_init
index a45abc1ae6a348d2a2a639494c49de22c31d775e..2979ead7f1023e4fd0f659c73d0529db34928743 100644 (file)
@@ -15,6 +15,7 @@ EXEC SQL BEGIN DECLARE SECTION;
    char *t = "uvwxyz1234";
    double f;
    bool b = true;
+   varchar database[3];
 EXEC SQL END DECLARE SECTION;
    FILE *dbgs;
 
@@ -23,7 +24,8 @@ EXEC SQL END DECLARE SECTION;
    if ((dbgs = fopen("log", "w")) != NULL)
                 ECPGdebug(1, dbgs);
 
-        EXEC SQL CONNECT TO mm;
+   strcpy(database.arr, "mm");
+        EXEC SQL CONNECT TO :database;
 
    EXEC SQL SET AUTOCOMMIT = ON;