This is an automated email from the ASF dual-hosted git repository.
xikui 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 e5b632b [NO ISSUE] Fix type inference for ANY in UDFs
e5b632b is described below
commit e5b632ba936c8e6920363fc8173ed5ed3c2f4716
Author: Xikui Wang <[email protected]>
AuthorDate: Tue Oct 8 09:06:33 2019 -0700
[NO ISSUE] Fix type inference for ANY in UDFs
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
When data type is available, we should use defined data type. If not, we
should try to infer the data type from the data.
Change-Id: I6a03749fe041ec6f43de230d3e784122f7664545
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/3405
Contrib: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Ian Maxon <[email protected]>
---
.../external-library/upperCase/upperCase.3.query.sqlpp | 2 +-
.../asterix/external/library/java/JObjectAccessors.java | 14 ++++++++++++--
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/upperCase/upperCase.3.query.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/upperCase/upperCase.3.query.sqlpp
index 743d39a..62c2b87 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/upperCase/upperCase.3.query.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/upperCase/upperCase.3.query.sqlpp
@@ -18,7 +18,7 @@
*/
use externallibtest;
-let i={"id":1, "text_list": [{"text":"lower text1"}, {"text":"lower text2"}]}
+let i={"id":1, "text_list": [{"text":"lower text1"}, {"text":"lower text2"}],
"another_list" : ["string_1", "string_2"]}
select value `testlib#toUpper`(i);
let i=`testlib#toUpper`({"id":1, "text_list":[{"text":"lower text"}]})
diff --git
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
index ee8308f..3af08fa 100644
---
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
+++
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
@@ -583,10 +583,20 @@ public class JObjectAccessors {
public IJObject access(AListVisitablePointable pointable,
IObjectPool<IJObject, IAType> objectPool,
IAType listType, JObjectPointableVisitor pointableVisitor)
throws HyracksDataException {
List<IVisitablePointable> items = pointable.getItems();
+ List<IVisitablePointable> itemTags = pointable.getItemTags();
JList list = pointable.ordered() ? new JOrderedList(listType) :
new JUnorderedList(listType);
IJObject listItem;
- for (IVisitablePointable itemPointable : items) {
- final IAType fieldType = ((AbstractCollectionType)
listType).getItemType();
+ for (int iter1 = 0; iter1 < items.size(); iter1++) {
+ IVisitablePointable itemPointable = items.get(iter1);
+ // First, try to get defined type.
+ IAType fieldType = ((AbstractCollectionType)
listType).getItemType();
+ if (fieldType.getTypeTag() == ATypeTag.ANY) {
+ // Second, if defined type is not available, try to infer
it from data
+ IVisitablePointable itemTagPointable = itemTags.get(iter1);
+ ATypeTag itemTypeTag =
EnumDeserializer.ATYPETAGDESERIALIZER
+
.deserialize(itemTagPointable.getByteArray()[itemTagPointable.getStartOffset()]);
+ fieldType = TypeTagUtil.getBuiltinTypeByTag(itemTypeTag);
+ }
typeInfo.reset(fieldType, fieldType.getTypeTag());
switch (typeInfo.getTypeTag()) {
case OBJECT: