- Synced preproc.y with gram.y.
authorMichael Meskes
Tue, 26 Sep 2000 11:41:45 +0000 (11:41 +0000)
committerMichael Meskes
Tue, 26 Sep 2000 11:41:45 +0000 (11:41 +0000)
- Synced keyword.c.
- Added patch by Christof Petig  to fix NOT
  FOUND problem on update/insert/delete.

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/TODO
src/interfaces/ecpg/lib/execute.c
src/interfaces/ecpg/preproc/keywords.c
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/test/Makefile
src/interfaces/ecpg/test/test_code100.pgc

index dcd7ff197ee377282707a8d42d257d19372238c6..2a232f70153c183e1ce344f5f707d635d080901b 100644 (file)
@@ -934,15 +934,22 @@ Mon Sep 18 13:55:11 PDT 2000
 
    - Added int8 support based on a patch by Martijn Schoemaker 
 
-Mit Sep 20 12:40:27 PDT 2000
+Wed Sep 20 12:40:27 PDT 2000
 
    - Added patch by Christof Petig  to process
      backend NOTICEs.
    - Added patch by Christof Petig  to cache
      type information.
 
-Don Sep 21 13:54:13 PDT 2000
+Thu Sep 21 13:54:13 PDT 2000
 
    - Enabled parser to accept ip addresses instead of host names.
+
+Tue Sep 26 13:00:16 PDT 2000
+
+   - Synced preproc.y with gram.y.
+        - Synced keyword.c.   
+   - Added patch by Christof Petig  to fix NOT
+     FOUND problem on update/insert/delete.
    - Set ecpg version to 2.8.0. 
    - Set library version to 3.2.0.
index 32a6f794760589a516b7dda256fe7e437fefa608..330597567e00b02d5642981e82c3ada5762646c1 100644 (file)
@@ -1,15 +1,9 @@
 The complete structure definition has to be listed inside the declare
 section of the structure variable for ecpg to be able to understand it.
 
-The error message for "no data" in an exec sql insert select from statement
-has to be 100.
-
 sqlwarn[6] should be 'W' if the PRECISION or SCALE value specified in a SET
 DESCRIPTOR statement will be ignored.
 
-If a NOTICE message is given by the backend it should not be printed to
-stderr. Instead it should be listed as a warning.
-
 The error handling has to be improved by adding additional error-rules to
 the parser.
 
@@ -28,4 +22,3 @@ remove space_or_nl and line_end from pgc.l
 
 Missing features:
  - SQLSTATE
- - LONG LONG datatype
index a0bef5ae2ae0fd0be420d34d00066538a1017ca4..6335af437e262b04129994750ee35938bdfdf62a 100644 (file)
@@ -901,6 +901,10 @@ ECPGexecute(struct statement * stmt)
                sqlca.sqlerrd[1] = atol(PQoidStatus(results));
                sqlca.sqlerrd[2] = atol(PQcmdTuples(results));
                ECPGlog("ECPGexecute line %d Ok: %s\n", stmt->lineno, PQcmdStatus(results));
+               if (!sqlca.sqlerrd[2] && (!strncmp(PQcmdStatus(results),"UPDATE",6) 
+                                   || !strncmp(PQcmdStatus(results),"INSERT",6) 
+                                   || !strncmp(PQcmdStatus(results),"DELETE",6)))
+                   ECPGraise(stmt->lineno, ECPG_NOT_FOUND, NULL);
                break;
            case PGRES_NONFATAL_ERROR:
            case PGRES_FATAL_ERROR:
@@ -989,7 +993,7 @@ ECPGdo(int lineno, const char *connection_name, char *query,...)
  *
  * Copyright (c) 2000, Christof Petig 
  *
- * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.10 2000/09/21 11:56:07 meskes Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.11 2000/09/26 11:41:43 meskes Exp $
  */
 
 PGconn    *ECPG_internal_get_connection(char *name);
