Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id B04FA200B8B for ; Tue, 4 Oct 2016 13:41:23 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id AED69160AC9; Tue, 4 Oct 2016 11:41:23 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id EB51E160AC5 for ; Tue, 4 Oct 2016 13:41:22 +0200 (CEST) Received: (qmail 75457 invoked by uid 500); 4 Oct 2016 11:41:21 -0000 Mailing-List: contact reviews-help@impala.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list reviews@impala.incubator.apache.org Received: (qmail 75446 invoked by uid 99); 4 Oct 2016 11:41:21 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 04 Oct 2016 11:41:21 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 413EC180538 for ; Tue, 4 Oct 2016 11:41:21 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.362 X-Spam-Level: X-Spam-Status: No, score=0.362 tagged_above=-999 required=6.31 tests=[RDNS_DYNAMIC=0.363, SPF_PASS=-0.001] autolearn=disabled Received: from mx2-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id WtwE0GHJzs3n for ; Tue, 4 Oct 2016 11:41:17 +0000 (UTC) Received: from ip-10-146-233-104.ec2.internal (ec2-75-101-130-251.compute-1.amazonaws.com [75.101.130.251]) by mx2-lw-us.apache.org (ASF Mail Server at mx2-lw-us.apache.org) with ESMTPS id 3628A5F399 for ; Tue, 4 Oct 2016 11:41:17 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by ip-10-146-233-104.ec2.internal (8.14.4/8.14.4) with ESMTP id u94BfGsw020268; Tue, 4 Oct 2016 11:41:16 GMT Message-Id: <201610041141.u94BfGsw020268@ip-10-146-233-104.ec2.internal> Date: Tue, 4 Oct 2016 11:41:16 +0000 From: "Youwei Wang (Code Review)" To: Youwei Wang , impala-cr@cloudera.com, reviews@impala.incubator.apache.org CC: Jim Apple , Mostafa Mokhtar , Alex Behm Reply-To: youwei.a.wang@intel.com X-Gerrit-MessageType: newpatchset Subject: =?UTF-8?Q?=5BImpala-ASF-CR=5D_IMPALA-889=3A_Add_support_for_an_ISO-SQL_compliant_trim=28=29_function=2E=0A?= X-Gerrit-Change-Id: I4753c608b0b00569bf8c5e95b132df6df358e602 X-Gerrit-ChangeURL: X-Gerrit-Commit: 47d5b9da4b5a1daff1a9aa9d28def5726f00de2b In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-Disposition: inline User-Agent: Gerrit/2.12.2 archived-at: Tue, 04 Oct 2016 11:41:23 -0000 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 Gerrit-Reviewer: Alex Behm Gerrit-Reviewer: Jim Apple Gerrit-Reviewer: Mostafa Mokhtar Gerrit-Reviewer: Youwei Wang