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 -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to