index 06d4f3319be6799552b2468374f0d6648c421bf0..acf49b850714511b483224cff18e9194953642f3 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.29 2000/09/19 11:47:14 meskes Exp $
+ *   $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.30 2000/09/26 11:41:44 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -192,6 +192,7 @@ static ScanKeyword ScanKeywords[] = {
    {"operator", OPERATOR},
    {"option", OPTION},
    {"overlaps", OVERLAPS},
+   {"owner", OWNER},
    {"or", OR},
    {"order", ORDER},
    {"out", OUT},   
index 2eca5b02ac22c60e8389579b00625f9a5d6d01de..b05b5544f778e6512d45d88dc058a71e171a6da1 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.63 2000/09/26 05:42:15 ishii Exp $
+ *   $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.64 2000/09/26 11:41:44 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
index 888e5f139b974ef2cc186d29d82f58fb60256a65..30bafb75c0811f295adde08762ab4d838e3a00f0 100644 (file)
@@ -231,13 +231,19 @@ make_name(void)
        INDEX, INHERITS, INSTEAD, ISNULL, LANCOMPILER, LIMIT,
        LISTEN, UNLISTEN, LOAD, LOCATION, LOCK_P, MAXVALUE,
        MINVALUE, MODE, MOVE, NEW, NOCREATEDB, NOCREATEUSER,
-       NONE, NOTHING, NOTIFY, NOTNULL, OFFSET, OLD, OIDS,
-       OPERATOR, PASSWORD, PROCEDURAL, REINDEX, RENAME, RESET,
+       NONE, NOTHING, NOTIFY, NOTNULL, OFFSET, OIDS,
+       OPERATOR, OWNER, PASSWORD, PROCEDURAL, REINDEX, RENAME, RESET,
        RETURNS, ROW, RULE, SEQUENCE, SERIAL, SETOF, SHARE,
        SHOW, START, STATEMENT, STDIN, STDOUT, SYSID TEMP,
        TRUNCATE, TRUSTED, UNDER, UNLISTEN, UNTIL, VACUUM,
        VALID, VERBOSE, VERSION
 
+/* The grammar thinks these are keywords, but they are not in the keywords.c
+ * list and so can never be entered directly.  The filter in parser.c
+ * creates these tokens when required.
+ */
+%token                 UNIONJOIN
+                
 /* Special keywords, not in the query language - see the "lex" file */
 %token     IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP
 %token    ICONST PARAM
@@ -247,13 +253,16 @@ make_name(void)
 %token                  OP
 
 /* precedence: lowest to highest */
-%left      UNION INTERSECT EXCEPT
+%left      UNION EXCEPT
+%left      INTERSECT
+%left      JOIN UNIONJOIN CROSS LEFT FULL RIGHT INNER_P NATURAL 
 %left      OR
 %left      AND
 %right     NOT
 %right     '='
 %nonassoc  '<' '>'
 %nonassoc  LIKE ILIKE
+%nonassoc  ESCAPE
 %nonassoc  OVERLAPS
 %nonassoc  BETWEEN
 %nonassoc  IN
@@ -271,7 +280,6 @@ make_name(void)
 %left      '.'
 %left      '[' ']'
 %left      TYPECAST
-%left      ESCAPE
 
 %type     Iconst Fconst Sconst TransactionStmt CreateStmt UserId
 %type     CreateAsElement OptCreateAs CreateAsList CreateAsStmt
@@ -290,7 +298,7 @@ make_name(void)
 %type     trim_list in_expr substr_for attr attrs drop_behavior
 %type     Typename SimpleTypename Generic Numeric generic opt_float opt_numeric
 %type     opt_decimal Character character opt_varying opt_charset
-%type     opt_collate datetime opt_timezone opt_interval
+%type     opt_collate datetime opt_timezone opt_interval table_ref
 %type     row_expr row_descriptor row_list ConstDatetime opt_chain
 %type     SelectStmt SubSelect result OptTemp ConstraintAttributeSpec
 %type     opt_table opt_all sort_clause sortby_list ConstraintAttr 
@@ -325,26 +333,20 @@ make_name(void)
 %type      CreatePLangStmt IntegerOnly TriggerFuncArgs TriggerFuncArg
 %type      ViewStmt LoadStmt CreatedbStmt createdb_opt_encoding
 %type     createdb_opt_location opt_encoding OptInherit Geometric
-%type      DropdbStmt ClusterStmt grantee RevokeStmt table_expr Bit bit
+%type      DropdbStmt ClusterStmt grantee RevokeStmt Bit bit
 %type     GrantStmt privileges operation_commalist operation
 %type     opt_cursor opt_lmode ConstraintsSetStmt comment_tg
 %type     case_expr when_clause_list case_default case_arg when_clause
 %type      select_clause opt_select_limit select_limit_value ConstraintTimeSpec
-%type      select_offset_value using_expr join_expr ReindexStmt
-%type     using_list from_expr join_clause join_type opt_only opt_boolean
-%type     join_qual update_list join_clause_with_union AlterSchemaStmt
+%type      select_offset_value ReindexStmt join_type opt_only opt_boolean
+%type     join_qual update_list AlterSchemaStmt joined_table
 %type     opt_level opt_lock lock_type users_in_new_group_clause
 %type      OptConstrFromTable comment_op OptTempTableName
 %type      constraints_set_list constraints_set_namelist comment_fn
 %type     constraints_set_mode comment_type comment_cl comment_ag
 %type     CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
-%type     join_expr_with_union opt_force key_update CreateSchemaStmt
+%type     opt_force key_update CreateSchemaStmt
 %type      SessionList SessionClause SetSessionStmt
-/***
-#ifdef ENABLE_ORACLE_JOIN_SYNTAX
-%type     oracle_list oracle_expr oracle_outer
-#endif
-***/
 
 %type     ECPGWhenever ECPGConnect connection_target ECPGOpen
 %type     indicator ECPGExecute ECPGPrepare ecpg_using
@@ -978,6 +980,11 @@ DEFAULT} */
        {
            $$ = cat_str(6, make_str("alter table"), $3, $4, make_str("drop constraint"), $7, $8);
        }
