@@ -313,7 +313,7 @@ make_name(void)
313
313
%type <str> index_list func_index index_elem opt_class access_method_clause
314
314
%type <str> index_opt_unique IndexStmt func_return ConstInterval
315
315
%type <str> func_args_list func_args opt_with ProcedureStmt def_arg
316
- %type <str> def_elem def_list definition def_name def_type DefineStmt
316
+ %type <str> def_elem def_list definition DefineStmt
317
317
%type <str> opt_instead event event_object RuleActionList opt_using
318
318
%type <str> RuleActionStmtOrEmpty RuleActionMulti func_as reindex_type
319
319
%type <str> RuleStmt opt_column opt_name oper_argtypes sysid_clause
@@ -1335,7 +1335,7 @@ OptSeqElem: CACHE IntConst
1335
1335
*****************************************************************************/
1336
1336
1337
1337
CreatePLangStmt : CREATE PLangTrusted opt_procedural LANGUAGE StringConst
1338
- HANDLER def_name LANCOMPILER StringConst
1338
+ HANDLER func_name LANCOMPILER StringConst
1339
1339
{
1340
1340
$$ = cat_str(9 , make_str(" create" ), $2 , $3 , make_str(" language" ), $5 , make_str(" handler" ), $7 , make_str(" langcompiler" ), $9 );
1341
1341
}
@@ -1482,41 +1482,34 @@ DropTrigStmt: DROP TRIGGER name ON relation_name
1482
1482
*
1483
1483
*****************************************************************************/
1484
1484
1485
- DefineStmt : CREATE def_type def_name definition
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 : CREATE AGGREGATE func_name definition
1486
+ {
1487
+ $$ = cat_str(3 , make_str(" create aggregate" ), $3 , $4 );
1488
+ }
1489
+ | CREATE OPERATOR all_Op definition
1490
+ {
1491
+ $$ = cat_str(3 , make_str(" create operator" ), $3 , $4 );
1492
+ }
1493
+ | CREATE TYPE_P name definition
1494
+ {
1495
+ $$ = cat_str(3 , make_str(" create type" ), $3 , $4 );
1496
+ }
1494
1497
;
1495
1498
1496
- def_name : PROCEDURE { $$ = make_str(" procedure" ); }
1497
- | JOIN { $$ = make_str(" join" ); }
1498
- | all_Op { $$ = $1 ; }
1499
- | ColId { $$ = $1 ; }
1500
- ;
1501
-
1502
1499
definition : ' (' def_list ' )' { $$ = cat_str(3 , make_str(" (" ), $2 , make_str(" )" )); }
1503
1500
;
1504
1501
1505
1502
def_list : def_elem { $$ = $1 ; }
1506
1503
| def_list ' ,' def_elem { $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
1507
1504
;
1508
1505
1509
- def_elem : def_name ' =' def_arg {
1506
+ def_elem : ColLabel ' =' def_arg {
1510
1507
$$ = cat_str(3 , $1 , make_str(" =" ), $3 );
1511
1508
}
1512
- | def_name
1509
+ | ColLabel
1513
1510
{
1514
1511
$$ = $1 ;
1515
1512
}
1516
- | DEFAULT ' =' def_arg
1517
- {
1518
- $$ = cat2_str(make_str(" default =" ), $3 );
1519
- }
1520
1513
;
1521
1514
1522
1515
def_arg : func_return { $$ = $1 ; }
@@ -1977,7 +1970,7 @@ RemoveFuncStmt: DROP FUNCTION func_name func_args
1977
1970
}
1978
1971
;
1979
1972
1980
- RemoveAggrStmt : DROP AGGREGATE name aggr_argtype
1973
+ RemoveAggrStmt : DROP AGGREGATE func_name aggr_argtype
1981
1974
{
1982
1975
$$ = cat_str(3 , make_str(" drop aggregate" ), $3 , $4 );
1983
1976
}
@@ -3964,8 +3957,20 @@ connection_target: database_name opt_server opt_port
3964
3957
{
3965
3958
if ($1 [0 ] == ' \" ' )
3966
3959
$$ = $1 ;
3967
- else if (strcmp($1 , " ?" ) == 0 )
3968
- $$ = mm_strdup(argsinsert->variable->name);
3960
+ else if (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
+ }
3969
3974
else
3970
3975
$$ = make3_str(make_str(" \" " ), $1 , make_str(" \" " ));
3971
3976
}
@@ -4040,6 +4045,20 @@ user_name: UserId {
4040
4045
| StringConst {
4041
4046
if ($1 [0 ] == ' \" ' )
4042
4047
$$ = $1 ;
4048
+ else if (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
+ }
4043
4062
else
4044
4063
$$ = make3_str(make_str(" \" " ), $1 , make_str(" \" " ));
4045
4064
}
@@ -5033,6 +5052,7 @@ TokenId: ABSOLUTE { $$ = make_str("absolute"); }
5033
5052
| PRIOR { $$ = make_str(" prior" ); }
5034
5053
| PRIVILEGES { $$ = make_str(" privileges" ); }
5035
5054
| PROCEDURAL { $$ = make_str(" procedural" ); }
5055
+ | PROCEDURE { $$ = make_str(" procedure" ); }
5036
5056
| READ { $$ = make_str(" read" ); }
5037
5057
| REINDEX { $$ = make_str(" reindex" ); }
5038
5058
| RELATIVE { $$ = make_str(" relative" ); }
@@ -5180,7 +5200,6 @@ ECPGColLabel: ECPGColId { $$ = $1; }
5180
5200
| POSITION { $$ = make_str(" position" ); }
5181
5201
| PRECISION { $$ = make_str(" precision" ); }
5182
5202
| PRIMARY { $$ = make_str(" primary" ); }
5183
- | PROCEDURE { $$ = make_str(" procedure" ); }
5184
5203
| PUBLIC { $$ = make_str(" public" ); }
5185
5204
| REFERENCES { $$ = make_str(" references" ); }
5186
5205
| RESET { $$ = make_str(" reset" ); }
0 commit comments