impala-reviews mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Youwei Wang (Code Review)" <ger...@cloudera.org>
Subject [Impala-ASF-CR] IMPALA-889: Add support for an ISO-SQL compliant trim() function.
Date Tue, 04 Oct 2016 11:41:16 GMT
Youwei Wang has uploaded a new patch set (#8).

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);
All syntaxes confirm the standard SQL syntax (Core SQL feature ID
  E021-09).

"where": Case-insensitive trim direction. Valid options are
  leading, trailing, and 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("" or '') implies "both" option. If an invalid option is
  specified, TRIM returns target untouched. For Syntax #2, since no
  "where" is specified, the option both is implied by default.

"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
  " "(standard space) by default. Empty argument("" or '') makes TRIM
  return "string_to_be_trimmed" untouched. For Syntax #1, since no
  "trim_char_set" is specified, it trims " "(standard space) by
  default.

"target": Case-sensitive target string to trim. This argument can be
  NULL. Blank argument causes parsing error.

Return type: string

Examples:
Syntax #1:
trim(both 'abfg' from 'abcdefg'); Result: 'cde';
trim(leading FROM ' 123 '); Result: '123 ';
trim(trailing FROM ' 123 '); Result: ' 123';
Syntax #2:
trim('xyz' FROM 'zyxabczyx')"; Result: "abc";
Syntax #3:
trim(leading 'ab' from 'abcdefg'); Result: 'cdefg';
trim(trailing 'bfg%' from 'abcdefg'); Result: 'abcde';
trim(both 'abfg' from 'abcdefg')"; Result "cde";

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/org/apache/impala/analysis/TrimExpr.java
M fe/src/main/jflex/sql-scanner.flex
M fe/src/test/java/org/apache/impala/analysis/AnalyzeExprsTest.java
9 files changed, 406 insertions(+), 32 deletions(-)


  git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/74/4474/8
-- 
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: 8
Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-Owner: Youwei Wang <youwei.a.wang@intel.com>
Gerrit-Reviewer: Alex Behm <alex.behm@cloudera.com>
Gerrit-Reviewer: Jim Apple <jbapple@cloudera.com>
Gerrit-Reviewer: Mostafa Mokhtar <mmokhtar@cloudera.com>
Gerrit-Reviewer: Youwei Wang <youwei.a.wang@intel.com>

Mime
View raw message