+/* ALTER TABLE  OWNER TO UserId */     
+   | ALTER TABLE relation_name OWNER TO UserId   
+       {
+           $$ = cat_str(4, make_str("alter table"), $3, make_str("owner to"), $6);
+       }
        ;
 
 alter_column_action:
@@ -2299,7 +2306,7 @@ LoadStmt:  LOAD file_name
 CreatedbStmt:  CREATE DATABASE database_name WITH createdb_opt_location createdb_opt_encoding
            {
                if (strlen($5) == 0 || strlen($6) == 0) 
-                   mmerror(ET_ERROR, "CREATE DATABASE WITH requires at least an option");
+                   mmerror(ET_ERROR, "CREATE DATABASE WITH requires at least an option.");
 
                $$ = cat_str(5, make_str("create database"), $3, make_str("with"), $5, $6);
            }
@@ -2628,7 +2635,7 @@ SelectStmt:      select_clause
 /* This rule parses Select statements including UNION INTERSECT and EXCEPT.
  * '(' and ')' can be used to specify the order of the operations 
  * (UNION EXCEPT INTERSECT). Without the use of '(' and ')' we want the
- * operations to be left associative.
+ * operations to be ordered per the precedence specs at the head of this file.
  *
  *  The sort_clause is not handled here!
  */
@@ -2641,9 +2648,12 @@ select_clause: '(' select_clause ')'
                FoundInto = 0;
                                 $$ = $1; 
                         }
-                | select_clause EXCEPT select_clause
+                | select_clause EXCEPT opt_all select_clause
            {
-               $$ = cat_str(3, $1, make_str("except"), $3);
+               if (strlen($3) != 0)
+                   mmerror(ET_WARN, "EXCEPT ALL is not implemented yet.");
+
+               $$ = cat_str(4, $1, make_str("except"), $3, $4);
                ForUpdateNotAllowed = 1;
            }
        | select_clause UNION opt_all select_clause
@@ -2653,7 +2663,10 @@ select_clause: '(' select_clause ')'
            }
        | select_clause INTERSECT opt_all select_clause
            {
-               $$ = cat_str(3, $1, make_str("intersect"), $3);
+               if (strlen($3) != 0)
+                   mmerror(ET_WARN, "INTERSECT ALL is not implemented yet.");
+
+               $$ = cat_str(4, $1, make_str("intersect"), $3, $4);
                ForUpdateNotAllowed = 1;
            }
        ;
@@ -2841,54 +2854,91 @@ update_list:  OF va_list
  *****************************************************************************/
 
 from_clause:    FROM from_list     { $$ = cat2_str(make_str("from"), $2); }
