Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit13b78a2

Browse files
author
Michael Meskes
committed
- Fixed bug in a connect statement using varchars.
- Synced parser.
1 parent1deb6e7 commit13b78a2

File tree

4 files changed

+55
-29
lines changed

4 files changed

+55
-29
lines changed

‎src/interfaces/ecpg/ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,5 +1029,10 @@ Mon Dec 18 12:27:52 CET 2000
10291029
- Synced gram.y and preproc.y.
10301030
- Synced keyword.c.
10311031
- Added several small patches from Christof.
1032+
1033+
Fri Dec 22 13:33:31 CET 2000
1034+
1035+
- Fixed bug in a connect statement using varchars.
1036+
- Synced gram.y and preproc.y.
10321037
- Set ecpg version to 2.8.0.
10331038
- Set library version to 3.2.0.

‎src/interfaces/ecpg/preproc/preproc.y

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ make_name(void)
313313
%type<str>index_listfunc_indexindex_elemopt_classaccess_method_clause
314314
%type<str>index_opt_uniqueIndexStmtfunc_returnConstInterval
315315
%type<str>func_args_listfunc_argsopt_withProcedureStmtdef_arg
316-
%type<str>def_elemdef_listdefinitiondef_namedef_typeDefineStmt
316+
%type<str>def_elemdef_listdefinitionDefineStmt
317317
%type<str>opt_insteadeventevent_objectRuleActionListopt_using
318318
%type<str>RuleActionStmtOrEmptyRuleActionMultifunc_asreindex_type
319319
%type<str>RuleStmtopt_columnopt_nameoper_argtypessysid_clause
@@ -1335,7 +1335,7 @@ OptSeqElem: CACHE IntConst
13351335
*****************************************************************************/
13361336

13371337
CreatePLangStmt:CREATEPLangTrustedopt_proceduralLANGUAGEStringConst
1338-
HANDLERdef_nameLANCOMPILERStringConst
1338+
HANDLERfunc_nameLANCOMPILERStringConst
13391339
{
13401340
$$ = cat_str(9, make_str("create"),$2,$3, make_str("language"),$5, make_str("handler"),$7, make_str("langcompiler"),$9);
13411341
}
@@ -1482,41 +1482,34 @@ DropTrigStmt: DROP TRIGGER name ON relation_name
14821482
*
14831483
*****************************************************************************/
14841484

1485-
DefineStmt:CREATEdef_typedef_namedefinition
1486-
{
1487-
$$ = cat_str(3, make_str("create"),$2,$3,$4);
1488-
}
1489-
;
1490-
1491-
def_type:OPERATOR{$$ = make_str("operator"); }
1492-
|TYPE_P{$$ = make_str("type"); }
1493-
|AGGREGATE{$$ = make_str("aggregate"); }
1485+
DefineStmt:CREATEAGGREGATEfunc_namedefinition
1486+
{
1487+
$$ = cat_str(3, make_str("create aggregate"),$3,$4);
1488+
}
1489+
|CREATEOPERATORall_Opdefinition
1490+
{
1491+
$$ = cat_str(3, make_str("create operator"),$3,$4);
1492+
}
1493+
|CREATETYPE_Pnamedefinition
1494+
{
1495+
$$ = cat_str(3, make_str("create type"),$3,$4);
1496+
}
14941497
;
14951498

1496-
def_name:PROCEDURE{$$ = make_str("procedure"); }
1497-
|JOIN{$$ = make_str("join"); }
1498-
|all_Op{$$ =$1; }
1499-
|ColId{$$ =$1; }
1500-
;
1501-
15021499
definition:'('def_list')'{$$ = cat_str(3, make_str("("),$2, make_str(")")); }
15031500
;
15041501

15051502
def_list:def_elem{$$ =$1; }
15061503
|def_list','def_elem{$$ = cat_str(3,$1, make_str(","),$3); }
15071504
;
15081505

1509-
def_elem:def_name'='def_arg{
1506+
def_elem:ColLabel'='def_arg{
15101507
$$ = cat_str(3,$1, make_str("="),$3);
15111508
}
1512-
|def_name
1509+
|ColLabel
15131510
{
15141511
$$ =$1;
15151512
}
1516-
|DEFAULT'='def_arg
1517-
{
1518-
$$ = cat2_str(make_str("default ="),$3);
1519-
}
15201513
;
15211514

15221515
def_arg:func_return{$$ =$1; }
@@ -1977,7 +1970,7 @@ RemoveFuncStmt: DROP FUNCTION func_name func_args
19771970
}
19781971
;
19791972

