Dmitry Lychagin has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/2446
Change subject: [NO ISSUE][FUN] Add array_length()
......................................................................
[NO ISSUE][FUN] Add array_length()
- user model changes: yes
- storage format changes: no
- interface changes: no
Details:
- Add array_length() which is an alias for len()
- Add testcases
- Add comment explaining logical plan generation for
EVERY quantified expression
Change-Id: I5bd03717d3cc41567d6b060b25ca3051d9f43b3a
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
A
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/list/array_length/array_length.1.query.sqlpp
A
asterixdb/asterix-app/src/test/resources/runtimets/results/list/array_length/array_length.1.adm
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
5 files changed, 40 insertions(+), 0 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/46/2446/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index 2b7adc1..6ab76fa 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -1088,6 +1088,10 @@
fAgg =
BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.NON_EMPTY_STREAM,
new ArrayList<>());
} else { // EVERY
+ // look for input items that do not satisfy the condition, if none
found then return true
+ // when inverting the condition account for NULL/MISSING by
replacing them with FALSE
+ // condition() -> not(if-missing-or-null(condition(), false))
+
List<Mutable<ILogicalExpression>> ifMissingOrNullArgs = new
ArrayList<>(2);
ifMissingOrNullArgs.add(new MutableObject<>(eo2.first));
ifMissingOrNullArgs
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/list/array_length/array_length.1.query.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/list/array_length/array_length.1.query.sqlpp
new file mode 100644
index 0000000..66f3b93
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/list/array_length/array_length.1.query.sqlpp
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+[
+ is_missing(array_length(missing)),
+ is_null(array_length(null)),
+ array_length([]),
+ array_length([2]),
+ array_length([2,3]),
+ array_length([2,3,4])
+]
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/list/array_length/array_length.1.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/list/array_length/array_length.1.adm
new file mode 100644
index 0000000..09fe966
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/list/array_length/array_length.1.adm
@@ -0,0 +1 @@
+[ true, true, 0, 1, 2, 3 ]
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 09fc832..ec359e2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -3430,6 +3430,11 @@
</compilation-unit>
</test-case>
<test-case FilePath="list">
+ <compilation-unit name="array_length">
+ <output-dir compare="Text">array_length</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="list">
<compilation-unit name="exists">
<output-dir compare="Text">exists</output-dir>
</compilation-unit>
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
index 5556ea9..e5d1643 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/CommonFunctionMapUtil.java
@@ -88,6 +88,9 @@
FUNCTION_NAME_MAP.put("record-add-fields", "object-add-fields");
// record-remove-fields, internal: object-remove-fields
FUNCTION_NAME_MAP.put("record-remove-fields", "object-remove-fields");
+
+ // Array/Mutliset functions
+ FUNCTION_NAME_MAP.put("array_length", "len");
}
private CommonFunctionMapUtil() {
--
To view, visit https://asterix-gerrit.ics.uci.edu/2446
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5bd03717d3cc41567d6b060b25ca3051d9f43b3a
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Dmitry Lychagin <[email protected]>