MB-60365: Fixing problem with or predicate.
Change-Id: I15b3709de3af9d42349aac81b52e6c48e364d688
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18098
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Vijay Sarathy <vijay.sarathy@couchbase.com>
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
index 119285d8..0023874 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
@@ -177,10 +177,8 @@
double sel = 1.0;
if (afcExpr.getFunctionIdentifier().equals(AlgebricksBuiltinFunctions.OR)) {
- double orSel = getSelectivityFromAnnotation(
- (AbstractFunctionCallExpression) afcExpr.getArguments().get(0).getValue(), join,
- singleDatasetPreds);
- for (int i = 1; i < afcExpr.getArguments().size(); i++) {
+ double orSel = 0.0;
+ for (int i = 0; i < afcExpr.getArguments().size(); i++) {
ILogicalExpression lexpr = afcExpr.getArguments().get(i).getValue();
if (lexpr.getExpressionTag().equals(LogicalExpressionTag.FUNCTION_CALL)) {
sel = getSelectivityFromAnnotation(
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppAnalyzedExecutionTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppAnalyzedExecutionTest.java
index 2e32954..76347a1 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppAnalyzedExecutionTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppAnalyzedExecutionTest.java
@@ -45,8 +45,8 @@
protected static final String TEST_CONFIG_FILE_NAME = "src/test/resources/cc-analyze.conf";
private final String[] denyList = { "synonym: synonym-01", "ddl: analyze-dataset-1", "misc: dump_index",
"array-index: composite-index-queries", "filters: upsert", "column: analyze-dataset",
- "column: filter/boolean", "column: filter/sql-compat"
- /*re-enable once the cbo stats class cast bug is fixed*/, "ddl: analyze-dataset-with-indexes", "warnings: cardinality-hint-warning" };
+ "column: filter/boolean", "column: filter/sql-compat", "ddl: analyze-dataset-with-indexes",
+ "warnings: cardinality-hint-warning" };
@BeforeClass
public static void setUp() throws Exception {
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.042.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.042.plan
index 9aa6fe5..fd431a6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.042.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/column/filter/subplan/subplan.042.plan
@@ -1,16 +1,16 @@
-distribute result [$$70] [cardinality: 2.1, op-cost: 0.0, total-cost: 22.0]
+distribute result [$$70] [cardinality: 6.0, op-cost: 0.0, total-cost: 22.0]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
- exchange [cardinality: 2.1, op-cost: 0.0, total-cost: 22.0]
+ exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 22.0]
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
- aggregate [$$70] <- [agg-sql-sum($$76)] [cardinality: 2.1, op-cost: 0.0, total-cost: 22.0]
+ aggregate [$$70] <- [agg-sql-sum($$76)] [cardinality: 6.0, op-cost: 0.0, total-cost: 22.0]
-- AGGREGATE |UNPARTITIONED|
- exchange [cardinality: 2.1, op-cost: 0.0, total-cost: 22.0]
+ exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 22.0]
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
- aggregate [$$76] <- [agg-sql-count(1)] [cardinality: 2.1, op-cost: 0.0, total-cost: 22.0]
+ aggregate [$$76] <- [agg-sql-count(1)] [cardinality: 6.0, op-cost: 0.0, total-cost: 22.0]
-- AGGREGATE |PARTITIONED|
- exchange [cardinality: 2.1, op-cost: 0.0, total-cost: 22.0]
+ exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 22.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (or(eq($$71, "7"), neq($$69, 0))) [cardinality: 2.1, op-cost: 6.0, total-cost: 22.0]
+ join (or(eq($$71, "7"), neq($$69, 0))) [cardinality: 6.0, op-cost: 6.0, total-cost: 22.0]
-- NESTED_LOOP |PARTITIONED|
exchange [cardinality: 6.0, op-cost: 0.0, total-cost: 6.0]
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|