This is an automated email from the ASF dual-hosted git repository.
mhubail 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 99e309b [NO ISSUE][COMP] Introduce Index Only Compiler Property
99e309b is described below
commit 99e309be79520cdef57078c8cbdec6f1a857918b
Author: Murtadha Hubail <[email protected]>
AuthorDate: Mon Apr 6 22:30:38 2020 +0300
[NO ISSUE][COMP] Introduce Index Only Compiler Property
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Introduce "compiler.indexonly" compiler property to
enable/disable index-only plans.
- Replace usage of 'noindexonly' query property by
the new compiler property.
- Update docs and test cases.
Change-Id: I82d05bbfacbaca17eb8d8a2b6d825aa180e9ab02
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/5567
Contrib: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Murtadha Hubail <[email protected]>
Reviewed-by: Dmitry Lychagin <[email protected]>
---
.../am/AbstractIntroduceAccessMethodRule.java | 3 ---
.../optimizer/rules/am/AccessMethodUtils.java | 25 ++++------------------
.../apache/asterix/api/common/APIFramework.java | 11 +++++-----
...uterjoin-probe-pidx-with-join-btree-sidx_01.aql | 2 +-
...e-pidx-with-join-btree-sidx_03-index-only.sqlpp | 2 +-
...erjoin-probe-pidx-with-join-btree-sidx_03.sqlpp | 2 +-
.../btree-index-join/secondary-self-equi-join.aql | 2 +-
.../btree-sidx-idxonly-01-disable-idxonly.sqlpp | 4 ++--
.../btree-sidx-idxonly-01-disable-idxonly_ps.sqlpp | 4 ++--
...uterjoin-probe-pidx-with-join-rtree-sidx_01.aql | 2 +-
.../queries/nonpure/keep-datetime-local.aql | 2 +-
.../queries/orders-composite-index-search.aql | 2 +-
.../queries/orders-index-search-open.aql | 2 +-
.../optimizerts/queries/orders-index-search.aql | 2 +-
.../queries/rtree-index-join/issue730.aql | 2 +-
...uterjoin-probe-pidx-with-join-rtree-sidx_01.aql | 2 +-
.../spatial-self-intersect-point.aql | 2 +-
.../rtree-sidx-idxonly-01-disable-idxonly.sqlpp | 4 ++--
.../queries/rtree-secondary-index-open.aql | 2 +-
.../optimizerts/queries/rtree-secondary-index.aql | 2 +-
.../queries/udfs/query-ASTERIXDB-1019.aql | 2 +-
.../probe-pidx-with-join-btree-sidx1.4.query.sqlpp | 2 +-
.../probe-pidx-with-join-btree-sidx1.5.query.sqlpp | 2 +-
.../secondary-index.3.metrics.sqlpp | 2 +-
.../api/cluster_state_1/cluster_state_1.1.regexadm | 1 +
.../cluster_state_1_full.1.regexadm | 1 +
.../cluster_state_1_less.1.regexadm | 1 +
.../probe-pidx-with-join-btree-sidx1.4.ast | 2 +-
.../probe-pidx-with-join-btree-sidx1.5.ast | 2 +-
.../asterix/common/config/CompilerProperties.java | 9 +++++++-
.../common/config/OptimizationConfUtil.java | 11 +++++++++-
.../main/markdown/sqlpp/appendix_2_index_only.md | 4 ++--
.../algebricks/core/config/AlgebricksConfig.java | 1 +
.../rewriter/base/PhysicalOptimizationConfig.java | 9 ++++++++
34 files changed, 68 insertions(+), 60 deletions(-)
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
index c45ad6d..48b027c 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
@@ -87,9 +87,6 @@ import com.google.common.collect.ImmutableSet;
* methods.
*/
public abstract class AbstractIntroduceAccessMethodRule implements
IAlgebraicRewriteRule {
- // When this option is set to true before executing a query, we don't
apply the index-only plan.
- public final static String NO_INDEX_ONLY_PLAN_OPTION = "noindexonly";
- public final static boolean NO_INDEX_ONLY_PLAN_OPTION_DEFAULT_VALUE =
false;
protected MetadataProvider metadataProvider;
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
index 38072f3..dc83fb1 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
@@ -25,7 +25,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import
org.apache.asterix.algebra.operators.physical.ExternalDataLookupPOperator;
@@ -1887,7 +1886,7 @@ public class AccessMethodUtils {
// may not be equal to the actual value in the record. (e.g., INT
index and BIGINT value in the actual record)
// Since index-only plan doesn't access the primary index, we can't
get the actual value in this case.
// Also, if no-index-only option is given, we stop here to honor that
request.
- boolean noIndexOnlyPlanOption = getNoIndexOnlyOption(context);
+ boolean noIndexOnlyPlanOption =
!context.getPhysicalOptimizationConfig().isIndexOnly();
// TODO: For the inverted index access-method cases only:
// Since an inverted index can contain multiple secondary key entries
per one primary key,
// Index-only plan can't be applied. For example, suppose there are
two entries (SK1, SK2) for one PK.
@@ -1898,9 +1897,9 @@ public class AccessMethodUtils {
// Even if the above is resolved, if a secondary key field is used
after
// SELECT or JOIN operator, this can't be qualified as an index-only
plan since
// an inverted index contains a part of a field value, not all of it.
- if (dataset.getDatasetType() == DatasetType.EXTERNAL ||
chosenIndex.isPrimaryIndex()
- || chosenIndex.isOverridingKeyFieldTypes() ||
chosenIndex.isEnforced() || isInvertedIndex(chosenIndex)
- || noIndexOnlyPlanOption) {
+ if (noIndexOnlyPlanOption || dataset.getDatasetType() ==
DatasetType.EXTERNAL || chosenIndex.isPrimaryIndex()
+ || chosenIndex.isOverridingKeyFieldTypes() ||
chosenIndex.isEnforced()
+ || isInvertedIndex(chosenIndex)) {
indexOnlyPlanInfo.setFirst(false);
return;
}
@@ -2650,22 +2649,6 @@ public class AccessMethodUtils {
}
/**
- * Gets the specified no-index-only option in a query.
- *
- * @param context
- * @return true if no-index-only plan is true.
- * false otherwise.
- */
- public static boolean getNoIndexOnlyOption(IOptimizationContext context) {
- Map<String, Object> config = context.getMetadataProvider().getConfig();
- if
(config.containsKey(AbstractIntroduceAccessMethodRule.NO_INDEX_ONLY_PLAN_OPTION))
{
- return Boolean
- .parseBoolean((String)
config.get(AbstractIntroduceAccessMethodRule.NO_INDEX_ONLY_PLAN_OPTION));
- }
- return
AbstractIntroduceAccessMethodRule.NO_INDEX_ONLY_PLAN_OPTION_DEFAULT_VALUE;
- }
-
- /**
* Finds an output variable for the given input variable of
UnionAllOperator.
*/
static LogicalVariable findUnionAllOutputVariable(UnionAllOperator
unionAllOp, LogicalVariable inputVar) {
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
index d573b52..a3593d5 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
@@ -72,7 +72,6 @@ import org.apache.asterix.om.base.IAObject;
import org.apache.asterix.optimizer.base.AsterixOptimizationContext;
import org.apache.asterix.optimizer.base.FuzzyUtils;
import org.apache.asterix.optimizer.rules.DisjunctivePredicateToJoinRule;
-import org.apache.asterix.optimizer.rules.am.AbstractIntroduceAccessMethodRule;
import org.apache.asterix.runtime.job.listener.JobEventListenerFactory;
import org.apache.asterix.translator.CompiledStatements.ICompiledDmlStatement;
import org.apache.asterix.translator.ExecutionPlans;
@@ -134,11 +133,11 @@ public class APIFramework {
CompilerProperties.COMPILER_SORTMEMORY_KEY,
CompilerProperties.COMPILER_WINDOWMEMORY_KEY,
CompilerProperties.COMPILER_TEXTSEARCHMEMORY_KEY,
CompilerProperties.COMPILER_PARALLELISM_KEY,
CompilerProperties.COMPILER_SORT_PARALLEL_KEY,
CompilerProperties.COMPILER_SORT_SAMPLES_KEY,
- FunctionUtil.IMPORT_PRIVATE_FUNCTIONS,
FuzzyUtils.SIM_FUNCTION_PROP_NAME,
- FuzzyUtils.SIM_THRESHOLD_PROP_NAME,
StartFeedStatement.WAIT_FOR_COMPLETION,
- FeedActivityDetails.FEED_POLICY_NAME,
FeedActivityDetails.COLLECT_LOCATIONS,
- SqlppQueryRewriter.INLINE_WITH_OPTION,
SqlppExpressionToPlanTranslator.REWRITE_IN_AS_OR_OPTION,
- "hash_merge", "output-record-type",
AbstractIntroduceAccessMethodRule.NO_INDEX_ONLY_PLAN_OPTION,
+ CompilerProperties.COMPILER_INDEXONLY_KEY,
FunctionUtil.IMPORT_PRIVATE_FUNCTIONS,
+ FuzzyUtils.SIM_FUNCTION_PROP_NAME,
FuzzyUtils.SIM_THRESHOLD_PROP_NAME,
+ StartFeedStatement.WAIT_FOR_COMPLETION,
FeedActivityDetails.FEED_POLICY_NAME,
+ FeedActivityDetails.COLLECT_LOCATIONS,
SqlppQueryRewriter.INLINE_WITH_OPTION,
+ SqlppExpressionToPlanTranslator.REWRITE_IN_AS_OR_OPTION,
"hash_merge", "output-record-type",
DisjunctivePredicateToJoinRule.REWRITE_OR_AS_JOIN_OPTION);
private final IRewriterFactory rewriterFactory;
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01.aql
index 71e94e2..784bf90 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01.aql
@@ -56,7 +56,7 @@ create index msgCountAIx on TweetMessages(countA) type btree;
create index msgCountBIx on TweetMessages(countB) type btree;
create index msgTextIx on TweetMessages(message-text) type keyword;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $t1 in dataset('TweetMessages')
where $t1.tweetid < int64("10")
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_03-index-only.sqlpp
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_03-index-only.sqlpp
index e693b46..9da4825 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_03-index-only.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_03-index-only.sqlpp
@@ -61,7 +61,7 @@ create index msgCountBIx on TweetMessages (countB) type
btree;
create index msgTextIx on TweetMessages (`message-text`) type keyword;
-set noindexonly "false";
+set `compiler.indexonly` "true";
select t1.tweetid as tweetid1, t1.countA as count1, t2.tweetid as tweetid2,
t2.countB as count2
from TweetMessages as t1 left outer join TweetMessages as t2 on t1.countA /*+
indexnl */ = t2.countB
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_03.sqlpp
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_03.sqlpp
index 24a84dc..6e972e6 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_03.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_03.sqlpp
@@ -61,7 +61,7 @@ create index msgCountBIx on TweetMessages (countB) type
btree;
create index msgTextIx on TweetMessages (`message-text`) type keyword;
-set noindexonly "true";
+set `compiler.indexonly` "false";
select t1.tweetid as tweetid1, t1.countA as count1, t2.tweetid as tweetid2,
t2.countB as count2
from TweetMessages as t1 left outer join TweetMessages as t2 on t1.countA /*+
indexnl */ = t2.countB
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-self-equi-join.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-self-equi-join.aql
index 74f2d87..7dd9ddb 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-self-equi-join.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-self-equi-join.aql
@@ -55,7 +55,7 @@ create index msgCountAIx on TweetMessages(countA) type btree;
create index msgCountBIx on TweetMessages(countB) type btree;
create index msgTextIx on TweetMessages(message-text) type keyword;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $t1 in dataset('TweetMessages')
for $t2 in dataset('TweetMessages')
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-sidx-idxonly-01-disable-idxonly.sqlpp
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-sidx-idxonly-01-disable-idxonly.sqlpp
index 0be684e..d45a7eb 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-sidx-idxonly-01-disable-idxonly.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-sidx-idxonly-01-disable-idxonly.sqlpp
@@ -26,7 +26,7 @@
* ... -> unnest-map (sidx) -> split -> unnest-map (pidx)
-> select -> union -> ...
* : The right path:
* ... -> unnest-map (sidx) -> split ->
-> union -> ...
- * : However, we set the "noindexonly" option to true. So,
the index-only plan should not be triggered.
+ * : However, we set the `compiler.indexonly` option to
false. So, the index-only plan should not be triggered.
* Expected Result : Success
*
*/
@@ -59,7 +59,7 @@ create index rtree_index_rec on MyData(rec) type rtree;
create index ngram_index_title on MyData(title) type ngram(3);
create index keyword_index_title on MyData(title) type keyword;
-set noindexonly 'true';
+set `compiler.indexonly` "false";
select element {"pk":o.id, "sk":o.docid}
from MyData o
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-sidx-idxonly-01-disable-idxonly_ps.sqlpp
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-sidx-idxonly-01-disable-idxonly_ps.sqlpp
index b986780..f7644cb 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-sidx-idxonly-01-disable-idxonly_ps.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-sidx-idxonly-01-disable-idxonly_ps.sqlpp
@@ -26,7 +26,7 @@
* ... -> unnest-map (sidx) -> split -> unnest-map (pidx)
-> select -> union -> ...
* : The right path:
* ... -> unnest-map (sidx) -> split ->
-> union -> ...
- * : However, we set the "noindexonly" option to true. So,
the index-only plan should not be triggered.
+ * : However, we set the `compiler.indexonly` option to
false. So, the index-only plan should not be triggered.
* Expected Result : Success
*
*/
@@ -59,7 +59,7 @@ create index rtree_index_rec on MyData(rec) type rtree;
create index ngram_index_title on MyData(title) type ngram(3);
create index keyword_index_title on MyData(title) type keyword;
-set noindexonly 'true';
+set `compiler.indexonly` "false";
set `compiler.sort.parallel` "true";
select element {"pk":o.id, "sk":o.docid}
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01.aql
index fbf8bd5..b4cf594 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01.aql
@@ -59,7 +59,7 @@ create index msgCountAIx on TweetMessages(nested.countA) type
btree;
create index msgCountBIx on TweetMessages(nested.countB) type btree;
create index msgTextIx on TweetMessages(nested.message-text) type keyword;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $t1 in dataset('TweetMessages')
let $n := create-circle($t1.nested.sender-location, 0.5)
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nonpure/keep-datetime-local.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nonpure/keep-datetime-local.aql
index c0f490c..840836a 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nonpure/keep-datetime-local.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nonpure/keep-datetime-local.aql
@@ -56,7 +56,7 @@ create index msgCountAIx on TweetMessages(countA) type btree;
create index msgCountBIx on TweetMessages(countB) type btree;
create index msgTextIx on TweetMessages(message-text) type keyword;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $t1 in dataset('TweetMessages')
let $time := current-datetime()
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-composite-index-search.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-composite-index-search.aql
index 22d5b44..9fd94b3 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-composite-index-search.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-composite-index-search.aql
@@ -36,7 +36,7 @@ create dataset Orders(OrderType) primary key o_orderkey;
create index idx_Custkey_Orderstatus on Orders(o_custkey, o_orderstatus);
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $o in dataset('Orders')
where
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-open.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-open.aql
index 729b7e4..9547e6a 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-open.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-open.aql
@@ -42,7 +42,7 @@ create dataset Orders(OrderType)
create index idx_Orders_Custkey on Orders(o_custkey);
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $o in dataset('Orders')
where
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-index-search.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-index-search.aql
index ed8af00..3b49d9c 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-index-search.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/orders-index-search.aql
@@ -42,7 +42,7 @@ create dataset Orders(OrderType)
create index idx_Orders_Custkey on Orders(o_custkey);
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $o in dataset('Orders')
where
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/issue730.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/issue730.aql
index c3f9cce..5d8d7e9 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/issue730.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/issue730.aql
@@ -49,7 +49,7 @@ create dataset TweetMessages(TweetMessageType) primary key
tweetid;
create index twmSndLocIx on TweetMessages(sender_location) type rtree;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $t1 in dataset('TweetMessages')
where $t1.send_time >= datetime('2011-06-18T14:10:17') and $t1.send_time <
datetime('2011-06-18T15:10:17')
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01.aql
index cf19dce..de11a36 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01.aql
@@ -56,7 +56,7 @@ create index msgCountAIx on TweetMessages(countA) type btree;
create index msgCountBIx on TweetMessages(countB) type btree;
create index msgTextIx on TweetMessages(message-text) type keyword;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $t1 in dataset('TweetMessages')
let $n := create-circle($t1.sender-location, 0.5)
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-self-intersect-point.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-self-intersect-point.aql
index 9a5eefa..473bc36 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-self-intersect-point.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-self-intersect-point.aql
@@ -55,7 +55,7 @@ create index msgCountAIx on TweetMessages(countA) type btree;
create index msgCountBIx on TweetMessages(countB) type btree;
create index msgTextIx on TweetMessages(message-text) type keyword;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $t1 in dataset('TweetMessages')
for $t2 in dataset('TweetMessages')
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.sqlpp
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.sqlpp
index dae4f0a..878ac9c 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.sqlpp
@@ -26,7 +26,7 @@
* ... -> unnest-map (sidx) -> split -> unnest-map (pidx)
-> select -> union -> ...
* : The right path:
* ... -> unnest-map (sidx) -> split ->
union -> ...
- * : However, we set the "noindexonly" option to true. So,
the index-only plan should not be triggered.
+ * : However, we set the `compiler.indexonly` option to
false. So, the index-only plan should not be triggered.
* Expected Result : Success
*
*/
@@ -105,7 +105,7 @@ create index rtree_index_rec on MyData(rec) type rtree;
create index ngram_index_title on MyData(title) type ngram(3);
create index keyword_index_title on MyData(title) type keyword;
-set noindexonly 'true';
+set `compiler.indexonly` "false";
select count(*) from (
select x.location
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index-open.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index-open.aql
index 3372e64..a79face 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index-open.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index-open.aql
@@ -43,7 +43,7 @@ using localfs
create index rtree_index_point on MyData(point) type rtree;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $o in dataset('MyData')
where spatial-intersect($o.point,
create-polygon([4.0,1.0,4.0,4.0,12.0,4.0,12.0,1.0]))
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index.aql
index 84aad24..5636d16 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index.aql
@@ -43,7 +43,7 @@ using localfs
create index rtree_index_point on MyData(point) type rtree;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
for $o in dataset('MyData')
where spatial-intersect($o.point,
create-polygon([4.0,1.0,4.0,4.0,12.0,4.0,12.0,1.0]))
diff --git
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1019.aql
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1019.aql
index ab6374a..6227eab 100644
---
a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1019.aql
+++
b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/udfs/query-ASTERIXDB-1019.aql
@@ -67,7 +67,7 @@ create type result as open
create dataset NearbySheltersDuringTornadoDangerChannelResults(result)
primary key id autogenerated;
-set noindexonly 'true';
+set 'compiler.indexonly' "false";
insert into dataset NearbySheltersDuringTornadoDangerChannelResults (
for $sub in dataset NearbySheltersDuringTornadoDangerChannelSubscriptions
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.4.query.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.4.query.sqlpp
index e1a91bc..0a84a67 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.4.query.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.4.query.sqlpp
@@ -24,7 +24,7 @@
use test;
-set noindexonly "true";
+set `compiler.indexonly` "false";
select t1.tweetid as tweetid1, t1.countA as count1, t2.tweetid as tweetid2,
t2.countB as count2
from TweetMessages as t1 left outer join TweetMessages as t2 on t1.countA /*+
indexnl */ = t2.countB
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.5.query.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.5.query.sqlpp
index 6596c92..a312fe1 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.5.query.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.5.query.sqlpp
@@ -24,7 +24,7 @@
use test;
-set noindexonly "false";
+set `compiler.indexonly` "false";
select t1.tweetid as tweetid1, t1.countA as count1, t2.tweetid as tweetid2,
t2.countB as count2
from TweetMessages as t1 left outer join TweetMessages as t2 on t1.countA /*+
indexnl */ = t2.countB
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/metrics/secondary-index/secondary-index.3.metrics.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/metrics/secondary-index/secondary-index.3.metrics.sqlpp
index 95d4681..98166d7 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/metrics/secondary-index/secondary-index.3.metrics.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/metrics/secondary-index/secondary-index.3.metrics.sqlpp
@@ -24,7 +24,7 @@
use test;
-set noindexonly 'true';
+set `compiler.indexonly` "false";
select count(*) from Customers
where name = "Marvella Loud";
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
index a23829f..acfc5e0 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
@@ -10,6 +10,7 @@
"active\.suspend\.timeout" : 3600,
"compiler\.framesize" : 32768,
"compiler\.groupmemory" : 163840,
+ "compiler\.indexonly" : true,
"compiler\.joinmemory" : 262144,
"compiler\.parallelism" : 0,
"compiler\.sort\.parallel" : false,
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
index 48e92b0..6d28223 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
@@ -10,6 +10,7 @@
"active\.suspend\.timeout" : 3600,
"compiler\.framesize" : 32768,
"compiler\.groupmemory" : 163840,
+ "compiler\.indexonly" : true,
"compiler\.joinmemory" : 262144,
"compiler\.parallelism" : -1,
"compiler\.sort\.parallel" : true,
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
index b631b8c..0724b25 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
@@ -10,6 +10,7 @@
"active\.suspend\.timeout" : 3600,
"compiler\.framesize" : 32768,
"compiler\.groupmemory" : 163840,
+ "compiler\.indexonly" : true,
"compiler\.joinmemory" : 262144,
"compiler\.parallelism" : 3,
"compiler\.sort\.parallel" : true,
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.4.ast
b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.4.ast
index 4e1ebd6..a501d7f 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.4.ast
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.4.ast
@@ -1,5 +1,5 @@
DataverseUse test
-Set noindexonly=true
+Set compiler.indexonly=false
Query:
SELECT [
FieldAccessor [
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.5.ast
b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.5.ast
index 965536d..a501d7f 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.5.ast
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/index-leftouterjoin/probe-pidx-with-join-btree-sidx1/probe-pidx-with-join-btree-sidx1.5.ast
@@ -1,5 +1,5 @@
DataverseUse test
-Set noindexonly=false
+Set compiler.indexonly=false
Query:
SELECT [
FieldAccessor [
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
index bdeaddb..b0c6472 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
@@ -71,7 +71,8 @@ public class CompilerProperties extends AbstractProperties {
COMPILER_SORT_SAMPLES(
POSITIVE_INTEGER,
AlgebricksConfig.SORT_SAMPLES,
- "The number of samples which parallel sorting should take from
each partition");
+ "The number of samples which parallel sorting should take from
each partition"),
+ COMPILER_INDEXONLY(BOOLEAN, AlgebricksConfig.INDEX_ONLY_DEFAULT,
"Enabling/disabling index-only plans");
private final IOptionType type;
private final Object defaultValue;
@@ -120,6 +121,8 @@ public class CompilerProperties extends AbstractProperties {
public static final String COMPILER_SORT_SAMPLES_KEY =
Option.COMPILER_SORT_SAMPLES.ini();
+ public static final String COMPILER_INDEXONLY_KEY =
Option.COMPILER_INDEXONLY.ini();
+
public static final int COMPILER_PARALLELISM_AS_STORAGE = 0;
public CompilerProperties(PropertiesAccessor accessor) {
@@ -161,4 +164,8 @@ public class CompilerProperties extends AbstractProperties {
public int getSortSamples() {
return accessor.getInt(Option.COMPILER_SORT_SAMPLES);
}
+
+ public boolean isIndexOnly() {
+ return accessor.getBoolean(Option.COMPILER_INDEXONLY);
+ }
}
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
index 23fdcac..55f3f4f 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
@@ -59,6 +59,7 @@ public class OptimizationConfUtil {
int textSearchFrameLimit = getTextSearchNumFrames(compilerProperties,
querySpecificConfig, sourceLoc);
int sortNumSamples = getSortSamples(compilerProperties,
querySpecificConfig, sourceLoc);
boolean fullParallelSort = getSortParallel(compilerProperties,
querySpecificConfig);
+ boolean indexOnly = isIndexOnly(compilerProperties,
querySpecificConfig);
PhysicalOptimizationConfig physOptConf = new
PhysicalOptimizationConfig();
physOptConf.setFrameSize(frameSize);
@@ -69,7 +70,7 @@ public class OptimizationConfUtil {
physOptConf.setMaxFramesForTextSearch(textSearchFrameLimit);
physOptConf.setSortParallel(fullParallelSort);
physOptConf.setSortSamples(sortNumSamples);
-
+ physOptConf.setIndexOnly(indexOnly);
return physOptConf;
}
@@ -129,4 +130,12 @@ public class OptimizationConfUtil {
CompilerProperties.COMPILER_SORT_SAMPLES_KEY, 1,
"samples");
}
}
+
+ private static boolean isIndexOnly(CompilerProperties compilerProperties,
Map<String, Object> querySpecificConfig) {
+ String valueInQuery = (String)
querySpecificConfig.get(CompilerProperties.COMPILER_INDEXONLY_KEY);
+ if (valueInQuery != null) {
+ return OptionTypes.BOOLEAN.parse(valueInQuery);
+ }
+ return compilerProperties.isIndexOnly();
+ }
}
diff --git
a/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_index_only.md
b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_index_only.md
index 7a71259..93082f7 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_index_only.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/appendix_2_index_only.md
@@ -27,11 +27,11 @@ Since an index-only plan only searches a secondary-index to
answer a query, it i
a non-index-only plan that needs to search the primary index.
However, this index-only plan can be turned off per query by setting the
following parameter.
-* **noindexonly**: if this is set to true, the index-only-plan will not be
applied; the default value is false.
+* **compiler.indexonly**: if this is set to false, the index-only-plan will
not be applied; the default value is true.
##### Example
- SET noindexonly 'true';
+ set `compiler.indexonly` "false";
SELECT m.message AS message
FROM GleambookMessages m where m.message = " love product-b its
shortcut-menu is awesome:)";
diff --git
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
index 15bb54b..0ab21b4 100644
---
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
+++
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
@@ -27,4 +27,5 @@ public class AlgebricksConfig {
public static final Logger ALGEBRICKS_LOGGER =
LogManager.getLogger(ALGEBRICKS_LOGGER_NAME);
public static final int SORT_SAMPLES = 100;
public static final boolean SORT_PARALLEL = true;
+ public static final boolean INDEX_ONLY_DEFAULT = true;
}
diff --git
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
index 598497c..22eeb23 100644
---
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
+++
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
@@ -39,6 +39,7 @@ public class PhysicalOptimizationConfig {
private static final String DEFAULT_IN_MEM_HASH_JOIN_TABLE_SIZE =
"DEFAULT_IN_MEM_HASH_JOIN_TABLE_SIZE";
private static final String SORT_PARALLEL = "SORT_PARALLEL";
private static final String SORT_SAMPLES = "SORT_SAMPLES";
+ private static final String INDEX_ONLY = "INDEX_ONLY";
private Properties properties = new Properties();
@@ -172,6 +173,14 @@ public class PhysicalOptimizationConfig {
setInt(SORT_SAMPLES, sortSamples);
}
+ public void setIndexOnly(boolean indexOnly) {
+ setBoolean(INDEX_ONLY, indexOnly);
+ }
+
+ public boolean isIndexOnly() {
+ return getBoolean(INDEX_ONLY, AlgebricksConfig.INDEX_ONLY_DEFAULT);
+ }
+
private void setInt(String property, int value) {
properties.setProperty(property, Integer.toString(value));
}