[ASTERIXDB-3615][FUN]: lpad and rpad func follow-up
- user model changes: no
- storage format changes: no
- interface changes: no
Deatils:
- Handle the case where the string is empty.
- Add testcases
Ext-ref: MB-67008
Change-Id: I916342d94e3c4b7d6f8f9233b8bb79be26631914
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19863
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Janhavi Tripurwar <janhavi.tripurwar@couchbase.com>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/lpad/lpad.00.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/lpad/lpad.00.ddl.sqlpp
index 897aac5..5352c31 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/lpad/lpad.00.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/lpad/lpad.00.ddl.sqlpp
@@ -25,6 +25,4 @@
{"id":3, "f": "a𩸽b", "f1": "🎉"},
{"id":4, "f": "👩👩👧👦", "f1": "✓✓✓"},
{"id":5, "f": null, "f1" : null}
-]);
-
-
+]);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/lpad/lpad.02.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/lpad/lpad.02.query.sqlpp
index a1383e6..8bd0175 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/lpad/lpad.02.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/lpad/lpad.02.query.sqlpp
@@ -23,5 +23,8 @@
lpad('👩👩👧', 10, '👩👩👧👦') AS padded_to_10_codepoints,
lpad(null, 4, '%%') AS padded_to_null_is_null,
lpad(22, 11, 'y') AS padded_non_str,
- lpad('abcd', -2, 'y') AS negative_length;
-
+ lpad('abcd', -2, 'y') AS negative_length,
+ lpad('abcd', 56, '') AS padding_with_empty_string,
+ lpad("abcd", 10, ' ') as padded_with_space,
+ lpad('', 3, 'a') as empty_string_padded,
+ lpad('', 3, '') as empty_string_padded_with_empty_string;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/rpad/rpad.00.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/rpad/rpad.00.ddl.sqlpp
index 897aac5..5352c31 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/rpad/rpad.00.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/rpad/rpad.00.ddl.sqlpp
@@ -25,6 +25,4 @@
{"id":3, "f": "a𩸽b", "f1": "🎉"},
{"id":4, "f": "👩👩👧👦", "f1": "✓✓✓"},
{"id":5, "f": null, "f1" : null}
-]);
-
-
+]);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/rpad/rpad.02.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/rpad/rpad.02.query.sqlpp
index c0d1316..9f37767 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/rpad/rpad.02.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/string/pad/rpad/rpad.02.query.sqlpp
@@ -22,5 +22,9 @@
rpad('👩👩👧', 2, '$') AS truncated_to_2_codepoints,
rpad('👩👩👧', 10, '👩👩👧👦') AS padded_to_10_codepoints,
rpad(null, 4, '%%') AS padded_to_null_is_null,
- rpad(22, 11, 'y') AS padded_non_str;
-
+ rpad(22, 11, 'y') AS padded_non_str,
+ rpad('abcd', -2, 'y') AS negative_length,
+ rpad('abcd', 56, '') AS padding_with_empty_string,
+ rpad("abcd", 10, ' ') as padded_with_space,
+ rpad('', 3, 'a') as empty_string_padded,
+ rpad('', 3, '') as empty_string_padded_with_empty_string;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/pad/lpad/lpad.02.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/pad/lpad/lpad.02.adm
index 3f6d3e4..7731480 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/pad/lpad/lpad.02.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/pad/lpad/lpad.02.adm
@@ -1 +1 @@
-{ "padded_to_11_codepoints": "$&^$asterix", "truncated_to_2_codepoints": "👩", "padded_to_10_codepoints": "👩👩👩👩👧", "padded_to_null_is_null": null, "padded_non_str": null, "negative_length": null }
\ No newline at end of file
+{ "padded_to_11_codepoints": "$&^$asterix", "truncated_to_2_codepoints": "👩", "padded_to_10_codepoints": "👩👩👩👩👧", "padded_to_null_is_null": null, "padded_non_str": null, "negative_length": null, "padding_with_empty_string": "abcd", "padded_with_space": " abcd", "empty_string_padded": "aaa", "empty_string_padded_with_empty_string": "" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/pad/rpad/rpad.02.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/pad/rpad/rpad.02.adm
index ba875f6..efac7d7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/string/pad/rpad/rpad.02.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/string/pad/rpad/rpad.02.adm
@@ -1 +1 @@
-{ "padded_to_11_codepoints": "asterix$&^$", "truncated_to_2_codepoints": "👩", "padded_to_10_codepoints": "👩👩👧👩👩", "padded_to_null_is_null": null, "padded_non_str": null }
\ No newline at end of file
+{ "padded_to_11_codepoints": "asterix$&^$", "truncated_to_2_codepoints": "👩", "padded_to_10_codepoints": "👩👩👧👩👩", "padded_to_null_is_null": null, "padded_non_str": null, "negative_length": null, "padding_with_empty_string": "abcd", "padded_with_space": "abcd ", "empty_string_padded": "aaa", "empty_string_padded_with_empty_string": "" }
\ No newline at end of file
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/UTF8StringPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/UTF8StringPointable.java
index 81afdf6..3744350 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/UTF8StringPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/UTF8StringPointable.java
@@ -483,13 +483,15 @@
throws IOException {
int utfLen = src.getUTF8Length();
int byteIdx = 0;
- while (numCodePoints > 0) {
- if (byteIdx == utfLen) {
- byteIdx = 0;
+ if (utfLen > 0) {
+ while (numCodePoints > 0) {
+ if (byteIdx == utfLen) {
+ byteIdx = 0;
+ }
+ builder.appendCodePoint(src.codePointAt(src.getMetaDataLength() + byteIdx));
+ numCodePoints--;
+ byteIdx += src.codePointSize(src.getMetaDataLength() + byteIdx);
}
- builder.appendCodePoint(src.codePointAt(src.getMetaDataLength() + byteIdx));
- numCodePoints--;
- byteIdx += src.codePointSize(src.getMetaDataLength() + byteIdx);
}
}