- Fixed bug in a connect statement using varchars.

- Synced parser.
This commit is contained in:
Michael Meskes 2000-12-22 12:43:14 +00:00
parent 1deb6e7d41
commit 13b78a2400
4 changed files with 55 additions and 29 deletions

View 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.

View 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);
}
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_type: OPERATOR { $$ = make_str("operator"); }
| TYPE_P { $$ = make_str("type"); }
| AGGREGATE { $$ = make_str("aggregate"); }
;
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"); }

View 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

View 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;