Changeset: 483ff65ad9c5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/483ff65ad9c5
Modified Files:
sql/server/sql_parser.y
sql/server/sql_scan.c
Branch: literal_features
Log Message:
introduce TRIM function
diffs (82 lines):
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -423,6 +423,8 @@ int yydebug=1;
opt_null_string
opt_to_savepoint
opt_uescape
+ opt_trim_type
+ opt_trim_characters
opt_using
opt_XML_attribute_name
restricted_ident
@@ -696,7 +698,7 @@ int yydebug=1;
%left <operation> ALL ANY NOT_BETWEEN BETWEEN NOT_IN sqlIN NOT_EXISTS EXISTS
NOT_LIKE LIKE NOT_ILIKE ILIKE OR SOME
%left <operation> AND
%left <sval> COMPARISON /* <> < > <= >= */
-%left <operation> '+' '-' '&' '|' '^' LEFT_SHIFT RIGHT_SHIFT LEFT_SHIFT_ASSIGN
RIGHT_SHIFT_ASSIGN CONCATSTRING SUBSTRING POSITION SPLIT_PART
+%left <operation> '+' '-' '&' '|' '^' LEFT_SHIFT RIGHT_SHIFT LEFT_SHIFT_ASSIGN
RIGHT_SHIFT_ASSIGN CONCATSTRING SUBSTRING TROM POSITION SPLIT_PART
%left <operation> '*' '/' '%'
%left UMINUS
%left <operation> '~'
@@ -723,6 +725,7 @@ SQLCODE SQLERROR UNDER WHENEVER
%token PATH PRIMARY PRIVILEGES
%token<sval> PUBLIC REFERENCES SCHEMA SET AUTO_COMMIT
%token RETURN
+%token LEADING TRAILING BOTH
%token ALTER ADD TABLE COLUMN TO UNIQUE VALUES VIEW WHERE WITH WITHOUT
%token<sval> sqlDATE TIME TIMESTAMP INTERVAL
@@ -4503,6 +4506,18 @@ opt_brackets:
| '(' ')' { $$ = 1; }
;
+opt_trim_type:
+ /* empty */ { $$ = "btrim"; }
+ | LEADING {$$ = "ltrim"; }
+ | TRAILING {$$ = "rtrim"; }
+ | BOTH {$$ = "btrim"; }
+ ;
+
+opt_trim_characters:
+ /* empty */ { $$ = " "; }
+ | string {$$ = $1; }
+ ;
+
string_funcs:
SUBSTRING '(' scalar_exp FROM scalar_exp FOR scalar_exp ')'
{ dlist *l = L();
@@ -4569,6 +4584,19 @@ string_funcs:
append_symbol(ops, $7);
append_list(l, ops);
$$ = _symbol_create_list( SQL_NOP, l ); }
+| TROM '(' opt_trim_type opt_trim_characters FROM scalar_exp ')'
+ { dlist *l = L();
+ append_list(l,
+ append_string(L(), sa_strdup(SA, $3)));
+ append_int(l, FALSE); /* ignore distinct */
+ append_symbol(l, $6);
+
+ char* s = $4;
+ int len = UTF8_strlen(s);
+ sql_subtype t;
+ sql_find_subtype(&t, "char", len, 0 );
+ append_symbol(l, _newAtomNode( _atom_string(&t, s)));
+ $$ = _symbol_create_list( SQL_BINOP, l ); }
;
column_exp_commalist:
diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -351,6 +351,10 @@ scanner_init_keywords(void)
failed += keywords_insert("POSITION", POSITION);
failed += keywords_insert("SUBSTRING", SUBSTRING);
failed += keywords_insert("SPLIT_PART", SPLIT_PART);
+ failed += keywords_insert("TROM", TROM);
+ failed += keywords_insert("LEADING", LEADING);
+ failed += keywords_insert("TRAILING", TRAILING);
+ failed += keywords_insert("BOTH", BOTH);
failed += keywords_insert("CASE", CASE);
failed += keywords_insert("WHEN", WHEN);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]