Youwei Wang has uploaded a new patch set (#5). 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 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 9 files changed, 429 insertions(+), 30 deletions(-) git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/74/4474/5 -- 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: 5 Gerrit-Project: Impala-ASF Gerrit-Branch: master Gerrit-Owner: Youwei Wang <youwei.a.w...@intel.com> Gerrit-Reviewer: Alex Behm <alex.b...@cloudera.com> Gerrit-Reviewer: Jim Apple <jbap...@cloudera.com> Gerrit-Reviewer: Mostafa Mokhtar <mmokh...@cloudera.com> Gerrit-Reviewer: Youwei Wang <youwei.a.w...@intel.com>