>From Ali Alsuliman <[email protected]>: Ali Alsuliman has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17398 )
Change subject: [NO ISSUE][FUN] DUMP_INDEX, handle complex types when constructing JSON ...................................................................... [NO ISSUE][FUN] DUMP_INDEX, handle complex types when constructing JSON - user model changes: no - storage format changes: no - interface changes: no Change-Id: I0d5e4aa8bf886c10d547215291e65ba74c03f5ba Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17398 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> --- A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.10.query.sqlpp M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexReader.java M asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.2.update.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/results/misc/dump_index/dump_index.10.adm M asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.1.ddl.sqlpp 5 files changed, 98 insertions(+), 10 deletions(-) Approvals: Murtadha Hubail: Looks good to me, approved Jenkins: Verified; Verified Anon. E. Moose #1000171: diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexReader.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexReader.java index aed15c6..e60b015 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexReader.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexReader.java @@ -24,7 +24,11 @@ import org.apache.asterix.external.api.IRawRecord; import org.apache.asterix.external.input.record.CharArrayRecord; +import org.apache.asterix.om.base.ARecord; +import org.apache.asterix.om.base.IACollection; +import org.apache.asterix.om.base.IACursor; import org.apache.asterix.om.base.IAObject; +import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory; import org.apache.hyracks.api.dataflow.value.RecordDescriptor; @@ -106,25 +110,64 @@ if (tag == ATypeTag.MISSING) { continue; } - if (isTemporal(tag)) { - JSONUtil.quoteAndEscape(recordBuilder, field.toString()); - } else { - recordBuilder.append(field); - } + printField(recordBuilder, field); recordBuilder.append(","); } recordBuilder.deleteCharAt(recordBuilder.length() - 1); recordBuilder.append("]}"); } - private static boolean isTemporal(ATypeTag typeTag) { + private void printField(StringBuilder sb, IAObject field) { + ATypeTag typeTag = field.getType().getTypeTag(); switch (typeTag) { + case OBJECT: + printObject(sb, ((ARecord) field)); + break; + case ARRAY: + case MULTISET: + printCollection(sb, ((IACollection) field)); + break; case DATE: case TIME: case DATETIME: - return true; + JSONUtil.quoteAndEscape(recordBuilder, field.toString()); + break; + case MISSING: + break; default: - return false; + sb.append(field); } } + + private void printObject(StringBuilder sb, ARecord record) { + sb.append("{ "); + int num = record.numberOfFields(); + ARecordType type = record.getType(); + for (int i = 0; i < num; i++) { + if (i > 0) { + sb.append(", "); + } + IAObject value = record.getValueByPos(i); + JSONUtil.quoteAndEscape(sb, type.getFieldNames()[i]); + sb.append(": "); + printField(sb, value); + } + sb.append(" }"); + } + + private void printCollection(StringBuilder sb, IACollection collection) { + IACursor cursor = collection.getCursor(); + sb.append("[ "); + boolean first = true; + while (cursor.next()) { + IAObject element = cursor.get(); + if (first) { + first = false; + } else { + sb.append(", "); + } + printField(sb, element); + } + sb.append(" ]"); + } } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.1.ddl.sqlpp index 2e97872..00de4a4 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.1.ddl.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.1.ddl.sqlpp @@ -20,5 +20,9 @@ CREATE DATAVERSE test; USE test; CREATE TYPE t1 AS {id:int, name:string?}; +CREATE TYPE t2 AS {id:int}; + CREATE DATASET ds(t1) PRIMARY KEY id; -CREATE INDEX name_idx ON ds(name); \ No newline at end of file +CREATE INDEX name_idx ON ds(name); + +CREATE DATASET ds2(t2) PRIMARY KEY id; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.10.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.10.query.sqlpp new file mode 100644 index 0000000..0c228fc --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.10.query.sqlpp @@ -0,0 +1,21 @@ +/* + * 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. + */ +SET `import-private-functions` `true`; +USE test; +SELECT VALUE DUMP_INDEX("test", "ds2", "sample_idx_1_ds2"); \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.2.update.sqlpp index 21ce2b6..10378f2 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.2.update.sqlpp +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dump_index/dump_index.2.update.sqlpp @@ -17,4 +17,6 @@ * under the License. */ USE test; -INSERT INTO ds ([{"id":1, "name": "name1"}, {"id":2, "name": "name2"}]); \ No newline at end of file +INSERT INTO ds ([{"id":1, "name": "name1"}, {"id":2, "name": "name2"}]); +UPSERT INTO ds2 ([{"id": 1,"age":30, "a1": {"b": [{"x": [1,2]}, {"x": [1,2]}]}, "a2": [{"x": [1,2]}, {"x": [1,2]}] }]); +ANALYZE DATASET ds2; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/dump_index/dump_index.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/dump_index/dump_index.10.adm new file mode 100644 index 0000000..a52ceae --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/dump_index/dump_index.10.adm @@ -0,0 +1 @@ +[ { "values": [ 1, { "id": 1, "age": 30, "a1": { "b": [ { "x": [ 1, 2 ] }, { "x": [ 1, 2 ] } ] }, "a2": [ { "x": [ 1, 2 ] }, { "x": [ 1, 2 ] } ] } ] } ] \ No newline at end of file -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17398 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: neo Gerrit-Change-Id: I0d5e4aa8bf886c10d547215291e65ba74c03f5ba Gerrit-Change-Number: 17398 Gerrit-PatchSet: 3 Gerrit-Owner: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Michael Blow <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]> Gerrit-Reviewer: Wail Alkowaileet <[email protected]> Gerrit-MessageType: merged
