You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@impala.apache.org by "Jim Apple (Code Review)" <ge...@cloudera.org> on 2016/06/20 17:22:25 UTC

[Impala-CR](cdh5-trunk) IMPALA-889 Add support for ISO-SQL trim()

Jim Apple has posted comments on this change.

Change subject: IMPALA-889 Add support for ISO-SQL trim()
......................................................................


Patch Set 2:

(10 comments)

http://gerrit.cloudera.org:8080/#/c/3213/2/be/src/exprs/expr-test.cc
File be/src/exprs/expr-test.cc:

Line 1919:   TestStringValue("btrim('abcdefg', 'aaaaabbbbbccccccccccffffffffffg', 'right')", "abcde");
long line


Line 1921:   TestStringValue("btrim('', 'abc', 'left')", "");
Can you add a test with the second argument being ''? Can you add one where only the fist argument is NULL?


http://gerrit.cloudera.org:8080/#/c/3213/2/be/src/exprs/string-functions-ir.cc
File be/src/exprs/string-functions-ir.cc:

PS2, Line 758: r
long line


PS2, Line 764: bitset<256>* unique_chars = reinterpret_cast<bitset<256>*>(
             :       ctx->GetFunctionState(FunctionContext::THREAD_LOCAL));
             :   // When 'chars_to_trim' is unique for each element (e.g. when 'chars_to_trim'
             :   // is each element of a table column), we need to prepare a bitset of unique
             :   // characters here instead of using the bitset from function context.
             :   if (!ctx->IsArgConstant(1)) {
             :     unique_chars->reset();
             :     DCHECK(chars_to_trim.len != 0 || chars_to_trim.is_null);
             :     for (int32_t i = 0; i < chars_to_trim.len; ++i) {
             :       unique_chars->set(static_cast<int>(chars_to_trim.ptr[i]), true);
             :     }
             :   }
Can you please refactor this copied code into a function?


Line 777:   int option_;
Please use C++11 (aka 'scoped') enum


Line 778:   if (strncmp(reinterpret_cast<const char*>(option.ptr),
Maybe memcmp? I'm not sure.


Line 779:     reinterpret_cast<const char*>("left"), 4) == 0) {
Do you need this cast?


Line 785:     // both
Please check that it actually does equal "both", unless ISO SQL says that non-"both" arguments that are also not "left" or "right" must be interpreted as "both".


Line 791:   if (option_ == 0 || option_ == 2) {
Please refactor these two blocks, too, to avoid the shared code with the other btrim


http://gerrit.cloudera.org:8080/#/c/3213/2/be/src/exprs/string-functions.h
File be/src/exprs/string-functions.h:

Line 103:   static StringVal BTrimStringWithOption(FunctionContext* ctx, const StringVal& str,
This deserves a function comment


-- 
To view, visit http://gerrit.cloudera.org:8080/3213
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I4753c608b0b00569bf8c5e95b132df6df358e602
Gerrit-PatchSet: 2
Gerrit-Project: Impala
Gerrit-Branch: cdh5-trunk
Gerrit-Owner: Youwei Wang <yo...@intel.com>
Gerrit-Reviewer: Jim Apple <jb...@cloudera.com>
Gerrit-HasComments: Yes