>From Preetham Poluparthi <[email protected]>:
Preetham Poluparthi has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20495?usp=email )
Change subject: WIP: make Indexes great again
......................................................................
WIP: make Indexes great again
Change-Id: Ia29c5f931c297a5c2517c2a35d16651411d0c5a4
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
1 file changed, 35 insertions(+), 14 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/95/20495/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
index 232deec..c7373e9 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
@@ -314,7 +314,7 @@
/**
* Creates an index utilization plan optimization - in case of an
index-only select plan:
- * < project < select < distint < sort < unnest-map(sidx) < assign? <
datasource-scan
+ * < project < select < distint < sort < unnest-map(sidx) < assign? <
datasource-scan
*/
@Override
public ILogicalOperator
createIndexSearchPlan(List<Mutable<ILogicalOperator>> afterTopOpRefs,
@@ -589,14 +589,18 @@
}
// determine cases when prefix search could be applied
- for (int i = 1; i < lowKeyExprs.length; i++) {
- if (lowKeyLimits[0] == null && lowKeyLimits[i] != null ||
lowKeyLimits[0] != null && lowKeyLimits[i] == null
- || highKeyLimits[0] == null && highKeyLimits[i] != null
- || highKeyLimits[0] != null && highKeyLimits[i] == null) {
- numSecondaryKeys = i;
- primaryIndexPostProccessingIsNeeded = true;
- break;
- }
+ // for (int i = 1; i < lowKeyExprs.length; i++) {
+ // if (lowKeyLimits[0] == null && lowKeyLimits[i] != null
|| lowKeyLimits[0] != null && lowKeyLimits[i] == null
+ // || highKeyLimits[0] == null && highKeyLimits[i]
!= null
+ // || highKeyLimits[0] != null && highKeyLimits[i]
== null) {
+ // numSecondaryKeys = i;
+ // primaryIndexPostProccessingIsNeeded = true;
+ // break;
+ // }
+ // }
+
+ if (lowKeyLimits[numSecondaryKeys - 1] == null ||
highKeyLimits[numSecondaryKeys - 1] == null) {
+ primaryIndexPostProccessingIsNeeded = true;
}
if (primaryIndexPostProccessingIsNeeded) {
@@ -618,11 +622,28 @@
// List of variables and expressions for the assign.
ArrayList<LogicalVariable> assignKeyVarList = new ArrayList<>();
ArrayList<Mutable<ILogicalExpression>> assignKeyExprList = new
ArrayList<>();
- int numLowKeys = createKeyVarsAndExprs(numSecondaryKeys, lowKeyLimits,
lowKeyExprs, assignKeyVarList,
- assignKeyExprList, keyVarList, context,
lowKeyConstAtRuntimeExpressions, lowKeyConstAtRuntimeExprVars);
- int numHighKeys = createKeyVarsAndExprs(numSecondaryKeys,
highKeyLimits, highKeyExprs, assignKeyVarList,
- assignKeyExprList, keyVarList, context,
highKeyConstantAtRuntimeExpressions,
- highKeyConstAtRuntimeExprVars);
+
+ int numLowKeys = 0;
+ for (LimitType limitType : lowKeyLimits) {
+ if (limitType != null) {
+ numLowKeys++;
+ } else
+ break;
+ }
+
+ int numHighKeys = 0;
+ for (LimitType limitType : highKeyLimits) {
+ if (limitType != null) {
+ numHighKeys++;
+ } else
+ break;
+ }
+
+ numLowKeys = createKeyVarsAndExprs(numLowKeys, lowKeyLimits,
lowKeyExprs, assignKeyVarList, assignKeyExprList,
+ keyVarList, context, lowKeyConstAtRuntimeExpressions,
lowKeyConstAtRuntimeExprVars);
+ numHighKeys =
+ createKeyVarsAndExprs(numHighKeys, highKeyLimits,
highKeyExprs, assignKeyVarList, assignKeyExprList,
+ keyVarList, context,
highKeyConstantAtRuntimeExpressions, highKeyConstAtRuntimeExprVars);
BTreeJobGenParams jobGenParams =
new BTreeJobGenParams(chosenIndex.getIndexName(),
IndexType.BTREE, dataset.getDatabaseName(),
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20495?usp=email
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Ia29c5f931c297a5c2517c2a35d16651411d0c5a4
Gerrit-Change-Number: 20495
Gerrit-PatchSet: 1
Gerrit-Owner: Preetham Poluparthi <[email protected]>