[NO-ISSUE][IDX] Updated metadata for array indexes w/o SELECTs.
- user mode changes: no
- storage format changes: no
- interface changes: no
For indexes like:
CREATE INDEX idxA ON datasetA (UNNEST field)
We no longer store the metadata record with a ProjectList if a SELECT
clause is not included.
Change-Id: I95b98525582ab93381ac46b594bd51d947991951
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/11044
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Dmitry Lychagin <dmitry.lychagin@couchbase.com>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-1/use-case-1.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-1/use-case-1.1.adm
index 27cc984..d27a32c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-1/use-case-1.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-1/use-case-1.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "dates" ] ], "ProjectList": [ null ] } ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "dates" ] ] } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-2/use-case-2.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-2/use-case-2.1.adm
index 8f0aa97..c4530db 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-2/use-case-2.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-2/use-case-2.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_times", "dates" ] ], "ProjectList": [ null ] } ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_times", "dates" ] ] } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-4/use-case-4.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-4/use-case-4.1.adm
index a04b36e..40c3a46 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-4/use-case-4.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/use-case-4/use-case-4.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_times" ], [ "dates" ] ], "ProjectList": [ null ] } ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_times" ], [ "dates" ] ] } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-3-level-record-path/with-3-level-record-path.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-3-level-record-path/with-3-level-record-path.1.adm
index 27ae1aa..7b80b06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-3-level-record-path/with-3-level-record-path.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-3-level-record-path/with-3-level-record-path.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_data", "checkin_temporal", "checkin_times", "dates" ] ], "ProjectList": [ null ] } ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_data", "checkin_temporal", "checkin_times", "dates" ] ] } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-composite-sk/with-composite-sk.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-composite-sk/with-composite-sk.1.adm
index cc5313c..18b7416 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-composite-sk/with-composite-sk.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-composite-sk/with-composite-sk.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ [ [ "business_id" ] ], { "UnnestList": [ [ "dates" ] ], "ProjectList": [ null ] } ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ [ [ "business_id" ] ], { "UnnestList": [ [ "dates" ] ] } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-composite-sk/with-composite-sk.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-composite-sk/with-composite-sk.2.adm
index dcdc307..5957674 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-composite-sk/with-composite-sk.2.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/closed/with-composite-sk/with-composite-sk.2.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "dates" ] ], "ProjectList": [ null ] }, [ [ "business_id" ] ] ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "dates" ] ] }, [ [ "business_id" ] ] ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-1/use-case-1.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-1/use-case-1.1.adm
index 59b8bc5a..6e71e97 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-1/use-case-1.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-1/use-case-1.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "dates" ] ], "ProjectList": [ null ] } ], "SearchKeyType": [ [ "string" ] ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "dates" ] ] } ], "SearchKeyType": [ [ "string" ] ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-2/use-case-2.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-2/use-case-2.1.adm
index daab11d..6eb8776 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-2/use-case-2.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-2/use-case-2.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_times", "dates" ] ], "ProjectList": [ null ] } ], "SearchKeyType": [ [ "string" ] ] }
\ No newline at end of file
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_times", "dates" ] ] } ], "SearchKeyType": [ [ "string" ] ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-4/use-case-4.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-4/use-case-4.1.adm
index 099446c..d74ae4a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-4/use-case-4.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/use-case-4/use-case-4.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_times" ], [ "dates" ] ], "ProjectList": [ null ] } ], "SearchKeyType": [ [ "string" ] ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_times" ], [ "dates" ] ] } ], "SearchKeyType": [ [ "string" ] ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/with-3-level-record-path/with-3-level-record-path.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/with-3-level-record-path/with-3-level-record-path.1.adm
index 4fafc3e..a1aeffe 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/with-3-level-record-path/with-3-level-record-path.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/with-3-level-record-path/with-3-level-record-path.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_data", "checkin_temporal", "checkin_times", "dates" ] ], "ProjectList": [ null ] } ], "SearchKeyType": [ [ "string" ] ] }
\ No newline at end of file
+{ "SearchKey": [ ], "SearchKeyElements": [ { "UnnestList": [ [ "checkin_data", "checkin_temporal", "checkin_times", "dates" ] ] } ], "SearchKeyType": [ [ "string" ] ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/with-composite-sk/with-composite-sk.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/with-composite-sk/with-composite-sk.1.adm
index 9a94949..a2eea1e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/with-composite-sk/with-composite-sk.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/array-index/metadata/open/with-composite-sk/with-composite-sk.1.adm
@@ -1 +1 @@
-{ "SearchKey": [ ], "SearchKeyElements": [ [ [ "business_id" ] ], { "UnnestList": [ [ "dates" ] ], "ProjectList": [ null ] } ], "SearchKeyType": [ [ "string" ], [ "string" ] ] }
+{ "SearchKey": [ ], "SearchKeyElements": [ [ [ "business_id" ] ], { "UnnestList": [ [ "dates" ] ] } ], "SearchKeyType": [ [ "string" ], [ "string" ] ] }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
index b1ec182..32764b2 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
@@ -204,25 +204,23 @@
}
int projectFieldPos =
complexSearchKeyRecordType.getFieldIndex(COMPLEXSEARCHKEY_PROJECT_FIELD_NAME);
- if (projectFieldPos < 0) {
- throw new AsterixException(ErrorCode.METADATA_ERROR, complexSearchKeyRecord.toJSON());
- }
- AOrderedList projectFieldList =
- (AOrderedList) complexSearchKeyRecord.getValueByPos(projectFieldPos);
- List<List<String>> projectList = new ArrayList<>(projectFieldList.size());
- IACursor projectFieldListCursor = projectFieldList.getCursor();
- while (projectFieldListCursor.next()) {
- if (projectFieldListCursor.get().getType().getTypeTag().equals(ATypeTag.NULL)) {
- projectList.add(null);
- break;
+ List<List<String>> projectList = new ArrayList<>();
+ if (projectFieldPos >= 0) {
+ AOrderedList projectFieldList =
+ (AOrderedList) complexSearchKeyRecord.getValueByPos(projectFieldPos);
+ projectList = new ArrayList<>(projectFieldList.size());
+ IACursor projectFieldListCursor = projectFieldList.getCursor();
+ while (projectFieldListCursor.next()) {
+ AOrderedList innerList = (AOrderedList) projectFieldListCursor.get();
+ List<String> projectPath = new ArrayList<>(innerList.size());
+ IACursor innerListCursor = innerList.getCursor();
+ while (innerListCursor.next()) {
+ projectPath.add(((AString) innerListCursor.get()).getStringValue());
+ }
+ projectList.add(projectPath);
}
- AOrderedList innerList = (AOrderedList) projectFieldListCursor.get();
- List<String> projectPath = new ArrayList<>(innerList.size());
- IACursor innerListCursor = innerList.getCursor();
- while (innerListCursor.next()) {
- projectPath.add(((AString) innerListCursor.get()).getStringValue());
- }
- projectList.add(projectPath);
+ } else {
+ projectList.add(null);
}
searchElement = new Pair<>(unnestList, projectList);
break;
@@ -573,13 +571,15 @@
listBuilder.write(itemValue.getDataOutput(), true);
complexSearchKeyNameRecordBuilder.addField(nameValue, itemValue);
- nameValue.reset();
- aString.setValue(COMPLEXSEARCHKEY_PROJECT_FIELD_NAME);
- stringSerde.serialize(aString, nameValue.getDataOutput());
- buildSearchKeyNameList(element.getProjectList());
- itemValue.reset();
- listBuilder.write(itemValue.getDataOutput(), true);
- complexSearchKeyNameRecordBuilder.addField(nameValue, itemValue);
+ if (element.getProjectList().get(0) != null) {
+ nameValue.reset();
+ aString.setValue(COMPLEXSEARCHKEY_PROJECT_FIELD_NAME);
+ stringSerde.serialize(aString, nameValue.getDataOutput());
+ buildSearchKeyNameList(element.getProjectList());
+ itemValue.reset();
+ listBuilder.write(itemValue.getDataOutput(), true);
+ complexSearchKeyNameRecordBuilder.addField(nameValue, itemValue);
+ }
itemValue.reset();
complexSearchKeyNameRecordBuilder.write(itemValue.getDataOutput(), true);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ArrayIndexUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ArrayIndexUtil.java
index af97101..f4dfe56 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ArrayIndexUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ArrayIndexUtil.java
@@ -208,7 +208,7 @@
depthIndicatorPrefix.add(1);
}
- if (projectList == null || projectList.isEmpty()) {
+ if (projectList == null) {
// Stop here. The prefix is the indicator itself.
return depthIndicatorPrefix;