You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by dl...@apache.org on 2021/10/26 20:28:53 UTC

[asterixdb] branch master updated: [ASTERIXDB-2978][FUN] Fix substr1() handling of offset 0

This is an automated email from the ASF dual-hosted git repository.

dlych pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 14cc098  [ASTERIXDB-2978][FUN] Fix substr1() handling of offset 0
14cc098 is described below

commit 14cc098dd02b35c62fe0da80cccf507274731e2a
Author: Dmitry Lychagin <dm...@couchbase.com>
AuthorDate: Tue Oct 26 10:27:39 2021 -0700

    [ASTERIXDB-2978][FUN] Fix substr1() handling of offset 0
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    - Fix substr1(x,0) to return input string instead of null
    
    Change-Id: I5c313c163165f03b2c55d730438a2723f15dcc3d
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/13803
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>
    Reviewed-by: Ali Alsuliman <al...@gmail.com>
---
 .../runtimets/results/string/substr01/offset1/substr1/substr1.1.adm     | 2 +-
 .../results/string/substr01/offset1/substring1/substring1.1.adm         | 2 +-
 .../runtimets/results/string/substring2-1/offset1/substr1/substr1.1.adm | 2 +-
 .../results/string/substring2-1/offset1/substring1/substring1.1.adm     | 2 +-
 .../org/apache/asterix/runtime/evaluators/functions/Substring2Eval.java | 2 +-
 .../org/apache/asterix/runtime/evaluators/functions/SubstringEval.java  | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substr01/offset1/substr1/substr1.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substr01/offset1/substr1/substr1.1.adm
index ba46923..f524208 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substr01/offset1/substr1/substr1.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substr01/offset1/substr1/substr1.1.adm
@@ -1 +1 @@
-[ "g", null, "ab", "bc", "cd" ]
\ No newline at end of file
+[ "g", "ab", "ab", "bc", "cd" ]
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substr01/offset1/substring1/substring1.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substr01/offset1/substring1/substring1.1.adm
index ba46923..f524208 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substr01/offset1/substring1/substring1.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substr01/offset1/substring1/substring1.1.adm
@@ -1 +1 @@
-[ "g", null, "ab", "bc", "cd" ]
\ No newline at end of file
+[ "g", "ab", "ab", "bc", "cd" ]
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substring2-1/offset1/substr1/substr1.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substring2-1/offset1/substr1/substr1.1.adm
index 772cf57..fb038ae 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substring2-1/offset1/substr1/substr1.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substring2-1/offset1/substr1/substr1.1.adm
@@ -1 +1 @@
-[ "g", null, "abcdefg", "bcdefg", "cdefg" ]
\ No newline at end of file
+[ "g", "abcdefg", "abcdefg", "bcdefg", "cdefg" ]
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substring2-1/offset1/substring1/substring1.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substring2-1/offset1/substring1/substring1.1.adm
index 772cf57..fb038ae 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substring2-1/offset1/substring1/substring1.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/substring2-1/offset1/substring1/substring1.1.adm
@@ -1 +1 @@
-[ "g", null, "abcdefg", "bcdefg", "cdefg" ]
\ No newline at end of file
+[ "g", "abcdefg", "abcdefg", "bcdefg", "cdefg" ]
\ No newline at end of file
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/Substring2Eval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/Substring2Eval.java
index 124ae40..e5a6853 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/Substring2Eval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/Substring2Eval.java
@@ -96,7 +96,7 @@ class Substring2Eval extends AbstractScalarEval {
         string.set(bytes, offset + 1, len - 1);
         array.reset();
         try {
-            int actualStart = start >= 0 ? start - baseOffset : string.getStringLength() + start;
+            int actualStart = start >= 0 ? Math.max(start - baseOffset, 0) : string.getStringLength() + start;
             boolean success = UTF8StringPointable.substr(string, actualStart, Integer.MAX_VALUE, builder, array);
             if (success) {
                 out.writeByte(ATypeTag.SERIALIZED_STRING_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringEval.java
index e8c2ff8..dec6cce 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringEval.java
@@ -108,7 +108,7 @@ class SubstringEval extends AbstractScalarEval {
         string.set(bytes, offset + 1, length - 1);
         array.reset();
         try {
-            int actualStart = start >= 0 ? start - baseOffset : string.getStringLength() + start;
+            int actualStart = start >= 0 ? Math.max(start - baseOffset, 0) : string.getStringLength() + start;
             boolean success = UTF8StringPointable.substr(string, actualStart, len, builder, array);
             if (success) {
                 out.writeByte(ATypeTag.SERIALIZED_STRING_TYPE_TAG);