-/***
-#ifdef ENABLE_ORACLE_JOIN_SYNTAX
-       | FROM oracle_list  { $$ = cat2_str(make_str("from"), $2); }
-#endif
-***/
-       | FROM from_expr    { $$ = cat2_str(make_str("from"), $2); }
        | /* EMPTY */       { $$ = EMPTY; }
        ;
 
-from_list:  from_list ',' table_expr   { $$ = cat_str(3, $1, make_str(","), $3); }
-                | table_expr       { $$ = $1; }
+from_list:  from_list ',' table_ref    { $$ = cat_str(3, $1, make_str(","), $3); }
+                | table_ref        { $$ = $1; }
                 ;
 
-/***********
- * This results in one shift/reduce conflict, presumably due to the trailing "(
- * - Thomas 1999-09-20
- *
-#ifdef ENABLE_ORACLE_JOIN_SYNTAX
-oracle_list:  oracle_expr  { $$ = $1; }
-                ;
-
-oracle_expr:  ColId ',' ColId oracle_outer
+/*
+ * table_ref is where an alias clause can be attached.  Note we cannot make
+ * alias_clause have an empty production because that causes parse conflicts
+ * between table_ref := '(' joined_table ')' alias_clause
+ * and joined_table := '(' joined_table ')'.  So, we must have the
+ * redundant-looking productions here instead.
+ *
+ * Note that the SQL spec does not permit a subselect ()
+ * without an alias clause, so we don't either.  This avoids the problem
+ * of needing to invent a refname for an unlabeled subselect.
+ */        
+table_ref:  relation_expr 
+                {
+                   $$ = $1;
+                }
+   | relation_expr alias_clause 
        {
-           mmerror(ET_ERROR, "Oracle OUTER JOIN not yet supported");
-           $$ = cat_str(3, $1, make_str(","), $3); }
+           cat2_str($1, $2);
        }
-       |  oracle_outer ColId ',' ColId
+   | '(' select_clause ')' alias_clause 
        {
-           mmerror(ET_ERROR, "Oracle OUTER JOIN not yet supported");
-           $$ = cat_str(4, $1, $2, make_str(","), $3); } 
+           cat_str(4, make_str("("), $2, make_str(")"), $4);
        }
-       ;
-
-oracle_outer:  '(' '+' ')' { $$ = make_str("(+)"); }
-                ;
-#endif
-*************/
+   | joined_table  
+       {
+                        $$ = $1;
+                }  
+   | '(' joined_table ')' alias_clause   
+                {
+                        cat_str(4, make_str("("), $2, make_str(")"), $4);
+                }             
+   ;
 
-from_expr:  '(' join_clause_with_union ')' alias_clause
-                                { $$ = cat_str(4, make_str("("), $2, make_str(")"), $4); }
-                | join_clause
-                                { $$ = $1; }
-                ;
+/*
+ * It may seem silly to separate joined_table from table_ref, but there is
+ * method in SQL92's madness: if you don't do it this way you get reduce-
+ * reduce conflicts, because it's not clear to the parser generator whether
+ * to expect alias_clause after ')' or not.  For the same reason we must
+ * treat 'JOIN' and 'join_type JOIN' separately, rather than allowing
+ * join_type to expand to empty; if we try it, the parser generator can't
+ * figure out when to reduce an empty join_type right after table_ref.
+ *                                                        
+ * Note that a CROSS JOIN is the same as an unqualified       
+ * INNER JOIN, and an INNER JOIN/ON has the same shape
+ * but a qualification expression to limit membership.
+ * A NATURAL JOIN implicitly matches column names between
+ * tables and the shape is determined by which columns are
+ * in common. We'll collect columns during the later transformations.
+ */       
 
