diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index f97f42adce41235b111905065dde0d795358d17a..f16ca0175b12c49ac2b6fb84ea93fc8c96aa83be 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -1023,5 +1023,11 @@ Thu Nov 9 14:40:18 CET 2000 Sat Nov 18 16:28:11 CET 2000 - Synced gram.y and preproc.y. + +Mon Dec 18 12:27:52 CET 2000 + + - Synced gram.y and preproc.y. + - Synced keyword.c. + - Added several small patches from Christof. - Set ecpg version to 2.8.0. - Set library version to 3.2.0. diff --git a/src/interfaces/ecpg/include/ecpglib.h b/src/interfaces/ecpg/include/ecpglib.h index 72869395ad19b3f1c95625b08a7388045275de48..d06f22d63369ccbf6d1535401039d8b34ad429a8 100644 --- a/src/interfaces/ecpg/include/ecpglib.h +++ b/src/interfaces/ecpg/include/ecpglib.h @@ -3,19 +3,21 @@ * definitions into ecpg programs */ +#include <stdio.h> + #ifndef __BEOS__ #ifndef __cplusplus #ifndef bool #define bool char #endif /* ndef bool */ -#endif /* not C++ */ #ifndef true #define true ((bool) 1) -#endif +#endif /* ndef true */ #ifndef false -#define bool char -#endif /* ndef bool */ +#define false ((bool) 0) +#endif /* ndef false */ +#endif /* not C++ */ #else /* __BEOS__ */ #include <SupportDefs.h> #endif /* __BEOS__ */ diff --git a/src/interfaces/ecpg/include/ecpgtype.h b/src/interfaces/ecpg/include/ecpgtype.h index 5bac2df8a2944f36b7ff4ddbb91c4086290fd302..e097debeed618646de3a80db9c8549fe2ca66530 100644 --- a/src/interfaces/ecpg/include/ecpgtype.h +++ b/src/interfaces/ecpg/include/ecpgtype.h @@ -27,8 +27,6 @@ * This is a typically recursive definition. A structure of typed list elements * would probably work fine: */ -#include <stdio.h> - #ifdef __cplusplus extern "C" { diff --git a/src/interfaces/ecpg/lib/data.c b/src/interfaces/ecpg/lib/data.c index 8230564e123df60a0cc7d16c7cec9ecf1f825cee..b6cc32b856382dd343f781c935cdf74cbe523705 100644 --- a/src/interfaces/ecpg/lib/data.c +++ b/src/interfaces/ecpg/lib/data.c @@ -236,12 +236,16 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno, { if (pval[0] == 'f' && pval[1] == '\0') { - ((char *) var)[act_tuple] = false; + if (offset==sizeof(char)) ((char *) var)[act_tuple] = false; + else if (offset==sizeof(int)) ((int *) var)[act_tuple] = false; + else ECPGraise(lineno, ECPG_CONVERT_BOOL, "different size"); break; } else if (pval[0] == 't' && pval[1] == '\0') { - ((char *) var)[act_tuple] = true; + if (offset==sizeof(char)) ((char *) var)[act_tuple] = true; + else if (offset==sizeof(int)) ((int *) var)[act_tuple] = true; + else ECPGraise(lineno, ECPG_CONVERT_BOOL, "different size"); break; } else if (pval[0] == '\0' && PQgetisnull(results, act_tuple, act_field)) diff --git a/src/interfaces/ecpg/lib/execute.c b/src/interfaces/ecpg/lib/execute.c index 9daa97a087f98cee0d8b291bd33362ca1adfb49e..cd8c29a4570e30db096e5fd50bb3031794bf90b6 100644 --- a/src/interfaces/ecpg/lib/execute.c +++ b/src/interfaces/ecpg/lib/execute.c @@ -251,7 +251,6 @@ next_insert(char *text) char *ptr = text; bool string = false; -printf("%s\n", text); for (; *ptr != '\0' && (*ptr != '?' || string); ptr++) { if (*ptr == '\\') /* escape character */ @@ -261,7 +260,6 @@ printf("%s\n", text); string = string ? false : true; } -printf("%s\n", ptr); return (*ptr == '\0') ? NULL : ptr; } @@ -1007,7 +1005,7 @@ ECPGdo(int lineno, const char *connection_name, char *query,...) * * Copyright (c) 2000, Christof Petig <christof.petig@wtal.de> * - * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.14 2000/11/20 15:56:14 petere Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.15 2000/12/18 11:33:54 meskes Exp $ */ PGconn *ECPG_internal_get_connection(char *name); diff --git a/src/interfaces/ecpg/preproc/keywords.c b/src/interfaces/ecpg/preproc/keywords.c index 3a3acca21721b9b4fbc6dd5bc8dd17bfcbcca575..3246f24769a38e3a6e98e7862ad101015932b753 100644 --- a/src/interfaces/ecpg/preproc/keywords.c +++ b/src/interfaces/ecpg/preproc/keywords.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.33 2000/12/15 23:36:20 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.34 2000/12/18 11:33:55 meskes Exp $ * *------------------------------------------------------------------------- */ @@ -245,6 +245,7 @@ static ScanKeyword ScanKeywords[] = { {"sysid", SYSID}, {"table", TABLE}, {"temp", TEMP}, + {"template", TEMPLATE}, {"temporary", TEMPORARY}, {"then", THEN}, {"time", TIME}, diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y index 061f8d0027d746dd727c5f30a1d583d1b74ce4bc..a29dd22948a86809064f3c97ed80175d57a67e2e 100644 --- a/src/interfaces/ecpg/preproc/preproc.y +++ b/src/interfaces/ecpg/preproc/preproc.y @@ -344,7 +344,7 @@ make_name(void) %type <str> constraints_set_mode comment_type comment_cl comment_ag %type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete %type <str> opt_force key_update CreateSchemaStmt PosIntStringConst -%type <str> SessionList SessionClause SetSessionStmt IntConst PosIntConst +%type <str> IntConst PosIntConst %type <str> select_limit opt_for_update_clause CheckPointStmt %type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen @@ -444,7 +444,6 @@ stmt: AlterSchemaStmt { output_statement($1, 0, NULL, connection); } output_statement($1, 1, NULL, connection); } | RuleStmt { output_statement($1, 0, NULL, connection); } - | SetSessionStmt { output_statement($1, 0, NULL, connection); } | TransactionStmt { fprintf(yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1); whenever_action(2); @@ -776,43 +775,6 @@ DropSchemaStmt: DROP SCHEMA UserId } ; -/***************************************************************************** - * - * Manipulate a postgresql session - * - * - *****************************************************************************/ - -SetSessionStmt: SET SESSION CHARACTERISTICS AS SessionList - { - $$ = cat2_str(make_str("set session characteristics as"), $5); - } - ; - -SessionList: SessionList ',' SessionClause - { - $$ = cat_str(3, $1, make_str(","), $3); - } - | SessionClause - { - $$ = $1; - } - ; - -SessionClause: TRANSACTION COMMIT opt_boolean - { - $$ = cat2_str(make_str("transaction commit"), $3); - } - | TIME ZONE zone_value - { - $$ = cat2_str(make_str("time zone"), $3); - } - | TRANSACTION ISOLATION LEVEL opt_level - { - $$ = cat2_str(make_str("transaction isolation level"), $4); - } - ; - /***************************************************************************** * * Set PG internal variable @@ -838,6 +800,10 @@ VariableSetStmt: SET ColId TO var_value { $$ = cat2_str(make_str("set transaction isolation level"), $5); } + | SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level + { + $$ = cat2_str(make_str("set session characteristics as transaction isolation level"), $8); + } | SET NAMES opt_encoding { $$ = cat2_str(make_str("set names"), $3); @@ -3599,26 +3565,36 @@ position_list: b_expr IN b_expr { $$ = EMPTY; } ; -substr_list: expr_list substr_from substr_for +substr_list: a_expr substr_from substr_for { $$ = cat_str(3, $1, $2, $3); } + | a_expr substr_for substr_from + { + $$ = cat_str(3, $1, $2, $3); + } + | a_expr substr_from + { + $$ = cat2_str($1, $2); + } + | a_expr substr_for + { + $$ = cat2_str($1, $2); + } + | expr_list + { + $$ = $1; + } | /* EMPTY */ { $$ = EMPTY; } ; -substr_from: FROM expr_list +substr_from: FROM a_expr { $$ = cat2_str(make_str("from"), $2); } - | /* EMPTY */ - { - $$ = EMPTY; - } ; -substr_for: FOR expr_list +substr_for: FOR a_expr { $$ = cat2_str(make_str("for"), $2); } - | /* EMPTY */ - { $$ = EMPTY; } ; trim_list: a_expr FROM expr_list @@ -3783,6 +3759,7 @@ relation_name: SpecialRuleRelation } ; +name: ColId { $$ = $1; }; database_name: ColId { $$ = $1; }; access_method: ColId { $$ = $1; }; attr_name: ColId { $$ = $1; }; @@ -3793,8 +3770,17 @@ index_name: ColId { $$ = $1; }; * Include date/time keywords as SQL92 extension. * Include TYPE as a SQL92 unreserved keyword. - thomas 1997-10-05 */ -name: ColId { $$ = $1; }; -func_name: ColId { $$ = $1; }; +func_name: ColId { $$ = $1; }; + | BETWEEN { $$ = make_str("between");} + | ILIKE { $$ = make_str("ilike");} + | IN { $$ = make_str("in");} + | IS { $$ = make_str("is");} + | ISNULL { $$ = make_str("isnull");} + | LIKE { $$ = make_str("like");} + | NOTNULL { $$ = make_str("notnull");} + | OVERLAPS { $$ = make_str("overlaps");} + ; + file_name: StringConst { $$ = $1; }; @@ -4967,12 +4953,6 @@ opt_symbol: symbol { $$ = $1; } symbol: ColLabel { $$ = $1; }; -/* Any tokens which show up as operators will screw up the parsing if - * allowed as identifiers, but are acceptable as ColLabels: - * BETWEEN, IN, IS, ISNULL, NOTNULL, OVERLAPS - * Thanks to Tom Lane for pointing this out. - thomas 2000-03-29 - */ - /* Parser tokens to be used as identifiers. * Tokens involving data types should appear in ColId only, * since they will conflict with real TypeName productions. @@ -4991,6 +4971,7 @@ TokenId: ABSOLUTE { $$ = make_str("absolute"); } | CACHE { $$ = make_str("cache"); } | CASCADE { $$ = make_str("cascade"); } | CHAIN { $$ = make_str("chain"); } + | CHARACTERISTICS { $$ = make_str("characteristics"); } | CHECKPOINT { $$ = make_str("checkpoint"); } | CLOSE { $$ = make_str("close"); } | COMMENT { $$ = make_str("comment"); } @@ -5017,7 +4998,6 @@ TokenId: ABSOLUTE { $$ = make_str("absolute"); } | FUNCTION { $$ = make_str("function"); } | GRANT { $$ = make_str("grant"); } | HANDLER { $$ = make_str("handler"); } - | ILIKE { $$ = make_str("ilike"); } | IMMEDIATE { $$ = make_str("immediate"); } | INCREMENT { $$ = make_str("increment"); } | INDEX { $$ = make_str("index"); } @@ -5030,7 +5010,6 @@ TokenId: ABSOLUTE { $$ = make_str("absolute"); } | LANGUAGE { $$ = make_str("language"); } | LANCOMPILER { $$ = make_str("lancompiler"); } | LEVEL { $$ = make_str("level"); } - | LIKE { $$ = make_str("like"); } | LOCATION { $$ = make_str("location"); } | MATCH { $$ = make_str("match"); } | MAXVALUE { $$ = make_str("maxvalue"); } @@ -5165,6 +5144,7 @@ ECPGColLabel: ECPGColId { $$ = $1; } | GLOBAL { $$ = make_str("global"); } | GROUP { $$ = make_str("group"); } | HAVING { $$ = make_str("having"); } + | ILIKE { $$ = make_str("ilike"); } | INITIALLY { $$ = make_str("initially"); } | INNER_P { $$ = make_str("inner"); } | INTERSECT { $$ = make_str("intersect"); } @@ -5173,6 +5153,8 @@ ECPGColLabel: ECPGColId { $$ = $1; } | JOIN { $$ = make_str("join"); } | LEADING { $$ = make_str("leading"); } | LEFT { $$ = make_str("left"); } + | LIKE { $$ = make_str("like"); } + | LIMIT { $$ = make_str("limit"); } | LISTEN { $$ = make_str("listen"); } | LOAD { $$ = make_str("load"); } | LOCK_P { $$ = make_str("lock"); }