@@ -1457,7 +1457,7 @@ arg_desc_list($parameters)
1457
1457
arg_desc($parameters)
1458
1458
: udf_data_type param_mechanism
1459
1459
{
1460
- $parameters->add(newNode<ParameterClause>($1, MetaName() ));
1460
+ $parameters->add(newNode<ParameterClause>($1));
1461
1461
$parameters->back()->udfMechanism = $2;
1462
1462
}
1463
1463
;
@@ -1480,7 +1480,7 @@ return_value1($function)
1480
1480
return_value($function)
1481
1481
: udf_data_type return_mechanism
1482
1482
{
1483
- $function->returnType = newNode<ParameterClause>($1, MetaName() );
1483
+ $function->returnType = newNode<ParameterClause>($1);
1484
1484
$function->returnType->udfMechanism = $2;
1485
1485
}
1486
1486
| PARAMETER pos_short_integer
@@ -1748,13 +1748,12 @@ domain_clause
1748
1748
{
1749
1749
$3->fld_name = *$1;
1750
1750
$<createDomainNode>$ = newNode<CreateDomainNode>(
1751
- newNode<ParameterClause>($3, MetaName(), $4));
1751
+ newNode<ParameterClause>($3, $4));
1752
1752
}
1753
1753
domain_constraints_opt($5) collate_clause
1754
1754
{
1755
1755
$$ = $5;
1756
- if ($7)
1757
- $$->nameType->type->collate = *$7;
1756
+ setCollate($3, $7);
1758
1757
}
1759
1758
;
1760
1759
@@ -2356,8 +2355,7 @@ column_def($relationNode)
2356
2355
}
2357
2356
column_constraint_clause(NOTRIAL($<addColumnClause>4)) collate_clause
2358
2357
{
2359
- if ($6)
2360
- $<addColumnClause>4->collate = *$6;
2358
+ setCollate($2, $6);
2361
2359
}
2362
2360
| symbol_column_name data_type_or_domain identity_clause
2363
2361
{
@@ -2370,8 +2368,7 @@ column_def($relationNode)
2370
2368
}
2371
2369
column_constraint_clause(NOTRIAL($<addColumnClause>4)) collate_clause
2372
2370
{
2373
- if ($6)
2374
- $<addColumnClause>4->collate = *$6;
2371
+ setCollate($2, $6);
2375
2372
}
2376
2373
| symbol_column_name non_array_type def_computed
2377
2374
{
@@ -2807,7 +2804,10 @@ input_proc_parameters($parameters)
2807
2804
%type input_proc_parameter(<parametersClause>)
2808
2805
input_proc_parameter($parameters)
2809
2806
: column_domain_or_non_array_type collate_clause default_par_opt
2810
- { $parameters->add(newNode<ParameterClause>($1, optName($2), $3)); }
2807
+ {
2808
+ setCollate($1, $2);
2809
+ $parameters->add(newNode<ParameterClause>($1, $3));
2810
+ }
2811
2811
;
2812
2812
2813
2813
%type output_proc_parameters(<parametersClause>)
@@ -2819,7 +2819,10 @@ output_proc_parameters($parameters)
2819
2819
%type output_proc_parameter(<parametersClause>)
2820
2820
output_proc_parameter($parameters)
2821
2821
: column_domain_or_non_array_type collate_clause
2822
- { $parameters->add(newNode<ParameterClause>($1, optName($2))); }
2822
+ {
2823
+ setCollate($1, $2);
2824
+ $parameters->add(newNode<ParameterClause>($1));
2825
+ }
2823
2826
;
2824
2827
2825
2828
%type <legacyField> column_domain_or_non_array_type
@@ -2891,7 +2894,8 @@ function_clause_start
2891
2894
RETURNS domain_or_non_array_type collate_clause deterministic_clause_opt
2892
2895
{
2893
2896
$$ = $2;
2894
- $$->returnType = newNode<ParameterClause>($5, optName($6));
2897
+ $$->returnType = newNode<ParameterClause>($5);
2898
+ setCollate($5, $6);
2895
2899
$$->deterministic = $7;
2896
2900
}
2897
2901
;
@@ -3230,7 +3234,8 @@ local_declaration_subfunc_start
3230
3234
RETURNS domain_or_non_array_type collate_clause deterministic_clause_opt
3231
3235
{
3232
3236
$$ = $4;
3233
- $$->dsqlBlock->returns.add(newNode<ParameterClause>($<legacyField>7, optName($8)));
3237
+ setCollate($7, $8);
3238
+ $$->dsqlBlock->returns.add(newNode<ParameterClause>($<legacyField>7));
3234
3239
$$->dsqlDeterministic = $9;
3235
3240
}
3236
3241
;
@@ -3245,8 +3250,10 @@ local_declaration_item
3245
3250
var_declaration_item
3246
3251
: column_domain_or_non_array_type collate_clause var_declaration_initializer
3247
3252
{
3253
+ // Set collate before node allocation to prevent memory leak on throw
3254
+ setCollate($1, $2);
3248
3255
DeclareVariableNode* node = newNode<DeclareVariableNode>();
3249
- node->dsqlDef = newNode<ParameterClause>($1, optName($2), $3);
3256
+ node->dsqlDef = newNode<ParameterClause>($1, $3);
3250
3257
$$ = node;
3251
3258
}
3252
3259
;
@@ -3926,7 +3933,10 @@ block_parameters($parameters)
3926
3933
%type block_parameter(<parametersClause>)
3927
3934
block_parameter($parameters)
3928
3935
: column_domain_or_non_array_type collate_clause '=' parameter
3929
- { $parameters->add(newNode<ParameterClause>($1, optName($2), (ValueSourceClause*) NULL, $4)); }
3936
+ {
3937
+ setCollate($1, $2);
3938
+ $parameters->add(newNode<ParameterClause>($1, (ValueSourceClause*) NULL, $4));
3939
+ }
3930
3940
;
3931
3941
3932
3942
// CREATE VIEW
@@ -4909,20 +4919,27 @@ array_range
4909
4919
%type <legacyField> simple_type
4910
4920
simple_type
4911
4921
: non_charset_simple_type
4912
- | character_type charset_clause
4922
+ | character_type charset_clause collate_clause
4913
4923
{
4914
4924
$$ = $1;
4915
4925
if ($2)
4916
4926
{
4917
4927
$$->charSet = *$2;
4918
4928
$$->flags |= FLD_has_chset;
4919
4929
}
4930
+ if ($3)
4931
+ $$->collate = *$3;
4920
4932
}
4921
4933
;
4922
4934
4923
4935
%type <legacyField> non_charset_simple_type
4924
4936
non_charset_simple_type
4925
- : national_character_type
4937
+ : national_character_type collate_clause
4938
+ {
4939
+ $$ = $1;
4940
+ if ($2)
4941
+ $$->collate = *$2;
4942
+ }
4926
4943
| binary_character_type
4927
4944
| numeric_type
4928
4945
| float_type
0 commit comments