-table_expr:  relation_expr alias_clause
-                                {
-                                        $$ = cat2_str($1, $2);
-                                }
+joined_table:  '(' joined_table ')'   
+       {
+                   $$ = cat_str(3, make_str("("), $2, make_str(")"));
+                } 
+       | table_ref CROSS JOIN table_ref 
+       {
+           $$ = cat_str(3, $1, make_str("cross join"), $4);
+       }
+       | table_ref UNIONJOIN table_ref    
+                {
+                        $$ = cat_str(3, $1, make_str("unionjoin"), $3);
+                }                                 
+       | table_ref join_type JOIN table_ref join_qual 
+                {
+                        $$ = cat_str(5, $1, $2, make_str("join"), $4, $5);
+                }   
+       | table_ref JOIN table_ref join_qual   
+                {
+                        $$ = cat_str(4, $1, make_str("join"), $3, $4);
+                }   
+       | table_ref NATURAL join_type JOIN table_ref   
+       {
+                        $$ = cat_str(5, $1, make_str("natural"), $3, make_str("join"), $5);
+                }  
+       | table_ref NATURAL JOIN table_ref     
+       {
+                        $$ = cat_str(3, $1, make_str("natural join"), $4);
+                }  
                 ;
 
 alias_clause:  AS ColId '(' name_list ')'
@@ -2899,61 +2949,15 @@ alias_clause:  AS ColId '(' name_list ')'
            { $$ = cat_str(4, $1, make_str("("), $3, make_str(")")); }
        | ColId
            { $$ = $1; }
-       | /*EMPTY*/
-           { $$ = EMPTY; }
        ;
 
-/* A UNION JOIN is the same as a FULL OUTER JOIN which *omits*
- * all result rows which would have matched on an INNER JOIN.
- * Syntactically, must enclose the UNION JOIN in parens to avoid
- * conflicts with SELECT/UNION.
- */
-join_clause:  join_clause join_expr
-           { $$ = cat2_str($1, $2); }
-       | table_expr join_expr
-           { $$ = cat2_str($1, $2); }
-                ;
-
-/* This is everything but the left side of a join.
- * Note that a CROSS JOIN is the same as an unqualified
- * inner join, so just pass back the right-side table.
- * A NATURAL JOIN implicitly matches column names between
- * tables, and the shape is determined by which columns are
- * in common. We'll collect columns during the later transformations.
- */
-join_expr:  join_type JOIN table_expr join_qual
-                                {
-                   $$ = cat_str(4, $1, make_str("join"), $3, $4);
-                                }
-                | NATURAL join_type JOIN table_expr
-                                {
-                   $$ = cat_str(4, make_str("natural"), $2, make_str("join"), $4);
-                                }
-                | CROSS JOIN table_expr
-                                {  $$ = cat2_str(make_str("cross join"), $3); }
-                ;
-
-join_clause_with_union:  join_clause_with_union join_expr_with_union
-                                { $$ = cat2_str($1, $2); }
-                | table_expr join_expr_with_union 
-                                { $$ = cat2_str($1, $2); }
-                ;
-
-join_expr_with_union:  join_expr
-                                { $$ = $1; }
-                | UNION JOIN table_expr
-               { $$ = cat2_str(make_str("union join"), $3); }
-       ;
-
-/* OUTER is just noise... */
 join_type:  FULL join_outer        { $$ = cat2_str(make_str("full"), $2); }
        | LEFT join_outer   { $$ = cat2_str(make_str("left"), $2); }
                 | RIGHT join_outer      { $$ = cat2_str(make_str("right"), $2); }
-                | OUTER_P               { $$ = make_str("outer"); }
                 | INNER_P               { $$ = make_str("inner"); }
-                | /* EMPTY */           { $$ = EMPTY; }
        ;
 
+/* OUTER is just noise... */
 join_outer:  OUTER_P               { $$ = make_str("outer"); }
        | /*EMPTY*/         { $$ = EMPTY;  /* no qualifiers */ }
        ;
@@ -2963,27 +2967,12 @@ join_outer:  OUTER_P                { $$ = make_str("outer"); }
  *  USING ( column list ) allows only unqualified column names,
  *                        which must match between tables.
  *  ON expr allows more general qualifications.
- * - thomas 1999-01-07
  */
 
-join_qual:  USING '(' using_list ')'                   { $$ = cat_str(3, make_str("using ("), $3, make_str(")")); }
+join_qual:  USING '(' name_list ')'                   { $$ = cat_str(3, make_str("using ("), $3, make_str(")")); }
                | ON a_expr                { $$ = cat2_str(make_str("on"), $2); }
                 ;
 
-using_list:  using_list ',' using_expr                  { $$ = cat_str(3, $1, make_str(","), $3); }
-               | using_expr                { $$ = $1; }
-               ;
-
-using_expr:  ColId
-               {
-                   $$ = $1;
-               }
-       ;
-
-where_clause:  WHERE a_expr            { $$ = cat2_str(make_str("where"), $2); }
-       | /*EMPTY*/             { $$ = EMPTY;  /* no qualifiers */ }
-       ;
-
 relation_expr: relation_name
                {
                    /* normal relations */
@@ -3000,6 +2989,31 @@ relation_expr:   relation_name
                                $$ = cat2_str(make_str("ONLY "), $2);
                }
 
+where_clause:  WHERE a_expr            { $$ = cat2_str(make_str("where"), $2); }
+       | /*EMPTY*/             { $$ = EMPTY;  /* no qualifiers */ }
+       ;
+
+/*****************************************************************************
+ *
+ * Type syntax
+ *     SQL92 introduces a large amount of type-specific syntax.
+ *     Define individual clauses to handle these cases, and use
+ *      the generic case to handle regular type-extensible Postgres syntax.
+ *     - thomas 1997-10-10
+ *
+ *****************************************************************************/
+
+Typename:  SimpleTypename opt_array_bounds
+               {
+                   $$ = cat2_str($1, $2.str);
+               }
+       | SETOF SimpleTypename
+               {
+                   $$ = cat2_str(make_str("setof"), $2);
+               }
+       ;
+
+
 opt_array_bounds:  '[' ']' opt_array_bounds
            {
                             $$.index1 = 0;
@@ -3032,27 +3046,6 @@ Iresult: Iconst          { $$ = atol($1); }
    |   Iresult '%' Iresult { $$ = $1 % $3; }
    ;
 
-
-/*****************************************************************************
- *
- * Type syntax
- *     SQL92 introduces a large amount of type-specific syntax.
- *     Define individual clauses to handle these cases, and use
- *      the generic case to handle regular type-extensible Postgres syntax.
- *     - thomas 1997-10-10
- *
- *****************************************************************************/
-
-Typename:  SimpleTypename opt_array_bounds
-               {
-                   $$ = cat2_str($1, $2.str);
-               }
-       | SETOF SimpleTypename
-               {
-                   $$ = cat2_str(make_str("setof"), $2);
-               }
-       ;
-
 SimpleTypename:  ConstTypename { $$ = $1; }
                | ConstInterval { $$ = $1; }
                ;  
@@ -5113,6 +5106,7 @@ TokenId:  ABSOLUTE            { $$ = make_str("absolute"); }
    | OIDS              { $$ = make_str("oids"); }
    | OPERATOR          { $$ = make_str("operator"); }
    | OPTION            { $$ = make_str("option"); }
+   | OWNER             { $$ = make_str("owner"); }
    | PARTIAL           { $$ = make_str("partial"); }
    | PASSWORD          { $$ = make_str("password"); }
    | PENDANT           { $$ = make_str("pendant"); }
index 9a6614a408707482be1f7f1f6aea55c0ca7ecb00..3df6e0a0099b7a49722f11b90069ebf7c441dce4 100644 (file)
@@ -1,4 +1,4 @@
-all: test1 test2 test3 test4 perftest dyntest dyntest2 test_notice
+all: test1 test2 test3 test4 perftest dyntest dyntest2 test_notice test_code100
 
 #LDFLAGS=-g -I /usr/local/pgsql/include -L/usr/local/pgsql/lib -lecpg -lpq
 LDFLAGS=-g -I ../include -I /usr/include/postgresql -L /usr/lib -lecpg -lpq
index 913d5175c064963e945350c7f75aeb20ae695acf..0458747cbed14d21315be07979e500acd1e49462 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: test_code100.pgc,v 1.1 2000/09/20 13:25:52 meskes Exp $
+// $Id: test_code100.pgc,v 1.2 2000/09/26 11:41:45 meskes Exp $
 
 exec sql include sqlca;
 #include 
@@ -11,7 +11,7 @@ int main(int argc, char **argv)
 
    // ECPGdebug(1,stdout);
    
-   exec sql connect to test;
+   exec sql connect to mm;
    if (sqlca.sqlcode) printf("%ld:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
 
    exec sql create table test (