Youwei Wang has uploaded a new patch set (#4).
Change subject: IMPALA-889: Add support for an ISO-SQL compliant trim()
function.
......................................................................
IMPALA-889: Add support for an ISO-SQL compliant trim() function.
Purpose: Removes all instances of one or more characters from the
specified direction(s) of a STRING value.
Syntax #1 TRIM(where FROM string_to_be_trimmed);
Syntax #2 TRIM(trim_char_set FROM string_to_be_trimmed);
Syntax #3 TRIM(where trim_char_set FROM string_to_be_trimmed);
Syntax #3 confirms the standard SQL syntax (Core SQL feature ID
E021-09).
"where": Case-insensitive trim direction. Valid options are:
leading|trailing|both. leading means trimming characters from the
start; trailing means trimming characters from the end; both means
trimming characters from both sides. These options should be
provided without single/double quotation marks since they are not
string literals but identifiers. NULL or empty argument implies
"both" option. If an invalid option is specified, returns target
untouched.
"trim_char_set": Case-sensitive characters to be removed. This
argument is regarded as a character set going to be removed. So the
occurrence order of each character doesn't matter and duplicated
instance of same character will be ignored. NULL argument implies
" "(space) by default. Empty argument return string_to_be_trimmed
untouched.
"target": Case-sensitive target string to trim. This argument can be
NULL. Blank argument causes parsing error.
Note: For Syntax #1, since no "characters" is specified, it trims
" "(space) by default. For Syntax #2, since no "where" is specified,
the option both is implied by default.
Return type: string
Examples:
Syntax #1:
trim(both 'abfg%' from 'abc%%defg%%%%%'); returns 'c%%de';
trim(leading FROM ' 123 '); returns '123 ';
trim(trailing FROM ' 123 '); returns ' 123';
Syntax #2:
trim('&@' FROM '&@&@&@&127+1-@&@&@&@')"; returns "127+1-";
Syntax #3:
trim(leading 'ab%' from 'abc%%defg%%%%%'); returns 'c%%defg%%%%%';
trim(trailing 'bfg%' from 'abc%%defg%%%%%'); returns 'abc%%de';
trim(both 'abfg%' from 'abc%%defg%%%%%')"; returns "c%%de";
Change-Id: I4753c608b0b00569bf8c5e95b132df6df358e602
---
M be/src/exprs/expr-test.cc
M be/src/exprs/string-functions-ir.cc
M be/src/exprs/string-functions.h
M common/function-registry/impala_functions.py
A common/function-registry/string-functions-ir.cc
M common/thrift/Exprs.thrift
M fe/src/main/cup/sql-parser.cup
A fe/src/main/java/com/cloudera/impala/analysis/TrimExpr.java
M fe/src/main/jflex/sql-scanner.flex
M fe/src/test/java/com/cloudera/impala/analysis/AnalyzeExprsTest.java
10 files changed, 1,439 insertions(+), 30 deletions(-)
git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/74/4474/4
--
To view, visit http://gerrit.cloudera.org:8080/4474
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I4753c608b0b00569bf8c5e95b132df6df358e602
Gerrit-PatchSet: 4
Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-Owner: Youwei Wang <[email protected]>
Gerrit-Reviewer: Alex Behm <[email protected]>
Gerrit-Reviewer: Jim Apple <[email protected]>
Gerrit-Reviewer: Mostafa Mokhtar <[email protected]>
Gerrit-Reviewer: Youwei Wang <[email protected]>