@@ -694,6 +694,12 @@ using namespace Firebird;
694694%token <metaNamePtr> UNICODE_CHAR
695695%token <metaNamePtr> UNICODE_VAL
696696
697+ // tokens added for Firebird 6.0
698+
699+ %token <metaNamePtr> BTRIM
700+ %token <metaNamePtr> RTRIM
701+ %token <metaNamePtr> LTRIM
702+
697703// precedence declarations for expression evaluation
698704
699705%left OR
@@ -4332,6 +4338,9 @@ keyword_or_column
43324338 | VARBINARY
43334339 | WINDOW
43344340 | WITHOUT
4341+ | BTRIM // added in FB 6.0
4342+ | LTRIM
4343+ | RTRIM
43354344 ;
43364345
43374346col_opt
@@ -8465,6 +8474,9 @@ of_first_last_day_part
84658474string_value_function
84668475 : substring_function
84678476 | trim_function
8477+ | btrim_function
8478+ | ltrim_function
8479+ | rtrim_function
84688480 | UPPER '(' value ')'
84698481 { $$ = newNode<StrCaseNode>(blr_upcase, $3); }
84708482 | LOWER '(' value ')'
@@ -8505,6 +8517,34 @@ trim_function
85058517 { $$ = newNode<TrimNode>(blr_trim_both, $3); }
85068518 ;
85078519
8520+
8521+ %type <valueExprNode> btrim_function
8522+ btrim_function
8523+ : BTRIM '(' value ',' value ')'
8524+ { $$ = newNode<TrimNode>(blr_trim_both, $3, $5); }
8525+ | BTRIM '(' value ')'
8526+ { $$ = newNode<TrimNode>(blr_trim_both, $3); }
8527+ ;
8528+
8529+
8530+ %type <valueExprNode> ltrim_function
8531+ ltrim_function
8532+ : LTRIM '(' value ',' value ')'
8533+ { $$ = newNode<TrimNode>(blr_trim_leading, $3, $5); }
8534+ | LTRIM '(' value ')'
8535+ { $$ = newNode<TrimNode>(blr_trim_leading, $3); }
8536+ ;
8537+
8538+
8539+ %type <valueExprNode> rtrim_function
8540+ rtrim_function
8541+ : RTRIM '(' value ',' value ')'
8542+ { $$ = newNode<TrimNode>(blr_trim_trailing, $3, $5); }
8543+ | RTRIM '(' value ')'
8544+ { $$ = newNode<TrimNode>(blr_trim_trailing, $3); }
8545+ ;
8546+
8547+
85088548%type <blrOp> trim_specification
85098549trim_specification
85108550 : BOTH { $$ = blr_trim_both; }
0 commit comments