1980-
RemoveAggrStmt:DROPAGGREGATEnameaggr_argtype
1973+
RemoveAggrStmt:DROPAGGREGATEfunc_nameaggr_argtype
19811974
{
19821975
$$ = cat_str(3, make_str("drop aggregate"),$3,$4);
19831976
}
@@ -3964,8 +3957,20 @@ connection_target: database_name opt_server opt_port
39643957
{
39653958
if ($1[0] =='\"')
39663959
$$ =$1;
3967-
elseif (strcmp($1,"?") ==0)
3968-
$$ = mm_strdup(argsinsert->variable->name);
3960+
elseif (strcmp($1,"?") ==0)/* variable*/
3961+
{
3962+
enum ECPGttype typ = argsinsert->variable->type->typ;
3963+
3964+
/* if array see what's inside*/
3965+
if (typ == ECPGt_array)
3966+
typ = argsinsert->variable->type->u.element->typ;
3967+
3968+
/* handle varchars*/
3969+
if (typ == ECPGt_varchar)
3970+
$$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
3971+
else
3972+
$$ = mm_strdup(argsinsert->variable->name);
3973+
}
39693974
else
39703975
$$ = make3_str(make_str("\""),$1, make_str("\""));
39713976
}
@@ -4040,6 +4045,20 @@ user_name: UserId {
40404045
|StringConst {
40414046
if ($1[0] =='\"')
40424047
$$ =$1;
4048+
elseif (strcmp($1,"?") ==0)/* variable*/
4049+
{
4050+
enum ECPGttype typ = argsinsert->variable->type->typ;
4051+
4052+
/* if array see what's inside*/
4053+
if (typ == ECPGt_array)
4054+
typ = argsinsert->variable->type->u.element->typ;
4055+
4056+
/* handle varchars*/
4057+
if (typ == ECPGt_varchar)
4058+
$$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
4059+
else
4060+
$$ = mm_strdup(argsinsert->variable->name);
4061+
}
40434062
else
40444063
$$ = make3_str(make_str("\""),$1, make_str("\""));
40454064
}
@@ -5033,6 +5052,7 @@ TokenId: ABSOLUTE{ $$ = make_str("absolute"); }
50335052
|PRIOR{$$ = make_str("prior"); }
50345053
|PRIVILEGES{$$ = make_str("privileges"); }
50355054
|PROCEDURAL{$$ = make_str("procedural"); }
5055+
|PROCEDURE{$$ = make_str("procedure"); }
50365056
|READ{$$ = make_str("read"); }
50375057
|REINDEX{$$ = make_str("reindex"); }
50385058
|RELATIVE{$$ = make_str("relative"); }
@@ -5180,7 +5200,6 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
51805200
|POSITION{$$ = make_str("position"); }
51815201
|PRECISION{$$ = make_str("precision"); }
51825202
|PRIMARY{$$ = make_str("primary"); }
5183-
|PROCEDURE{$$ = make_str("procedure"); }
51845203
|PUBLIC{$$ = make_str("public"); }
51855204
|REFERENCES{$$ = make_str("references"); }
51865205
|RESET{$$ = make_str("reset"); }

‎src/interfaces/ecpg/test/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ test_init: test_init.c
2323
$(ECPG)$?
2424

2525
clean:
26-
rm -f test1 test2 test3 test4 perftest*.c log dyntest dyntest2 test_notice test_code100
26+
rm -f test1 test2 test3 test4 perftest*.c log dyntest dyntest2 test_notice test_code100 test_init

‎src/interfaces/ecpg/test/test4.pgc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ EXEC SQL BEGIN DECLARE SECTION;
1515
char *t = "uvwxyz1234";
1616
double f;
1717
bool b = true;
18+
varchar database[3];
1819
EXEC SQL END DECLARE SECTION;
1920
FILE *dbgs;
2021

@@ -23,7 +24,8 @@ EXEC SQL END DECLARE SECTION;
2324
if ((dbgs = fopen("log", "w")) != NULL)
2425
ECPGdebug(1, dbgs);
2526

26-
EXEC SQL CONNECT TO mm;
27+
strcpy(database.arr, "mm");
28+
EXEC SQL CONNECT TO :database;
2729

2830
EXEC SQL SET AUTOCOMMIT = ON;
2931

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp