@@ -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" ); }