You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2022/10/21 13:15:34 UTC

[ignite-3] branch ignite-3.0.0-beta1 updated (b689d02c2c -> 5200823421)

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a change to branch ignite-3.0.0-beta1
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


    from b689d02c2c IGNITE-17637 Implement a commit partition path write intent resolution logic for RO reads (#1197)
     new 4121d11953 IGNITE-17816:Sort out and merge Calcite tickets to Ignite 3.0 (step 7) (#1195)
     new 5200823421 IGNITE-17820 SQL. Add native support for SEARCH/SARG operator (#1176)

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../sql/engine/ItHashSpoolIntegrationTest.java     |    61 +
 .../ignite/internal/sqllogic/SqlScriptRunner.java  |    92 +-
 .../test_full_outer_join_many_matches.test_ignore  |     3 +
 .../sql/sqlite/aggregates/agg1.test_ignored        | 34492 ----------------
 .../sql/sqlite/aggregates/agg1.test_slow           |    87 +
 .../sql/sqlite/aggregates/agg2.test_ignored        | 32616 ---------------
 .../sql/sqlite/aggregates/agg2.test_slow           |   133 +
 .../sql/sqlite/aggregates/agg3.test_ignored        | 33723 ---------------
 .../sql/sqlite/aggregates/agg3.test_slow           |    46 +
 .../sql/sqlite/aggregates/agg4.test_ignored        | 34088 ----------------
 .../sql/sqlite/aggregates/agg4.test_slow           |    47 +
 .../select1.test_native => select/select1.test}    |     0
 .../select2.test_native => select/select2.test}    |     0
 .../select1.test_native => select/select3.test}    | 18976 +++++----
 .../select3_1.test}                                | 25683 +++++-------
 .../select1.test_native => select/select3_2.test}  | 17540 ++++----
 .../sql/sqlite/select3/select3.test_native         | 40766 -------------------
 .../scalar/test_complex_correlated_subquery.test   |    36 +
 .../test_complex_correlated_subquery.test_ignore   |     1 -
 .../subquery/scalar/test_count_star_subquery.test  |    74 +-
 ...st_ignore => test_many_correlated_columns.test} |    21 +-
 .../test_many_correlated_columns.test_ignore       |     7 +-
 .../test_nested_correlated_subquery.test_ignore    |     1 +
 .../scalar/test_uncorrelated_scalar_subquery.test  |    78 +
 .../test_uncorrelated_scalar_subquery.test_ignore  |    12 +-
 .../internal/sql/engine/SqlQueryProcessor.java     |     5 +
 .../sql/engine/exec/AbstractIndexScan.java         |    62 +-
 .../internal/sql/engine/exec/ExecutionContext.java |     7 +
 .../sql/engine/exec/LogicalRelImplementor.java     |    28 +-
 .../internal/sql/engine/exec/RuntimeHashIndex.java |    31 +-
 .../sql/engine/exec/RuntimeSortedIndex.java        |    62 +-
 .../ignite/internal/sql/engine/exec/TreeIndex.java |     4 +-
 .../sql/engine/exec/exp/ExpressionFactory.java     |    15 +-
 .../sql/engine/exec/exp/ExpressionFactoryImpl.java |   432 +-
 .../exp/{BiScalar.java => RangeCondition.java}     |    22 +-
 .../exec/exp/{Scalar.java => RangeIterable.java}   |     7 +-
 .../sql/engine/exec/rel/IndexScanNode.java         |    97 +-
 .../sql/engine/exec/rel/IndexSpoolNode.java        |     7 +-
 .../sql/engine/exec/rel/MergeJoinNode.java         |    14 +-
 .../sql/engine/externalize/RelInputEx.java         |    10 +
 .../internal/sql/engine/externalize/RelJson.java   |    61 +-
 .../sql/engine/externalize/RelJsonReader.java      |     7 +
 .../sql/engine/metadata/IgniteMdSelectivity.java   |    40 +-
 .../internal/sql/engine/prepare/IgnitePlanner.java |    19 +
 .../sql/engine/prepare/IgnitePrograms.java         |     2 +
 .../sql/engine/prepare/PlanningContext.java        |    34 +-
 .../bounds/ExactBounds.java}                       |    38 +-
 .../bounds/MultiBounds.java}                       |    40 +-
 .../sql/engine/prepare/bounds/RangeBounds.java     |   126 +
 .../sql/engine/prepare/bounds/SearchBounds.java    |    66 +
 .../internal/sql/engine/rel/AbstractIndexScan.java |    80 +-
 .../internal/sql/engine/rel/IgniteIndexScan.java   |    16 +-
 .../sql/engine/rel/IgniteSortedIndexSpool.java     |    30 +-
 .../engine/rel/ProjectableFilterableTableScan.java |     9 +-
 .../engine/rel/logical/IgniteLogicalIndexScan.java |    22 +-
 .../FilterSpoolMergeToSortedIndexSpoolRule.java    |    46 +-
 .../sql/engine/rule/LogicalScanConverterRule.java  |     2 +-
 .../engine/rule/logical/FilterScanMergeRule.java   |    18 +-
 .../internal/sql/engine/util/BaseQueryContext.java |    19 +-
 .../internal/sql/engine/util/IgniteMethod.java     |     2 +
 .../internal/sql/engine/util/IndexConditions.java  |   151 -
 .../ignite/internal/sql/engine/util/RexUtils.java  |   455 +-
 .../sql/engine/exec/RuntimeSortedIndexTest.java    |     2 +-
 .../sql/engine/exec/rel/AbstractExecutionTest.java |    15 +
 .../exec/rel/HashIndexSpoolExecutionTest.java      |    57 +-
 .../exec/rel/IndexScanNodeExecutionTest.java       |    55 +-
 .../engine/exec/rel/MergeJoinExecutionTest.java    |    75 +-
 .../exec/rel/SortedIndexSpoolExecutionTest.java    |   126 +-
 .../sql/engine/planner/AbstractPlannerTest.java    |    34 +-
 .../CorrelatedNestedLoopJoinPlannerTest.java       |    30 +-
 .../engine/planner/HashIndexSpoolPlannerTest.java  |    24 +-
 .../internal/sql/engine/planner/PlannerTest.java   |    12 +-
 .../sql/engine/planner/PlannerTimeoutTest.java     |   122 +
 .../planner/ProjectFilterScanMergePlannerTest.java |    24 +-
 .../planner/SortedIndexSpoolPlannerTest.java       |    84 +-
 75 files changed, 31987 insertions(+), 209342 deletions(-)
 create mode 100644 modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItHashSpoolIntegrationTest.java
 delete mode 100644 modules/runner/src/integrationTest/sql/sqlite/aggregates/agg1.test_ignored
 delete mode 100644 modules/runner/src/integrationTest/sql/sqlite/aggregates/agg2.test_ignored
 delete mode 100644 modules/runner/src/integrationTest/sql/sqlite/aggregates/agg3.test_ignored
 delete mode 100644 modules/runner/src/integrationTest/sql/sqlite/aggregates/agg4.test_ignored
 copy modules/runner/src/integrationTest/sql/sqlite/{select1/select1.test_native => select/select1.test} (100%)
 rename modules/runner/src/integrationTest/sql/sqlite/{select2/select2.test_native => select/select2.test} (100%)
 copy modules/runner/src/integrationTest/sql/sqlite/{select1/select1.test_native => select/select3.test} (58%)
 copy modules/runner/src/integrationTest/sql/sqlite/{select3/select3_erroneous_hash_res.test_ignore => select/select3_1.test} (57%)
 rename modules/runner/src/integrationTest/sql/sqlite/{select1/select1.test_native => select/select3_2.test} (62%)
 delete mode 100644 modules/runner/src/integrationTest/sql/sqlite/select3/select3.test_native
 copy modules/runner/src/integrationTest/sql/subquery/scalar/{test_many_correlated_columns.test_ignore => test_many_correlated_columns.test} (68%)
 copy modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/{BiScalar.java => RangeCondition.java} (65%)
 copy modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/{Scalar.java => RangeIterable.java} (83%)
 copy modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/{session/SessionId.java => prepare/bounds/ExactBounds.java} (65%)
 copy modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/{session/SessionId.java => prepare/bounds/MultiBounds.java} (61%)
 create mode 100644 modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/RangeBounds.java
 create mode 100644 modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/SearchBounds.java
 delete mode 100644 modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IndexConditions.java
 create mode 100644 modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTimeoutTest.java


[ignite-3] 02/02: IGNITE-17820 SQL. Add native support for SEARCH/SARG operator (#1176)

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-3.0.0-beta1
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 5200823421e46924464e1f03fe9b18a7fbc3aeda
Author: Andrew V. Mashenkov <AM...@users.noreply.github.com>
AuthorDate: Tue Oct 18 16:10:18 2022 +0300

    IGNITE-17820 SQL. Add native support for SEARCH/SARG operator (#1176)
---
 .../sql/engine/exec/AbstractIndexScan.java         |  62 +--
 .../sql/engine/exec/LogicalRelImplementor.java     |  28 +-
 .../sql/engine/exec/RuntimeSortedIndex.java        |  62 ++-
 .../ignite/internal/sql/engine/exec/TreeIndex.java |   4 +-
 .../sql/engine/exec/exp/ExpressionFactory.java     |  13 +
 .../sql/engine/exec/exp/ExpressionFactoryImpl.java | 261 +++++++++++-
 .../{TreeIndex.java => exp/RangeCondition.java}    |  29 +-
 .../{TreeIndex.java => exp/RangeIterable.java}     |  20 +-
 .../sql/engine/exec/rel/IndexScanNode.java         |  97 +++--
 .../sql/engine/exec/rel/IndexSpoolNode.java        |   7 +-
 .../sql/engine/externalize/RelInputEx.java         |  10 +
 .../internal/sql/engine/externalize/RelJson.java   |  61 ++-
 .../sql/engine/externalize/RelJsonReader.java      |   7 +
 .../sql/engine/metadata/IgniteMdSelectivity.java   |  40 +-
 .../sql/engine/prepare/IgnitePrograms.java         |   2 +
 .../sql/engine/prepare/bounds/ExactBounds.java     |  74 ++++
 .../sql/engine/prepare/bounds/MultiBounds.java     |  76 ++++
 .../sql/engine/prepare/bounds/RangeBounds.java     | 126 ++++++
 .../sql/engine/prepare/bounds/SearchBounds.java    |  66 +++
 .../internal/sql/engine/rel/AbstractIndexScan.java |  80 +---
 .../internal/sql/engine/rel/IgniteIndexScan.java   |  16 +-
 .../sql/engine/rel/IgniteSortedIndexSpool.java     |  30 +-
 .../engine/rel/ProjectableFilterableTableScan.java |   9 +-
 .../engine/rel/logical/IgniteLogicalIndexScan.java |  22 +-
 .../FilterSpoolMergeToSortedIndexSpoolRule.java    |  46 +--
 .../sql/engine/rule/LogicalScanConverterRule.java  |   2 +-
 .../engine/rule/logical/FilterScanMergeRule.java   |  18 +-
 .../internal/sql/engine/util/IndexConditions.java  | 151 -------
 .../ignite/internal/sql/engine/util/RexUtils.java  | 449 +++++++++++++--------
 .../sql/engine/exec/RuntimeSortedIndexTest.java    |   2 +-
 .../exec/rel/IndexScanNodeExecutionTest.java       |  55 ++-
 .../exec/rel/SortedIndexSpoolExecutionTest.java    |  54 ++-
 .../CorrelatedNestedLoopJoinPlannerTest.java       |  28 +-
 .../planner/ProjectFilterScanMergePlannerTest.java |  24 +-
 .../planner/SortedIndexSpoolPlannerTest.java       |  85 ++--
 35 files changed, 1403 insertions(+), 713 deletions(-)

diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/AbstractIndexScan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/AbstractIndexScan.java
index 18a03e4d64..2779dee515 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/AbstractIndexScan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/AbstractIndexScan.java
@@ -17,11 +17,13 @@
 
 package org.apache.ignite.internal.sql.engine.exec;
 
+import com.google.common.collect.Streams;
 import java.util.Iterator;
 import java.util.function.Function;
 import java.util.function.Predicate;
-import java.util.function.Supplier;
 import org.apache.calcite.rel.type.RelDataType;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
+import org.apache.ignite.internal.util.CollectionUtils;
 import org.apache.ignite.internal.util.FilteringIterator;
 import org.apache.ignite.internal.util.TransformingIterator;
 import org.apache.ignite.lang.IgniteInternalException;
@@ -35,11 +37,8 @@ public abstract class AbstractIndexScan<RowT, IdxRowT> implements Iterable<RowT>
     /** Additional filters. */
     private final Predicate<RowT> filters;
 
-    /** Lower index scan bound. */
-    private final Supplier<RowT> lowerBound;
-
-    /** Upper index scan bound. */
-    private final Supplier<RowT> upperBound;
+    /** Index scan bounds. */
+    private final RangeIterable<RowT> ranges;
 
     private final Function<RowT, RowT> rowTransformer;
 
@@ -50,12 +49,11 @@ public abstract class AbstractIndexScan<RowT, IdxRowT> implements Iterable<RowT>
     /**
      * Constructor.
      *
-     * @param ectx       Execution context.
-     * @param rowType    Rel data type.
-     * @param idx        Physical index.
-     * @param filters    Additional filters.
-     * @param lowerBound Lower index scan bound.
-     * @param upperBound Upper index scan bound.
+     * @param ectx Execution context.
+     * @param rowType Rel data type.
+     * @param idx Physical index.
+     * @param filters Additional filters.
+     * @param ranges Index scan bounds.
      * @param rowTransformer Row transformer.
      */
     protected AbstractIndexScan(
@@ -63,37 +61,39 @@ public abstract class AbstractIndexScan<RowT, IdxRowT> implements Iterable<RowT>
             RelDataType rowType,
             TreeIndex<IdxRowT> idx,
             Predicate<RowT> filters,
-            Supplier<RowT> lowerBound,
-            Supplier<RowT> upperBound,
+            RangeIterable<RowT> ranges,
             Function<RowT, RowT> rowTransformer
     ) {
         this.ectx = ectx;
         this.rowType = rowType;
         this.idx = idx;
         this.filters = filters;
-        this.lowerBound = lowerBound;
-        this.upperBound = upperBound;
+        this.ranges = ranges;
         this.rowTransformer = rowTransformer;
     }
 
     /** {@inheritDoc} */
     @Override
     public synchronized Iterator<RowT> iterator() {
-        IdxRowT lower = lowerBound == null ? null : row2indexRow(lowerBound.get());
-        IdxRowT upper = upperBound == null ? null : row2indexRow(upperBound.get());
-
-        Iterator<RowT> it = new TransformingIterator<>(
-                idx.find(lower, upper),
-                this::indexRow2Row
-        );
-
-        it = new FilteringIterator<>(it, filters);
-
-        if (rowTransformer != null) {
-            it = new TransformingIterator<>(it, rowTransformer);
-        }
-
-        return it;
+        Iterable<RowT>[] iterables = Streams.stream(ranges)
+                .map(range -> new Iterable<RowT>() {
+                            @Override
+                            public Iterator<RowT> iterator() {
+                                Iterator<RowT> it = new TransformingIterator<>(
+                                        idx.find(row2indexRow(range.lower()), row2indexRow(range.upper()), range.lowerInclude(),
+                                                range.upperInclude()),
+                                        AbstractIndexScan.this::indexRow2Row
+                                );
+
+                                it = new FilteringIterator<>(it, filters);
+
+                                return (rowTransformer != null) ? new TransformingIterator<>(it, rowTransformer) : it;
+                            }
+                        }
+                )
+                .toArray(Iterable[]::new);
+
+        return CollectionUtils.concat(iterables).iterator();
     }
 
     protected abstract IdxRowT row2indexRow(RowT bound);
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/LogicalRelImplementor.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/LogicalRelImplementor.java
index b7d260d9a8..dc9208d9a7 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/LogicalRelImplementor.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/LogicalRelImplementor.java
@@ -42,6 +42,7 @@ import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.ignite.internal.sql.engine.exec.RowHandler.RowFactory;
 import org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactory;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AccumulatorWrapper;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AggregateType;
 import org.apache.ignite.internal.sql.engine.exec.rel.AbstractSetOpNode;
@@ -68,6 +69,7 @@ import org.apache.ignite.internal.sql.engine.exec.rel.TableSpoolNode;
 import org.apache.ignite.internal.sql.engine.exec.rel.UnionAllNode;
 import org.apache.ignite.internal.sql.engine.metadata.AffinityService;
 import org.apache.ignite.internal.sql.engine.metadata.ColocationGroup;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.IgniteCorrelatedNestedLoopJoin;
 import org.apache.ignite.internal.sql.engine.rel.IgniteExchange;
 import org.apache.ignite.internal.sql.engine.rel.IgniteFilter;
@@ -126,10 +128,10 @@ public class LogicalRelImplementor<RowT> implements IgniteRelVisitor<Node<RowT>>
     /**
      * Constructor.
      *
-     * @param ctx             Root context.
-     * @param affSrvc         Affinity service.
+     * @param ctx Root context.
+     * @param affSrvc Affinity service.
      * @param mailboxRegistry Mailbox registry.
-     * @param exchangeSvc     Exchange service.
+     * @param exchangeSvc Exchange service.
      */
     public LogicalRelImplementor(
             ExecutionContext<RowT> ctx,
@@ -290,21 +292,20 @@ public class LogicalRelImplementor<RowT> implements IgniteRelVisitor<Node<RowT>>
         ImmutableBitSet requiredColumns = rel.requiredColumns();
         RelDataType rowType = tbl.getRowType(typeFactory, requiredColumns);
 
-        List<RexNode> lowerCond = rel.lowerBound();
-        List<RexNode> upperCond = rel.upperBound();
+        List<SearchBounds> searchBounds = rel.searchBounds();
         RexNode condition = rel.condition();
         List<RexNode> projects = rel.projects();
 
-        Supplier<RowT> lower = lowerCond == null ? null : expressionFactory.rowSource(lowerCond);
-        Supplier<RowT> upper = upperCond == null ? null : expressionFactory.rowSource(upperCond);
         Predicate<RowT> filters = condition == null ? null : expressionFactory.predicate(condition, rowType);
         Function<RowT, RowT> prj = projects == null ? null : expressionFactory.project(projects, rowType);
+        RangeIterable<RowT> ranges = searchBounds == null ? null :
+                expressionFactory.ranges(searchBounds, rel.collation(), tbl.getRowType(typeFactory));
 
         IgniteIndex idx = tbl.getIndex(rel.indexName());
         ColocationGroup group = ctx.group(rel.sourceId());
         int[] parts = group.partitions(ctx.localNodeId());
 
-        return new IndexScanNode<>(ctx, rowType, idx, tbl, parts, lower, upper, filters, prj, requiredColumns.toBitSet());
+        return new IndexScanNode<>(ctx, rowType, idx, tbl, parts, ranges, filters, prj, requiredColumns.toBitSet());
     }
 
     /** {@inheritDoc} */
@@ -410,14 +411,10 @@ public class LogicalRelImplementor<RowT> implements IgniteRelVisitor<Node<RowT>>
     public Node<RowT> visit(IgniteSortedIndexSpool rel) {
         RelCollation collation = rel.collation();
 
-        assert rel.indexCondition() != null : rel;
-
-        List<RexNode> lowerBound = rel.indexCondition().lowerBound();
-        List<RexNode> upperBound = rel.indexCondition().upperBound();
+        assert rel.searchBounds() != null : rel;
 
         Predicate<RowT> filter = expressionFactory.predicate(rel.condition(), rel.getRowType());
-        Supplier<RowT> lower = lowerBound == null ? null : expressionFactory.rowSource(lowerBound);
-        Supplier<RowT> upper = upperBound == null ? null : expressionFactory.rowSource(upperBound);
+        RangeIterable<RowT> ranges = expressionFactory.ranges(rel.searchBounds(), collation, rel.getRowType());
 
         IndexSpoolNode<RowT> node = IndexSpoolNode.createTreeSpool(
                 ctx,
@@ -425,8 +422,7 @@ public class LogicalRelImplementor<RowT> implements IgniteRelVisitor<Node<RowT>>
                 collation,
                 expressionFactory.comparator(collation),
                 filter,
-                lower,
-                upper
+                ranges
         );
 
         Node<RowT> input = visit(rel.getInput());
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndex.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndex.java
index 027b88ceb5..23495f2007 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndex.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndex.java
@@ -25,9 +25,9 @@ import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Objects;
 import java.util.function.Predicate;
-import java.util.function.Supplier;
 import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.type.RelDataType;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
 import org.apache.ignite.internal.util.Cursor;
 import org.jetbrains.annotations.Nullable;
 
@@ -79,18 +79,16 @@ public class RuntimeSortedIndex<RowT> implements RuntimeIndex<RowT>, TreeIndex<R
 
     /** {@inheritDoc} */
     @Override
-    public Cursor<RowT> find(RowT lower, RowT upper) {
+    public Cursor<RowT> find(RowT lower, RowT upper, boolean lowerInclude, boolean upperInclude) {
         int firstCol = first(collation.getKeys());
 
-        if (ectx.rowHandler().get(firstCol, lower) != null && ectx.rowHandler().get(firstCol, upper) != null) {
-            return new CursorImpl(rows, lower, upper);
-        } else if (ectx.rowHandler().get(firstCol, lower) == null && ectx.rowHandler().get(firstCol, upper) != null) {
-            return new CursorImpl(rows, null, upper);
-        } else if (ectx.rowHandler().get(firstCol, lower) != null && ectx.rowHandler().get(firstCol, upper) == null) {
-            return new CursorImpl(rows, lower, null);
-        } else {
-            return new CursorImpl(rows, null, null);
-        }
+        Object lowerBound = (lower == null) ? null : ectx.rowHandler().get(firstCol, lower);
+        Object upperBound = (upper == null) ? null : ectx.rowHandler().get(firstCol, upper);
+
+        RowT lowerRow = (lowerBound == null) ? null : lower;
+        RowT upperRow = (upperBound == null) ? null : upper;
+
+        return new CursorImpl(rows, lowerRow, upperRow, lowerInclude, upperInclude);
     }
 
     /**
@@ -100,10 +98,9 @@ public class RuntimeSortedIndex<RowT> implements RuntimeIndex<RowT>, TreeIndex<R
             ExecutionContext<RowT> ectx,
             RelDataType rowType,
             Predicate<RowT> filter,
-            Supplier<RowT> lowerBound,
-            Supplier<RowT> upperBound
+            RangeIterable<RowT> ranges
     ) {
-        return new IndexScan(rowType, this, filter, lowerBound, upperBound);
+        return new IndexScan(rowType, this, filter, ranges);
     }
 
     /**
@@ -116,14 +113,27 @@ public class RuntimeSortedIndex<RowT> implements RuntimeIndex<RowT>, TreeIndex<R
         /** Upper bound. */
         private final RowT upper;
 
+        /** Include upper bound. */
+        private final boolean includeUpper;
+
         /** Current index of list element. */
         private int idx;
 
-        CursorImpl(List<RowT> rows, @Nullable RowT lower, @Nullable RowT upper) {
+        /**
+         * Creates sorted index cursor.
+         *
+         * @param rows List of rows.
+         * @param lower Lower bound.
+         * @param upper Upper bound.
+         * @param lowerInclude {@code True} for inclusive lower bound.
+         * @param upperInclude {@code True} for inclusive upper bound.
+         */
+        CursorImpl(List<RowT> rows, @Nullable RowT lower, @Nullable RowT upper, boolean lowerInclude, boolean upperInclude) {
             this.rows = rows;
             this.upper = upper;
+            this.includeUpper = upperInclude;
 
-            idx = lower == null ? 0 : lowerBound(rows, lower);
+            idx = lower == null ? 0 : lowerBound(rows, lower, lowerInclude);
         }
 
         /**
@@ -131,9 +141,10 @@ public class RuntimeSortedIndex<RowT> implements RuntimeIndex<RowT>, TreeIndex<R
          *
          * @param rows List of rows.
          * @param bound Lower bound.
+         * @param includeBound {@code True} for inclusive bound.
          * @return Lower bound position in the list.
          */
-        private int lowerBound(List<RowT> rows, RowT bound) {
+        private int lowerBound(List<RowT> rows, RowT bound, boolean includeBound) {
             int low = 0;
             int high = rows.size() - 1;
             int idx = -1;
@@ -144,7 +155,7 @@ public class RuntimeSortedIndex<RowT> implements RuntimeIndex<RowT>, TreeIndex<R
 
                 if (compRes > 0) {
                     high = mid - 1;
-                } else if (compRes == 0) {
+                } else if (compRes == 0 && includeBound) {
                     idx = mid;
                     high = mid - 1;
                 } else {
@@ -158,7 +169,7 @@ public class RuntimeSortedIndex<RowT> implements RuntimeIndex<RowT>, TreeIndex<R
         /** {@inheritDoc} */
         @Override
         public boolean hasNext() {
-            if (idx == rows.size() || (upper != null && comp.compare(upper, rows.get(idx)) < 0)) {
+            if (idx == rows.size() || (upper != null && comp.compare(upper, rows.get(idx)) < (includeUpper ? 0 : 1))) {
                 return false;
             }
 
@@ -186,14 +197,21 @@ public class RuntimeSortedIndex<RowT> implements RuntimeIndex<RowT>, TreeIndex<R
      * Index scan for RuntimeSortedIndex.
      */
     private class IndexScan extends AbstractIndexScan<RowT, RowT> {
+        /**
+         * Creates index scan.
+         *
+         * @param rowType Row type.
+         * @param idx Physical index.
+         * @param filter Additional filters.
+         * @param ranges Index scan bounds.
+         */
         IndexScan(
                 RelDataType rowType,
                 TreeIndex<RowT> idx,
                 Predicate<RowT> filter,
-                Supplier<RowT> lowerBound,
-                Supplier<RowT> upperBound
+                RangeIterable<RowT> ranges
         ) {
-            super(RuntimeSortedIndex.this.ectx, rowType, idx, filter, lowerBound, upperBound, null);
+            super(RuntimeSortedIndex.this.ectx, rowType, idx, filter, ranges, null);
         }
 
         /** {@inheritDoc} */
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java
index cd2bd12000..5d40c5d5a7 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java
@@ -30,7 +30,9 @@ public interface TreeIndex<R> {
      *
      * @param lower Lower bound.
      * @param upper Upper bound.
+     * @param lowerInclude Inclusive lower bound.
+     * @param upperInclude Inclusive upper bound.
      * @return Cursor over the rows within bounds.
      */
-    Cursor<R> find(R lower, R upper);
+    Cursor<R> find(R lower, R upper, boolean lowerInclude, boolean upperInclude);
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactory.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactory.java
index 0b148268b7..9867073d55 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactory.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactory.java
@@ -31,6 +31,7 @@ import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.rex.RexNode;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AccumulatorWrapper;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AggregateType;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 
 /**
  * Expression factory.
@@ -105,6 +106,18 @@ public interface ExpressionFactory<RowT> {
      */
     Supplier<RowT> rowSource(List<RexNode> values);
 
+    /**
+     * Creates iterable search bounds tuples (lower row/upper row) by search bounds expressions.
+     *
+     * @param searchBounds Search bounds.
+     * @param collation Collation.
+     * @param rowType Row type.
+     */
+    RangeIterable<RowT> ranges(
+            List<SearchBounds> searchBounds,
+            RelCollation collation,
+            RelDataType rowType
+    );
 
     /**
      * Executes expression.
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java
index de6dae6f56..1bc734e54e 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java
@@ -23,9 +23,13 @@ import com.github.benmanes.caffeine.cache.Caffeine;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.BitSet;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
@@ -65,14 +69,18 @@ import org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.InputGe
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AccumulatorWrapper;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AccumulatorsFactory;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.AggregateType;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.ExactBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.MultiBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.RangeBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.apache.ignite.internal.sql.engine.util.IgniteMethod;
 import org.apache.ignite.internal.sql.engine.util.Primitives;
 
 /**
- * Implements rex expression into a function object. Uses JaninoRexCompiler under the hood. Each expression compiles
- * into a class and a wrapper over it is returned.
+ * Implements rex expression into a function object. Uses JaninoRexCompiler under the hood. Each expression compiles into a class and a
+ * wrapper over it is returned.
  */
 public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> {
     private static final int CACHE_SIZE = 1024;
@@ -234,7 +242,8 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> {
     }
 
     /** {@inheritDoc} */
-    @Override public BiPredicate<RowT, RowT> biPredicate(RexNode filter, RelDataType rowType) {
+    @Override
+    public BiPredicate<RowT, RowT> biPredicate(RexNode filter, RelDataType rowType) {
         return new BiPredicateImpl(biScalar(filter, rowType));
     }
 
@@ -288,6 +297,127 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> {
         return rows;
     }
 
+
+    /** {@inheritDoc} */
+    @Override
+    public RangeIterable<RowT> ranges(
+            List<SearchBounds> searchBounds,
+            RelCollation collation,
+            RelDataType rowType
+    ) {
+        RowFactory<RowT> rowFactory = ctx.rowHandler().factory(typeFactory, rowType);
+
+        List<RangeCondition<RowT>> ranges = new ArrayList<>();
+
+        expandBounds(
+                ranges,
+                searchBounds,
+                rowType,
+                rowFactory,
+                collation.getKeys(),
+                0,
+                Arrays.asList(new RexNode[searchBounds.size()]),
+                Arrays.asList(new RexNode[searchBounds.size()]),
+                true,
+                true
+        );
+
+        return new RangeIterableImpl(ranges, comparator(collation));
+    }
+
+    /**
+     * Expand column-oriented {@link SearchBounds} to a row-oriented list of ranges ({@link RangeCondition}).
+     *
+     * @param ranges List of ranges.
+     * @param searchBounds Search bounds.
+     * @param rowType Row type.
+     * @param rowFactory Row factory.
+     * @param collationKeys Collation keys.
+     * @param collationKeyIdx Current collation key index (field to process).
+     * @param curLower Current lower row.
+     * @param curUpper Current upper row.
+     * @param lowerInclude Include current lower row.
+     * @param upperInclude Include current upper row.
+     */
+    private void expandBounds(
+            List<RangeCondition<RowT>> ranges,
+            List<SearchBounds> searchBounds,
+            RelDataType rowType,
+            RowFactory<RowT> rowFactory,
+            List<Integer> collationKeys,
+            int collationKeyIdx,
+            List<RexNode> curLower,
+            List<RexNode> curUpper,
+            boolean lowerInclude,
+            boolean upperInclude
+    ) {
+        if ((collationKeyIdx >= collationKeys.size())
+                || (!lowerInclude && !upperInclude)
+                || searchBounds.get(collationKeys.get(collationKeyIdx)) == null) {
+            ranges.add(new RangeConditionImpl(
+                    scalar(curLower, rowType),
+                    scalar(curUpper, rowType),
+                    lowerInclude,
+                    upperInclude,
+                    rowFactory
+            ));
+
+            return;
+        }
+
+        int fieldIdx = collationKeys.get(collationKeyIdx);
+        SearchBounds fieldBounds = searchBounds.get(fieldIdx);
+
+        Collection<SearchBounds> fieldMultiBounds = fieldBounds instanceof MultiBounds
+                ? ((MultiBounds) fieldBounds).bounds()
+                : Collections.singleton(fieldBounds);
+
+        for (SearchBounds fieldSingleBounds : fieldMultiBounds) {
+            RexNode fieldLowerBound;
+            RexNode fieldUpperBound;
+            boolean fieldLowerInclude;
+            boolean fieldUpperInclude;
+
+            if (fieldSingleBounds instanceof ExactBounds) {
+                fieldLowerBound = fieldUpperBound = ((ExactBounds) fieldSingleBounds).bound();
+                fieldLowerInclude = fieldUpperInclude = true;
+            } else if (fieldSingleBounds instanceof RangeBounds) {
+                RangeBounds fieldRangeBounds = (RangeBounds) fieldSingleBounds;
+
+                fieldLowerBound = fieldRangeBounds.lowerBound();
+                fieldUpperBound = fieldRangeBounds.upperBound();
+                fieldLowerInclude = fieldRangeBounds.lowerInclude();
+                fieldUpperInclude = fieldRangeBounds.upperInclude();
+            } else {
+                throw new IllegalStateException("Unexpected bounds: " + fieldSingleBounds);
+            }
+
+            if (lowerInclude) {
+                curLower.set(fieldIdx, fieldLowerBound);
+            }
+
+            if (upperInclude) {
+                curUpper.set(fieldIdx, fieldUpperBound);
+            }
+
+            expandBounds(
+                    ranges,
+                    searchBounds,
+                    rowType,
+                    rowFactory,
+                    collationKeys,
+                    collationKeyIdx + 1,
+                    curLower,
+                    curUpper,
+                    lowerInclude && fieldLowerInclude,
+                    upperInclude && fieldUpperInclude
+            );
+        }
+
+        curLower.set(fieldIdx, null);
+        curLower.set(fieldIdx, null);
+    }
+
     /**
      * Creates {@link SingleScalar}, a code-generated expressions evaluator.
      *
@@ -428,7 +558,8 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> {
             b.append(node.getType().getFullTypeString());
 
             new RexShuttle() {
-                @Override public RexNode visitFieldAccess(RexFieldAccess fieldAccess) {
+                @Override
+                public RexNode visitFieldAccess(RexFieldAccess fieldAccess) {
                     b.append(", fldIdx=").append(fieldAccess.getField().getIndex());
 
                     return super.visitFieldAccess(fieldAccess);
@@ -492,7 +623,8 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> {
         }
 
         /** {@inheritDoc} */
-        @Override public boolean test(RowT r1, RowT r2) {
+        @Override
+        public boolean test(RowT r1, RowT r2) {
             scalar.execute(ctx, r1, r2, out);
             return Boolean.TRUE == hnd.get(0, out);
         }
@@ -506,7 +638,7 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> {
         /**
          * Constructor.
          *
-         * @param scalar  Scalar.
+         * @param scalar Scalar.
          * @param factory Row factory.
          */
         private ProjectImpl(SingleScalar scalar, RowFactory<RowT> factory) {
@@ -570,6 +702,120 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> {
         }
     }
 
+    private class RangeConditionImpl implements RangeCondition<RowT> {
+        /** Lower bound expression. */
+        private final SingleScalar lowerBound;
+
+        /** Upper bound expression. */
+        private final SingleScalar upperBound;
+
+        /** Inclusive lower bound flag. */
+        private final boolean lowerInclude;
+
+        /** Inclusive upper bound flag. */
+        private final boolean upperInclude;
+
+        /** Lower row. */
+        private RowT lowerRow;
+
+        /** Upper row. */
+        private RowT upperRow;
+
+        /** Row factory. */
+        private final RowFactory<RowT> factory;
+
+        private RangeConditionImpl(
+                SingleScalar lowerBound,
+                SingleScalar upperBound,
+                boolean lowerInclude,
+                boolean upperInclude,
+                RowFactory<RowT> factory
+        ) {
+            this.lowerBound = lowerBound;
+            this.upperBound = upperBound;
+            this.lowerInclude = lowerInclude;
+            this.upperInclude = upperInclude;
+            this.factory = factory;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public RowT lower() {
+            return lowerRow != null ? lowerRow : (lowerRow = getRow(lowerBound));
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public RowT upper() {
+            return upperRow != null ? upperRow : (upperRow = getRow(upperBound));
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public boolean lowerInclude() {
+            return lowerInclude;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public boolean upperInclude() {
+            return upperInclude;
+        }
+
+        /** Compute row. */
+        private RowT getRow(SingleScalar scalar) {
+            RowT res = factory.create();
+            scalar.execute(ctx, null, res);
+
+            return res;
+        }
+
+        /** Clear cached rows. */
+        public void clearCache() {
+            lowerRow = upperRow = null;
+        }
+    }
+
+    private class RangeIterableImpl implements RangeIterable<RowT> {
+        private final List<RangeCondition<RowT>> ranges;
+
+        private final Comparator<RowT> comparator;
+
+        private boolean sorted;
+
+        public RangeIterableImpl(List<RangeCondition<RowT>> ranges, Comparator<RowT> comparator) {
+            this.ranges = ranges;
+            this.comparator = comparator;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int size() {
+            return ranges.size();
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public Iterator<RangeCondition<RowT>> iterator() {
+            ranges.forEach(b -> ((RangeConditionImpl) b).clearCache());
+
+            if (ranges.size() == 1) {
+                return ranges.iterator();
+            }
+
+            // Sort ranges using collation comparator to produce sorted output. There should be no ranges
+            // intersection.
+            // Do not sort again if ranges already were sorted before, different values of correlated variables
+            // should not affect ordering.
+            if (!sorted) {
+                ranges.sort((o1, o2) -> comparator.compare(o1.lower(), o2.lower()));
+                sorted = true;
+            }
+
+            return ranges.iterator();
+        }
+    }
+
     private class BiFieldGetter extends CommonFieldGetter {
         private final Expression row2;
 
@@ -598,7 +844,8 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> {
         }
 
         /** {@inheritDoc} */
-        @Override protected Expression fillExpressions(BlockBuilder list, int index) {
+        @Override
+        protected Expression fillExpressions(BlockBuilder list, int index) {
             Expression row = list.append("row", this.row);
 
             Expression field = Expressions.call(hnd,
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RangeCondition.java
similarity index 61%
copy from modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java
copy to modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RangeCondition.java
index cd2bd12000..91c9cf5b1a 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RangeCondition.java
@@ -15,22 +15,23 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.sql.engine.exec;
-
-import org.apache.ignite.internal.util.Cursor;
+package org.apache.ignite.internal.sql.engine.exec.exp;
 
 /**
- * Tree index interface.
+ * A range condition is a search condition which represents a comparison predicate or a BETWEEN predicate.
  *
- * @param <R> Indexing row type.
+ * <p>Used to define bounds of a range scan.
  */
-public interface TreeIndex<R> {
-    /**
-     * Index lookup method.
-     *
-     * @param lower Lower bound.
-     * @param upper Upper bound.
-     * @return Cursor over the rows within bounds.
-     */
-    Cursor<R> find(R lower, R upper);
+public interface RangeCondition<RowT> {
+    /** Lower search row. */
+    public RowT lower();
+
+    /** Upper search row. */
+    public RowT upper();
+
+    /** Inlusive search by lower row. */
+    public boolean lowerInclude();
+
+    /** Inlusive search by upper row. */
+    public boolean upperInclude();
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RangeIterable.java
similarity index 67%
copy from modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java
copy to modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RangeIterable.java
index cd2bd12000..773b16a9a8 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TreeIndex.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RangeIterable.java
@@ -15,22 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.sql.engine.exec;
-
-import org.apache.ignite.internal.util.Cursor;
+package org.apache.ignite.internal.sql.engine.exec.exp;
 
 /**
- * Tree index interface.
- *
- * @param <R> Indexing row type.
+ * Iterable over range conditions.
  */
-public interface TreeIndex<R> {
-    /**
-     * Index lookup method.
-     *
-     * @param lower Lower bound.
-     * @param upper Upper bound.
-     * @return Cursor over the rows within bounds.
-     */
-    Cursor<R> find(R lower, R upper);
+public interface RangeIterable<RowT> extends Iterable<RangeCondition<RowT>> {
+    /** Count of ranges in iterable. */
+    public int size();
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
index c33e4e5b4c..90064f3c3a 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.sql.engine.exec.rel;
 import static org.apache.ignite.internal.util.ArrayUtils.nullOrEmpty;
 
 import java.util.BitSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Queue;
 import java.util.concurrent.Flow;
@@ -27,7 +28,6 @@ import java.util.concurrent.Flow.Subscription;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.function.Function;
 import java.util.function.Predicate;
-import java.util.function.Supplier;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.ignite.internal.index.SortedIndex;
 import org.apache.ignite.internal.schema.BinaryTuple;
@@ -35,6 +35,8 @@ import org.apache.ignite.internal.schema.BinaryTupleSchema;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.exec.RowConverter;
 import org.apache.ignite.internal.sql.engine.exec.RowHandler;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeCondition;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
 import org.apache.ignite.internal.sql.engine.schema.InternalIgniteTable;
@@ -68,11 +70,9 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
     /** Participating columns. */
     private final @Nullable BitSet requiredColumns;
 
-    private final @Nullable Supplier<RowT> lowerCond;
+    private final RangeIterable<RowT> rangeConditions;
 
-    private final @Nullable Supplier<RowT> upperCond;
-
-    private final int flags;
+    private Iterator<RangeCondition<RowT>> rangeConditionIterator;
 
     private int requested;
 
@@ -84,10 +84,6 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
 
     private int curPartIdx;
 
-    private @Nullable BinaryTuple lowerBound;
-
-    private @Nullable BinaryTuple upperBound;
-
     /**
      * Constructor.
      *
@@ -95,6 +91,7 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
      * @param rowType Output type of the current node.
      * @param schemaTable The table this node should scan.
      * @param parts Partition numbers to scan.
+     * @param rangeConditions Range conditions.
      * @param filters Optional filter to filter out rows.
      * @param rowTransformer Optional projection function.
      * @param requiredColumns Optional set of column of interest.
@@ -105,8 +102,7 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
             IgniteIndex schemaIndex,
             InternalIgniteTable schemaTable,
             int[] parts,
-            @Nullable Supplier<RowT> lowerCond,
-            @Nullable Supplier<RowT> upperCond,
+            @Nullable RangeIterable<RowT> rangeConditions,
             @Nullable Predicate<RowT> filters,
             @Nullable Function<RowT, RowT> rowTransformer,
             @Nullable BitSet requiredColumns
@@ -116,18 +112,14 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
 
         this.schemaIndex = schemaIndex;
         this.parts = parts;
-        this.lowerCond = lowerCond;
-        this.upperCond = upperCond;
         this.filters = filters;
         this.rowTransformer = rowTransformer;
         this.requiredColumns = requiredColumns;
+        this.rangeConditions = rangeConditions;
 
         factory = ctx.rowHandler().factory(ctx.getTypeFactory(), rowType);
 
         indexRowSchema = RowConverter.createIndexRowSchema(schemaTable.descriptor(), schemaIndex.index().descriptor());
-
-        // TODO: create ticket to add flags support
-        flags = SortedIndex.INCLUDE_LEFT & SortedIndex.INCLUDE_RIGHT;
     }
 
     /** {@inheritDoc} */
@@ -162,8 +154,7 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
         requested = 0;
         waiting = 0;
         curPartIdx = 0;
-        lowerBound = null;
-        upperBound = null;
+        rangeConditionIterator = null;
 
         if (activeSubscription != null) {
             activeSubscription.cancel();
@@ -246,13 +237,36 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
             if (schemaIndex.type() == Type.SORTED) {
                 //TODO: https://issues.apache.org/jira/browse/IGNITE-17813
                 // Introduce new publisher using merge-sort algo to merge partition index publishers.
-                if (lowerBound == null && upperBound == null) {
-                    lowerBound = toBinaryTuplePrefix(lowerCond);
-                    upperBound = toBinaryTuplePrefix(upperCond);
+                int part = curPartIdx;
+
+                int flags = 0;
+                BinaryTuple lowerBound = null;
+                BinaryTuple upperBound = null;
+
+                if (rangeConditions == null) {
+                    flags = SortedIndex.INCLUDE_LEFT | SortedIndex.INCLUDE_RIGHT;
+                    curPartIdx++;
+                } else {
+                    if (rangeConditionIterator == null) {
+                        rangeConditionIterator = rangeConditions.iterator();
+                    }
+
+                    RangeCondition<RowT> cond = rangeConditionIterator.next();
+
+                    lowerBound = toBinaryTuplePrefix(cond.lower());
+                    upperBound = toBinaryTuplePrefix(cond.upper());
+
+                    flags |= (cond.lowerInclude()) ? SortedIndex.INCLUDE_LEFT : 0;
+                    flags |= (cond.upperInclude()) ? SortedIndex.INCLUDE_RIGHT : 0;
+
+                    if (!rangeConditionIterator.hasNext()) { // Switch to next partition and reset range index.
+                        rangeConditionIterator = null;
+                        curPartIdx++;
+                    }
                 }
 
                 ((SortedIndex) schemaIndex.index()).scan(
-                        parts[curPartIdx++],
+                        parts[part],
                         context().transaction(),
                         lowerBound,
                         upperBound,
@@ -261,16 +275,33 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
                 ).subscribe(new SubscriberImpl());
             } else {
                 assert schemaIndex.type() == Type.HASH;
-                assert lowerCond == upperCond;
 
-                if (lowerBound == null) {
-                    lowerBound = toBinaryTuple(lowerCond);
+                int part = curPartIdx;
+                BinaryTuple key = null;
+
+                if (rangeConditions == null) {
+                    curPartIdx++;
+                } else {
+                    if (rangeConditionIterator == null) {
+                        rangeConditionIterator = rangeConditions.iterator();
+                    }
+
+                    RangeCondition<RowT> cond = rangeConditionIterator.next();
+
+                    assert cond.lower() == cond.upper();
+
+                    key = toBinaryTuple(cond.lower());
+
+                    if (!rangeConditionIterator.hasNext()) { // Switch to next partition and reset range index.
+                        rangeConditionIterator = null;
+                        curPartIdx++;
+                    }
                 }
 
                 schemaIndex.index().scan(
-                        parts[curPartIdx++],
+                        parts[part],
                         context().transaction(),
-                        lowerBound,
+                        key,
                         requiredColumns
                 ).subscribe(new SubscriberImpl());
             }
@@ -330,21 +361,21 @@ public class IndexScanNode<RowT> extends AbstractNode<RowT> {
     }
 
     @Contract("null -> null")
-    private @Nullable BinaryTuple toBinaryTuplePrefix(@Nullable Supplier<RowT> conditionSupplier) {
-        if (conditionSupplier == null) {
+    private @Nullable BinaryTuple toBinaryTuplePrefix(@Nullable RowT condition) {
+        if (condition == null) {
             return null;
         }
 
-        return RowConverter.toBinaryTuplePrefix(context(), indexRowSchema, factory, conditionSupplier.get());
+        return RowConverter.toBinaryTuplePrefix(context(), indexRowSchema, factory, condition);
     }
 
     @Contract("null -> null")
-    private @Nullable BinaryTuple toBinaryTuple(@Nullable Supplier<RowT> conditionSupplier) {
-        if (conditionSupplier == null) {
+    private @Nullable BinaryTuple toBinaryTuple(@Nullable RowT condition) {
+        if (condition == null) {
             return null;
         }
 
-        return RowConverter.toBinaryTuple(context(), indexRowSchema, factory, conditionSupplier.get());
+        return RowConverter.toBinaryTuple(context(), indexRowSchema, factory, condition);
     }
 
     private RowT convert(BinaryTuple binaryTuple) {
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexSpoolNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexSpoolNode.java
index a2360f452d..a452324a54 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexSpoolNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexSpoolNode.java
@@ -29,6 +29,7 @@ import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
 import org.apache.ignite.internal.sql.engine.exec.RuntimeHashIndex;
 import org.apache.ignite.internal.sql.engine.exec.RuntimeIndex;
 import org.apache.ignite.internal.sql.engine.exec.RuntimeSortedIndex;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -172,8 +173,7 @@ public class IndexSpoolNode<RowT> extends AbstractNode<RowT> implements SingleNo
             RelCollation collation,
             Comparator<RowT> comp,
             Predicate<RowT> filter,
-            Supplier<RowT> lowerIdxBound,
-            Supplier<RowT> upperIdxBound
+            RangeIterable<RowT> ranges
     ) {
         RuntimeSortedIndex<RowT> idx = new RuntimeSortedIndex<>(ctx, collation, comp);
 
@@ -184,8 +184,7 @@ public class IndexSpoolNode<RowT> extends AbstractNode<RowT> implements SingleNo
                         ctx,
                         rowType,
                         filter,
-                        lowerIdxBound,
-                        upperIdxBound
+                        ranges
                 )
         );
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelInputEx.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelInputEx.java
index f3dff244c1..a614438074 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelInputEx.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelInputEx.java
@@ -17,9 +17,11 @@
 
 package org.apache.ignite.internal.sql.engine.externalize;
 
+import java.util.List;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelInput;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 
 /**
  * Extension to the {@link RelInput} interface.
@@ -41,4 +43,12 @@ public interface RelInputEx extends RelInput {
      * @return A table with given id.
      */
     RelOptTable getTableById();
+
+    /**
+     * Returns search bounds.
+     *
+     * @param tag Tag.
+     * @return Search bounds.
+     */
+    List<SearchBounds> getSearchBounds(String tag);
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJson.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJson.java
index fbe8f67a5c..c4e90df8d8 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJson.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJson.java
@@ -104,6 +104,10 @@ import org.apache.calcite.sql.validate.SqlNameMatchers;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.ImmutableIntList;
 import org.apache.calcite.util.Util;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.ExactBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.MultiBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.RangeBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.InternalIgniteRel;
 import org.apache.ignite.internal.sql.engine.trait.DistributionFunction;
 import org.apache.ignite.internal.sql.engine.trait.DistributionTrait;
@@ -300,6 +304,8 @@ class RelJson {
             return toJson((RelDataTypeField) value);
         } else if (value instanceof ByteString) {
             return toJson((ByteString) value);
+        } else if (value instanceof SearchBounds) {
+            return toJson((SearchBounds) value);
         } else {
             throw new UnsupportedOperationException("type not serializable: "
                     + value + " (type " + value.getClass().getCanonicalName() + ")");
@@ -355,7 +361,7 @@ class RelJson {
             map.put("type", toJson(node.getSqlTypeName()));
             map.put("elementType", toJson(node.getComponentType()));
             return map;
-        } else  if (node.getSqlTypeName() == SqlTypeName.MAP) {
+        } else if (node.getSqlTypeName() == SqlTypeName.MAP) {
             Map<String, Object> map = map();
             map.put("type", toJson(node.getSqlTypeName()));
             map.put("keyType", toJson(node.getKeyType()));
@@ -569,6 +575,59 @@ class RelJson {
         return map;
     }
 
+    private Object toJson(SearchBounds val) {
+        Map map = map();
+        map.put("type", val.type().name());
+
+        if (val instanceof ExactBounds) {
+            map.put("bound", toJson(((ExactBounds) val).bound()));
+        } else if (val instanceof MultiBounds) {
+            map.put("bounds", toJson(((MultiBounds) val).bounds()));
+        } else {
+            assert val instanceof RangeBounds : val;
+
+            RangeBounds val0 = (RangeBounds) val;
+
+            map.put("lowerBound", val0.lowerBound() == null ? null : toJson(val0.lowerBound()));
+            map.put("upperBound", val0.upperBound() == null ? null : toJson(val0.upperBound()));
+            map.put("lowerInclude", val0.lowerInclude());
+            map.put("upperInclude", val0.upperInclude());
+        }
+
+        return map;
+    }
+
+    private SearchBounds toSearchBound(RelInput input, Map<String, Object> map) {
+        if (map == null) {
+            return null;
+        }
+
+        String type = (String) map.get("type");
+
+        if (SearchBounds.Type.EXACT.name().equals(type)) {
+            return new ExactBounds(null, toRex(input, map.get("bound")));
+        } else if (SearchBounds.Type.MULTI.name().equals(type)) {
+            return new MultiBounds(null, toSearchBoundList(input, (List<Map<String, Object>>) map.get("bounds")));
+        } else if (SearchBounds.Type.RANGE.name().equals(type)) {
+            return new RangeBounds(null,
+                    toRex(input, map.get("lowerBound")),
+                    toRex(input, map.get("upperBound")),
+                    (Boolean) map.get("lowerInclude"),
+                    (Boolean) map.get("upperInclude")
+            );
+        }
+
+        throw new IllegalStateException("Unsupported search bound type: " + type);
+    }
+
+    List<SearchBounds> toSearchBoundList(RelInput input, List<Map<String, Object>> bounds) {
+        if (bounds == null) {
+            return null;
+        }
+
+        return bounds.stream().map(b -> toSearchBound(input, b)).collect(Collectors.toList());
+    }
+
     RelCollation toCollation(List<Map<String, Object>> jsonFieldCollations) {
         if (jsonFieldCollations == null) {
             return RelCollations.EMPTY;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonReader.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonReader.java
index ea55c72dc3..645256b1a9 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonReader.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/externalize/RelJsonReader.java
@@ -49,6 +49,7 @@ import org.apache.calcite.sql.SqlAggFunction;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.Pair;
 import org.apache.calcite.util.Util;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.schema.IgniteTable;
 import org.apache.ignite.internal.sql.engine.schema.SqlSchemaManager;
 import org.apache.ignite.internal.sql.engine.util.Commons;
@@ -331,6 +332,12 @@ public class RelJsonReader {
             return relJson.toCollation((List) get(tag));
         }
 
+        /** {@inheritDoc} */
+        @Override
+        public List<SearchBounds> getSearchBounds(String tag) {
+            return relJson.toSearchBoundList(this, (List<Map<String, Object>>) get(tag));
+        }
+
         /** {@inheritDoc} */
         @Override
         public RelDistribution getDistribution() {
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/IgniteMdSelectivity.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/IgniteMdSelectivity.java
index bab765e7ef..fc1a9b3721 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/IgniteMdSelectivity.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/metadata/IgniteMdSelectivity.java
@@ -31,6 +31,9 @@ import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.util.BuiltInMethod;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.ExactBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.RangeBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.AbstractIndexScan;
 import org.apache.ignite.internal.sql.engine.rel.IgniteHashIndexSpool;
 import org.apache.ignite.internal.sql.engine.rel.IgniteSortedIndexSpool;
@@ -55,37 +58,32 @@ public class IgniteMdSelectivity extends RelMdSelectivity {
             return getSelectivity((ProjectableFilterableTableScan) rel, mq, predicate);
         }
 
-        List<RexNode> lowerCond = rel.lowerCondition();
-        List<RexNode> upperCond = rel.upperCondition();
+        List<SearchBounds> searchBounds = rel.searchBounds();
 
-        if (nullOrEmpty(lowerCond) && nullOrEmpty(upperCond)) {
+        if (nullOrEmpty(searchBounds)) {
             return RelMdUtil.guessSelectivity(rel.condition());
         }
 
         double idxSelectivity = 1.0;
-        int len = nullOrEmpty(lowerCond) ? upperCond.size() : nullOrEmpty(upperCond) ? lowerCond.size() :
-                Math.max(lowerCond.size(), upperCond.size());
 
-        for (int i = 0; i < len; i++) {
-            RexCall lower = nullOrEmpty(lowerCond) || lowerCond.size() <= i ? null : (RexCall) lowerCond.get(i);
-            RexCall upper = nullOrEmpty(upperCond) || upperCond.size() <= i ? null : (RexCall) upperCond.get(i);
-
-            assert lower != null || upper != null;
+        List<RexNode> conjunctions = RelOptUtil.conjunctions(rel.condition());
 
-            if (lower != null && upper != null) {
-                idxSelectivity *= lower.op.kind == SqlKind.EQUALS ? .1 : .2;
-            } else {
-                idxSelectivity *= .35;
+        for (SearchBounds bounds : searchBounds) {
+            if (bounds != null) {
+                conjunctions.remove(bounds.condition());
             }
-        }
 
-        List<RexNode> conjunctions = RelOptUtil.conjunctions(rel.condition());
+            if (bounds instanceof ExactBounds) {
+                idxSelectivity *= .1;
+            } else if (bounds instanceof RangeBounds) {
+                RangeBounds rangeBounds = (RangeBounds) bounds;
 
-        if (!nullOrEmpty(lowerCond)) {
-            conjunctions.removeAll(lowerCond);
-        }
-        if (!nullOrEmpty(upperCond)) {
-            conjunctions.removeAll(upperCond);
+                if (rangeBounds.condition() != null) {
+                    idxSelectivity *= ((RexCall) rangeBounds.condition()).op.kind == SqlKind.EQUALS ? .1 : .2;
+                } else {
+                    idxSelectivity *= .35;
+                }
+            }
         }
 
         RexNode remaining = RexUtil.composeConjunction(RexUtils.builder(rel), conjunctions, true);
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgnitePrograms.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgnitePrograms.java
index 62c3d16907..c9346c4f11 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgnitePrograms.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgnitePrograms.java
@@ -54,6 +54,8 @@ public class IgnitePrograms {
             final HepPlanner hepPlanner = new HepPlanner(builder.build(), Commons.context(rel), true,
                     null, Commons.context(rel).config().getCostFactory());
 
+            hepPlanner.setExecutor(planner.getExecutor());
+
             for (RelOptMaterialization materialization : materializations) {
                 hepPlanner.addMaterialization(materialization);
             }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/ExactBounds.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/ExactBounds.java
new file mode 100644
index 0000000000..fa24740e93
--- /dev/null
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/ExactBounds.java
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.sql.engine.prepare.bounds;
+
+import java.util.Objects;
+import org.apache.calcite.rex.RexNode;
+import org.apache.ignite.internal.tostring.S;
+
+/**
+ * Exact (equals) bounds holder for search row.
+ */
+public class ExactBounds extends SearchBounds {
+    /** Search bound. */
+    private final RexNode bound;
+
+    public ExactBounds(RexNode condition, RexNode bound) {
+        super(condition);
+        this.bound = bound;
+    }
+
+    /**
+     * Returns search bound.
+     */
+    public RexNode bound() {
+        return bound;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type type() {
+        return Type.EXACT;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        return bound.equals(((ExactBounds) o).bound);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return Objects.hash(bound);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return S.toString(ExactBounds.class, this);
+    }
+}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/MultiBounds.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/MultiBounds.java
new file mode 100644
index 0000000000..a7ace798ec
--- /dev/null
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/MultiBounds.java
@@ -0,0 +1,76 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.sql.engine.prepare.bounds;
+
+import java.util.List;
+import java.util.Objects;
+import org.apache.calcite.rex.RexNode;
+import org.apache.ignite.internal.tostring.IgniteToStringInclude;
+import org.apache.ignite.internal.tostring.S;
+
+/**
+ * Multiple bounds holder for search row.
+ */
+public class MultiBounds extends SearchBounds {
+    @IgniteToStringInclude
+    private final List<SearchBounds> bounds;
+
+    public MultiBounds(RexNode condition, List<SearchBounds> bounds) {
+        super(condition);
+        this.bounds = bounds;
+    }
+
+    /**
+     * Returns search bounds.
+     */
+    public List<SearchBounds> bounds() {
+        return bounds;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type type() {
+        return Type.MULTI;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        return bounds.equals(((MultiBounds) o).bounds);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return Objects.hash(bounds);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return S.toString(MultiBounds.class, this);
+    }
+}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/RangeBounds.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/RangeBounds.java
new file mode 100644
index 0000000000..258d96210d
--- /dev/null
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/RangeBounds.java
@@ -0,0 +1,126 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.sql.engine.prepare.bounds;
+
+import java.util.Objects;
+import org.apache.calcite.rex.RexNode;
+import org.apache.ignite.internal.tostring.S;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Range bounds holder for search row.
+ */
+public class RangeBounds extends SearchBounds {
+    /** Lower search bound. */
+    private final RexNode lowerBound;
+
+    /** Upper search bound. */
+    private final RexNode upperBound;
+
+    /** Inclusive lower bound flag. */
+    private final boolean lowerInclude;
+
+    /** Inclusive upper bound flag. */
+    private final boolean upperInclude;
+
+    /**
+     * Create range bounds.
+     *
+     * @param condition Condition.
+     * @param lowerBound Range lower bound.
+     * @param upperBound Range upper bound.
+     * @param lowerInclude Inclisive lower bound flag.
+     * @param upperInclude Inclusive upper bound flag.
+     */
+    public RangeBounds(
+            RexNode condition,
+            @Nullable RexNode lowerBound,
+            @Nullable RexNode upperBound,
+            boolean lowerInclude,
+            boolean upperInclude
+    ) {
+        super(condition);
+        this.lowerBound = lowerBound;
+        this.upperBound = upperBound;
+        this.lowerInclude = lowerInclude;
+        this.upperInclude = upperInclude;
+    }
+
+    /**
+     * Returns lower search bound.
+     */
+    public RexNode lowerBound() {
+        return lowerBound;
+    }
+
+    /**
+     * Returns upper search bound.
+     */
+    public RexNode upperBound() {
+        return upperBound;
+    }
+
+    /**
+     * Returns {@code True} if the lower bound is inclusive, {@code false} otherwise.
+     */
+    public boolean lowerInclude() {
+        return lowerInclude;
+    }
+
+    /**
+     * Returns {@code True} if the upper bound is inclusive, {@code false} otherwise.
+     */
+    public boolean upperInclude() {
+        return upperInclude;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Type type() {
+        return Type.RANGE;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        return lowerInclude == ((RangeBounds) o).lowerInclude
+                && upperInclude == ((RangeBounds) o).upperInclude
+                && Objects.equals(lowerBound, ((RangeBounds) o).lowerBound)
+                && Objects.equals(upperBound, ((RangeBounds) o).upperBound);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int hashCode() {
+        return Objects.hash(lowerBound, upperBound, lowerInclude, upperInclude);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return S.toString(RangeBounds.class, this);
+    }
+}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/SearchBounds.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/SearchBounds.java
new file mode 100644
index 0000000000..e7ef3303c3
--- /dev/null
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/bounds/SearchBounds.java
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.sql.engine.prepare.bounds;
+
+import org.apache.calcite.rex.RexNode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Bounds holder for search row.
+ *
+ * <p>This class is describing bounds on per-column basis, and such choice was made to optimize serialization of a plan.
+ */
+public abstract class SearchBounds {
+    /** Condition required only for cost calculation, no serialization needed. */
+    private final RexNode condition;
+
+    /**
+     * Creates search bounds.
+     *
+     * @param condition Condition.
+     */
+    protected SearchBounds(@Nullable RexNode condition) {
+        this.condition = condition;
+    }
+
+    /**
+     * Condition.
+     */
+    public RexNode condition() {
+        return condition;
+    }
+
+    /**
+     * Returns bounds type.
+     */
+    public abstract Type type();
+
+    /**
+     * Search bounds type.
+     */
+    public enum Type {
+        /** Exact search value. */
+        EXACT,
+
+        /** Range of values. */
+        RANGE,
+
+        /** Multiple values or multiple ranges. */
+        MULTI
+    }
+}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/AbstractIndexScan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/AbstractIndexScan.java
index f12db08dbb..e1be677d5e 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/AbstractIndexScan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/AbstractIndexScan.java
@@ -31,10 +31,11 @@ import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.ignite.internal.sql.engine.externalize.RelInputEx;
 import org.apache.ignite.internal.sql.engine.metadata.cost.IgniteCost;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
-import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
-import org.apache.ignite.internal.sql.engine.util.IndexConditions;
+import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -43,7 +44,7 @@ import org.jetbrains.annotations.Nullable;
 public abstract class AbstractIndexScan extends ProjectableFilterableTableScan {
     protected final String idxName;
 
-    protected final IndexConditions idxCond;
+    protected final List<SearchBounds> searchBounds;
 
     protected final IgniteIndex.Type type;
 
@@ -56,7 +57,7 @@ public abstract class AbstractIndexScan extends ProjectableFilterableTableScan {
         super(input);
         idxName = input.getString("index");
         type = input.getEnum("type", IgniteIndex.Type.class);
-        idxCond = new IndexConditions(input);
+        searchBounds = ((RelInputEx) input).getSearchBounds("searchBounds");
     }
 
     /**
@@ -72,14 +73,14 @@ public abstract class AbstractIndexScan extends ProjectableFilterableTableScan {
             IgniteIndex.Type type,
             @Nullable List<RexNode> proj,
             @Nullable RexNode cond,
-            @Nullable IndexConditions idxCond,
+            @Nullable List<SearchBounds> searchBounds,
             @Nullable ImmutableBitSet reqColumns
     ) {
         super(cluster, traitSet, hints, table, proj, cond, reqColumns);
 
         this.idxName = idxName;
         this.type = type;
-        this.idxCond = idxCond;
+        this.searchBounds = searchBounds;
     }
 
     /** {@inheritDoc} */
@@ -88,8 +89,9 @@ public abstract class AbstractIndexScan extends ProjectableFilterableTableScan {
         pw = pw.item("index", idxName);
         pw = pw.item("type", type.name());
         pw = super.explainTerms0(pw);
+        pw = pw.itemIf("searchBounds", searchBounds, searchBounds != null);
 
-        return idxCond.explainTerms(pw);
+        return pw;
     }
 
     /**
@@ -100,71 +102,27 @@ public abstract class AbstractIndexScan extends ProjectableFilterableTableScan {
         return idxName;
     }
 
-    /**
-     * Get lower index condition.
-     */
-    public List<RexNode> lowerCondition() {
-        return idxCond == null ? null : idxCond.lowerCondition();
-    }
-
-    /**
-     * Get lower index condition.
-     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-     */
-    public List<RexNode> lowerBound() {
-        return idxCond == null ? null : idxCond.lowerBound();
-    }
-
-    /**
-     * Get upper index condition.
-     */
-    public List<RexNode> upperCondition() {
-        return idxCond == null ? null : idxCond.upperCondition();
-    }
-
-    /**
-     * Get upper index condition.
-     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-     */
-    public List<RexNode> upperBound() {
-        return idxCond == null ? null : idxCond.upperBound();
-    }
-
     /** {@inheritDoc} */
     @Override
     public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) {
         double rows = table.getRowCount();
 
-        double cost = rows * IgniteCost.ROW_PASS_THROUGH_COST;
+        double cost;
 
-        if (condition != null) {
+        if (condition == null) {
+            cost = rows * IgniteCost.ROW_PASS_THROUGH_COST;
+        } else {
             RexBuilder builder = getCluster().getRexBuilder();
 
             double selectivity = 1;
 
             cost = 0;
 
-            // for hash index both bounds are set to the same search row
-            // because only lookup is possible. So if either bound is null,
-            // then there will be a full index scan.
-            if (type == Type.HASH && lowerBound() != null) {
-                cost += IgniteCost.HASH_LOOKUP_COST;
-
-                selectivity -= 1 - mq.getSelectivity(this, RexUtil.composeConjunction(builder, List.of(condition)));
-            } else if (type == Type.SORTED) {
-                if (lowerCondition() != null) {
-                    double selectivity0 = mq.getSelectivity(this, RexUtil.composeConjunction(builder, lowerCondition()));
-
-                    selectivity -= 1 - selectivity0;
-
-                    cost += Math.log(rows);
-                }
-
-                if (upperCondition() != null && lowerCondition() != null && !lowerCondition().equals(upperCondition())) {
-                    double selectivity0 = mq.getSelectivity(this, RexUtil.composeConjunction(builder, upperCondition()));
+            if (searchBounds != null) {
+                selectivity = mq.getSelectivity(this, RexUtil.composeConjunction(builder,
+                        Commons.transform(searchBounds, b -> b == null ? null : b.condition())));
 
-                    selectivity -= 1 - selectivity0;
-                }
+                cost = Math.log(rows) * IgniteCost.ROW_COMPARISON_COST;
             }
 
             rows *= selectivity;
@@ -184,7 +142,7 @@ public abstract class AbstractIndexScan extends ProjectableFilterableTableScan {
      * Get index conditions.
      * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
      */
-    public IndexConditions indexConditions() {
-        return idxCond;
+    public List<SearchBounds> searchBounds() {
+        return searchBounds;
     }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteIndexScan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteIndexScan.java
index 7fdae8a055..0236c8233c 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteIndexScan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteIndexScan.java
@@ -27,8 +27,8 @@ import org.apache.calcite.rel.RelInput;
 import org.apache.calcite.rel.RelWriter;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
-import org.apache.ignite.internal.sql.engine.util.IndexConditions;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -63,6 +63,7 @@ public class IgniteIndexScan extends AbstractIndexScan implements SourceAwareIgn
      * @param type Type of the index.
      * @param proj Projects.
      * @param cond Filters.
+     * @param searchBounds Index search conditions.
      * @param requiredCols Participating columns.
      */
     public IgniteIndexScan(
@@ -73,10 +74,10 @@ public class IgniteIndexScan extends AbstractIndexScan implements SourceAwareIgn
             IgniteIndex.Type type,
             @Nullable List<RexNode> proj,
             @Nullable RexNode cond,
-            @Nullable IndexConditions idxCond,
+            @Nullable List<SearchBounds> searchBounds,
             @Nullable ImmutableBitSet requiredCols
     ) {
-        this(-1L, cluster, traits, tbl, idxName, type, proj, cond, idxCond, requiredCols);
+        this(-1L, cluster, traits, tbl, idxName, type, proj, cond, searchBounds, requiredCols);
     }
 
     /**
@@ -88,6 +89,7 @@ public class IgniteIndexScan extends AbstractIndexScan implements SourceAwareIgn
      * @param idxName      Index name.
      * @param proj         Projects.
      * @param cond         Filters.
+     * @param searchBounds Index search conditions.
      * @param requiredCols Participating columns.
      */
     private IgniteIndexScan(
@@ -99,10 +101,10 @@ public class IgniteIndexScan extends AbstractIndexScan implements SourceAwareIgn
             IgniteIndex.Type type,
             @Nullable List<RexNode> proj,
             @Nullable RexNode cond,
-            @Nullable IndexConditions idxCond,
+            @Nullable List<SearchBounds> searchBounds,
             @Nullable ImmutableBitSet requiredCols
     ) {
-        super(cluster, traits, List.of(), tbl, idxName, type, proj, cond, idxCond, requiredCols);
+        super(cluster, traits, List.of(), tbl, idxName, type, proj, cond, searchBounds, requiredCols);
 
         this.sourceId = sourceId;
     }
@@ -130,13 +132,13 @@ public class IgniteIndexScan extends AbstractIndexScan implements SourceAwareIgn
     @Override
     public IgniteRel clone(long sourceId) {
         return new IgniteIndexScan(sourceId, getCluster(), getTraitSet(), getTable(),
-                idxName, type, projects, condition, idxCond, requiredColumns);
+                idxName, type, projects, condition, searchBounds, requiredColumns);
     }
 
     /** {@inheritDoc} */
     @Override
     public IgniteRel clone(RelOptCluster cluster, List<IgniteRel> inputs) {
         return new IgniteIndexScan(sourceId, cluster, getTraitSet(), getTable(),
-                idxName, type, projects, condition, idxCond, requiredColumns);
+                idxName, type, projects, condition, searchBounds, requiredColumns);
     }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteSortedIndexSpool.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteSortedIndexSpool.java
index 6dd8b78f45..2452d05bab 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteSortedIndexSpool.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteSortedIndexSpool.java
@@ -30,9 +30,10 @@ import org.apache.calcite.rel.RelWriter;
 import org.apache.calcite.rel.core.Spool;
 import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.calcite.rex.RexNode;
+import org.apache.ignite.internal.sql.engine.externalize.RelInputEx;
 import org.apache.ignite.internal.sql.engine.metadata.cost.IgniteCost;
 import org.apache.ignite.internal.sql.engine.metadata.cost.IgniteCostFactory;
-import org.apache.ignite.internal.sql.engine.util.IndexConditions;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 
 /**
  * Relational operator that returns the sorted contents of a table and allow to lookup rows by specified bounds.
@@ -40,8 +41,8 @@ import org.apache.ignite.internal.sql.engine.util.IndexConditions;
 public class IgniteSortedIndexSpool extends AbstractIgniteSpool implements InternalIgniteRel {
     private final RelCollation collation;
 
-    /** Index condition. */
-    private final IndexConditions idxCond;
+    /** Index search conditions. */
+    private final List<SearchBounds> searchBounds;
 
     /** Filters. */
     protected final RexNode condition;
@@ -56,14 +57,14 @@ public class IgniteSortedIndexSpool extends AbstractIgniteSpool implements Inter
             RelNode input,
             RelCollation collation,
             RexNode condition,
-            IndexConditions idxCond
+            List<SearchBounds> searchBounds
     ) {
         super(cluster, traits, Type.LAZY, input);
 
-        assert Objects.nonNull(idxCond);
+        assert Objects.nonNull(searchBounds);
         assert Objects.nonNull(condition);
 
-        this.idxCond = idxCond;
+        this.searchBounds = searchBounds;
         this.condition = condition;
         this.collation = collation;
     }
@@ -79,7 +80,7 @@ public class IgniteSortedIndexSpool extends AbstractIgniteSpool implements Inter
                 input.getInputs().get(0),
                 input.getCollation(),
                 input.getExpression("condition"),
-                new IndexConditions(input)
+                ((RelInputEx) input).getSearchBounds("searchBounds")
         );
     }
 
@@ -95,13 +96,13 @@ public class IgniteSortedIndexSpool extends AbstractIgniteSpool implements Inter
      */
     @Override
     public IgniteRel clone(RelOptCluster cluster, List<IgniteRel> inputs) {
-        return new IgniteSortedIndexSpool(cluster, getTraitSet(), inputs.get(0), collation, condition, idxCond);
+        return new IgniteSortedIndexSpool(cluster, getTraitSet(), inputs.get(0), collation, condition, searchBounds);
     }
 
     /** {@inheritDoc} */
     @Override
     protected Spool copy(RelTraitSet traitSet, RelNode input, Type readType, Type writeType) {
-        return new IgniteSortedIndexSpool(getCluster(), traitSet, input, collation, condition, idxCond);
+        return new IgniteSortedIndexSpool(getCluster(), traitSet, input, collation, condition, searchBounds);
     }
 
     /** {@inheritDoc} */
@@ -120,8 +121,9 @@ public class IgniteSortedIndexSpool extends AbstractIgniteSpool implements Inter
 
         writer.item("condition", condition);
         writer.item("collation", collation);
+        writer.itemIf("searchBounds", searchBounds, searchBounds != null);
 
-        return idxCond.explainTerms(writer);
+        return writer;
     }
 
     /** {@inheritDoc} */
@@ -131,10 +133,10 @@ public class IgniteSortedIndexSpool extends AbstractIgniteSpool implements Inter
     }
 
     /**
-     * Get index condition.
+     * Get index search conditions.
      */
-    public IndexConditions indexCondition() {
-        return idxCond;
+    public List<SearchBounds> searchBounds() {
+        return searchBounds;
     }
 
     /**
@@ -160,7 +162,7 @@ public class IgniteSortedIndexSpool extends AbstractIgniteSpool implements Inter
         double totalBytes = rowCnt * bytesPerRow;
         double cpuCost;
 
-        if (idxCond.lowerCondition() != null) {
+        if (searchBounds != null) {
             cpuCost = Math.log(rowCnt) * IgniteCost.ROW_COMPARISON_COST;
         } else {
             cpuCost = rowCnt * IgniteCost.ROW_PASS_THROUGH_COST;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/ProjectableFilterableTableScan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/ProjectableFilterableTableScan.java
index af60973f0f..1d9ec34033 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/ProjectableFilterableTableScan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/ProjectableFilterableTableScan.java
@@ -142,9 +142,12 @@ public abstract class ProjectableFilterableTableScan extends TableScan {
     }
 
     protected RelWriter explainTerms0(RelWriter pw) {
-        return pw
-                .itemIf("filters", condition, condition != null)
-                .itemIf("projects", projects, projects != null)
+        if (condition != null) {
+            pw.item("filters", pw.nest() ? condition :
+                    RexUtil.expandSearch(getCluster().getRexBuilder(), null, condition));
+        }
+
+        return pw.itemIf("projects", projects, projects != null)
                 .itemIf("requiredColumns", requiredColumns, requiredColumns != null);
     }
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/logical/IgniteLogicalIndexScan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/logical/IgniteLogicalIndexScan.java
index 9ef55fe0a4..34f3226577 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/logical/IgniteLogicalIndexScan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/logical/IgniteLogicalIndexScan.java
@@ -25,6 +25,7 @@ import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.mapping.Mappings;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.AbstractIndexScan;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
@@ -32,7 +33,6 @@ import org.apache.ignite.internal.sql.engine.schema.InternalIgniteTable;
 import org.apache.ignite.internal.sql.engine.trait.TraitUtils;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
-import org.apache.ignite.internal.sql.engine.util.IndexConditions;
 import org.apache.ignite.internal.sql.engine.util.RexUtils;
 import org.jetbrains.annotations.Nullable;
 
@@ -62,11 +62,11 @@ public class IgniteLogicalIndexScan extends AbstractIndexScan {
             collation = collation.apply(targetMapping);
         }
 
-        IndexConditions idxCond;
+        List<SearchBounds> searchBounds;
         if (index.type() == Type.HASH) {
-            idxCond = buildHashIndexConditions(cluster, tbl, index.columns(), cond, requiredColumns);
+            searchBounds = buildHashIndexConditions(cluster, tbl, index.columns(), cond, requiredColumns);
         } else if (index.type() == Type.SORTED) {
-            idxCond = buildSortedIndexConditions(cluster, tbl, collation, cond, requiredColumns);
+            searchBounds = buildSortedIndexConditions(cluster, tbl, collation, cond, requiredColumns);
         } else {
             throw new AssertionError("Unknown index type [type=" + index.type() + "]");
         }
@@ -79,7 +79,7 @@ public class IgniteLogicalIndexScan extends AbstractIndexScan {
                 index.type(),
                 proj,
                 cond,
-                idxCond,
+                searchBounds,
                 requiredColumns);
     }
 
@@ -93,7 +93,7 @@ public class IgniteLogicalIndexScan extends AbstractIndexScan {
      * @param type Type of the index.
      * @param proj Projects.
      * @param cond Filters.
-     * @param idxCond Index conditions.
+     * @param searchBounds Index search conditions.
      * @param requiredCols Participating columns.
      */
     private IgniteLogicalIndexScan(
@@ -104,13 +104,13 @@ public class IgniteLogicalIndexScan extends AbstractIndexScan {
             IgniteIndex.Type type,
             @Nullable List<RexNode> proj,
             @Nullable RexNode cond,
-            @Nullable IndexConditions idxCond,
+            @Nullable List<SearchBounds> searchBounds,
             @Nullable ImmutableBitSet requiredCols
     ) {
-        super(cluster, traits, List.of(), tbl, idxName, type, proj, cond, idxCond, requiredCols);
+        super(cluster, traits, List.of(), tbl, idxName, type, proj, cond, searchBounds, requiredCols);
     }
 
-    private static IndexConditions buildSortedIndexConditions(
+    private static List<SearchBounds> buildSortedIndexConditions(
             RelOptCluster cluster,
             InternalIgniteTable table,
             RelCollation collation,
@@ -118,7 +118,7 @@ public class IgniteLogicalIndexScan extends AbstractIndexScan {
             @Nullable ImmutableBitSet requiredColumns
     ) {
         if (collation.getFieldCollations().isEmpty()) {
-            return new IndexConditions();
+            return List.of();
         }
 
         return RexUtils.buildSortedIndexConditions(
@@ -130,7 +130,7 @@ public class IgniteLogicalIndexScan extends AbstractIndexScan {
         );
     }
 
-    private static IndexConditions buildHashIndexConditions(
+    private static List<SearchBounds> buildHashIndexConditions(
             RelOptCluster cluster,
             InternalIgniteTable table,
             List<String> indexedColumns,
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/FilterSpoolMergeToSortedIndexSpoolRule.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/FilterSpoolMergeToSortedIndexSpoolRule.java
index 28271a7cfd..2d1467f5f6 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/FilterSpoolMergeToSortedIndexSpoolRule.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/FilterSpoolMergeToSortedIndexSpoolRule.java
@@ -19,11 +19,13 @@ package org.apache.ignite.internal.sql.engine.rule;
 
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
 
-import java.util.ArrayList;
+import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntList;
+import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
+import it.unimi.dsi.fastutil.ints.IntSet;
 import java.util.List;
-import java.util.Objects;
-import java.util.Set;
 import java.util.stream.Collectors;
+import org.apache.calcite.linq4j.Ord;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
@@ -35,13 +37,12 @@ import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.Filter;
 import org.apache.calcite.rel.core.Spool;
-import org.apache.calcite.rex.RexNode;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.IgniteFilter;
 import org.apache.ignite.internal.sql.engine.rel.IgniteSortedIndexSpool;
 import org.apache.ignite.internal.sql.engine.rel.IgniteTableSpool;
 import org.apache.ignite.internal.sql.engine.trait.CorrelationTrait;
 import org.apache.ignite.internal.sql.engine.trait.TraitUtils;
-import org.apache.ignite.internal.sql.engine.util.IndexConditions;
 import org.apache.ignite.internal.sql.engine.util.RexUtils;
 import org.immutables.value.Value;
 
@@ -76,7 +77,7 @@ public class FilterSpoolMergeToSortedIndexSpoolRule extends RelRule<FilterSpoolM
 
         RelCollation inCollation = TraitUtils.collation(input);
 
-        IndexConditions idxCond = RexUtils.buildSortedIndexConditions(
+        List<SearchBounds> searchBounds = RexUtils.buildSortedIndexConditions(
                 cluster,
                 inCollation,
                 filter.getCondition(),
@@ -84,7 +85,7 @@ public class FilterSpoolMergeToSortedIndexSpoolRule extends RelRule<FilterSpoolM
                 null
         );
 
-        if (nullOrEmpty(idxCond.lowerCondition()) && nullOrEmpty(idxCond.upperCondition())) {
+        if (nullOrEmpty(searchBounds)) {
             return;
         }
 
@@ -92,24 +93,14 @@ public class FilterSpoolMergeToSortedIndexSpoolRule extends RelRule<FilterSpoolM
         RelCollation searchCollation;
 
         if (inCollation == null || inCollation.isDefault()) {
-            // Create collation by index condition.
-            List<RexNode> lowerBound = idxCond.lowerBound();
-            List<RexNode> upperBound = idxCond.upperBound();
-
-            assert lowerBound == null || upperBound == null || lowerBound.size() == upperBound.size();
-
-            int cardinality = lowerBound != null ? lowerBound.size() : upperBound.size();
-
-            List<Integer> equalsFields = new ArrayList<>(cardinality);
-            List<Integer> otherFields = new ArrayList<>(cardinality);
+            // Create collation by index bounds.
+            IntList equalsFields = new IntArrayList(searchBounds.size());
+            IntList otherFields = new IntArrayList(searchBounds.size());
 
             // First, add all equality filters to collation, then add other fields.
-            for (int i = 0; i < cardinality; i++) {
-                RexNode lowerNode = lowerBound != null ? lowerBound.get(i) : null;
-                RexNode upperNode = upperBound != null ? upperBound.get(i) : null;
-
-                if (RexUtils.isNotNull(lowerNode) || RexUtils.isNotNull(upperNode)) {
-                    (Objects.equals(lowerNode, upperNode) ? equalsFields : otherFields).add(i);
+            for (int i = 0; i < searchBounds.size(); i++) {
+                if (searchBounds.get(i) != null) {
+                    (searchBounds.get(i).type() == SearchBounds.Type.EXACT ? equalsFields : otherFields).add(i);
                 }
             }
 
@@ -120,7 +111,12 @@ public class FilterSpoolMergeToSortedIndexSpoolRule extends RelRule<FilterSpoolM
             // Create search collation as a prefix of input collation.
             traitCollation = inCollation;
 
-            Set<Integer> searchKeys = idxCond.keys();
+            IntSet searchKeys = new IntOpenHashSet();
+
+            Ord.zip(searchBounds).stream()
+                    .filter(v -> v.e != null)
+                    .mapToInt(v -> v.i)
+                    .forEach(searchKeys::add);
 
             List<RelFieldCollation> collationFields = inCollation.getFieldCollations().subList(0, searchKeys.size());
 
@@ -137,7 +133,7 @@ public class FilterSpoolMergeToSortedIndexSpoolRule extends RelRule<FilterSpoolM
                 convert(input, input.getTraitSet().replace(traitCollation)),
                 searchCollation,
                 filter.getCondition(),
-                idxCond
+                searchBounds
         );
 
         call.transformTo(res);
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
index 98bb3fb39d..a24b277ce5 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
@@ -105,7 +105,7 @@ public abstract class LogicalScanConverterRule<T extends ProjectableFilterableTa
                         index.type(),
                         rel.projects(),
                         rel.condition(),
-                        rel.indexConditions(),
+                        rel.searchBounds(),
                         rel.requiredColumns()
                     );
                 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/FilterScanMergeRule.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/FilterScanMergeRule.java
index db2b6fc523..8806029894 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/FilterScanMergeRule.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/logical/FilterScanMergeRule.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.sql.engine.rule.logical;
 
 import java.util.Arrays;
 import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptPredicateList;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
 import org.apache.calcite.plan.RelRule;
@@ -29,6 +30,7 @@ import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexInputRef;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexShuttle;
+import org.apache.calcite.rex.RexSimplify;
 import org.apache.calcite.rex.RexUtil;
 import org.apache.ignite.internal.sql.engine.rel.ProjectableFilterableTableScan;
 import org.apache.ignite.internal.sql.engine.rel.logical.IgniteLogicalIndexScan;
@@ -84,9 +86,13 @@ public abstract class FilterScanMergeRule<T extends ProjectableFilterableTableSc
             condition = RexUtil.composeConjunction(builder, Arrays.asList(scan.condition(), condition));
         }
 
+        // We need to replace RexLocalRef with RexInputRef because "simplify" doesn't understand local refs.
+        condition = RexUtils.replaceLocalRefs(condition);
+        condition = new RexSimplify(builder, RelOptPredicateList.EMPTY, call.getPlanner().getExecutor())
+                .simplifyUnknownAsFalse(condition);
+
         // We need to replace RexInputRef with RexLocalRef because TableScan doesn't have inputs.
-        // TODO SEARCH support
-        condition = RexUtils.replaceInputRefs(RexUtil.expandSearch(builder, null, condition));
+        condition = RexUtils.replaceInputRefs(condition);
 
         // Set default traits, real traits will be calculated for physical node.
         RelTraitSet trait = cluster.traitSet();
@@ -104,7 +110,8 @@ public abstract class FilterScanMergeRule<T extends ProjectableFilterableTableSc
         }
 
         /** {@inheritDoc} */
-        @Override protected IgniteLogicalIndexScan createNode(
+        @Override
+        protected IgniteLogicalIndexScan createNode(
                 RelOptCluster cluster,
                 IgniteLogicalIndexScan scan,
                 RelTraitSet traits,
@@ -121,7 +128,8 @@ public abstract class FilterScanMergeRule<T extends ProjectableFilterableTableSc
         }
 
         /** {@inheritDoc} */
-        @Override protected IgniteLogicalTableScan createNode(
+        @Override
+        protected IgniteLogicalTableScan createNode(
                 RelOptCluster cluster,
                 IgniteLogicalTableScan scan,
                 RelTraitSet traits,
@@ -164,7 +172,7 @@ public abstract class FilterScanMergeRule<T extends ProjectableFilterableTableSc
                     .withOperandSupplier(b -> b.operand(LogicalFilter.class)
                             .predicate(p -> !skipCorrelated || !RexUtils.hasCorrelation(p.getCondition()))
                             .oneInput(b1 -> b1.operand(scanCls).noInputs()))
-                .as(Config.class);
+                    .as(Config.class);
         }
     }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IndexConditions.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IndexConditions.java
deleted file mode 100644
index ee26d604f3..0000000000
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IndexConditions.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.ignite.internal.sql.engine.util;
-
-import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
-
-import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
-import it.unimi.dsi.fastutil.ints.IntSet;
-import it.unimi.dsi.fastutil.ints.IntSets;
-import java.util.List;
-import org.apache.calcite.rel.RelInput;
-import org.apache.calcite.rel.RelWriter;
-import org.apache.calcite.rex.RexNode;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Index conditions and bounds holder. Conditions are not printed to terms (serialized). They are used only to calculate selectivity.
- */
-public class IndexConditions {
-    private final List<RexNode> lowerCond;
-
-    private final List<RexNode> upperCond;
-
-    private final List<RexNode> lowerBound;
-
-    private final List<RexNode> upperBound;
-
-    /**
-     * Constructor.
-     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-     */
-    public IndexConditions() {
-        this(null, null, null, null);
-    }
-
-    /**
-     * Constructor.
-     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-     */
-    public IndexConditions(
-            @Nullable List<RexNode> lowerCond,
-            @Nullable List<RexNode> upperCond,
-            @Nullable List<RexNode> lowerBound,
-            @Nullable List<RexNode> upperBound
-    ) {
-        this.lowerCond = lowerCond;
-        this.upperCond = upperCond;
-        this.lowerBound = lowerBound;
-        this.upperBound = upperBound;
-    }
-
-    /**
-     * Constructor.
-     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-     */
-    public IndexConditions(RelInput input) {
-        lowerCond = null;
-        upperCond = null;
-        lowerBound = input.get("lower") == null ? null : input.getExpressionList("lower");
-        upperBound = input.get("upper") == null ? null : input.getExpressionList("upper");
-    }
-
-    /**
-     * Get lower index condition.
-     */
-    public List<RexNode> lowerCondition() {
-        return lowerCond;
-    }
-
-    /**
-     * Get upper index condition.
-     */
-    public List<RexNode> upperCondition() {
-        return upperCond;
-    }
-
-    /**
-     * Get lower index bounds (a row with values at the index columns).
-     */
-    public List<RexNode> lowerBound() {
-        return lowerBound;
-    }
-
-    /**
-     * Get upper index bounds (a row with values at the index columns).
-     */
-    public List<RexNode> upperBound() {
-        return upperBound;
-    }
-
-    /**
-     * Keys.
-     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-     */
-    public IntSet keys() {
-        if (upperBound == null && lowerBound == null) {
-            return IntSets.EMPTY_SET;
-        }
-
-        IntSet keys = new IntOpenHashSet();
-
-        int cols = lowerBound != null ? lowerBound.size() : upperBound.size();
-
-        for (int i = 0; i < cols; ++i) {
-            if (upperBound != null && RexUtils.isNotNull(upperBound.get(i))
-                    || lowerBound != null && RexUtils.isNotNull(lowerBound.get(i))) {
-                keys.add(i);
-            }
-        }
-
-        return IntSets.unmodifiable(keys);
-    }
-
-    /**
-     * Describes index bounds.
-     *
-     * @param pw Plan writer.
-     * @return Plan writer for fluent-explain pattern.
-     */
-    public RelWriter explainTerms(RelWriter pw) {
-        return pw
-                .itemIf("lower", lowerBound, !nullOrEmpty(lowerBound))
-                .itemIf("upper", upperBound, !nullOrEmpty(upperBound));
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public String toString() {
-        return "IndexConditions{"
-                + "lowerCond=" + lowerCond
-                + ", upperCond=" + upperCond
-                + ", lowerBound=" + lowerBound
-                + ", upperBound=" + upperBound
-                + '}';
-    }
-}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/RexUtils.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/RexUtils.java
index f5ccb2c5a7..bad5f0abbf 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/RexUtils.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/RexUtils.java
@@ -17,18 +17,25 @@
 
 package org.apache.ignite.internal.sql.engine.util;
 
+import static org.apache.calcite.rex.RexUtil.removeCast;
+import static org.apache.calcite.rex.RexUtil.sargRef;
 import static org.apache.calcite.sql.SqlKind.EQUALS;
 import static org.apache.calcite.sql.SqlKind.GREATER_THAN;
 import static org.apache.calcite.sql.SqlKind.GREATER_THAN_OR_EQUAL;
+import static org.apache.calcite.sql.SqlKind.IS_NOT_NULL;
+import static org.apache.calcite.sql.SqlKind.IS_NULL;
 import static org.apache.calcite.sql.SqlKind.LESS_THAN;
 import static org.apache.calcite.sql.SqlKind.LESS_THAN_OR_EQUAL;
+import static org.apache.calcite.sql.SqlKind.SEARCH;
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
 
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
 import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+import it.unimi.dsi.fastutil.ints.IntArrayList;
 import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
 import it.unimi.dsi.fastutil.ints.IntSet;
 import it.unimi.dsi.fastutil.ints.IntSets;
-import it.unimi.dsi.fastutil.objects.ObjectIterator;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -59,6 +66,7 @@ import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexShuttle;
 import org.apache.calcite.rex.RexSimplify;
 import org.apache.calcite.rex.RexSlot;
+import org.apache.calcite.rex.RexUnknownAs;
 import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.rex.RexVisitor;
 import org.apache.calcite.rex.RexVisitorImpl;
@@ -69,9 +77,14 @@ import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.calcite.util.ControlFlowException;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.Litmus;
+import org.apache.calcite.util.Sarg;
 import org.apache.calcite.util.Util;
 import org.apache.calcite.util.mapping.MappingType;
 import org.apache.calcite.util.mapping.Mappings;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.ExactBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.MultiBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.RangeBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.trait.TraitUtils;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.jetbrains.annotations.Nullable;
@@ -81,6 +94,9 @@ import org.jetbrains.annotations.Nullable;
  * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
  */
 public class RexUtils {
+    /** Maximum amount of search bounds tuples per scan. */
+    public static final int MAX_SEARCH_BOUNDS_COMPLEXITY = 100;
+
     /**
      * MakeCast.
      * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
@@ -179,17 +195,24 @@ public class RexUtils {
         return true;
     }
 
+    /** Binary comparison operations. */
+    private static final Set<SqlKind> BINARY_COMPARISON =
+            EnumSet.of(EQUALS, LESS_THAN, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL);
+
     /** Supported index operations. */
     private static final Set<SqlKind> TREE_INDEX_COMPARISON =
             EnumSet.of(
+                    SEARCH,
+                    IS_NULL,
+                    IS_NOT_NULL,
                     EQUALS,
                     LESS_THAN, GREATER_THAN,
                     GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL);
 
     /**
-     * Builds index conditions.
+     * Builds sorted index search bounds.
      */
-    public static IndexConditions buildSortedIndexConditions(
+    public static List<SearchBounds> buildSortedIndexConditions(
             RelOptCluster cluster,
             RelCollation collation,
             RexNode condition,
@@ -197,37 +220,46 @@ public class RexUtils {
             ImmutableBitSet requiredColumns
     ) {
         if (condition == null) {
-            return new IndexConditions();
+            return List.of();
         }
 
         condition = RexUtil.toCnf(builder(cluster), condition);
 
-        Int2ObjectOpenHashMap<List<RexCall>> fieldsToPredicates = mapPredicatesToFields(condition, cluster);
+        Int2ObjectMap<List<RexCall>> fieldsToPredicates = mapPredicatesToFields(condition, cluster);
 
         if (nullOrEmpty(fieldsToPredicates)) {
-            return new IndexConditions();
+            return List.of();
         }
 
-        List<RexNode> lower = new ArrayList<>();
-        List<RexNode> upper = new ArrayList<>();
-
         // Force collation for all fields of the condition.
         if (collation == null || collation.isDefault()) {
-            List<Integer> equalsFields = new ArrayList<>(fieldsToPredicates.size());
-            List<Integer> otherFields = new ArrayList<>(fieldsToPredicates.size());
+            IntArrayList fields = new IntArrayList(fieldsToPredicates.size());
+            IntArrayList lastFields = new IntArrayList(fieldsToPredicates.size());
 
             // It's more effective to put equality conditions in the collation first.
-            fieldsToPredicates.forEach((idx, conds) ->
-                    (conds.stream().allMatch(call -> call.getOperator().getKind() == EQUALS) ? equalsFields : otherFields).add(idx));
+            fieldsToPredicates.int2ObjectEntrySet()
+                    .forEach(entry -> {
+                        (entry.getValue().stream().anyMatch(v -> v.getOperator().getKind() == EQUALS) ? fields : lastFields)
+                                .add(entry.getIntKey());
+                    });
+            fields.addAll(lastFields);
+
+            collation = TraitUtils.createCollation(fields);
+        }
 
-            equalsFields.addAll(otherFields);
+        List<RelDataType> types = RelOptUtil.getFieldTypeList(rowType);
+
+        Mappings.TargetMapping mapping = null;
 
-            collation = TraitUtils.createCollation(equalsFields);
+        if (requiredColumns != null) {
+            mapping = Commons.inverseMapping(requiredColumns, types.size());
         }
 
-        for (int i = 0; i < collation.getFieldCollations().size(); i++) {
-            RelFieldCollation fc = collation.getFieldCollations().get(i);
+        List<SearchBounds> bounds = Arrays.asList(new SearchBounds[types.size()]);
+        boolean boundsEmpty = true;
+        int prevComplexity = 1;
 
+        for (RelFieldCollation fc : collation.getFieldCollations()) {
             int collFldIdx = fc.getFieldIndex();
 
             List<RexCall> collFldPreds = fieldsToPredicates.get(collFldIdx);
@@ -236,102 +268,41 @@ public class RexUtils {
                 break;
             }
 
-            RexNode bestUpper = null;
-            RexNode bestLower = null;
-
-            for (RexCall pred : collFldPreds) {
-                if (IgniteUtils.assertionsEnabled()) {
-                    RexNode cond = RexUtil.removeCast(pred.operands.get(1));
-
-                    assert idxOpSupports(cond) : cond;
-                }
-
-                boolean lowerBoundBelow = !fc.getDirection().isDescending();
-                SqlOperator op = pred.getOperator();
-                switch (op.kind) {
-                    case EQUALS:
-                        bestUpper = pred;
-                        bestLower = pred;
-                        break;
-
-                    case LESS_THAN:
-                    case LESS_THAN_OR_EQUAL:
-                        lowerBoundBelow = !lowerBoundBelow;
-                        if (lowerBoundBelow) {
-                            bestLower = pred;
-                        } else {
-                            bestUpper = pred;
-                        }
-                        break;
-
-                    case GREATER_THAN:
-                    case GREATER_THAN_OR_EQUAL:
-                        if (lowerBoundBelow) {
-                            bestLower = pred;
-                        } else {
-                            bestUpper = pred;
-                        }
-                        break;
+            if (mapping != null) {
+                collFldIdx = mapping.getSourceOpt(collFldIdx);
+            }
 
-                    default:
-                        throw new AssertionError("Unknown condition: " + op.kind);
-                }
+            SearchBounds fldBounds = createBounds(fc, collFldPreds, cluster, types.get(collFldIdx), prevComplexity);
 
-                if (bestUpper != null && bestLower != null) {
-                    break; // We've found either "=" condition or both lower and upper.
-                }
+            if (fldBounds == null) {
+                break;
             }
 
-            if (bestLower == null && bestUpper == null) {
-                break; // No bounds, so break the loop.
-            }
+            boundsEmpty = false;
 
-            if (bestLower != null && bestUpper != null) { // "x>5 AND x<10"
-                upper.add(bestUpper);
-                lower.add(bestLower);
+            bounds.set(collFldIdx, fldBounds);
 
-                if (bestLower != bestUpper) {
+            if (fldBounds instanceof MultiBounds) {
+                prevComplexity *= ((MultiBounds) fldBounds).bounds().size();
+
+                // Any bounds after multi range bounds are not allowed, since it can cause intervals intersection.
+                if (((MultiBounds) fldBounds).bounds().stream().anyMatch(b -> b.type() != SearchBounds.Type.EXACT)) {
                     break;
                 }
-            } else if (bestLower != null) { // "x>5"
-                lower.add(bestLower);
-
-                break; // TODO https://issues.apache.org/jira/browse/IGNITE-13568
-            } else { // "x<10"
-                upper.add(bestUpper);
+            }
 
+            if (fldBounds.type() == SearchBounds.Type.RANGE) {
                 break; // TODO https://issues.apache.org/jira/browse/IGNITE-13568
             }
         }
 
-        Mappings.TargetMapping mapping = null;
-
-        if (requiredColumns != null) {
-            mapping = Commons.inverseMapping(requiredColumns, rowType.getFieldCount());
-        }
-
-        List<RexNode> lowerBound = null;
-        List<RexNode> upperBound = null;
-
-        if (!nullOrEmpty(lower)) {
-            lowerBound = asBound(cluster, lower, rowType, mapping);
-        } else {
-            lower = null;
-        }
-
-        if (!nullOrEmpty(upper)) {
-            upperBound = asBound(cluster, upper, rowType, mapping);
-        } else {
-            upper = null;
-        }
-
-        return new IndexConditions(lower, upper, lowerBound, upperBound);
+        return boundsEmpty ? List.of() : bounds;
     }
 
     /**
-     * Builds index conditions.
+     * Builds hash index search bounds.
      */
-    public static IndexConditions buildHashIndexConditions(
+    public static List<SearchBounds> buildHashIndexConditions(
             RelOptCluster cluster,
             List<String> indexedColumns,
             RexNode condition,
@@ -339,18 +310,18 @@ public class RexUtils {
             ImmutableBitSet requiredColumns
     ) {
         if (condition == null) {
-            return new IndexConditions();
+            return List.of();
         }
 
         condition = RexUtil.toCnf(builder(cluster), condition);
 
-        Int2ObjectOpenHashMap<List<RexCall>> fieldsToPredicates = mapPredicatesToFields(condition, cluster);
+        Int2ObjectMap<List<RexCall>> fieldsToPredicates = mapPredicatesToFields(condition, cluster);
 
         if (nullOrEmpty(fieldsToPredicates)) {
-            return new IndexConditions();
+            return List.of();
         }
 
-        List<RexNode> searchCondition = new ArrayList<>();
+        List<SearchBounds> bounds = Arrays.asList(new SearchBounds[rowType.getFieldCount()]);
 
         Mappings.TargetMapping toTrimmedRowMapping = null;
         if (requiredColumns != null) {
@@ -361,7 +332,7 @@ public class RexUtils {
             RelDataTypeField field = rowType.getField(columnName, true, false);
 
             if (field == null) {
-                return new IndexConditions();
+                return List.of();
             }
 
             int collFldIdx = toTrimmedRowMapping == null ? field.getIndex() : toTrimmedRowMapping.getTargetOpt(field.getIndex());
@@ -369,43 +340,21 @@ public class RexUtils {
             List<RexCall> collFldPreds = fieldsToPredicates.get(collFldIdx);
 
             if (nullOrEmpty(collFldPreds)) {
-                return new IndexConditions();
+                return List.of(); // Hash index can't be applied to partial condition.
             }
 
-            RexNode columnPred = null;
-
-            for (RexCall pred : collFldPreds) {
-                if (IgniteUtils.assertionsEnabled()) {
-                    RexNode cond = RexUtil.removeCast(pred.operands.get(1));
-
-                    assert idxOpSupports(cond) : cond;
-                }
-
-                SqlOperator op = pred.getOperator();
-
-                if (op.kind == EQUALS) {
-                    columnPred = pred;
-
-                    break;
-                }
-            }
+            RexCall columnPred = collFldPreds.stream()
+                    .filter(pred -> pred.getOperator().getKind() == EQUALS)
+                    .findAny().orElse(null);
 
             if (columnPred == null) {
-                return new IndexConditions();
+                return List.of();
             }
 
-            searchCondition.add(columnPred);
+            bounds.set(collFldIdx, createBounds(null, Collections.singletonList(columnPred), cluster, field.getType(), 1));
         }
 
-        Mappings.TargetMapping mapping = null;
-
-        if (requiredColumns != null) {
-            mapping = Commons.inverseMapping(requiredColumns, rowType.getFieldCount());
-        }
-
-        List<RexNode> searchRow = asBound(cluster, searchCondition, rowType, mapping);
-
-        return new IndexConditions(null, null, searchRow, searchRow);
+        return bounds;
     }
 
     /**
@@ -418,31 +367,22 @@ public class RexUtils {
     ) {
         condition = RexUtil.toCnf(builder(cluster), condition);
 
-        Int2ObjectOpenHashMap<List<RexCall>> fieldsToPredicates = mapPredicatesToFields(condition, cluster);
+        Int2ObjectMap<List<RexCall>> fieldsToPredicates = mapPredicatesToFields(condition, cluster);
 
         if (nullOrEmpty(fieldsToPredicates)) {
-            return null;
+            return List.of();
         }
 
         List<RexNode> searchPreds = null;
 
-        ObjectIterator<List<RexCall>> iterator = fieldsToPredicates.values().iterator();
-        while (iterator.hasNext()) {
-            List<RexCall> collFldPreds = iterator.next();
-
+        for (List<RexCall> collFldPreds : fieldsToPredicates.values()) {
             if (nullOrEmpty(collFldPreds)) {
                 break;
             }
 
             for (RexCall pred : collFldPreds) {
-                if (IgniteUtils.assertionsEnabled()) {
-                    RexNode cond = RexUtil.removeCast(pred.operands.get(1));
-
-                    assert idxOpSupports(cond) : cond;
-                }
-
                 if (pred.getOperator().kind != SqlKind.EQUALS) {
-                    return null;
+                    return List.of();
                 }
 
                 if (searchPreds == null) {
@@ -454,54 +394,215 @@ public class RexUtils {
         }
 
         if (searchPreds == null) {
-            return null;
+            return List.of();
         }
 
         return asBound(cluster, searchPreds, rowType, null);
     }
 
-    private static Int2ObjectOpenHashMap<List<RexCall>> mapPredicatesToFields(RexNode condition, RelOptCluster cluster) {
+    /** Create index search bound by conditions of the field. */
+    private static @Nullable SearchBounds createBounds(
+            @Nullable RelFieldCollation fc, // Can be null for EQUALS condition.
+            List<RexCall> collFldPreds,
+            RelOptCluster cluster,
+            RelDataType fldType,
+            int prevComplexity
+    ) {
+        RexBuilder builder = builder(cluster);
+
+        RexNode nullVal = builder.makeNullLiteral(fldType);
+
+        RexNode upperCond = null;
+        RexNode lowerCond = null;
+        RexNode upperBound = null;
+        RexNode lowerBound = null;
+        boolean upperInclude = true;
+        boolean lowerInclude = true;
+
+        for (RexCall pred : collFldPreds) {
+            RexNode val = null;
+
+            if (isBinaryComparison(pred)) {
+                val = removeCast(pred.operands.get(1));
+
+                assert idxOpSupports(val) : val;
+
+                val = makeCast(builder, val, fldType);
+            }
+
+            SqlOperator op = pred.getOperator();
+
+            if (op.kind == EQUALS) {
+                return new ExactBounds(pred, val);
+            } else if (op.kind == IS_NULL) {
+                return new ExactBounds(pred, nullVal);
+            } else if (op.kind == SEARCH) {
+                Sarg<?> sarg = ((RexLiteral) pred.operands.get(1)).getValueAs(Sarg.class);
+
+                int complexity = prevComplexity * sarg.complexity();
+
+                // Limit amount of search bounds tuples.
+                if (complexity > MAX_SEARCH_BOUNDS_COMPLEXITY) {
+                    return null;
+                }
+
+                RexNode sargCond = sargRef(builder, pred.operands.get(0), sarg, fldType, RexUnknownAs.UNKNOWN);
+                List<RexNode> disjunctions = RelOptUtil.disjunctions(RexUtil.toDnf(builder, sargCond));
+                List<SearchBounds> bounds = new ArrayList<>(disjunctions.size());
+
+                for (RexNode bound : disjunctions) {
+                    List<RexNode> conjunctions = RelOptUtil.conjunctions(bound);
+                    List<RexCall> calls = new ArrayList<>(conjunctions.size());
+
+                    for (RexNode rexNode : conjunctions) {
+                        if (isSupportedTreeComparison(rexNode)) {
+                            calls.add((RexCall) rexNode);
+                        } else {
+                            return null; // Cannot filter using this predicate (NOT_EQUALS for example).
+                        }
+                    }
+
+                    bounds.add(createBounds(fc, calls, cluster, fldType, complexity));
+                }
+
+                if (bounds.size() == 1) {
+                    return bounds.get(0);
+                }
+
+                return new MultiBounds(pred, bounds);
+            }
+
+            // Range bounds.
+            boolean lowerBoundBelow = !fc.getDirection().isDescending();
+            switch (op.kind) {
+                case LESS_THAN:
+                case LESS_THAN_OR_EQUAL:
+                    lowerBoundBelow = !lowerBoundBelow;
+                    // fallthrough.
+
+                case GREATER_THAN:
+                case GREATER_THAN_OR_EQUAL:
+                    if (lowerBoundBelow) {
+                        lowerCond = pred;
+                        lowerBound = val;
+
+                        if (op.kind == GREATER_THAN || op.kind == LESS_THAN) {
+                            lowerInclude = false;
+                        }
+                    } else {
+                        upperCond = pred;
+                        upperBound = val;
+
+                        if (op.kind == GREATER_THAN || op.kind == LESS_THAN) {
+                            upperInclude = false;
+                        }
+                    }
+                    // fallthrough.
+
+                case IS_NOT_NULL:
+                    if (fc.nullDirection == RelFieldCollation.NullDirection.FIRST && lowerBound == null) {
+                        lowerCond = pred;
+                        lowerBound = nullVal;
+                        lowerInclude = false;
+                    } else if (fc.nullDirection == RelFieldCollation.NullDirection.LAST && upperBound == null) {
+                        upperCond = pred;
+                        upperBound = nullVal;
+                        upperInclude = false;
+                    }
+                    break;
+
+                default:
+                    throw new AssertionError("Unknown condition: " + op.kind);
+            }
+        }
+
+        if (lowerBound == null && upperBound == null) {
+            return null; // No bounds.
+        }
+
+        // Found upper bound, lower bound or both.
+        RexNode cond = lowerCond == null ? upperCond :
+                upperCond == null ? lowerCond :
+                        upperCond == lowerCond ? lowerCond : builder.makeCall(SqlStdOperatorTable.AND, lowerCond, upperCond);
+
+        return new RangeBounds(cond, lowerBound, upperBound, lowerInclude, upperInclude);
+    }
+
+    private static Int2ObjectMap<List<RexCall>> mapPredicatesToFields(RexNode condition, RelOptCluster cluster) {
         List<RexNode> conjunctions = RelOptUtil.conjunctions(condition);
 
-        Int2ObjectOpenHashMap<List<RexCall>> res = new Int2ObjectOpenHashMap<>(conjunctions.size());
+        if (conjunctions.isEmpty()) {
+            return Int2ObjectMaps.emptyMap();
+        }
+
+        Int2ObjectMap<List<RexCall>> res = new Int2ObjectOpenHashMap<>(conjunctions.size());
 
         for (RexNode rexNode : conjunctions) {
-            if (!isBinaryComparison(rexNode)) {
+            if (!isSupportedTreeComparison(rexNode)) {
                 continue;
             }
 
             RexCall predCall = (RexCall) rexNode;
-            RexSlot ref = (RexSlot) extractRef(predCall);
+            RexSlot ref;
 
-            if (ref == null) {
-                continue;
-            }
+            if (isBinaryComparison(rexNode)) {
+                ref = (RexSlot) extractRefFromBinary(predCall, cluster);
+
+                if (ref == null) {
+                    continue;
+                }
 
-            // Let RexLocalRef be on the left side.
-            if (refOnTheRight(predCall)) {
-                predCall = (RexCall) RexUtil.invert(builder(cluster), predCall);
+                // Let RexLocalRef be on the left side.
+                if (refOnTheRight(predCall)) {
+                    predCall = (RexCall) RexUtil.invert(builder(cluster), predCall);
+                }
+            } else {
+                ref = (RexSlot) extractRefFromOperand(predCall, cluster, 0);
+
+                if (ref == null) {
+                    continue;
+                }
             }
 
             List<RexCall> fldPreds = res.computeIfAbsent(ref.getIndex(), k -> new ArrayList<>(conjunctions.size()));
 
             fldPreds.add(predCall);
         }
+
         return res;
     }
 
-    private static RexNode extractRef(RexCall call) {
+    private static RexNode extractRefFromBinary(RexCall call, RelOptCluster cluster) {
         assert isBinaryComparison(call);
 
-        RexNode leftOp = call.getOperands().get(0);
+        RexNode leftRef = extractRefFromOperand(call, cluster, 0);
         RexNode rightOp = call.getOperands().get(1);
 
-        leftOp = RexUtil.removeCast(leftOp);
-        rightOp = RexUtil.removeCast(rightOp);
+        if (leftRef != null) {
+            return idxOpSupports(removeCast(rightOp)) ? leftRef : null;
+        }
 
-        if ((leftOp instanceof RexLocalRef || leftOp instanceof RexInputRef) && idxOpSupports(rightOp)) {
-            return leftOp;
-        } else if ((rightOp instanceof RexLocalRef || rightOp instanceof RexInputRef) && idxOpSupports(leftOp)) {
-            return rightOp;
+        RexNode rightRef = extractRefFromOperand(call, cluster, 1);
+        RexNode leftOp = call.getOperands().get(0);
+
+        if (rightRef != null) {
+            return idxOpSupports(removeCast(leftOp)) ? rightRef : null;
+        }
+
+        return null;
+    }
+
+    private static RexNode extractRefFromOperand(RexCall call, RelOptCluster cluster, int operandNum) {
+        assert isSupportedTreeComparison(call);
+
+        RexNode op = call.getOperands().get(operandNum);
+
+        op = removeCast(op);
+
+        // Can proceed without ref cast only if cast was redundant in terms of values comparison.
+        if ((op instanceof RexSlot)
+                && !TypeUtils.needCast(cluster.getTypeFactory(), op.getType(), call.getOperands().get(operandNum).getType())) {
+            return op;
         }
 
         return null;
@@ -515,8 +616,15 @@ public class RexUtils {
         return rightOp.isA(SqlKind.LOCAL_REF) || rightOp.isA(SqlKind.INPUT_REF);
     }
 
-    public static boolean isBinaryComparison(RexNode exp) {
-        return TREE_INDEX_COMPARISON.contains(exp.getKind()) && (exp instanceof RexCall) && ((RexCall) exp).getOperands().size() == 2;
+    private static boolean isBinaryComparison(RexNode exp) {
+        return BINARY_COMPARISON.contains(exp.getKind())
+                && (exp instanceof RexCall)
+                && ((RexCall) exp).getOperands().size() == 2;
+    }
+
+    private static boolean isSupportedTreeComparison(RexNode exp) {
+        return TREE_INDEX_COMPARISON.contains(exp.getKind())
+                && (exp instanceof RexCall);
     }
 
     private static boolean idxOpSupports(RexNode op) {
@@ -541,6 +649,7 @@ public class RexUtils {
      * AsBound.
      * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
      */
+    @Deprecated(forRemoval = true)
     public static List<RexNode> asBound(RelOptCluster cluster, Iterable<RexNode> idxCond, RelDataType rowType,
             @Nullable Mappings.TargetMapping mapping) {
         if (nullOrEmpty(idxCond)) {
@@ -629,9 +738,9 @@ public class RexUtils {
     }
 
     /**
-    * Get hasCorrelation flag.
-    * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-    */
+     * Get hasCorrelation flag.
+     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
+     */
     public static boolean hasCorrelation(List<RexNode> nodes) {
         try {
             RexVisitor<Void> v = new RexVisitorImpl<Void>(true) {
@@ -650,9 +759,9 @@ public class RexUtils {
     }
 
     /**
-    * ExtractCorrelationIds.
-    * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
-    */
+     * ExtractCorrelationIds.
+     * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
+     */
     public static Set<CorrelationId> extractCorrelationIds(RexNode node) {
         if (node == null) {
             return Collections.emptySet();
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
index e96d23b0bb..e743e60eb1 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
@@ -83,7 +83,7 @@ public class RuntimeSortedIndexTest extends IgniteAbstractTest {
                     Object[] lower = generateFindRow(rowIdLow, testIdx.getKey(), notUnique, testIdx.getValue());
                     Object[] upper = generateFindRow(rowIdUp, testIdx.getKey(), notUnique, testIdx.getValue());
 
-                    Cursor<Object[]> cur = idx0.find(lower, upper);
+                    Cursor<Object[]> cur = idx0.find(lower, upper, true, true);
 
                     int rows = 0;
                     while (cur.hasNext()) {
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNodeExecutionTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNodeExecutionTest.java
index 960d9393ce..7fae73256b 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNodeExecutionTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNodeExecutionTest.java
@@ -25,7 +25,6 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.Flow.Publisher;
 import java.util.concurrent.Flow.Subscription;
-import java.util.function.Supplier;
 import java.util.stream.IntStream;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory.Builder;
@@ -41,6 +40,8 @@ import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeCondition;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
 import org.apache.ignite.internal.sql.engine.planner.AbstractPlannerTest;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex;
 import org.apache.ignite.internal.sql.engine.schema.IgniteIndex.Type;
@@ -92,22 +93,22 @@ public class IndexScanNodeExecutionTest extends AbstractExecutionTest {
         // Validate bounds.
         validateSortedIndexScan(
                 tableData,
-                () -> new Object[]{2, 1},
-                () -> new Object[]{3, 0},
+                new Object[]{2, 1},
+                new Object[]{3, 0},
                 result
         );
 
         validateSortedIndexScan(
                 tableData,
-                () -> new Object[]{2, 1},
-                () -> new Object[]{4},
+                new Object[]{2, 1},
+                new Object[]{4},
                 result
 
         );
 
         validateSortedIndexScan(
                 tableData,
-                () -> new Object[]{null},
+                new Object[]{null},
                 null,
                 result
         );
@@ -116,8 +117,8 @@ public class IndexScanNodeExecutionTest extends AbstractExecutionTest {
         IgniteTestUtils.assertThrowsWithCause(() ->
                 validateSortedIndexScan(
                         tableData,
-                        () -> new Object[]{2, "Brutus"},
-                        () -> new Object[]{3.9, 0},
+                        new Object[]{2, "Brutus"},
+                        new Object[]{3.9, 0},
                         // TODO: sort data, once IndexScanNode will support merging.
                         EMPTY
                 ), ClassCastException.class);
@@ -152,31 +153,31 @@ public class IndexScanNodeExecutionTest extends AbstractExecutionTest {
         // Validate bounds.
         validateHashIndexScan(
                 tableData,
-                () -> new Object[]{4, 2},
+                new Object[]{4, 2},
                 tableData);
 
         validateHashIndexScan(
                 tableData,
-                () -> new Object[]{null, null},
+                new Object[]{null, null},
                 tableData);
 
         // Validate failure due to incorrect bounds.
         IgniteTestUtils.assertThrowsWithCause(() ->
                 validateHashIndexScan(
                         tableData,
-                        () -> new Object[]{2},
+                        new Object[]{2},
                         EMPTY
                 ), AssertionError.class, "Invalid lookup condition");
 
         IgniteTestUtils.assertThrowsWithCause(() ->
                 validateHashIndexScan(
                         tableData,
-                        () -> new Object[]{2, "Brutus"},
+                        new Object[]{2, "Brutus"},
                         EMPTY
                 ), ClassCastException.class);
     }
 
-    private void validateHashIndexScan(Object[][] tableData, @Nullable Supplier<Object[]> key, Object[][] expRes) {
+    private void validateHashIndexScan(Object[][] tableData, @Nullable Object[] key, Object[][] expRes) {
         SchemaDescriptor schemaDescriptor = new SchemaDescriptor(
                 1,
                 new Column[]{new Column("key", NativeTypes.INT64, false)},
@@ -214,8 +215,8 @@ public class IndexScanNodeExecutionTest extends AbstractExecutionTest {
 
     private void validateSortedIndexScan(
             Object[][] tableData,
-            Supplier<Object[]> lowerBound,
-            Supplier<Object[]> upperBound,
+            Object[] lowerBound,
+            Object[] upperBound,
             Object[][] expectedData
     ) {
         SchemaDescriptor schemaDescriptor = new SchemaDescriptor(
@@ -264,22 +265,37 @@ public class IndexScanNodeExecutionTest extends AbstractExecutionTest {
             Object[][] tableData,
             SchemaDescriptor schemaDescriptor,
             IgniteIndex index,
-            Supplier<Object[]> lowerBound,
-            Supplier<Object[]> upperBound,
+            Object[] lowerBound,
+            Object[] upperBound,
             Object[][] expectedData
     ) {
         ExecutionContext<Object[]> ectx = executionContext(true);
 
         RelDataType rowType = createRowTypeFromSchema(ectx.getTypeFactory(), schemaDescriptor);
 
+        RangeIterable<Object[]> rangeIterable = null;
+
+        if (lowerBound != null || upperBound != null) {
+            RangeCondition<Object[]> range = Mockito.mock(RangeCondition.class);
+
+            Mockito.doReturn(lowerBound).when(range).lower();
+            Mockito.doReturn(upperBound).when(range).upper();
+            Mockito.doReturn(true).when(range).lowerInclude();
+            Mockito.doReturn(true).when(range).upperInclude();
+
+            rangeIterable = Mockito.mock(RangeIterable.class);
+
+            Mockito.doReturn(1).when(rangeIterable).size();
+            Mockito.doAnswer(inv -> List.of(range).iterator()).when(rangeIterable).iterator();
+        }
+
         IndexScanNode<Object[]> scanNode = new IndexScanNode<>(
                 ectx,
                 rowType,
                 index,
                 new TestTable(rowType),
                 new int[]{0, 2},
-                lowerBound,
-                upperBound,
+                rangeIterable,
                 null,
                 null,
                 null
@@ -307,7 +323,6 @@ public class IndexScanNodeExecutionTest extends AbstractExecutionTest {
         return rowTypeBuilder.build();
     }
 
-
     private BinaryTuple[] partitionData(Object[][] tableData, SchemaDescriptor schemaDescriptor, int partition) {
         BinaryTupleSchema binaryTupleSchema = BinaryTupleSchema.createRowSchema(schemaDescriptor);
 
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortedIndexSpoolExecutionTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortedIndexSpoolExecutionTest.java
index e03b62b9b7..a081582e09 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortedIndexSpoolExecutionTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortedIndexSpoolExecutionTest.java
@@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.function.Predicate;
@@ -30,6 +31,8 @@ import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.util.ImmutableIntList;
 import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeCondition;
+import org.apache.ignite.internal.sql.engine.exec.exp.RangeIterable;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.apache.ignite.internal.sql.engine.util.TypeUtils;
@@ -125,8 +128,7 @@ public class SortedIndexSpoolExecutionTest extends AbstractExecutionTest {
                     RelCollations.of(ImmutableIntList.of(0)),
                     (o1, o2) -> o1[0] != null ? ((Comparable) o1[0]).compareTo(o2[0]) : 0,
                     testFilter,
-                    () -> lower,
-                    () -> upper
+                    new StaticRangeIterable(lower, upper)
             );
 
             spool.register(singletonList(scan));
@@ -172,8 +174,7 @@ public class SortedIndexSpoolExecutionTest extends AbstractExecutionTest {
                 collation,
                 ctx.expressionFactory().comparator(collation),
                 v -> true,
-                () -> lower,
-                () -> upper
+                new StaticRangeIterable(lower, upper)
         );
 
         spool.register(scan);
@@ -240,4 +241,49 @@ public class SortedIndexSpoolExecutionTest extends AbstractExecutionTest {
             this.expectedResultSize = expectedResultSize;
         }
     }
+
+    private static class StaticRangeIterable implements RangeIterable<Object[]> {
+        private final Object[] lower;
+
+        private final Object[] upper;
+
+        private StaticRangeIterable(Object[] lower, Object[] upper) {
+            this.lower = lower;
+            this.upper = upper;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public int size() {
+            return 1;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public Iterator<RangeCondition<Object[]>> iterator() {
+            RangeCondition<Object[]> range = new RangeCondition<Object[]>() {
+                @Override
+                public Object[] lower() {
+                    return lower;
+                }
+
+                @Override
+                public Object[] upper() {
+                    return upper;
+                }
+
+                @Override
+                public boolean lowerInclude() {
+                    return true;
+                }
+
+                @Override
+                public boolean upperInclude() {
+                    return true;
+                }
+            };
+
+            return Collections.singleton(range).iterator();
+        }
+    }
 }
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CorrelatedNestedLoopJoinPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CorrelatedNestedLoopJoinPlannerTest.java
index 8dc73bce4c..53bce77d6d 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CorrelatedNestedLoopJoinPlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/CorrelatedNestedLoopJoinPlannerTest.java
@@ -26,7 +26,8 @@ import java.util.List;
 import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rex.RexFieldAccess;
-import org.apache.calcite.rex.RexNode;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.ExactBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.IgniteIndexScan;
 import org.apache.ignite.internal.sql.engine.rel.IgniteRel;
 import org.apache.ignite.internal.sql.engine.schema.IgniteSchema;
@@ -98,28 +99,19 @@ public class CorrelatedNestedLoopJoinPlannerTest extends AbstractPlannerTest {
 
         IgniteIndexScan idxScan = findFirstNode(phys, byClass(IgniteIndexScan.class));
 
-        List<RexNode> lowerBound = idxScan.lowerBound();
+        List<SearchBounds> searchBounds = idxScan.searchBounds();
 
-        assertNotNull(lowerBound, "Invalid plan\n" + RelOptUtil.toString(phys));
-        assertEquals(3, lowerBound.size());
+        assertNotNull(searchBounds, "Invalid plan\n" + RelOptUtil.toString(phys));
+        assertEquals(3, searchBounds.size());
 
-        assertNull(lowerBound.get(0));
-        assertTrue(lowerBound.get(1) instanceof RexFieldAccess);
-        assertNull(lowerBound.get(2));
-
-        List<RexNode> upperBound = idxScan.upperBound();
-
-        assertNotNull(upperBound, "Invalid plan\n" + RelOptUtil.toString(phys));
-        assertEquals(3, upperBound.size());
-
-        assertNull(upperBound.get(0));
-        assertTrue(upperBound.get(1) instanceof RexFieldAccess);
-        assertNull(upperBound.get(2));
+        assertNull(searchBounds.get(0));
+        assertTrue(searchBounds.get(1) instanceof ExactBounds);
+        assertTrue(((ExactBounds) searchBounds.get(1)).bound() instanceof RexFieldAccess);
+        assertNull(searchBounds.get(2));
     }
 
     /**
-     * Check join with not equi condition. Current implementation of the CorrelatedNestedLoopJoinTest is not applicable
-     * for such case.
+     * Check join with not equi condition. Current implementation of the CorrelatedNestedLoopJoinTest is not applicable for such case.
      */
     @Test
     public void testInvalidIndexExpressions() throws Exception {
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/ProjectFilterScanMergePlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/ProjectFilterScanMergePlannerTest.java
index 2f2b36a105..600d46a7f4 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/ProjectFilterScanMergePlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/ProjectFilterScanMergePlannerTest.java
@@ -17,11 +17,16 @@
 
 package org.apache.ignite.internal.sql.engine.planner;
 
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
+import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.IgniteAggregate;
 import org.apache.ignite.internal.sql.engine.rel.IgniteIndexScan;
 import org.apache.ignite.internal.sql.engine.rel.IgniteTableScan;
@@ -94,8 +99,7 @@ public class ProjectFilterScanMergePlannerTest extends AbstractPlannerTest {
                 .and(scan -> scan.condition() != null)
                 .and(scan -> "=($t2, 0)".equals(scan.condition().toString()))
                 .and(scan -> ImmutableBitSet.of(0, 1, 2).equals(scan.requiredColumns()))
-                .and(scan -> "[=($t2, 0)]".equals(scan.indexConditions().lowerCondition().toString()))
-                .and(scan -> "[=($t2, 0)]".equals(scan.indexConditions().upperCondition().toString()))
+                .and(scan -> "[=($t2, 0)]".equals(searchBoundsCondition(scan.searchBounds()).toString()))
         );
 
         // Index condition shifted according to requiredColumns.
@@ -105,8 +109,7 @@ public class ProjectFilterScanMergePlannerTest extends AbstractPlannerTest {
                 .and(scan -> scan.condition() != null)
                 .and(scan -> "=($t1, 0)".equals(scan.condition().toString()))
                 .and(scan -> ImmutableBitSet.of(1, 2).equals(scan.requiredColumns()))
-                .and(scan -> "[=($t1, 0)]".equals(scan.indexConditions().lowerCondition().toString()))
-                .and(scan -> "[=($t1, 0)]".equals(scan.indexConditions().upperCondition().toString()))
+                .and(scan -> "[=($t1, 0)]".equals(searchBoundsCondition(scan.searchBounds()).toString()))
         );
     }
 
@@ -122,8 +125,7 @@ public class ProjectFilterScanMergePlannerTest extends AbstractPlannerTest {
                 .and(scan -> scan.condition() != null)
                 .and(scan -> "=($t2, 0)".equals(scan.condition().toString()))
                 .and(scan -> ImmutableBitSet.of(0, 1, 2).equals(scan.requiredColumns()))
-                .and(scan -> "[=($t2, 0)]".equals(scan.indexConditions().lowerCondition().toString()))
-                .and(scan -> "[=($t2, 0)]".equals(scan.indexConditions().upperCondition().toString()))
+                .and(scan -> "[=($t2, 0)]".equals(searchBoundsCondition(scan.searchBounds()).toString()))
         );
 
         // Index condition shift and identity.
@@ -132,8 +134,7 @@ public class ProjectFilterScanMergePlannerTest extends AbstractPlannerTest {
                 .and(scan -> scan.condition() != null)
                 .and(scan -> "=($t1, 0)".equals(scan.condition().toString()))
                 .and(scan -> ImmutableBitSet.of(1, 2).equals(scan.requiredColumns()))
-                .and(scan -> "[=($t1, 0)]".equals(scan.indexConditions().lowerCondition().toString()))
-                .and(scan -> "[=($t1, 0)]".equals(scan.indexConditions().upperCondition().toString()))
+                .and(scan -> "[=($t1, 0)]".equals(searchBoundsCondition(scan.searchBounds()).toString()))
         );
     }
 
@@ -237,4 +238,11 @@ public class ProjectFilterScanMergePlannerTest extends AbstractPlannerTest {
                         .and(scan -> ImmutableBitSet.of(0, 2).equals(scan.requiredColumns())),
                 "ProjectFilterTransposeRule", "FilterProjectTransposeRule");
     }
+
+    /**
+     * Convert search bounds to RexNodes.
+     */
+    private static List<RexNode> searchBoundsCondition(List<SearchBounds> searchBounds) {
+        return searchBounds.stream().filter(Objects::nonNull).map(SearchBounds::condition).collect(Collectors.toList());
+    }
 }
\ No newline at end of file
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/SortedIndexSpoolPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/SortedIndexSpoolPlannerTest.java
index b41d83067b..cebf23eda7 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/SortedIndexSpoolPlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/SortedIndexSpoolPlannerTest.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.sql.engine.planner;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -27,8 +28,11 @@ import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rex.RexFieldAccess;
-import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexLiteral;
 import org.apache.ignite.internal.index.ColumnCollation;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.ExactBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.RangeBounds;
+import org.apache.ignite.internal.sql.engine.prepare.bounds.SearchBounds;
 import org.apache.ignite.internal.sql.engine.rel.IgniteCorrelatedNestedLoopJoin;
 import org.apache.ignite.internal.sql.engine.rel.IgniteRel;
 import org.apache.ignite.internal.sql.engine.rel.IgniteSortedIndexSpool;
@@ -46,8 +50,7 @@ import org.junit.jupiter.api.Test;
  */
 public class SortedIndexSpoolPlannerTest extends AbstractPlannerTest {
     /**
-     * Check equi-join on not colocated fields. CorrelatedNestedLoopJoinTest is applicable for this case only with
-     * IndexSpool.
+     * Check equi-join on not colocated fields. CorrelatedNestedLoopJoinTest is applicable for this case only with IndexSpool.
      */
     @Test
     public void testNotColocatedEqJoin() throws Exception {
@@ -100,28 +103,19 @@ public class SortedIndexSpoolPlannerTest extends AbstractPlannerTest {
 
         IgniteSortedIndexSpool idxSpool = findFirstNode(phys, byClass(IgniteSortedIndexSpool.class));
 
-        List<RexNode> lowerBound = idxSpool.indexCondition().lowerBound();
+        List<SearchBounds> searchBounds = idxSpool.searchBounds();
 
-        assertNotNull(lowerBound);
-        assertEquals(3, lowerBound.size());
+        assertNotNull(searchBounds, "Invalid plan\n" + RelOptUtil.toString(phys));
+        assertEquals(3, searchBounds.size());
 
-        assertNull(lowerBound.get(0));
-        assertTrue(lowerBound.get(1) instanceof RexFieldAccess);
-        assertNull(lowerBound.get(2));
-
-        List<RexNode> upperBound = idxSpool.indexCondition().upperBound();
-
-        assertNotNull(upperBound);
-        assertEquals(3, upperBound.size());
-
-        assertNull(upperBound.get(0));
-        assertTrue(upperBound.get(1) instanceof RexFieldAccess);
-        assertNull(upperBound.get(2));
+        assertNull(searchBounds.get(0));
+        assertTrue(searchBounds.get(1) instanceof ExactBounds);
+        assertTrue(((ExactBounds) searchBounds.get(1)).bound() instanceof RexFieldAccess);
+        assertNull(searchBounds.get(2));
     }
 
     /**
-     * Check case when exists index (collation) isn't applied not for whole join condition but may be used by part of
-     * condition.
+     * Check case when exists index (collation) isn't applied not for whole join condition but may be used by part of condition.
      */
     @Test
     public void testPartialIndexForCondition() throws Exception {
@@ -177,25 +171,16 @@ public class SortedIndexSpoolPlannerTest extends AbstractPlannerTest {
 
         IgniteSortedIndexSpool idxSpool = findFirstNode(phys, byClass(IgniteSortedIndexSpool.class));
 
-        List<RexNode> lowerBound = idxSpool.indexCondition().lowerBound();
-
-        assertNotNull(lowerBound);
-        assertEquals(4, lowerBound.size());
-
-        assertNull(lowerBound.get(0));
-        assertTrue(lowerBound.get(1) instanceof RexFieldAccess);
-        assertNull(lowerBound.get(2));
-        assertNull(lowerBound.get(3));
+        List<SearchBounds> searchBounds = idxSpool.searchBounds();
 
-        List<RexNode> upperBound = idxSpool.indexCondition().upperBound();
+        assertNotNull(searchBounds, "Invalid plan\n" + RelOptUtil.toString(phys));
+        assertEquals(4, searchBounds.size());
 
-        assertNotNull(upperBound);
-        assertEquals(4, upperBound.size());
-
-        assertNull(upperBound.get(0));
-        assertTrue(upperBound.get(1) instanceof RexFieldAccess);
-        assertNull(lowerBound.get(2));
-        assertNull(lowerBound.get(3));
+        assertNull(searchBounds.get(0));
+        assertTrue(searchBounds.get(1) instanceof ExactBounds);
+        assertTrue(((ExactBounds) searchBounds.get(1)).bound() instanceof RexFieldAccess);
+        assertNull(searchBounds.get(2));
+        assertNull(searchBounds.get(3));
     }
 
     /**
@@ -209,7 +194,7 @@ public class SortedIndexSpoolPlannerTest extends AbstractPlannerTest {
                         .addIndex("t0_jid_idx", 1),
                 createTable("T1", 100, IgniteDistributions.affinity(0, "T1", "hash"),
                         "ID", Integer.class, "JID", Integer.class, "VAL", String.class)
-                        .addIndex(RelCollations.of(TraitUtils.createFieldCollation(1, ColumnCollation.DESC_NULLS_FIRST)), "t1_jid_idx")
+                        .addIndex(RelCollations.of(TraitUtils.createFieldCollation(1, ColumnCollation.DESC_NULLS_LAST)), "t1_jid_idx")
         );
 
         String sql = "select * "
@@ -220,20 +205,22 @@ public class SortedIndexSpoolPlannerTest extends AbstractPlannerTest {
                 isInstanceOf(IgniteCorrelatedNestedLoopJoin.class)
                         .and(input(1, isInstanceOf(IgniteSortedIndexSpool.class)
                                 .and(spool -> {
-                                    List<RexNode> lowerBound = spool.indexCondition().lowerBound();
+                                    List<SearchBounds> searchBounds = spool.searchBounds();
 
                                     // Condition is LESS_THEN, but we have DESC field and condition should be in lower bound
                                     // instead of upper bound.
-                                    assertNotNull(lowerBound);
-                                    assertEquals(3, lowerBound.size());
-
-                                    assertNull(lowerBound.get(0));
-                                    assertTrue(lowerBound.get(1) instanceof RexFieldAccess);
-                                    assertNull(lowerBound.get(2));
-
-                                    List<RexNode> upperBound = spool.indexCondition().upperBound();
-
-                                    assertNull(upperBound);
+                                    assertNotNull(searchBounds);
+                                    assertEquals(3, searchBounds.size());
+
+                                    assertNull(searchBounds.get(0));
+                                    assertTrue(searchBounds.get(1) instanceof RangeBounds);
+                                    RangeBounds fld1Bounds = (RangeBounds) searchBounds.get(1);
+                                    assertTrue(fld1Bounds.lowerBound() instanceof RexFieldAccess);
+                                    assertFalse(fld1Bounds.lowerInclude());
+                                    // NULLS LAST in collation, so nulls can be skipped by upper bound.
+                                    assertTrue(((RexLiteral) fld1Bounds.upperBound()).isNull());
+                                    assertFalse(fld1Bounds.upperInclude());
+                                    assertNull(searchBounds.get(2));
 
                                     return true;
                                 })


[ignite-3] 01/02: IGNITE-17816:Sort out and merge Calcite tickets to Ignite 3.0 (step 7) (#1195)

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-3.0.0-beta1
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 4121d11953dd4c725afe9c0e8cb9ff4c95fb5513
Author: ygerzhedovich <41...@users.noreply.github.com>
AuthorDate: Mon Oct 17 17:05:47 2022 +0300

    IGNITE-17816:Sort out and merge Calcite tickets to Ignite 3.0 (step 7) (#1195)
---
 .../sql/engine/ItHashSpoolIntegrationTest.java     |    61 +
 .../ignite/internal/sqllogic/SqlScriptRunner.java  |    92 +-
 .../test_full_outer_join_many_matches.test_ignore  |     3 +
 .../sql/sqlite/aggregates/agg1.test_ignored        | 34492 ----------------
 .../sql/sqlite/aggregates/agg1.test_slow           |    87 +
 .../sql/sqlite/aggregates/agg2.test_ignored        | 32616 ---------------
 .../sql/sqlite/aggregates/agg2.test_slow           |   133 +
 .../sql/sqlite/aggregates/agg3.test_ignored        | 33723 ---------------
 .../sql/sqlite/aggregates/agg3.test_slow           |    46 +
 .../sql/sqlite/aggregates/agg4.test_ignored        | 34088 ----------------
 .../sql/sqlite/aggregates/agg4.test_slow           |    47 +
 .../select1.test_native => select/select1.test}    |     0
 .../select2.test_native => select/select2.test}    |     0
 .../select1.test_native => select/select3.test}    | 18976 +++++----
 .../select1.test_native => select/select3_1.test}  | 19513 +++++----
 .../select1.test_native => select/select3_2.test}  | 17540 ++++----
 .../sql/sqlite/select3/select3.test_native         | 40766 -------------------
 .../scalar/test_complex_correlated_subquery.test   |    36 +
 .../test_complex_correlated_subquery.test_ignore   |     1 -
 .../subquery/scalar/test_count_star_subquery.test  |    74 +-
 ...st_ignore => test_many_correlated_columns.test} |    21 +-
 .../test_many_correlated_columns.test_ignore       |     7 +-
 .../test_nested_correlated_subquery.test_ignore    |     1 +
 .../scalar/test_uncorrelated_scalar_subquery.test  |    78 +
 .../test_uncorrelated_scalar_subquery.test_ignore  |    12 +-
 .../internal/sql/engine/SqlQueryProcessor.java     |     5 +
 .../internal/sql/engine/exec/ExecutionContext.java |     7 +
 .../internal/sql/engine/exec/RuntimeHashIndex.java |    31 +-
 .../sql/engine/exec/exp/ExpressionFactory.java     |     2 +-
 .../sql/engine/exec/exp/ExpressionFactoryImpl.java |   171 +-
 .../sql/engine/exec/rel/MergeJoinNode.java         |    14 +-
 .../internal/sql/engine/prepare/IgnitePlanner.java |    19 +
 .../sql/engine/prepare/PlanningContext.java        |    34 +-
 .../internal/sql/engine/util/BaseQueryContext.java |    19 +-
 .../internal/sql/engine/util/IgniteMethod.java     |     2 +
 .../ignite/internal/sql/engine/util/RexUtils.java  |     6 +-
 .../sql/engine/exec/rel/AbstractExecutionTest.java |    15 +
 .../exec/rel/HashIndexSpoolExecutionTest.java      |    57 +-
 .../engine/exec/rel/MergeJoinExecutionTest.java    |    75 +-
 .../exec/rel/SortedIndexSpoolExecutionTest.java    |    76 +-
 .../sql/engine/planner/AbstractPlannerTest.java    |    34 +-
 .../CorrelatedNestedLoopJoinPlannerTest.java       |    10 +-
 .../engine/planner/HashIndexSpoolPlannerTest.java  |    24 +-
 .../internal/sql/engine/planner/PlannerTest.java   |    12 +-
 .../sql/engine/planner/PlannerTimeoutTest.java     |   122 +
 .../planner/SortedIndexSpoolPlannerTest.java       |    25 +-
 46 files changed, 31436 insertions(+), 201737 deletions(-)

diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItHashSpoolIntegrationTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItHashSpoolIntegrationTest.java
new file mode 100644
index 0000000000..fac3c5c4b4
--- /dev/null
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItHashSpoolIntegrationTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.sql.engine;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Hash spool test.
+ */
+public class ItHashSpoolIntegrationTest extends AbstractBasicIntegrationTest {
+    @Test
+    public void testNullsInSearchRow() {
+        sql("CREATE TABLE t(pk varchar default gen_random_uuid PRIMARY KEY, i1 INTEGER, i2 INTEGER)");
+        sql("INSERT INTO t (i1, i2) VALUES (null, 0), (1, 1), (2, 2), (3, null)");
+
+        assertQuery("SELECT i1, (SELECT i2 FROM t WHERE i1=t1.i1) FROM t t1")
+                .returns(null, null)
+                .returns(1, 1)
+                .returns(2, 2)
+                .returns(3, null)
+                .check();
+
+        assertQuery("SELECT (SELECT i1 FROM t WHERE i2=t1.i2), i2 FROM t t1")
+                .returns(null, 0)
+                .returns(1, 1)
+                .returns(2, 2)
+                .returns(null, null)
+                .check();
+    }
+
+    @Test
+    public void testNullsInSearchRowMultipleColumns() {
+        sql("CREATE TABLE t0(pk varchar default gen_random_uuid PRIMARY KEY, i1 INTEGER, i2 INTEGER)");
+        sql("CREATE TABLE t1(pk varchar default gen_random_uuid PRIMARY KEY, i1 INTEGER, i2 INTEGER)");
+        sql("INSERT INTO t0(i1, i2) VALUES (null, 0), (1, null), (null, 2), (3, null), (1, 1)");
+        sql("INSERT INTO t1(i1, i2) VALUES (null, 0), (null, 1), (2, null), (3, null), (1, 1)");
+
+        String sql = "SELECT /*+ DISABLE_RULE ('MergeJoinConverter', 'NestedLoopJoinConverter', "
+                + "'FilterSpoolMergeToSortedIndexSpoolRule')*/ t0.i1, t0.i2, t1.i1, t1.i2 "
+                + "FROM t0 JOIN t1 ON t0.i1=t1.i1 AND t0.i2=t1.i2";
+
+        assertQuery(sql)
+                .returns(1, 1, 1, 1)
+                .check();
+    }
+}
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sqllogic/SqlScriptRunner.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sqllogic/SqlScriptRunner.java
index 05fe1ab5a5..b2af0e3c52 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sqllogic/SqlScriptRunner.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sqllogic/SqlScriptRunner.java
@@ -39,7 +39,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Objects;
-import java.util.Set;
 import java.util.TreeMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -65,14 +64,12 @@ public class SqlScriptRunner {
     /** Hashing label pattern. */
     private static final Pattern HASHING_PTRN = Pattern.compile("([0-9]+) values hashing to ([0-9a-fA-F]+)");
 
-    /** Ignored statements. */
-    private static final Set<String> ignoredStmts = Set.of("PRAGMA");
 
     /** NULL label. */
     private static final String NULL = "NULL";
 
     /** Comparator for "rowsort" sort mode. */
-    private static final Comparator<List<?>> ROW_COMPARATOR = (r1, r2) -> {
+    private final Comparator<List<?>> rowComparator = (r1, r2) -> {
         int rows = r1.size();
 
         for (int i = 0; i < rows; ++i) {
@@ -112,6 +109,9 @@ public class SqlScriptRunner {
     /** Script. */
     private Script script;
 
+    /** String presentation of null's. */
+    private String nullLbl = NULL;
+
     /**
      * Line separator to bytes representation.
      * NB: Don't use {@code System.lineSeparator()} here.
@@ -146,6 +146,7 @@ public class SqlScriptRunner {
     public void run() throws Exception {
         try (Script s = new Script(test)) {
             script = s;
+            nullLbl = NULL;
 
             for (Command cmd : script) {
                 try {
@@ -189,8 +190,10 @@ public class SqlScriptRunner {
         }
     }
 
-    private static String toString(Object res) {
-        if (res instanceof byte[]) {
+    private String toString(Object res) {
+        if (res == null) {
+            return nullLbl;
+        } else if (res instanceof byte[]) {
             return ByteString.toString((byte[]) res, 16);
         } else if (res instanceof Map) {
             return mapToString((Map<?, ?>) res);
@@ -199,9 +202,9 @@ public class SqlScriptRunner {
         }
     }
 
-    private static String mapToString(Map<?, ?> map) {
+    private String mapToString(Map<?, ?> map) {
         if (map == null) {
-            return NULL;
+            return nullLbl;
         }
 
         List<String> entries = (new TreeMap<>(map)).entrySet().stream()
@@ -244,7 +247,8 @@ public class SqlScriptRunner {
             return '(' + fileName + ':' + lineNum + ')';
         }
 
-        @Override public void close() throws Exception {
+        @Override
+        public void close() throws Exception {
             buffReader.close();
         }
 
@@ -260,7 +264,7 @@ public class SqlScriptRunner {
                     String[] tokens = s.split("\\s+");
 
                     assert !ArrayUtils.nullOrEmpty(tokens) : "Invalid command line. "
-                        + script.positionDescription() + ". [cmd=" + s + ']';
+                            + script.positionDescription() + ". [cmd=" + s + ']';
 
                     Command cmd = null;
 
@@ -292,7 +296,7 @@ public class SqlScriptRunner {
 
                         default:
                             throw new IgniteException("Unexpected command. "
-                                + script.positionDescription() + ". [cmd=" + s + ']');
+                                    + script.positionDescription() + ". [cmd=" + s + ']');
                     }
 
                     if (cmd != null) {
@@ -307,16 +311,19 @@ public class SqlScriptRunner {
         }
 
         @NotNull
-        @Override public Iterator<Command> iterator() {
+        @Override
+        public Iterator<Command> iterator() {
             final Command cmd0 = nextCommand();
             return new Iterator<>() {
                 private Command cmd = cmd0;
 
-                @Override public boolean hasNext() {
+                @Override
+                public boolean hasNext() {
                     return cmd != null;
                 }
 
-                @Override public Command next() {
+                @Override
+                public Command next() {
                     if (cmd == null) {
                         throw new NoSuchElementException();
                     }
@@ -357,7 +364,7 @@ public class SqlScriptRunner {
                 end = Integer.parseInt(cmdTokens[3]);
             } catch (Exception e) {
                 throw new IgniteException("Unexpected loop syntax. "
-                    + script.positionDescription() + ". [cmd=" + cmdTokens + ']');
+                        + script.positionDescription() + ". [cmd=" + cmdTokens + ']');
             }
 
             while (script.ready()) {
@@ -371,7 +378,8 @@ public class SqlScriptRunner {
             }
         }
 
-        @Override void execute() {
+        @Override
+        void execute() {
             for (int i = begin; i < end; ++i) {
                 loopVars.put(var, i);
 
@@ -383,7 +391,8 @@ public class SqlScriptRunner {
     }
 
     private class EndLoop extends Command {
-        @Override void execute() {
+        @Override
+        void execute() {
             // No-op.
         }
     }
@@ -407,7 +416,7 @@ public class SqlScriptRunner {
 
                 default:
                     throw new IgniteException("Statement argument should be 'ok' or 'error'. "
-                        + script.positionDescription() + "[cmd=" + Arrays.toString(cmd) + ']');
+                            + script.positionDescription() + "[cmd=" + Arrays.toString(cmd) + ']');
             }
 
             queries = new ArrayList<>();
@@ -423,12 +432,19 @@ public class SqlScriptRunner {
             }
         }
 
-        @Override void execute() {
+        @Override
+        void execute() {
             for (String qry : queries) {
                 String[] toks = qry.split("\\s+");
 
-                if (ignoredStmts.contains(toks[0])) {
-                    log.info("Ignore: " + toString());
+                if ("PRAGMA".equals(toks[0])) {
+                    String[] pragmaParams = toks[1].split("=");
+
+                    if ("null".equals(pragmaParams[0])) {
+                        nullLbl = pragmaParams[1];
+                    } else {
+                        log.info("Ignore: " + toString());
+                    }
 
                     continue;
                 }
@@ -503,13 +519,13 @@ public class SqlScriptRunner {
 
                     default:
                         throw new IgniteException("Unknown type character '" + resTypesChars.charAt(i) + "' at: "
-                            + script.positionDescription() + "[cmd=" + Arrays.toString(cmd) + ']');
+                                + script.positionDescription() + "[cmd=" + Arrays.toString(cmd) + ']');
                 }
             }
 
             if (CollectionUtils.nullOrEmpty(resTypes)) {
                 throw new IgniteException("Missing type string at: "
-                    + script.positionDescription() + "[cmd=" + Arrays.toString(cmd) + ']');
+                        + script.positionDescription() + "[cmd=" + Arrays.toString(cmd) + ']');
             }
 
             // Read SQL query
@@ -552,12 +568,12 @@ public class SqlScriptRunner {
 
                     if (vals.length != resTypes.size() && !singleValOnLine) {
                         throw new IgniteException("Invalid columns count at the result at: "
-                            + script.positionDescription() + " [row=\"" + s + "\", types=" + resTypes + ']');
+                                + script.positionDescription() + " [row=\"" + s + "\", types=" + resTypes + ']');
                     }
 
                     try {
                         if (singleValOnLine) {
-                            row.add(NULL.equals(vals[0]) ? null : vals[0]);
+                            row.add(nullLbl.equals(vals[0]) ? null : vals[0]);
 
                             if (row.size() == resTypes.size()) {
                                 expectedRes.add(row);
@@ -566,7 +582,7 @@ public class SqlScriptRunner {
                             }
                         } else {
                             for (String val : vals) {
-                                row.add(NULL.equals(val) ? null : val);
+                                row.add(nullLbl.equals(val) ? null : val);
                             }
 
                             expectedRes.add(row);
@@ -574,7 +590,7 @@ public class SqlScriptRunner {
                         }
                     } catch (Exception e) {
                         throw new IgniteException("Cannot parse expected results at: "
-                            + script.positionDescription() + "[row=\"" + s + "\", types=" + resTypes + ']', e);
+                                + script.positionDescription() + "[row=\"" + s + "\", types=" + resTypes + ']', e);
                     }
 
                     s = script.nextLineWithoutTrim();
@@ -582,7 +598,8 @@ public class SqlScriptRunner {
             }
         }
 
-        @Override void execute() {
+        @Override
+        void execute() {
             try {
                 List<List<?>> res = sql(sql.toString());
 
@@ -594,10 +611,10 @@ public class SqlScriptRunner {
 
         void checkResult(List<List<?>> res) {
             if (sortType == SortType.ROWSORT) {
-                res.sort(ROW_COMPARATOR);
+                res.sort(rowComparator);
 
                 if (expectedRes != null) {
-                    expectedRes.sort(ROW_COMPARATOR);
+                    expectedRes.sort(rowComparator);
                 }
             } else if (sortType == SortType.VALUESORT) {
                 List<Object> flattenRes = new ArrayList<>();
@@ -650,7 +667,7 @@ public class SqlScriptRunner {
                     checkEquals(
                             "Not expected result at: " + posDesc
                                     + ". [row=" + i + ", col=" + j
-                                    + ", expected=" + expectedRow.get(j) + ", actual=" + SqlScriptRunner.toString(row.get(j)) + ']',
+                                    + ", expected=" + expectedRow.get(j) + ", actual=" + SqlScriptRunner.this.toString(row.get(j)) + ']',
                             expectedRow.get(j),
                             row.get(j)
                     );
@@ -659,7 +676,7 @@ public class SqlScriptRunner {
         }
 
         private void checkEquals(String msg, String expectedStr, Object actual) {
-            if (actual == null && String.valueOf(actual).equalsIgnoreCase(expectedStr)) {
+            if (actual == null && (expectedStr == null || nullLbl.equalsIgnoreCase(expectedStr))) {
                 return;
             }
 
@@ -667,6 +684,11 @@ public class SqlScriptRunner {
                 throw new AssertionError(msg);
             }
 
+            // Alternative values for boolean "0" and "1".
+            if (actual instanceof Boolean && expectedStr.equals((Boolean) actual ? "1" : "0")) {
+                return;
+            }
+
             if (actual instanceof Number) {
                 if ("NaN".equals(expectedStr) || expectedStr.endsWith("Infinity")) {
                     if (!expectedStr.equals(String.valueOf(actual))) {
@@ -687,8 +709,8 @@ public class SqlScriptRunner {
                     throw new AssertionError(msg);
                 }
             } else {
-                if (!String.valueOf(expectedStr).equals(SqlScriptRunner.toString(actual))
-                        && !("(empty)".equals(expectedStr) && SqlScriptRunner.toString(actual).isEmpty())) {
+                if (!String.valueOf(expectedStr).equals(SqlScriptRunner.this.toString(actual))
+                        && !("(empty)".equals(expectedStr) && SqlScriptRunner.this.toString(actual).isEmpty())) {
                     throw new AssertionError(msg);
                 }
             }
@@ -701,7 +723,7 @@ public class SqlScriptRunner {
 
             for (List<?> row : res) {
                 for (Object col : row) {
-                    messageDigest.update(SqlScriptRunner.toString(col).getBytes(Charset.forName(UTF_8.name())));
+                    messageDigest.update(SqlScriptRunner.this.toString(col).getBytes(Charset.forName(UTF_8.name())));
                     messageDigest.update(LINE_SEPARATOR_BYTES);
                 }
             }
diff --git a/modules/runner/src/integrationTest/sql/join/full_outer/test_full_outer_join_many_matches.test_ignore b/modules/runner/src/integrationTest/sql/join/full_outer/test_full_outer_join_many_matches.test_ignore
index 0788628f0d..76a87bc65c 100644
--- a/modules/runner/src/integrationTest/sql/join/full_outer/test_full_outer_join_many_matches.test_ignore
+++ b/modules/runner/src/integrationTest/sql/join/full_outer/test_full_outer_join_many_matches.test_ignore
@@ -3,6 +3,9 @@
 # group: [full_outer]
 # Ignore: https://issues.apache.org/jira/browse/IGNITE-17268
 
+statement ok
+PRAGMA null=null
+
 statement ok
 CREATE TABLE integers AS SELECT a i, 1 j FROM table(system_range(0, 1999, 1)) t1(a)
 
diff --git a/modules/runner/src/integrationTest/sql/sqlite/aggregates/agg1.test_ignored b/modules/runner/src/integrationTest/sql/sqlite/aggregates/agg1.test_ignored
deleted file mode 100644
index e6f6a5353a..0000000000
--- a/modules/runner/src/integrationTest/sql/sqlite/aggregates/agg1.test_ignored
+++ /dev/null
@@ -1,34492 +0,0 @@
-# Ignore https://issues.apache.org/jira/browse/IGNITE-16053
-
-statement ok
-CREATE TABLE tab0(col0 INTEGER, col1 INTEGER, col2 INTEGER)
-
-statement ok
-CREATE TABLE tab1(col0 INTEGER, col1 INTEGER, col2 INTEGER)
-
-statement ok
-CREATE TABLE tab2(col0 INTEGER, col1 INTEGER, col2 INTEGER)
-
-statement ok
-INSERT INTO tab0 VALUES(97,1,99)
-
-statement ok
-INSERT INTO tab0 VALUES(15,81,47)
-
-statement ok
-INSERT INTO tab0 VALUES(87,21,10)
-
-statement ok
-INSERT INTO tab1 VALUES(51,14,96)
-
-statement ok
-INSERT INTO tab1 VALUES(85,5,59)
-
-statement ok
-INSERT INTO tab1 VALUES(91,47,68)
-
-statement ok
-INSERT INTO tab2 VALUES(64,77,40)
-
-statement ok
-INSERT INTO tab2 VALUES(75,67,58)
-
-statement ok
-INSERT INTO tab2 VALUES(46,51,23)
-
-query I rowsort
-SELECT ALL ( + 39 ) * 15 FROM tab1
-----
-585
-585
-585
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE - col2 + col1 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query II rowsort
-SELECT ALL + col1 AS col0, col2 AS col2 FROM tab1
-----
-14
-96
-47
-68
-5
-59
-
-query III rowsort
-SELECT + + col0 AS col0, col2, - + col2 FROM tab2 AS cor0
-----
-9 values hashing to 07f4d5785b161b1fdf2cce5e95bba1fd
-
-query II rowsort
-SELECT - - col0, 37 + col2 AS col2 FROM tab2 AS cor0
-----
-46
-60
-64
-77
-75
-95
-
-query I rowsort
-SELECT ALL - 98 AS col1 FROM tab1 cor0
-----
--98
--98
--98
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NOT - 78 IS NOT NULL
-----
-
-query I rowsort
-SELECT ALL - - 41 + + - col2 FROM tab0 AS cor0
-----
--58
--6
-31
-
-query I rowsort
-SELECT ALL 4 AS col1 FROM tab2 AS cor0 WHERE NULL IS NULL
-----
-4
-4
-4
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE + 69 IS NULL
-----
-
-query II rowsort
-SELECT 38 AS col2, - col0 AS col2 FROM tab2 WHERE + col2 IS NOT NULL
-----
-38
--46
-38
--64
-38
--75
-
-query I rowsort
-SELECT DISTINCT + 30 AS col0 FROM tab0, tab1 AS cor0
-----
-30
-
-query I rowsort
-SELECT - 30 + + 5 * - ( col1 ) FROM tab2 AS cor0
-----
--285
--365
--415
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE 70 IS NULL
-----
-
-query I rowsort
-SELECT ALL 16 + + col2 FROM tab0 AS cor0
-----
-115
-26
-63
-
-query I rowsort
-SELECT + 84 + + + 29 AS col1 FROM tab2 AS cor0
-----
-113
-113
-113
-
-query I rowsort
-SELECT ( - - 98 ) FROM tab2 AS cor0
-----
-98
-98
-98
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NULL NOT IN ( + col2, - col2 * - - 87 )
-----
-
-query II rowsort
-SELECT - 42 - col0 AS col0, col2 AS col1 FROM tab0
-----
--129
-10
--139
-99
--57
-47
-
-query I rowsort
-SELECT ALL col0 - - col1 * col0 FROM tab2
-----
-2392
-4992
-5100
-
-query II rowsort
-SELECT ALL - col2 * col1 AS col1, - 8 FROM tab1
-----
--1344
--8
--295
--8
--3196
--8
-
-query I rowsort
-SELECT ( col1 ) AS col0 FROM tab0 WHERE NOT ( - + col1 ) >= NULL
-----
-
-query I rowsort
-SELECT DISTINCT + 39 * col1 AS col1 FROM tab1 cor0
-----
-1833
-195
-546
-
-query I rowsort
-SELECT DISTINCT 99 * - + col2 AS col1 FROM tab2 AS cor0
-----
--2277
--3960
--5742
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NOT NULL <= 43
-----
-
-query III rowsort
-SELECT * FROM tab1 cor0 WHERE NOT NULL BETWEEN 66 AND + + col0
-----
-
-query I rowsort
-SELECT ALL + col2 * col0 * + col0 AS col0 FROM tab1 AS cor0
-----
-249696
-426275
-563108
-
-query II rowsort
-SELECT DISTINCT + col2 * + 97 * - 54, - col2 AS col0 FROM tab1 cor0
-----
--309042
--59
--356184
--68
--502848
--96
-
-query I rowsort
-SELECT 82 * + 4 AS col1 FROM tab2 AS cor0
-----
-328
-328
-328
-
-query II rowsort
-SELECT - col1, col1 AS col0 FROM tab2
-----
--51
-51
--67
-67
--77
-77
-
-query I rowsort
-SELECT ALL col1 * + 50 * col2 FROM tab1
-----
-14750
-159800
-67200
-
-query I rowsort
-SELECT ALL col0 * - + col2 AS col0 FROM tab1
-----
--4896
--5015
--6188
-
-query II rowsort
-SELECT col2, col0 FROM tab1
-----
-59
-85
-68
-91
-96
-51
-
-query I rowsort
-SELECT ALL + 23 + - 42 AS col0 FROM tab2
-----
--19
--19
--19
-
-query I rowsort
-SELECT ALL col1 FROM tab1 AS cor0 WHERE + 55 IS NOT NULL
-----
-14
-47
-5
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE ( NOT ( + col0 ) NOT BETWEEN ( NULL ) AND NULL )
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 cor0 WHERE + col2 < - 92 * + 57 * - col0 + col2
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT ALL + + col1 * + - col1 + - 70 + - 99 AS col1 FROM tab2 AS cor0
-----
--2770
--4658
--6098
-
-query I rowsort
-SELECT 62 - col2 + 1 AS col1 FROM tab0 AS cor0
-----
--36
-16
-53
-
-query I rowsort
-SELECT - + ( - + col0 ) * + - col1 - + - 64 AS col2 FROM tab2 cor0
-----
--2282
--4864
--4961
-
-query I rowsort
-SELECT + 93 + + ( - - col2 ) FROM tab0 AS cor0
-----
-103
-140
-192
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE ( NULL ) NOT IN ( col2 + col2, col0, + 62, - col0 + col2 + col1 )
-----
-
-query I rowsort
-SELECT ALL col0 - - - 29 FROM tab1
-----
-22
-56
-62
-
-query I rowsort
-SELECT - - col2 * - + col1 + col1 * - col1 FROM tab2 WHERE NULL <> NULL
-----
-
-query I rowsort
-SELECT 50 + + + col0 FROM tab1
-----
-101
-135
-141
-
-query II rowsort
-SELECT DISTINCT col2, - col0 FROM tab2
-----
-23
--46
-40
--64
-58
--75
-
-query I rowsort
-SELECT - 27 * + 32 AS col1 FROM tab0
-----
--864
--864
--864
-
-query I rowsort
-SELECT DISTINCT 91 AS col0 FROM tab1 AS cor0
-----
-91
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT 29 IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT 69 > NULL
-----
-
-query II rowsort
-SELECT DISTINCT - col0 * 26 AS col0, - col1 AS col0 FROM tab1 AS cor0
-----
--1326
--14
--2210
--5
--2366
--47
-
-query I rowsort
-SELECT + col1 + + - col2 FROM tab2
-----
-28
-37
-9
-
-query I rowsort
-SELECT DISTINCT + 62 * + + col0 AS col2 FROM tab2
-----
-2852
-3968
-4650
-
-query III rowsort
-SELECT * FROM tab2 WHERE - + col1 * - 48 * - 97 + + col1 - - - 70 * - + col1 IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT col0 + + col2 - + - col1 AS col0 FROM tab2 cor0
-----
-120
-181
-200
-
-query I rowsort
-SELECT ALL - col1 + - + col1 AS col1 FROM tab0 AS cor0
-----
--162
--2
--42
-
-query I rowsort
-SELECT DISTINCT col0 * - - ( + - 72 ) * - + 38 + + 19 AS col0 FROM tab0
-----
-238051
-265411
-41059
-
-query III rowsort
-SELECT * FROM tab0 WHERE + - col2 = - col2
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NOT ( - col2 + - 39 ) IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT + col2 FROM tab0 AS cor0 WHERE col1 IS NULL
-----
-
-query II rowsort
-SELECT DISTINCT + + ( + + col1 ), + 49 FROM tab2 AS cor0
-----
-51
-49
-67
-49
-77
-49
-
-query I rowsort
-SELECT + 26 AS col1 FROM tab0 cor0
-----
-26
-26
-26
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE ( + 52 = NULL )
-----
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT NULL NOT IN ( + - col2, + col2, - + 19, + + 6 )
-----
-
-query I rowsort
-SELECT ALL 87 AS col1 FROM tab2 cor0
-----
-87
-87
-87
-
-query I rowsort
-SELECT ALL - + 11 * - col2 FROM tab0 AS cor0
-----
-1089
-110
-517
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE - 64 * - col1 + + 5 IN ( - - col1 )
-----
-
-query I rowsort
-SELECT DISTINCT + - col0 + - 43 * col1 + 93 FROM tab1 AS cor0
-----
--2019
--207
--560
-
-query I rowsort
-SELECT + 73 + col0 AS col2 FROM tab0 WHERE - 76 * - 43 < - + 53
-----
-
-query I rowsort
-SELECT DISTINCT col0 * ( + 65 ) FROM tab0
-----
-5655
-6305
-975
-
-query I rowsort
-SELECT DISTINCT 96 * + - 53 * + + col2 AS col2 FROM tab0
-----
--239136
--503712
--50880
-
-query I rowsort
-SELECT 15 + + - 11 FROM tab1
-----
-4
-4
-4
-
-query I rowsort
-SELECT - col1 + - ( - 8 ) + - col1 AS col0 FROM tab0 AS cor0
-----
--154
--34
-6
-
-query I rowsort
-SELECT - + col0 + - ( col1 ) FROM tab1 AS cor0
-----
--138
--65
--90
-
-query II rowsort
-SELECT ALL 39, 37 AS col2 FROM tab2 AS cor0
-----
-39
-37
-39
-37
-39
-37
-
-query I rowsort
-SELECT ALL - 56 * + + col0 + - col1 - col1 FROM tab1 cor0 WHERE - col0 IS NOT NULL
-----
--2884
--4770
--5190
-
-query I rowsort
-SELECT DISTINCT col0 FROM tab0 AS cor0 WHERE NULL IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT - col0 * col0 + - - col0 BETWEEN NULL AND + 17
-----
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT - + col1 IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE ( + + col2 * - col1 ) > - col1 * - - 54
-----
-15
-81
-47
-87
-21
-10
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT ( - 90 - - col1 ) IS NOT NULL
-----
-
-query II rowsort
-SELECT 14 AS col1, + col0 + + col1 + - col2 AS col2 FROM tab1
-----
-14
--31
-14
-31
-14
-70
-
-query II rowsort
-SELECT - 52 AS col2, 78 * - + 35 FROM tab1
-----
--52
--2730
--52
--2730
--52
--2730
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT + col1 - + col1 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT - + col0 * + col1 AS col2 FROM tab2 AS cor0
-----
--2346
--4928
--5025
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT + col1 NOT IN ( col0, 22, + col1 )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT DISTINCT - 73 + - - col2 + - col2 + + col0 AS col0 FROM tab1 AS cor0
-----
--22
-12
-18
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE + col0 = - 86
-----
-
-query I rowsort
-SELECT ALL col2 + + - 72 FROM tab0 AS cor0
-----
--25
--62
-27
-
-query I rowsort
-SELECT ALL + col2 + + ( 87 ) - + + 98 + - col1 * col1 FROM tab0 AS cor0
-----
--442
--6525
-87
-
-query I rowsort
-SELECT DISTINCT + col0 * ( 65 ) AS col0 FROM tab2 AS cor0
-----
-2990
-4160
-4875
-
-query I rowsort
-SELECT 2 FROM tab0 cor0 WHERE col2 IN ( + col1 )
-----
-
-query I rowsort
-SELECT + ( col1 ) * + col2 + - col0 FROM tab1 AS cor0
-----
-1293
-210
-3105
-
-query I rowsort
-SELECT ALL 5 + + 36 AS col2 FROM tab1
-----
-41
-41
-41
-
-query I rowsort
-SELECT col2 * + + 45 FROM tab1
-----
-2655
-3060
-4320
-
-query I rowsort
-SELECT - col1 * - - 82 AS col1 FROM tab2
-----
--4182
--5494
--6314
-
-query I rowsort
-SELECT 36 * + 38 FROM tab0
-----
-1368
-1368
-1368
-
-query I rowsort
-SELECT col0 * - 61 AS col2 FROM tab0 AS cor0
-----
--5307
--5917
--915
-
-query I rowsort
-SELECT DISTINCT - col0 * 71 + col0 FROM tab2 AS cor0
-----
--3220
--4480
--5250
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT ( col0 * 9 ) IS NOT NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT - col2 * 72 - + 8 IN ( + col1 + + ( - col1 ) )
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT - 30 >= col0
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT * FROM tab2 WHERE col2 + ( col2 ) * + col0 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT 45 BETWEEN - col0 AND NULL
-----
-
-query I rowsort
-SELECT + 18 * - col1 + - ( - col1 ) FROM tab0 WHERE NOT col0 <= col0
-----
-
-query I rowsort
-SELECT ALL col0 * + 94 + + col2 * 49 FROM tab1
-----
-10881
-11886
-9498
-
-query I rowsort
-SELECT DISTINCT + col1 * ( 75 * - ( ( 92 ) ) ) + - col1 AS col2 FROM tab1
-----
--324347
--34505
--96614
-
-query I rowsort
-SELECT DISTINCT - col1 - - col2 AS col0 FROM tab0 WHERE NULL IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT 20 - + col0 * 94 FROM tab0
-----
--1390
--8158
--9098
-
-query I rowsort
-SELECT + 9 + 94 AS col0 FROM tab0
-----
-103
-103
-103
-
-query I rowsort
-SELECT ( - 62 ) AS col2 FROM tab0
-----
--62
--62
--62
-
-query I rowsort
-SELECT DISTINCT - col0 + + 68 AS col1 FROM tab2
-----
--7
-22
-4
-
-query I rowsort
-SELECT + 99 + 9 FROM tab2
-----
-108
-108
-108
-
-query I rowsort
-SELECT ALL - ( 62 ) FROM tab0
-----
--62
--62
--62
-
-query I rowsort
-SELECT - ( + ( 43 ) ) + - col0 FROM tab1 WHERE NOT ( NULL ) BETWEEN NULL AND + 39
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE ( + 72 * col2 ) <> NULL
-----
-
-query I rowsort
-SELECT - col2 / + col0 - 6 * col1 FROM tab0 AS cor0 WHERE NOT col1 IS NOT NULL
-----
-
-query I rowsort
-SELECT col2 * - 78 FROM tab0 AS cor0
-----
--3666
--7722
--780
-
-query I rowsort
-SELECT DISTINCT col2 FROM tab0 AS cor0 WHERE ( NULL ) NOT IN ( + 18 )
-----
-
-query I rowsort
-SELECT - col2 FROM tab1 AS cor0 WHERE + col1 > NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 cor0 WHERE col1 NOT IN ( col0 + 82 )
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT DISTINCT + 87 + col2 FROM tab1 AS cor0
-----
-146
-155
-183
-
-query I rowsort
-SELECT ALL - 36 AS col2 FROM tab1 AS cor0 WHERE ( - col0 ) >= + col0
-----
-
-query I rowsort
-SELECT ALL - col1 FROM tab0 AS cor0 WHERE ( 49 / - 86 ) IS NOT NULL
-----
--1
--21
--81
-
-query I rowsort
-SELECT ALL + 63 FROM tab1 WHERE NOT 44 NOT BETWEEN - col0 AND - col2
-----
-
-query I rowsort
-SELECT col2 + 66 FROM tab2
-----
-106
-124
-89
-
-query I rowsort
-SELECT DISTINCT + 68 AS col2 FROM tab1 WHERE NOT + col2 IN ( ( col0 ) )
-----
-68
-
-query I rowsort
-SELECT - 50 + - 90 + col1 AS col1 FROM tab1
-----
--126
--135
--93
-
-query I rowsort
-SELECT DISTINCT col0 * - 0 + - col1 * + col1 + 14 * + 13 FROM tab1 AS cor0
-----
--14
--2027
-157
-
-query I rowsort
-SELECT ALL - col2 + + col1 + 89 * 53 AS col2 FROM tab2 AS cor0
-----
-4726
-4745
-4754
-
-query II rowsort
-SELECT DISTINCT col2, + col1 * + + ( 23 ) * + col0 FROM tab2
-----
-23
-53958
-40
-113344
-58
-115575
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT col2 > - 4
-----
-
-query I rowsort
-SELECT - col2 * - - col2 + col2 FROM tab1 AS cor0
-----
--3422
--4556
--9120
-
-query I rowsort
-SELECT DISTINCT - col2 AS col1 FROM tab2 AS cor0 WHERE NOT ( NULL ) NOT IN ( 75 )
-----
-
-query I rowsort
-SELECT + 85 * col1 AS col1 FROM tab1 AS cor0
-----
-1190
-3995
-425
-
-query I rowsort
-SELECT DISTINCT + col1 AS col2 FROM tab2 AS cor0 WHERE NOT NULL > - col0
-----
-
-query I rowsort
-SELECT col2 AS col1 FROM tab1 AS cor0 WHERE NOT - 4 + col2 IS NOT NULL
-----
-
-query I rowsort
-SELECT 40 * + 79 FROM tab1
-----
-3160
-3160
-3160
-
-query II rowsort
-SELECT DISTINCT ( col0 ) AS col1, 20 FROM tab1
-----
-51
-20
-85
-20
-91
-20
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NULL NOT BETWEEN - - 76 + 20 AND + 97
-----
-
-query I rowsort
-SELECT ( + - col1 ) AS col0 FROM tab1
-----
--14
--47
--5
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE ( NULL NOT BETWEEN 78 * col2 AND 91 )
-----
-
-query I rowsort
-SELECT DISTINCT - - 72 * + col1 * - - col0 FROM tab0 cor0
-----
-131544
-6984
-87480
-
-query I rowsort
-SELECT ALL - col0 AS col0 FROM tab1 AS cor0 WHERE NOT ( + ( - col0 ) ) IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE ( col0 * col0 ) IS NOT NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE ( col0 ) NOT IN ( + col0, 70 )
-----
-
-query I rowsort
-SELECT DISTINCT + col1 + + - 67 FROM tab2 AS cor0
-----
--16
-0
-10
-
-query II rowsort
-SELECT - 85, + col0 FROM tab1
-----
--85
-51
--85
-85
--85
-91
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE NULL NOT BETWEEN 65 AND - 74
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NULL > ( - ( + - col1 ) / 25 + + 39 + + 1 / + col2 )
-----
-
-query I rowsort
-SELECT - col0 * 54 AS col2 FROM tab2
-----
--2484
--3456
--4050
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE + ( + col1 ) + - ( - col2 ) IS NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE - ( col1 ) / col2 / - ( + + ( + col0 ) ) - + 31 BETWEEN ( 1 ) AND col2
-----
-
-query I rowsort
-SELECT DISTINCT + col0 FROM tab1 WHERE col1 IS NULL
-----
-
-query III rowsort
-SELECT ALL - ( + - col1 ) AS col0, + col1 * - col2 + col0, + - col1 AS col1 FROM tab2 cor0
-----
-9 values hashing to a83240d972f4da3888170f68a3e7b409
-
-query II rowsort
-SELECT + col1 * - col0, + col0 + + 61 + col0 AS col2 FROM tab0 cor0 WHERE NOT ( NOT NULL IS NOT NULL )
-----
-
-query I rowsort
-SELECT + + 38 AS col1 FROM tab0 cor0
-----
-38
-38
-38
-
-query I rowsort
-SELECT + col0 AS col2 FROM tab0 cor0 WHERE NOT ( NOT - 76 IS NULL )
-----
-
-query I rowsort
-SELECT DISTINCT - + 35 AS col2 FROM tab2 AS cor0
-----
--35
-
-query I rowsort
-SELECT + + col2 * - 27 + + 39 FROM tab0 AS cor0
-----
--1230
--231
--2634
-
-query I rowsort
-SELECT ALL - col1 * 23 AS col0 FROM tab2
-----
--1173
--1541
--1771
-
-query I rowsort
-SELECT ALL 63 * col2 AS col0 FROM tab1
-----
-3717
-4284
-6048
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT + col2 * - col2 >= NULL
-----
-
-query I rowsort
-SELECT ALL + 14 AS col2 FROM tab1 WHERE - ( + - 40 ) IS NOT NULL
-----
-14
-14
-14
-
-query I rowsort
-SELECT ALL - - col1 AS col1 FROM tab1 AS cor0 WHERE ( col2 ) NOT IN ( + 90, + 68 )
-----
-14
-5
-
-query II rowsort
-SELECT DISTINCT + col1, col2 AS col0 FROM tab0 AS cor0 WHERE NOT 51 IS NOT NULL
-----
-
-query I rowsort
-SELECT col1 FROM tab2 WHERE ( ( NOT ( NULL BETWEEN NULL AND ( - col2 ) ) ) )
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NULL NOT BETWEEN ( - + col2 * - + 36 ) AND - col1
-----
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE + 44 * - col0 IS NOT NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT ALL + 78 + + col0 FROM tab0 AS cor0
-----
-165
-175
-93
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NULL = col1
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE ( - + col1 ) + - + col0 * - + col1 > + col0
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query II rowsort
-SELECT DISTINCT + - 69 + + + ( - + col2 ) * + col2, col2 FROM tab2 AS cor0
-----
--1669
-40
--3433
-58
--598
-23
-
-query I rowsort
-SELECT ALL - col2 * + col2 - + - 51 * + - col1 * - col1 + + col2 FROM tab1 AS cor0
-----
--2147
-108103
-876
-
-query I rowsort
-SELECT ALL - 69 + - col1 AS col1 FROM tab2 cor0
-----
--120
--136
--146
-
-query I rowsort
-SELECT ALL col0 - col0 * - 40 * - + 86 + + ( - col1 ) FROM tab0
-----
--299214
--333584
--51666
-
-query II rowsort
-SELECT DISTINCT + col1 * 13 * + col1 AS col2, col0 - + + 28 FROM tab2
-----
-33813
-18
-58357
-47
-77077
-36
-
-query I rowsort
-SELECT ALL - - col0 + col0 FROM tab1 WHERE NOT NULL IS NOT NULL
-----
-102
-170
-182
-
-query I rowsort
-SELECT 82 * - col2 * - col0 AS col0 FROM tab0
-----
-57810
-71340
-787446
-
-query I rowsort
-SELECT DISTINCT col2 * - col1 AS col0 FROM tab0 AS cor0 WHERE NULL IS NULL
-----
--210
--3807
--99
-
-query I rowsort
-SELECT - 90 * - col2 AS col0 FROM tab0 AS cor0
-----
-4230
-8910
-900
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT ( - 43 <= NULL )
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT 75 NOT IN ( 66 )
-----
-
-query I rowsort
-SELECT + + ( 37 ) FROM tab0 AS cor0
-----
-37
-37
-37
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT + col0 * - col0 IS NOT NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT + col1 + - + 52 <> NULL
-----
-
-query I rowsort
-SELECT - 36 + + col1 AS col1 FROM tab0 AS cor0
-----
--15
--35
-45
-
-query I rowsort
-SELECT ALL + 96 AS col2 FROM tab0
-----
-96
-96
-96
-
-query I rowsort
-SELECT - 56 AS col0 FROM tab0 WHERE NOT + - 66 IS NOT NULL
-----
-
-query I rowsort
-SELECT + ( - - col0 ) AS col1 FROM tab1
-----
-51
-85
-91
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE + 44 IS NULL
-----
-
-query I rowsort
-SELECT ( + - ( + 95 ) ) AS col0 FROM tab1 AS cor0
-----
--95
--95
--95
-
-query I rowsort
-SELECT DISTINCT col2 * 38 + - ( - col0 ) FROM tab2 cor0
-----
-1584
-2279
-920
-
-query I rowsort
-SELECT DISTINCT + col2 + 88 + - + col1 AS col2 FROM tab0 AS cor0
-----
-186
-54
-77
-
-query I rowsort
-SELECT DISTINCT 38 + ( - + col2 ) AS col0 FROM tab2
-----
--2
--20
-15
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE ( 43 ) BETWEEN col2 + - - 2 AND NULL
-----
-
-query II rowsort
-SELECT col1 - - col2 AS col1, + 10 AS col1 FROM tab0
-----
-100
-10
-128
-10
-31
-10
-
-query I rowsort
-SELECT ALL + ( col2 ) - + 57 FROM tab1
-----
-11
-2
-39
-
-query I rowsort
-SELECT - col1 AS col1 FROM tab1 WHERE 5 IS NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT 31 * - - 88 BETWEEN - - 57 AND NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT ( NULL ) > + col0
-----
-
-query I rowsort
-SELECT - + ( + 5 ) FROM tab0 AS cor0
-----
--5
--5
--5
-
-query I rowsort
-SELECT col0 * + - 94 AS col2 FROM tab0 AS cor0
-----
--1410
--8178
--9118
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT ( 75 ) IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT ( ( col1 ) ) BETWEEN col1 * - col2 AND 49 / - - col0
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query II rowsort
-SELECT ALL + col0 AS col0, - col2 FROM tab2 AS cor0 WHERE NOT NULL NOT IN ( 84 )
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 cor0 WHERE NOT NULL <> - col0
-----
-
-query II rowsort
-SELECT ALL col0 AS col2, + col0 * 56 AS col0 FROM tab1
-----
-51
-2856
-85
-4760
-91
-5096
-
-query I rowsort
-SELECT 42 + - + 51 * + col2 AS col1 FROM tab0
-----
--2355
--468
--5007
-
-query I rowsort
-SELECT - col2 + - - col0 FROM tab1 cor0
-----
--45
-23
-26
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT NULL <= 99
-----
-
-query II rowsort
-SELECT + 82 * - col1, col2 AS col1 FROM tab2
-----
--4182
-23
--5494
-58
--6314
-40
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NOT NULL IS NOT NULL AND - col0 * - + 72 IS NULL
-----
-
-query I rowsort
-SELECT ALL - col1 + col2 * col0 AS col0 FROM tab2 AS cor0
-----
-1007
-2483
-4283
-
-query II rowsort
-SELECT ALL - 20 + - - col2 AS col0, col1 AS col2 FROM tab1 AS cor0
-----
-39
-5
-48
-47
-76
-14
-
-query III rowsort
-SELECT * FROM tab0 cor0 WHERE col0 NOT IN ( - col2 )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT DISTINCT - ( - col1 ) * - + 66 FROM tab0
-----
--1386
--5346
--66
-
-query I rowsort
-SELECT + - 18 * + 21 FROM tab1 AS cor0
-----
--378
--378
--378
-
-query II rowsort
-SELECT DISTINCT col1, 13 * col1 FROM tab0 AS cor0
-----
-1
-13
-21
-273
-81
-1053
-
-query I rowsort
-SELECT DISTINCT - + col0 FROM tab1 WHERE - col1 + + col0 < col2
-----
--51
--91
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE - col1 BETWEEN ( - + 17 ) AND - 68
-----
-
-query I rowsort
-SELECT ALL - - 72 AS col2 FROM tab0 AS cor0
-----
-72
-72
-72
-
-query III rowsort
-SELECT * FROM tab0 cor0 WHERE NOT - 97 IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE ( + 56 ) IS NULL
-----
-
-query II rowsort
-SELECT ALL - 22 AS col2, col2 * 47 + + col0 + - + col2 * + - col1 FROM tab1
-----
--22
-3153
--22
-5907
--22
-6483
-
-query I rowsort
-SELECT ALL 68 + col1 + + + 63 FROM tab2
-----
-182
-198
-208
-
-query I rowsort
-SELECT DISTINCT - col2 + + - col2 AS col0 FROM tab2 AS cor0 WHERE NOT col1 <= NULL
-----
-
-query I rowsort
-SELECT ALL + col0 + - - 55 AS col0 FROM tab2 AS cor0
-----
-101
-119
-130
-
-query I rowsort
-SELECT + 77 FROM tab1 AS cor0 CROSS JOIN tab0 cor1
-----
-9 values hashing to 051bf10c50e061d74ad0a4d205a1c622
-
-query I rowsort
-SELECT col0 + + + col1 - - col2 FROM tab1 AS cor0 WHERE NULL IS NULL
-----
-149
-161
-206
-
-query I rowsort
-SELECT ALL + col1 + - col0 + + - col1 + + col2 * + 84 - - 88 AS col1 FROM tab2 AS cor0 WHERE - col0 IS NOT NULL
-----
-1974
-3384
-4885
-
-query III rowsort
-SELECT * FROM tab1 cor0 WHERE NOT - ( + col1 ) IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query II rowsort
-SELECT DISTINCT + col1, - col1 FROM tab2 AS cor0
-----
-51
--51
-67
--67
-77
--77
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NULL BETWEEN ( + col0 + - 78 ) AND + col1
-----
-
-query I rowsort
-SELECT + ( + col2 ) FROM tab1 WHERE NOT NULL >= + col0
-----
-
-query I rowsort
-SELECT DISTINCT - 84 AS col1 FROM tab1
-----
--84
-
-query I rowsort
-SELECT DISTINCT + col2 * + col0 * - col0 AS col2 FROM tab0 AS cor0
-----
--10575
--75690
--931491
-
-query I rowsort
-SELECT ALL + col1 FROM tab0 AS cor0 WHERE 66 <> NULL
-----
-
-query II rowsort
-SELECT + col0, - 47 + - col2 FROM tab2 AS cor0 WHERE NOT col0 * - - col0 - - 57 BETWEEN NULL AND + - 18 - + 12
-----
-46
--70
-64
--87
-75
--105
-
-query I rowsort
-SELECT - + col2 * + ( - col1 ) AS col2 FROM tab2 AS cor0
-----
-1173
-3080
-3886
-
-query I rowsort
-SELECT 53 FROM tab0 AS cor0 WHERE NOT ( NULL ) IS NULL
-----
-
-query II rowsort
-SELECT + - col0 + col1 AS col2, - col0 FROM tab2 WHERE NOT NULL <= NULL
-----
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE 29 * - 84 IS NULL
-----
-
-query II rowsort
-SELECT + col1, + 94 * + 73 FROM tab0 AS cor0
-----
-1
-6862
-21
-6862
-81
-6862
-
-query I rowsort
-SELECT ALL ( - col2 ) + - + col1 AS col2 FROM tab0 AS cor0
-----
--100
--128
--31
-
-query II rowsort
-SELECT - 74, + col0 FROM tab2 cor0
-----
--74
-46
--74
-64
--74
-75
-
-query I rowsort
-SELECT DISTINCT - col1 + - 10 FROM tab2 AS cor0
-----
--61
--77
--87
-
-query I rowsort
-SELECT ( 85 ) AS col1 FROM tab1, tab2 AS cor0
-----
-9 values hashing to aafa8e5cfb9e02cea8717833e7581f7b
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT - 54 IS NOT NULL
-----
-
-query II rowsort
-SELECT DISTINCT - ( - 13 ) * - col2 + + ( - col1 ) AS col0, 2 + + 25 AS col2 FROM tab0
-----
--1288
-27
--151
-27
--692
-27
-
-query I rowsort
-SELECT - 45 FROM tab0 WHERE - col0 IS NOT NULL
-----
--45
--45
--45
-
-query I rowsort
-SELECT ALL + col1 + - - 76 FROM tab2 AS cor0
-----
-127
-143
-153
-
-query I rowsort
-SELECT ALL col2 * + ( 51 ) - + - 95 AS col0 FROM tab0
-----
-2492
-5144
-605
-
-query I rowsort
-SELECT 74 FROM tab0 AS cor0 CROSS JOIN tab2 AS cor1
-----
-9 values hashing to 2ccf8ef3f477e1a1a3e30c8b8154ff31
-
-query I rowsort
-SELECT + + 53 * + - col0 AS col2 FROM tab2 AS cor0
-----
--2438
--3392
--3975
-
-query I rowsort
-SELECT DISTINCT - 75 AS col0 FROM tab1 cor0 WHERE NOT + 68 * - col0 <> - 37
-----
-
-query I rowsort
-SELECT ALL ( - 64 ) FROM tab0 AS cor0
-----
--64
--64
--64
-
-query II rowsort
-SELECT ALL + col0, col0 AS col1 FROM tab1
-----
-51
-51
-85
-85
-91
-91
-
-query II rowsort
-SELECT DISTINCT - 71 AS col1, 62 AS col1 FROM tab0
-----
--71
-62
-
-query II rowsort
-SELECT ALL - col0 AS col2, - 83 AS col0 FROM tab2
-----
--46
--83
--64
--83
--75
--83
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE ( NULL ) <= NULL
-----
-
-query I rowsort
-SELECT ALL - 27 AS col1 FROM tab2 WHERE NOT - col1 IS NULL
-----
--27
--27
--27
-
-query I rowsort
-SELECT ALL 9 * + - col2 AS col1 FROM tab2
-----
--207
--360
--522
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE NOT ( + col1 IN ( 70, 18 ) )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT DISTINCT - - 78 + ( - + col1 ) AS col0 FROM tab0 AS cor0
-----
--3
-57
-77
-
-query I rowsort
-SELECT ALL + col1 * 30 FROM tab0
-----
-2430
-30
-630
-
-query I rowsort
-SELECT - col0 * 25 FROM tab1
-----
--1275
--2125
--2275
-
-query I rowsort
-SELECT ALL - 76 + col0 AS col1 FROM tab1
-----
--25
-15
-9
-
-query I rowsort
-SELECT ( + col2 ) - 95 AS col0 FROM tab0
-----
--48
--85
-4
-
-query I rowsort
-SELECT ALL + ( ( + - col1 ) ) FROM tab0
-----
--1
--21
--81
-
-query I rowsort
-SELECT DISTINCT 76 AS col0 FROM tab0 AS cor0 CROSS JOIN tab0 AS cor1
-----
-76
-
-query I rowsort
-SELECT DISTINCT col1 FROM tab0 AS cor0 WHERE NOT + col2 + - 10 / col1 IS NULL
-----
-1
-21
-81
-
-query I rowsort
-SELECT col2 * 57 + + - col1 FROM tab1 AS cor0
-----
-3358
-3829
-5458
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 cor0 WHERE NOT + 80 - 86 IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT DISTINCT + 54 * + ( col2 ) AS col1 FROM tab1 AS cor0
-----
-3186
-3672
-5184
-
-query I rowsort
-SELECT + + col2 * 30 FROM tab1 WHERE NOT + ( col0 ) IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT ( NULL <> NULL )
-----
-
-query I rowsort
-SELECT + 45 AS col1 FROM tab2
-----
-45
-45
-45
-
-query II rowsort
-SELECT DISTINCT + - 47 + col1 - - col2, col0 * - col0 FROM tab1 cor0 WHERE NOT col0 IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT col1 + 92 * ( - col1 ) FROM tab1 AS cor0
-----
--1274
--4277
--455
-
-query I rowsort
-SELECT - 92 AS col1 FROM ( tab1 AS cor0 CROSS JOIN tab2 AS cor1 )
-----
-9 values hashing to 1af709a79a3e56281ffdce4d931d5965
-
-query III rowsort
-SELECT * FROM tab2 WHERE NULL NOT BETWEEN + ( + col0 ) AND NULL
-----
-
-query I rowsort
-SELECT ALL - col0 AS col0 FROM tab2 WHERE ( col2 ) <> 92 * col2
-----
--46
--64
--75
-
-query I rowsort
-SELECT + 5 * + ( + + 59 ) FROM tab1 cor0
-----
-295
-295
-295
-
-query I rowsort
-SELECT - + 19 - col0 FROM tab1 AS cor0
-----
--104
--110
--70
-
-query I rowsort
-SELECT DISTINCT col2 FROM tab1 cor0 WHERE - col1 IS NULL
-----
-
-query I rowsort
-SELECT - col0 + - 17 * 76 * col0 AS col0 FROM tab0 cor0
-----
--112491
--125421
--19395
-
-query I rowsort
-SELECT DISTINCT 96 + - col2 + - 99 FROM tab1 AS cor0
-----
--62
--71
--99
-
-query I rowsort
-SELECT ALL 10 + 76 * 69 FROM tab0
-----
-5254
-5254
-5254
-
-query I rowsort
-SELECT - ( + col1 ) + col0 * col2 AS col2 FROM tab2
-----
-1007
-2483
-4283
-
-query I rowsort
-SELECT ALL + 88 FROM tab1 WHERE col1 * - col1 > NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE NULL IN ( - - 42, col2 / - col0, ( col0 ), + col2 )
-----
-
-query II rowsort
-SELECT - 52 * col2 + + col1, ( + + col0 ) FROM tab2 AS cor0
-----
--1145
-46
--2003
-64
--2949
-75
-
-query I rowsort
-SELECT DISTINCT + col0 FROM tab1 cor0 WHERE NOT col1 + 26 NOT BETWEEN + col1 + - col2 + - 97 AND NULL
-----
-
-query I rowsort
-SELECT - 10 * + col1 AS col0 FROM tab2
-----
--510
--670
--770
-
-query I rowsort
-SELECT ALL + 43 AS col2 FROM tab2 AS cor0 CROSS JOIN tab0 AS cor1
-----
-9 values hashing to 199105619049271147956de52e7f5ed4
-
-query II rowsort
-SELECT - - col0 AS col1, ( + col2 ) FROM tab0 AS cor0
-----
-15
-47
-87
-10
-97
-99
-
-query II rowsort
-SELECT ALL - + col1 AS col1, + col1 AS col0 FROM tab2 cor0
-----
--51
-51
--67
-67
--77
-77
-
-query I rowsort
-SELECT ALL - col1 AS col0 FROM tab2 AS cor0 WHERE NOT NULL BETWEEN - col2 + + col2 AND + + col2
-----
-
-query I rowsort
-SELECT DISTINCT - - col0 * - 27 FROM tab0 AS cor0
-----
--2349
--2619
--405
-
-query I rowsort
-SELECT DISTINCT - 15 AS col0 FROM tab1
-----
--15
-
-query I rowsort
-SELECT + 59 AS col1 FROM tab0
-----
-59
-59
-59
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT col1 = col1 - col1
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT + - col1 FROM tab1 WHERE - + ( - + col2 ) = + col2
-----
--14
--47
--5
-
-query I rowsort
-SELECT ALL col2 + + 80 AS col1 FROM tab2 cor0
-----
-103
-120
-138
-
-query I rowsort
-SELECT ALL col1 + + 1 FROM tab1 AS cor0
-----
-15
-48
-6
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT - col1 <= + col1
-----
-
-query I rowsort
-SELECT ALL - col0 + - + ( - - ( + col0 ) ) FROM tab2 cor0
-----
--128
--150
--92
-
-query II rowsort
-SELECT + col2, col0 * - col1 FROM tab2 AS cor0
-----
-23
--2346
-40
--4928
-58
--5025
-
-query I rowsort
-SELECT ALL - 88 + + - col0 * - col0 FROM tab0
-----
-137
-7481
-9321
-
-query I rowsort
-SELECT - 93 * 62 - - ( col1 ) FROM tab2
-----
--5689
--5699
--5715
-
-query II rowsort
-SELECT ( - + col1 ) - ( col1 ) + + 85 * - - 55, - 55 * + ( + + col1 ) AS col2 FROM tab2
-----
-4521
--4235
-4541
--3685
-4573
--2805
-
-query III rowsort
-SELECT * FROM tab1 WHERE + col0 = - 31
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT col2 <> + - 30 * + + col2
-----
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT ( NULL ) NOT BETWEEN ( + - 67 ) AND - ( - + col2 ) * - 25
-----
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT + col1 = 65 * + col0 * col1
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT ALL col1 * - col0 + col1 FROM tab2 AS cor0
-----
--2295
--4851
--4958
-
-query II rowsort
-SELECT + col0, - col1 AS col2 FROM tab0 AS cor0
-----
-15
--81
-87
--21
-97
--1
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE NOT ( ( NOT 87 <= - - ( + col1 ) ) )
-----
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT col0 + - col1 * col1 BETWEEN NULL AND NULL
-----
-
-query I rowsort
-SELECT + 56 * ( - 40 ) AS col2 FROM tab1 AS cor0
-----
--2240
--2240
--2240
-
-query I rowsort
-SELECT - 63 * - ( + - 77 ) FROM tab2 AS cor0
-----
--4851
--4851
--4851
-
-query I rowsort
-SELECT ALL col0 * + + 22 AS col0 FROM tab2
-----
-1012
-1408
-1650
-
-query I rowsort
-SELECT DISTINCT - 48 + - - col1 AS col0 FROM tab2
-----
-19
-29
-3
-
-query I rowsort
-SELECT + 16 + + + col1 * col1 + col0 FROM tab0 AS cor0
-----
-114
-544
-6592
-
-query IIIIII rowsort
-SELECT DISTINCT * FROM tab1, tab0 AS cor0 WHERE NOT ( NULL ) IS NOT NULL
-----
-54 values hashing to 058438fde5fb838f23bcbdd39266ddcf
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE NOT NULL < NULL
-----
-
-query I rowsort
-SELECT ALL + col1 * - col0 + - 1 * + + col0 AS col0 FROM tab0 AS cor0
-----
--1230
--1914
--194
-
-query I rowsort
-SELECT col2 + + col2 * - + col2 FROM tab1 AS cor0
-----
--3422
--4556
--9120
-
-query II rowsort
-SELECT ALL col1 AS col0, col2 FROM tab2
-----
-51
-23
-67
-58
-77
-40
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE - ( - + col0 ) IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT - + 11 FROM tab2 cor0
-----
--11
-
-query II rowsort
-SELECT ALL + 31, - 57 AS col2 FROM tab0 WHERE - col2 IS NOT NULL
-----
-31
--57
-31
--57
-31
--57
-
-query I rowsort
-SELECT ALL + - col1 FROM tab0 WHERE + ( + 65 ) * - col1 BETWEEN + 31 + col1 - 61 + - 69 * col1 AND NULL
-----
-
-query II rowsort
-SELECT col1 AS col2, 10 + - col1 AS col1 FROM tab0 AS cor0
-----
-1
-9
-21
--11
-81
--71
-
-query I rowsort
-SELECT ALL + - 57 * - 90 * + col1 FROM tab1 AS cor0
-----
-241110
-25650
-71820
-
-query I rowsort
-SELECT DISTINCT - + col2 * - col2 * 26 + 3 - + + col2 FROM tab1 AS cor0
-----
-120159
-239523
-90450
-
-query II rowsort
-SELECT + col2 * - col1, col1 + + + col2 AS col2 FROM tab0
-----
--210
-31
--3807
-128
--99
-100
-
-query I rowsort
-SELECT - col1 AS col2 FROM tab0 WHERE NULL >= + col1
-----
-
-query I rowsort
-SELECT - 35 * + col0 AS col1 FROM tab1
-----
--1785
--2975
--3185
-
-query I rowsort
-SELECT col2 AS col1 FROM tab1 AS cor0 WHERE + col0 IS NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE 38 * + col1 IS NULL
-----
-
-query I rowsort
-SELECT - col0 + + col0 + - + col2 FROM tab0
-----
--10
--47
--99
-
-query I rowsort
-SELECT DISTINCT + + ( 35 ) FROM tab1 AS cor0 CROSS JOIN tab2 cor1
-----
-35
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE ( + col2 IS NOT NULL )
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT - col0 * + col2 + - col2 * - col1 AS col1 FROM tab1 AS cor0
-----
--2992
--3552
--4720
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NULL < col1 * + col2 - + col0
-----
-
-query I rowsort
-SELECT ALL ( - 90 ) FROM tab0 AS cor0
-----
--90
--90
--90
-
-query II rowsort
-SELECT ( + - col0 ) AS col0, col0 AS col0 FROM tab1
-----
--51
-51
--85
-85
--91
-91
-
-query I rowsort
-SELECT DISTINCT 31 + + col0 * + ( + col0 ) FROM tab2 WHERE + - col2 IS NOT NULL
-----
-2147
-4127
-5656
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT + col2 BETWEEN + + col1 AND NULL
-----
-15
-81
-47
-87
-21
-10
-
-query I rowsort
-SELECT col1 AS col1 FROM tab1 WHERE NOT NULL IS NULL
-----
-
-query I rowsort
-SELECT col1 * - 80 AS col1 FROM tab2
-----
--4080
--5360
--6160
-
-query II rowsort
-SELECT DISTINCT + col1, 17 FROM tab1 AS cor0 WHERE ( NULL ) IS NULL
-----
-14
-17
-47
-17
-5
-17
-
-query I rowsort
-SELECT ALL col1 + - - ( - col1 ) AS col0 FROM tab1
-----
-0
-0
-0
-
-query I rowsort
-SELECT ALL + + 86 FROM tab1 AS cor0
-----
-86
-86
-86
-
-query I rowsort
-SELECT - - col2 + + - ( - ( - - col0 ) ) FROM tab1 AS cor0
-----
-144
-147
-159
-
-query I rowsort
-SELECT 11 - + col0 + + col0 * - col1 * - col1 AS col0 FROM tab0
-----
-11
-38291
-98411
-
-query II rowsort
-SELECT DISTINCT - 46 * 16 AS col0, 78 FROM tab1 AS cor0
-----
--736
-78
-
-query II rowsort
-SELECT ALL col2, - col1 AS col1 FROM tab0 AS cor0
-----
-10
--21
-47
--81
-99
--1
-
-query I rowsort
-SELECT col0 - + col2 FROM tab1 WHERE NOT - 11 + + col1 > NULL
-----
-
-query I rowsort
-SELECT + 50 AS col1 FROM tab1 WHERE NOT ( 7 ) <= 30
-----
-
-query I rowsort
-SELECT ALL + col1 FROM tab2 WHERE NOT NULL IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT col0 AS col2 FROM tab0 WHERE NOT 15 NOT BETWEEN 24 AND col0 * - 33 + 28
-----
-
-query I rowsort
-SELECT + 47 + - col1 AS col1 FROM tab2
-----
--20
--30
--4
-
-query I rowsort
-SELECT DISTINCT + col2 * col1 + + col0 FROM tab1
-----
-1395
-3287
-380
-
-query III rowsort
-SELECT * FROM tab1 WHERE - col2 >= + 16
-----
-
-query I rowsort
-SELECT ALL - col2 + col0 * col2 AS col1 FROM tab2
-----
-1035
-2520
-4292
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT ( col0 * - 8 ) = NULL
-----
-
-query I rowsort
-SELECT col0 + ( 68 ) FROM tab2
-----
-114
-132
-143
-
-query I rowsort
-SELECT 86 + col2 AS col0 FROM tab2
-----
-109
-126
-144
-
-query I rowsort
-SELECT 24 + - 61 FROM tab1
-----
--37
--37
--37
-
-query I rowsort
-SELECT - col1 - - col0 * col0 AS col2 FROM tab0 WHERE - col2 * 13 IS NULL
-----
-
-query I rowsort
-SELECT ALL - 38 * + col1 FROM tab2
-----
--1938
--2546
--2926
-
-query I rowsort
-SELECT col0 * - 28 AS col1 FROM tab2
-----
--1288
--1792
--2100
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT + col1 + - col2 / 43 IN ( + col2 )
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT ( + 8 + col2 ) IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT - col0 + - 85 * + ( - col0 ) NOT BETWEEN + 21 AND - 73 + + col0
-----
-
-query I rowsort
-SELECT + ( + col0 ) + ( - col0 ) FROM tab1
-----
-0
-0
-0
-
-query I rowsort
-SELECT DISTINCT - col2 * - 36 + + 47 AS col0 FROM tab2 cor0
-----
-1487
-2135
-875
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NULL BETWEEN ( NULL ) AND NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 cor0 WHERE ( + col0 ) NOT BETWEEN - col2 * col1 AND ( NULL )
-----
-
-query I rowsort
-SELECT DISTINCT col1 AS col0 FROM tab2 AS cor0 WHERE - ( ( 35 ) ) IS NOT NULL
-----
-51
-67
-77
-
-query I rowsort
-SELECT DISTINCT ( + 28 ) + + 70 AS col1 FROM tab0 AS cor0 WHERE NOT NULL NOT BETWEEN + col0 AND - col0 * col1
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 cor0 WHERE ( col0 ) IS NOT NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT ALL col1 - 89 FROM tab1
-----
--42
--75
--84
-
-query I rowsort
-SELECT ALL + col2 AS col0 FROM tab0 WHERE col0 + col2 >= + col2 / ( col0 )
-----
-10
-47
-99
-
-query I rowsort
-SELECT ALL 16 + - 85 * - col2 FROM tab0
-----
-4011
-8431
-866
-
-query I rowsort
-SELECT + 46 FROM tab0 AS cor0 CROSS JOIN tab0
-----
-9 values hashing to 31818c9d4d325eb248735c97cb1dce39
-
-query I rowsort
-SELECT col0 AS col0 FROM tab2 AS cor0 WHERE NOT NULL >= + col1
-----
-
-query I rowsort
-SELECT ALL col2 * ( - ( col0 ) ) AS col2 FROM tab0 AS cor0 WHERE NOT NULL IS NOT NULL
-----
--705
--870
--9603
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT col0 NOT BETWEEN - 95 * - ( 40 ) AND - col0 * col0
-----
-
-query I rowsort
-SELECT - ( - col2 ) * + col1 AS col1 FROM tab1 AS cor0
-----
-1344
-295
-3196
-
-query I rowsort
-SELECT + 61 * col2 AS col2 FROM tab1 AS cor0 WHERE NOT 76 NOT IN ( 54 )
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT col0 - - col1 NOT BETWEEN - col2 * col0 AND + col1
-----
-
-query I rowsort
-SELECT DISTINCT - col1 FROM tab0 WHERE NULL < - col1
-----
-
-query I rowsort
-SELECT ALL ( + col1 ) * - col1 AS col0 FROM tab1
-----
--196
--2209
--25
-
-query I rowsort
-SELECT DISTINCT col2 AS col1 FROM tab1 AS cor0 WHERE col1 * + col2 < + col2
-----
-
-query I rowsort
-SELECT + col0 + 52 AS col2 FROM tab0 AS cor0
-----
-139
-149
-67
-
-query I rowsort
-SELECT 81 + col2 FROM tab2 cor0
-----
-104
-121
-139
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT + ( - 69 ) * col2 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT + 54 FROM tab0 AS cor0 CROSS JOIN tab1 AS cor1
-----
-54
-
-query IIIIII rowsort
-SELECT DISTINCT * FROM tab0, tab2 AS cor0 WHERE NOT ( NULL ) IS NOT NULL
-----
-54 values hashing to eaa394f1627c8d5e53406d9ca3b09469
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NULL NOT BETWEEN ( NULL ) AND + col2
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE 21 NOT IN ( - - col0 )
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT + 22 * 90 * + col1 + col2 FROM tab2 AS cor0
-----
-101003
-132718
-152500
-
-query I rowsort
-SELECT DISTINCT ( + col2 ) + 21 FROM tab0 AS cor0
-----
-120
-31
-68
-
-query I rowsort
-SELECT ALL + col2 + + - 74 AS col0 FROM tab0 AS cor0
-----
--27
--64
-25
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE ( + col1 ) IS NOT NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT ( col2 ) + + col2 * - col0 AS col2 FROM tab2 cor0 WHERE ( - col2 ) BETWEEN ( NULL ) AND ( NULL )
-----
-
-query I rowsort
-SELECT DISTINCT col2 - col2 AS col1 FROM tab2 AS cor0 WHERE ( NULL ) IS NOT NULL
-----
-
-query I rowsort
-SELECT ( col2 ) + + - col0 FROM tab1
-----
--23
--26
-45
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NULL >= + 97 * - 83
-----
-
-query III rowsort
-SELECT * FROM tab2 cor0 WHERE + col1 <= + 78 * - - col2 + ( col0 + - col0 ) * + 94
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT col1 * + col2 - col2 AS col2 FROM tab0 AS cor0
-----
-0
-200
-3760
-
-query III rowsort
-SELECT ALL * FROM tab1 cor0 WHERE col1 * + - col2 IS NOT NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT DISTINCT + 95 * - 55 AS col0 FROM tab2 AS cor0
-----
--5225
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE + 75 >= NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE 73 + + 19 IS NOT NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT DISTINCT + col0 * - col0 * + ( + col1 ) * + + col0 FROM tab2
-----
--20185088
--28265625
--4964136
-
-query I rowsort
-SELECT ALL 45 * col0 * + + col0 AS col1 FROM tab1
-----
-117045
-325125
-372645
-
-query I rowsort
-SELECT ALL 36 FROM tab0 AS cor0 WHERE NOT + col2 * - 20 IN ( + 55 + - col0 )
-----
-36
-36
-36
-
-query I rowsort
-SELECT DISTINCT 56 + col2 AS col2 FROM tab0 WHERE NOT col1 + + col2 * + - ( + - 9 ) IS NULL
-----
-103
-155
-66
-
-query II rowsort
-SELECT + col1, 5 AS col0 FROM tab0
-----
-1
-5
-21
-5
-81
-5
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT ( - - ( + col2 ) * + col0 * - col1 + col0 ) < NULL
-----
-
-query I rowsort
-SELECT ALL - - col0 FROM tab0 WHERE ( NULL ) < - 76
-----
-
-query II rowsort
-SELECT ALL - col2 AS col2, col2 * + 30 FROM tab1
-----
--59
-1770
--68
-2040
--96
-2880
-
-query I rowsort
-SELECT DISTINCT - 30 + + - col2 AS col1 FROM tab2 AS cor0
-----
--53
--70
--88
-
-query I rowsort
-SELECT col0 + 12 + + col0 FROM tab2
-----
-104
-140
-162
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT - 21 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT ( NULL >= NULL )
-----
-
-query I rowsort
-SELECT ALL - col0 FROM tab2 AS cor0 WHERE col2 / col1 = NULL
-----
-
-query I rowsort
-SELECT - + 37 + + 60 AS col2 FROM tab2 AS cor0
-----
-23
-23
-23
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE + 17 * + - 5 IS NULL
-----
-
-query I rowsort
-SELECT ALL + ( + col0 ) FROM tab0 cor0 WHERE NULL IN ( 14, - ( - ( + + col0 ) ) )
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE - col0 > NULL
-----
-
-query I rowsort
-SELECT DISTINCT ( - - 58 ) FROM tab2
-----
-58
-
-query I rowsort
-SELECT DISTINCT + col2 AS col2 FROM tab0 AS cor0 WHERE NOT NULL IS NULL AND + col0 * + col0 IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT NULL BETWEEN - col2 AND - col2
-----
-
-query I rowsort
-SELECT col2 + col2 FROM tab0 WHERE NOT + col0 >= + + col1
-----
-94
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT col1 IN ( + col0 )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT NULL NOT IN ( - col2 + - col1, col1 )
-----
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE - col0 IS NULL
-----
-
-query I rowsort
-SELECT + 49 * 19 AS col1 FROM tab1 AS cor0
-----
-931
-931
-931
-
-query I rowsort
-SELECT DISTINCT + col1 FROM tab0 cor0 WHERE 47 NOT BETWEEN - 91 AND NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT col2 >= col2
-----
-
-query I rowsort
-SELECT ALL col1 FROM tab2 WHERE NULL IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT - ( 71 ) * + col1 AS col0 FROM tab2
-----
--3621
--4757
--5467
-
-query I rowsort
-SELECT DISTINCT - col0 * - 62 AS col2 FROM tab2
-----
-2852
-3968
-4650
-
-query II rowsort
-SELECT - col0 AS col2, 89 + + 99 FROM tab0
-----
--15
-188
--87
-188
--97
-188
-
-query I rowsort
-SELECT + col1 + - 36 AS col1 FROM tab1
-----
--22
--31
-11
-
-query I rowsort
-SELECT - col0 + + + col1 FROM tab0 AS cor0
-----
--66
--96
-66
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE ( + 38 ) IS NULL
-----
-
-query I rowsort
-SELECT col2 * 57 - + 91 FROM tab1 AS cor0
-----
-3272
-3785
-5381
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT NULL IS NOT NULL AND ( NOT ( NOT NULL NOT IN ( + 40 ) ) )
-----
-
-query I rowsort
-SELECT ALL - col2 * + col2 - + 12 AS col0 FROM tab0
-----
--112
--2221
--9813
-
-query III rowsort
-SELECT * FROM tab1 WHERE ( NULL ) >= + 37
-----
-
-query I rowsort
-SELECT + col1 + - 44 - 74 AS col0 FROM tab0
-----
--117
--37
--97
-
-query I rowsort
-SELECT + ( + + col0 ) AS col1 FROM tab1 AS cor0
-----
-51
-85
-91
-
-query IIIIII rowsort
-SELECT * FROM tab0 AS cor0 CROSS JOIN tab0 AS cor1 WHERE ( NULL ) <> NULL
-----
-
-query I rowsort
-SELECT ALL + 56 AS col2 FROM tab1 cor0
-----
-56
-56
-56
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT + col1 <= - - 48 * + col1 * col0
-----
-
-query I rowsort
-SELECT col2 * col1 * - + col2 FROM tab2
-----
--123200
--225388
--26979
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT 59 NOT IN ( col2, 9 * - + col2 / - col2 )
-----
-
-query I rowsort
-SELECT col2 * + col2 * - col1 AS col1 FROM tab0
-----
--178929
--2100
--9801
-
-query I rowsort
-SELECT ALL + col0 * + col1 * + 7 FROM tab1
-----
-2975
-29939
-4998
-
-query I rowsort
-SELECT ALL col2 * + col1 * + 9 * ( + 84 ) AS col0 FROM tab1
-----
-1016064
-223020
-2416176
-
-query II rowsort
-SELECT col0 * + col0 AS col2, + col1 FROM tab0
-----
-225
-81
-7569
-21
-9409
-1
-
-query I rowsort
-SELECT DISTINCT + 6 + col1 AS col2 FROM tab2
-----
-57
-73
-83
-
-query III rowsort
-SELECT * FROM tab2 WHERE + 38 IS NULL
-----
-
-query I rowsort
-SELECT + 50 * + - 55 - + col2 AS col0 FROM tab2 WHERE col1 + col1 BETWEEN + - col0 AND NULL
-----
-
-query III rowsort
-SELECT * FROM tab0 WHERE - col0 - - + 61 * - - col2 * - 94 IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT - col0 AS col2 FROM tab2 AS cor0 WHERE - col1 + - + col2 * col0 BETWEEN NULL AND - - 15 + + col1
-----
-
-query II rowsort
-SELECT ALL + 73 * + - 35 + ( - - 46 ), + col1 FROM tab1 AS cor0
-----
--2509
-14
--2509
-47
--2509
-5
-
-query I rowsort
-SELECT col1 + + ( - 95 ) FROM tab0
-----
--14
--74
--94
-
-query I rowsort
-SELECT DISTINCT - 15 FROM tab1 AS cor0 CROSS JOIN tab2 AS cor1
-----
--15
-
-query I rowsort
-SELECT ALL + - 0 AS col0 FROM tab0 cor0
-----
-0
-0
-0
-
-query I rowsort
-SELECT ALL - col0 + - + 69 AS col2 FROM tab0 AS cor0
-----
--156
--166
--84
-
-query I rowsort
-SELECT ALL + col0 * + + 5 - - - col2 - + col2 FROM tab2 cor0
-----
-184
-240
-259
-
-query I rowsort
-SELECT AVG ( + col1 ) FROM tab2 AS cor0 WHERE NULL > NULL
-----
-NULL
-
-query I rowsort
-SELECT ALL col1 FROM tab1 WHERE NULL NOT BETWEEN NULL AND ( col1 ) AND NULL IS NULL
-----
-
-query I rowsort
-SELECT - col1 - + 53 - - col1 * + 88 FROM tab2
-----
-4384
-5776
-6646
-
-query I rowsort
-SELECT ALL + col2 + 49 FROM tab1
-----
-108
-117
-145
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT + col1 + + col0 + - col0 <> NULL
-----
-
-query I rowsort
-SELECT - 65 * - 15 AS col0 FROM tab2 AS cor0
-----
-975
-975
-975
-
-query I rowsort
-SELECT DISTINCT + + col0 * 18 AS col2 FROM tab1 AS cor0
-----
-1530
-1638
-918
-
-query I rowsort
-SELECT + - 65 * - + col1 + col2 FROM tab0 AS cor0
-----
-1375
-164
-5312
-
-query II rowsort
-SELECT DISTINCT + col1 AS col0, 82 FROM tab0 AS cor0
-----
-1
-82
-21
-82
-81
-82
-
-query I rowsort
-SELECT DISTINCT + + AVG ( ALL + col2 ) FROM tab1 AS cor0 WHERE + col2 IS NULL
-----
-NULL
-
-query I rowsort
-SELECT ALL col0 + 71 * + + 75 + - col1 - - + col0 + + + col1 FROM tab2 AS cor0
-----
-5417
-5453
-5475
-
-query I rowsort
-SELECT ALL - 18 AS col0 FROM tab0
-----
--18
--18
--18
-
-query I rowsort
-SELECT DISTINCT - 46 FROM tab0, tab0 cor0
-----
--46
-
-query I rowsort
-SELECT + ( + 12 ) - - col2 FROM tab1 AS cor0 WHERE + col2 + - - 31 > ( col2 ) + - ( col0 )
-----
-108
-71
-80
-
-query I rowsort
-SELECT - - 60 + ( + col0 ) FROM tab0 AS cor0
-----
-147
-157
-75
-
-query I rowsort
-SELECT 63 + + - 38 AS col1 FROM tab2 AS cor0
-----
-25
-25
-25
-
-query I rowsort
-SELECT DISTINCT 15 + - col2 FROM tab2 AS cor0
-----
--25
--43
--8
-
-query I rowsort
-SELECT ALL - col2 * + + 61 + - col2 + - col0 AS col1 FROM tab2 AS cor0
-----
--1472
--2544
--3671
-
-query III rowsort
-SELECT ALL * FROM tab0 cor0 WHERE NOT + ( col2 ) < - 63 + col2
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query II rowsort
-SELECT + - col1 + + - 85 - - col1 * + - col1, col1 FROM tab1 AS cor0
-----
--115
-5
--2341
-47
--295
-14
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT col0 + + col2 < + 11
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query II rowsort
-SELECT col1, + col2 AS col2 FROM tab0
-----
-1
-99
-21
-10
-81
-47
-
-query II rowsort
-SELECT DISTINCT - col0 AS col1, - col0 AS col0 FROM tab2 cor0 WHERE col1 / - - ( - col0 ) > NULL
-----
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT ( col1 ) IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT DISTINCT + 28 * - - ( + + col0 ) FROM tab2 cor0
-----
-1288
-1792
-2100
-
-query I rowsort
-SELECT DISTINCT + ( + 72 ) FROM tab1 AS cor0
-----
-72
-
-query I rowsort
-SELECT ALL col0 * 36 * 84 * - col1 FROM tab1
-----
--1285200
--12933648
--2159136
-
-query I rowsort
-SELECT ALL + col0 + + 32 AS col0 FROM tab1 WHERE NOT NULL IS NULL
-----
-
-query I rowsort
-SELECT ALL col1 * col0 * - col0 AS col2 FROM tab2 AS cor0
-----
--107916
--315392
--376875
-
-query III rowsort
-SELECT * FROM tab0 cor0 WHERE NOT - 73 * + col2 IS NOT NULL
-----
-
-query I rowsort
-SELECT ALL 46 * col0 AS col2 FROM tab0
-----
-4002
-4462
-690
-
-query I rowsort
-SELECT DISTINCT - - col1 + col1 AS col0 FROM tab0 WHERE NOT NULL IS NULL
-----
-
-query I rowsort
-SELECT ALL col0 * - + col2 * + col0 AS col0 FROM tab0
-----
--10575
--75690
--931491
-
-query II rowsort
-SELECT + col2 * - 0, - col0 AS col2 FROM tab1
-----
-0
--51
-0
--85
-0
--91
-
-query I rowsort
-SELECT DISTINCT - + col1 + 29 FROM tab1 AS cor0
-----
--18
-15
-24
-
-query I rowsort
-SELECT - + col1 AS col0 FROM tab2 AS cor0 WHERE ( NOT NULL IS NULL )
-----
-
-query I rowsort
-SELECT ALL + 15 + + col0 * + col0 * col0 AS col1 FROM tab1 AS cor0
-----
-132666
-614140
-753586
-
-query I rowsort
-SELECT col1 + + 64 + + col0 AS col2 FROM tab1
-----
-129
-154
-202
-
-query I rowsort
-SELECT - col0 FROM tab2 cor0 WHERE + 53 * - - col2 * - ( + col0 ) IN ( - 51 )
-----
-
-query II rowsort
-SELECT - 58 + 6, col1 * + + 59 + col1 FROM tab1 AS cor0 WHERE NOT NULL NOT BETWEEN NULL AND + col1
-----
-
-query I rowsort
-SELECT DISTINCT - ( - - col1 ) AS col2 FROM tab1 AS cor0
-----
--14
--47
--5
-
-query II rowsort
-SELECT - - col0, col0 * - col1 AS col2 FROM tab1 AS cor0 WHERE NOT + col1 IS NOT NULL
-----
-
-query I rowsort
-SELECT ALL + 63 * + + 97 AS col2 FROM tab0 cor0 WHERE NOT ( NULL ) <> - 33
-----
-
-query I rowsort
-SELECT ALL col0 * + ( col2 ) AS col2 FROM tab2 AS cor0
-----
-1058
-2560
-4350
-
-query I rowsort
-SELECT ALL + col2 * - 85 FROM tab0
-----
--3995
--8415
--850
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT + col0 NOT BETWEEN - col2 / col2 + - 32 AND NULL
-----
-
-query I rowsort
-SELECT DISTINCT + - 89 AS col1 FROM tab2 AS cor0
-----
--89
-
-query I rowsort
-SELECT - 13 FROM ( tab2 cor0 CROSS JOIN tab2 AS cor1 )
-----
-9 values hashing to e95f5f4bd0f480397cced5f5e8a23792
-
-query I rowsort
-SELECT ALL - - col0 * + col0 + - + col2 FROM tab0 AS cor0
-----
-178
-7559
-9310
-
-query I rowsort
-SELECT ALL 26 FROM tab1 AS cor0 WHERE NULL IS NULL
-----
-26
-26
-26
-
-query I rowsort
-SELECT DISTINCT col1 + - 79 + - + 26 FROM tab1 AS cor0
-----
--100
--58
--91
-
-query I rowsort
-SELECT - - col1 AS col0 FROM tab2 AS cor0 WHERE - col0 - col1 IS NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE NOT + col1 * + col0 * - ( - - 5 ) IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT - col0 * - col0 * - col1 + + col0 FROM tab2
-----
--107870
--315328
--376800
-
-query I rowsort
-SELECT DISTINCT 95 * + 28 * - col1 AS col2 FROM tab1
-----
--125020
--13300
--37240
-
-query I rowsort
-SELECT DISTINCT + col2 * + col1 * + + 41 FROM tab1
-----
-12095
-131036
-55104
-
-query I rowsort
-SELECT DISTINCT + col1 * - ( - 69 ) AS col0 FROM tab1
-----
-3243
-345
-966
-
-query II rowsort
-SELECT DISTINCT - col0, col2 FROM tab1
-----
--51
-96
--85
-59
--91
-68
-
-query II rowsort
-SELECT ALL col2 AS col0, col2 AS col0 FROM tab0
-----
-10
-10
-47
-47
-99
-99
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT + col2 <> NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE ( NULL ) IN ( col2, col0 )
-----
-
-query I rowsort
-SELECT + + col1 * + col2 + + 58 FROM tab2 AS cor0
-----
-1231
-3138
-3944
-
-query I rowsort
-SELECT DISTINCT + col0 * - - col2 + + + 76 FROM tab2 AS cor0 WHERE NOT NULL > NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NOT 16 BETWEEN NULL AND col2
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT - col2 <> + 61 * - - col0 * - col0 * - col1
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE col1 + - - 69 IS NOT NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT 33 * + - ( 66 ) >= - col0
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT - col2 * 41 <= NULL
-----
-
-query I rowsort
-SELECT ALL - 2 + - col0 FROM tab2 AS cor0
-----
--48
--66
--77
-
-query I rowsort
-SELECT DISTINCT - + col1 + + ( col0 ) AS col1 FROM tab1 cor0
-----
-37
-44
-80
-
-query II rowsort
-SELECT - 24 * 82 AS col2, + col1 AS col0 FROM tab1 AS cor0
-----
--1968
-14
--1968
-47
--1968
-5
-
-query I rowsort
-SELECT ALL 0 * - col1 * - col0 FROM tab1 AS cor0
-----
-0
-0
-0
-
-query III rowsort
-SELECT * FROM tab1 cor0 WHERE ( NULL ) >= - col2 + - 96
-----
-
-query I rowsort
-SELECT ALL + col1 * 32 AS col2 FROM tab0
-----
-2592
-32
-672
-
-query I rowsort
-SELECT + 84 - + - col1 * col1 * + 33 AS col0 FROM tab1
-----
-6552
-72981
-909
-
-query I rowsort
-SELECT ALL 50 * col1 AS col1 FROM tab1 WHERE NOT ( NOT - col2 IS NULL )
-----
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NULL NOT BETWEEN ( NULL ) AND + - 89
-----
-
-query I rowsort
-SELECT - 96 FROM tab2 AS cor0 WHERE ( NOT NULL IS NULL ) OR NOT ( NULL ) NOT BETWEEN 74 * - - ( + col0 ) / + col1 * + col0 AND NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE 96 > NULL
-----
-
-query I rowsort
-SELECT 58 AS col2 FROM tab0 cor0 CROSS JOIN tab0 AS cor1
-----
-9 values hashing to ef6e63aeed2581a168f07646d258f666
-
-query II rowsort
-SELECT DISTINCT 21 AS col2, col2 AS col1 FROM tab1 AS cor0
-----
-21
-59
-21
-68
-21
-96
-
-query I rowsort
-SELECT + col0 AS col2 FROM tab1 cor0 WHERE NOT NULL IS NOT NULL
-----
-51
-85
-91
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT ( NOT ( + col2 IS NOT NULL ) )
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT ( NULL >= + col0 )
-----
-
-query II rowsort
-SELECT + ( + col2 ), - ( - + col2 ) AS col1 FROM tab2 AS cor0
-----
-23
-23
-40
-40
-58
-58
-
-query I rowsort
-SELECT ALL + + 1 FROM tab1 AS cor0
-----
-1
-1
-1
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT - 23 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT col1 + + 81 FROM tab2
-----
-132
-148
-158
-
-query I rowsort
-SELECT DISTINCT + 65 + + 76 FROM tab2 AS cor0
-----
-141
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NOT NULL NOT BETWEEN ( NULL ) AND 1
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE ( - col1 ) IS NOT NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT ALL - 84 * + + col2 AS col1 FROM tab2
-----
--1932
--3360
--4872
-
-query I rowsort
-SELECT DISTINCT + col1 + col0 * + + col0 FROM tab0 cor0
-----
-306
-7590
-9410
-
-query I rowsort
-SELECT DISTINCT ( - AVG ( DISTINCT + 59 ) ) AS col0 FROM tab0 AS cor0 WHERE 56 BETWEEN + - col1 * col2 * col1 + - col0 + - col1 * - - 13 + - col2 + - col1 + + 97 AND NULL
-----
-NULL
-
-query I rowsort
-SELECT DISTINCT col0 + - ( + col0 ) AS col1 FROM tab2 AS cor0
-----
-0
-
-query I rowsort
-SELECT - 92 + - col2 FROM tab1 cor0
-----
--151
--160
--188
-
-query I rowsort
-SELECT - col1 FROM tab1 WHERE + col2 = + + 81 + col0
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE - col2 >= - col1
-----
-
-query II rowsort
-SELECT DISTINCT col0 - - - col1, ( 72 ) * col1 * + 92 AS col2 FROM tab1
-----
-37
-92736
-44
-311328
-80
-33120
-
-query II rowsort
-SELECT - 2 * col0 AS col0, + 90 FROM tab1
-----
--102
-90
--170
-90
--182
-90
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT NULL NOT BETWEEN - col2 * + col0 AND - ( col1 )
-----
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT col2 * col0 + + col2 + + 85 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT ALL 23 FROM tab2 AS cor0 CROSS JOIN tab0 AS cor1
-----
-9 values hashing to d94fadcc1c8cc4fc51b78b83e04795f2
-
-query I rowsort
-SELECT ALL - col0 * + 10 + + 43 FROM tab1 AS cor0
-----
--467
--807
--867
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT ( NULL ) NOT BETWEEN 55 - + 53 - + - col0 / + col1 AND NULL
-----
-
-query I rowsort
-SELECT ALL col2 + - col0 + + + col2 AS col1 FROM tab2 AS cor0 WHERE NOT col2 * + col0 * + - 64 NOT BETWEEN + - col1 * - col0 + - col0 AND ( NULL )
-----
-
-query II rowsort
-SELECT - col0 AS col2, - col1 AS col1 FROM tab0 AS cor0
-----
--15
--81
--87
--21
--97
--1
-
-query I rowsort
-SELECT col2 AS col1 FROM tab2 AS cor0 WHERE NOT NULL IS NULL
-----
-
-query II rowsort
-SELECT col2 AS col2, col1 + + 19 FROM tab1
-----
-59
-24
-68
-66
-96
-33
-
-query I rowsort
-SELECT ALL + 72 * + 97 FROM tab1
-----
-6984
-6984
-6984
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT NULL < + col0
-----
-
-query I rowsort
-SELECT DISTINCT - + col0 FROM tab1 AS cor0 WHERE NOT NULL NOT IN ( - col2, col1 )
-----
-
-query I rowsort
-SELECT DISTINCT col0 + - + col0 * - col1 AS col0 FROM tab0 cor0
-----
-1230
-1914
-194
-
-query I rowsort
-SELECT DISTINCT 42 * + - col0 + col1 - - col1 FROM tab1 cor0
-----
--2114
--3560
--3728
-
-query I rowsort
-SELECT 83 * + col0 AS col0 FROM tab0 AS cor0 WHERE NULL IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT + + 33 * + col0 - + - col0 + 91 * - 99 FROM tab1 AS cor0
-----
--5915
--6119
--7275
-
-query I rowsort
-SELECT - 26 - + col0 FROM tab0
-----
--113
--123
--41
-
-query I rowsort
-SELECT col1 * - - 70 FROM tab2 WHERE + - col0 IS NOT NULL
-----
-3570
-4690
-5390
-
-query I rowsort
-SELECT + col2 - col0 * - + col1 FROM tab0
-----
-1262
-1837
-196
-
-query I rowsort
-SELECT DISTINCT 82 AS col1 FROM tab2
-----
-82
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NOT + 82 * col2 IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT DISTINCT col0 AS col0 FROM tab0 WHERE NULL IN ( - col2 )
-----
-
-query I rowsort
-SELECT DISTINCT + col1 * - col2 AS col2 FROM tab2 WHERE + col2 IS NULL
-----
-
-query I rowsort
-SELECT ALL + col2 * - + 67 + col2 FROM tab2 AS cor0
-----
--1518
--2640
--3828
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT - col2 <= - 56
-----
-46
-51
-23
-64
-77
-40
-
-query II rowsort
-SELECT DISTINCT col1, 95 FROM tab2
-----
-51
-95
-67
-95
-77
-95
-
-query I rowsort
-SELECT DISTINCT + + ( col0 ) + - + col2 * + 83 + + - col0 FROM tab0 WHERE NULL IS NULL
-----
--3901
--8217
--830
-
-query I rowsort
-SELECT DISTINCT col0 FROM tab0 WHERE NOT NULL = - col0
-----
-
-query III rowsort
-SELECT * FROM tab0 WHERE - col2 > - col0
-----
-87
-21
-10
-
-query I rowsort
-SELECT 13 + col1 + - + col0 FROM tab0 AS cor0
-----
--53
--83
-79
-
-query I rowsort
-SELECT DISTINCT + ( - 82 ) * + col0 + - - col0 FROM tab2 AS cor0
-----
--3726
--5184
--6075
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE 28 * - + col1 IS NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 WHERE col2 * col0 >= + 41
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT DISTINCT - 65 AS col2 FROM tab0 WHERE + 22 + - col0 IS NOT NULL
-----
--65
-
-query I rowsort
-SELECT ALL 47 + + col2 AS col2 FROM tab1 AS cor0
-----
-106
-115
-143
-
-query I rowsort
-SELECT col0 + - col0 + - col1 FROM tab0 cor0
-----
--1
--21
--81
-
-query I rowsort
-SELECT 28 * - col1 AS col1 FROM tab1 AS cor0 WHERE NULL IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT col1 + - - 94 + col2 - ( 92 ) * - col2 * col0 AS col1 FROM tab1
-----
-450636
-461538
-569505
-
-query I rowsort
-SELECT DISTINCT ( + - col1 ) FROM tab0
-----
--1
--21
--81
-
-query I rowsort
-SELECT ALL + col1 + + 0 FROM tab2 WHERE NULL IS NOT NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE + + col1 + col1 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT - 38 * - 3 * + 30 FROM tab1 AS cor0
-----
-3420
-3420
-3420
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE 97 < + 21
-----
-
-query I rowsort
-SELECT + + ( col1 ) + + 39 * col1 AS col2 FROM tab2 AS cor0
-----
-2040
-2680
-3080
-
-query III rowsort
-SELECT ALL * FROM tab0 cor0 WHERE col2 <> - col0
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT DISTINCT + 45 * col0 AS col0 FROM tab2
-----
-2070
-2880
-3375
-
-query III rowsort
-SELECT * FROM tab1 WHERE NULL >= - + col0 + + - col1
-----
-
-query II rowsort
-SELECT ALL col0 * - 5, col0 FROM tab2
-----
--230
-46
--320
-64
--375
-75
-
-query I rowsort
-SELECT DISTINCT 33 * - 15 AS col2 FROM tab1
-----
--495
-
-query II rowsort
-SELECT ALL - col1 + col1 AS col2, col0 * + - 35 FROM tab0
-----
-0
--3045
-0
--3395
-0
--525
-
-query I rowsort
-SELECT - + 24 FROM tab2 AS cor0 WHERE + col1 * + col1 + col0 + - col1 IS NULL
-----
-
-query I rowsort
-SELECT ALL + + 77 + col0 * col2 AS col1 FROM tab2 AS cor0
-----
-1135
-2637
-4427
-
-query I rowsort
-SELECT + col2 + + - 82 AS col0 FROM tab0 AS cor0
-----
--35
--72
-17
-
-query II rowsort
-SELECT ALL - 24, col0 * + col2 + + 11 AS col0 FROM tab0 AS cor0
-----
--24
-716
--24
-881
--24
-9614
-
-query II rowsort
-SELECT - 23 AS col1, 13 AS col2 FROM tab2 AS cor0
-----
--23
-13
--23
-13
--23
-13
-
-query I rowsort
-SELECT ALL + col0 * - col0 FROM tab1 WHERE + + 33 * + 25 IS NULL
-----
-
-query II rowsort
-SELECT col2, 60 AS col0 FROM tab0
-----
-10
-60
-47
-60
-99
-60
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT + col0 + - 84 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT - - col2 * - - 65 * - + 81 FROM tab2 AS cor0
-----
--121095
--210600
--305370
-
-query I rowsort
-SELECT ALL col0 + 3 FROM tab1 AS cor0
-----
-54
-88
-94
-
-query I rowsort
-SELECT DISTINCT - col0 + col1 + 85 FROM tab0 AS cor0
-----
--11
-151
-19
-
-query I rowsort
-SELECT ALL col2 FROM tab0 WHERE NOT ( NOT NULL IS NULL )
-----
-10
-47
-99
-
-query I rowsort
-SELECT DISTINCT + col1 + + 79 FROM tab1
-----
-126
-84
-93
-
-query I rowsort
-SELECT col1 + + 97 AS col2 FROM tab0
-----
-118
-178
-98
-
-query I rowsort
-SELECT 26 + - 5 AS col1 FROM tab1
-----
-21
-21
-21
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT ( NULL ) <= - ( - col2 )
-----
-
-query I rowsort
-SELECT col2 AS col1 FROM tab2 WHERE ( + col0 ) <= 45 * col1 - col1
-----
-23
-40
-58
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT 30 = ( NULL )
-----
-
-query I rowsort
-SELECT + ( col2 ) FROM tab1 WHERE NULL IS NULL
-----
-59
-68
-96
-
-query I rowsort
-SELECT DISTINCT - col2 AS col2 FROM tab0 WHERE + 37 * col0 NOT IN ( + col1 )
-----
--10
--47
--99
-
-query I rowsort
-SELECT + ( + col1 ) + col0 FROM tab1
-----
-138
-65
-90
-
-query I rowsort
-SELECT + 18 + col1 AS col1 FROM tab2
-----
-69
-85
-95
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE - col0 * - col1 <> ( - col1 )
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT ( - 63 * - col2 ) IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab0 WHERE ( 63 + - col0 ) IS NULL
-----
-
-query I rowsort
-SELECT 4 + + 45 FROM tab2
-----
-49
-49
-49
-
-query I rowsort
-SELECT col2 + ( col2 ) * 18 AS col0 FROM tab2
-----
-1102
-437
-760
-
-query I rowsort
-SELECT col0 * 98 + col1 AS col1 FROM tab2
-----
-4559
-6349
-7417
-
-query I rowsort
-SELECT - 83 - + 82 FROM tab1
-----
--165
--165
--165
-
-query I rowsort
-SELECT + col0 * + col2 AS col0 FROM tab0 WHERE NOT NULL > NULL
-----
-
-query I rowsort
-SELECT DISTINCT - col2 + 59 FROM tab1
-----
--37
--9
-0
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE - col1 * ( 25 ) + + col2 IN ( col0 )
-----
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT ( 68 + + col0 * col0 ) NOT BETWEEN col0 * col1 + - col2 * - col1 AND col2
-----
-
-query I rowsort
-SELECT DISTINCT 98 + - col0 FROM tab1 WHERE NOT ( - col0 ) NOT IN ( + col0 )
-----
-
-query I rowsort
-SELECT 11 FROM tab0 AS cor0 CROSS JOIN tab2
-----
-9 values hashing to f4d199584b44732f1a897e6691b4ea00
-
-query I rowsort
-SELECT ALL 93 FROM tab0 cor0 WHERE ( - 57 ) IS NULL
-----
-
-query I rowsort
-SELECT - 7 + + col1 AS col2 FROM tab2 AS cor0
-----
-44
-60
-70
-
-query I rowsort
-SELECT DISTINCT + 54 + + col1 AS col1 FROM tab2 AS cor0
-----
-105
-121
-131
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE col0 <= col1
-----
-15
-81
-47
-
-query I rowsort
-SELECT DISTINCT + 85 + 66 AS col0 FROM tab2 AS cor0
-----
-151
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE - col1 NOT BETWEEN ( NULL ) AND NULL
-----
-
-query I rowsort
-SELECT ALL 82 FROM tab2 WHERE ( + 53 ) IS NOT NULL OR NOT 79 + - col2 NOT BETWEEN + col2 * - col0 AND ( - 47 * col1 )
-----
-82
-82
-82
-
-query I rowsort
-SELECT - col1 * + + col1 FROM tab0
-----
--1
--441
--6561
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT col0 + col0 IS NOT NULL
-----
-
-query I rowsort
-SELECT 1 - - - col1 + - col0 AS col0 FROM tab2
-----
--140
--141
--96
-
-query I rowsort
-SELECT ALL + col0 + + col1 - + col2 AS col0 FROM tab0 AS cor0
-----
--1
-49
-98
-
-query IIIIII rowsort
-SELECT * FROM tab1 AS cor0 CROSS JOIN tab0 cor1 WHERE ( NULL ) IS NULL
-----
-54 values hashing to 058438fde5fb838f23bcbdd39266ddcf
-
-query I rowsort
-SELECT ALL + 53 AS col0 FROM tab2 AS cor0 CROSS JOIN tab0 AS cor1
-----
-9 values hashing to fede6033dee346dbd272085c05724fda
-
-query I rowsort
-SELECT DISTINCT + + 28 FROM tab1 AS cor0 CROSS JOIN tab0 AS cor1
-----
-28
-
-query IIIIII rowsort
-SELECT * FROM tab0 cor0 JOIN tab0 AS cor1 ON NULL IS NULL
-----
-54 values hashing to 42daa03e48aa6755defd0a3206e51d8e
-
-query II rowsort
-SELECT - col0 AS col1, - 19 FROM tab1
-----
--51
--19
--85
--19
--91
--19
-
-query I rowsort
-SELECT DISTINCT col2 FROM tab2 AS cor0 WHERE NOT col0 IS NULL
-----
-23
-40
-58
-
-query I rowsort
-SELECT DISTINCT - ( - col1 ) + 4 AS col0 FROM tab1 AS cor0 WHERE NOT + col2 + 50 IS NULL
-----
-18
-51
-9
-
-query I rowsort
-SELECT DISTINCT + col2 * - - ( - ( col0 ) ) FROM tab0 cor0
-----
--705
--870
--9603
-
-query I rowsort
-SELECT ALL - col0 * - - 11 FROM tab1 cor0
-----
--1001
--561
--935
-
-query I rowsort
-SELECT + col0 * + 95 + - col1 AS col2 FROM tab2 AS cor0
-----
-4319
-6003
-7058
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT ( + 59 ) IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT ( + + ( - col2 ) ) IS NOT NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE ( + - col2 / + col1 ) <= - col0
-----
-97
-1
-99
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE col1 < - - ( + col1 )
-----
-
-query I rowsort
-SELECT ALL + - col1 FROM tab0 AS cor0 WHERE 15 IS NOT NULL
-----
--1
--21
--81
-
-query I rowsort
-SELECT col0 + - + 85 AS col1 FROM tab2 AS cor0
-----
--10
--21
--39
-
-query I rowsort
-SELECT ALL col0 AS col2 FROM tab0 AS cor0 WHERE NOT ( + col0 ) IS NOT NULL
-----
-
-query I rowsort
-SELECT ALL - col1 * col1 - col0 + + ( - 66 ) FROM tab1 cor0
-----
--176
--2366
--313
-
-query I rowsort
-SELECT + ( - 80 ) FROM tab0 AS cor0 WHERE ( 51 ) IS NULL
-----
-
-query I rowsort
-SELECT ALL + + 53 + 67 FROM tab2 AS cor0
-----
-120
-120
-120
-
-query I rowsort
-SELECT ALL + col0 + + col1 + 15 * 93 * + col0 AS col1 FROM tab0 AS cor0
-----
-121473
-135413
-21021
-
-query I rowsort
-SELECT + col2 + + 44 + + - 13 * - - 17 FROM tab2 AS cor0
-----
--119
--137
--154
-
-query I rowsort
-SELECT DISTINCT 9 AS col1 FROM tab0, tab2 AS cor0
-----
-9
-
-query I rowsort
-SELECT ALL 63 + + - col2 AS col1 FROM tab1
-----
--33
--5
-4
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE col2 * 46 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT + ( + + 62 ) AS col1 FROM tab2 AS cor0
-----
-62
-62
-62
-
-query III rowsort
-SELECT * FROM tab1 cor0 WHERE - col1 NOT BETWEEN - col0 AND + + 5
-----
-
-query I rowsort
-SELECT ALL - col1 * + ( col2 ) FROM tab2
-----
--1173
--3080
--3886
-
-query I rowsort
-SELECT DISTINCT + 85 AS col0 FROM tab1
-----
-85
-
-query I rowsort
-SELECT + ( - col2 ) * + + col2 AS col2 FROM tab0 cor0
-----
--100
--2209
--9801
-
-query I rowsort
-SELECT - + col1 * 72 FROM tab2 cor0
-----
--3672
--4824
--5544
-
-query III rowsort
-SELECT ALL * FROM tab0 cor0 WHERE 31 * - + col2 <= ( + + col0 )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT - ( + - 88 ) FROM tab0 AS cor0 WHERE NOT ( ( NULL <= - 51 ) )
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT col1 > - col2
-----
-
-query I rowsort
-SELECT + 75 * - + 32 AS col2 FROM tab1
-----
--2400
--2400
--2400
-
-query I rowsort
-SELECT + col1 * - 14 * - col0 FROM tab1
-----
-5950
-59878
-9996
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT + - ( 24 ) IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query II rowsort
-SELECT - col1 AS col1, 81 AS col2 FROM tab0
-----
--1
-81
--21
-81
--81
-81
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT NULL < + 1
-----
-
-query I rowsort
-SELECT + col1 * 33 FROM tab0
-----
-2673
-33
-693
-
-query II rowsort
-SELECT 5 AS col1, col2 AS col2 FROM tab0
-----
-5
-10
-5
-47
-5
-99
-
-query I rowsort
-SELECT DISTINCT + 60 AS col0 FROM tab0 AS cor0
-----
-60
-
-query I rowsort
-SELECT DISTINCT 99 + - col0 * - 21 AS col0 FROM tab1 AS cor0
-----
-1170
-1884
-2010
-
-query I rowsort
-SELECT - col0 + - 99 FROM tab0
-----
--114
--186
--196
-
-query I rowsort
-SELECT DISTINCT + + col2 + 58 FROM tab0 AS cor0
-----
-105
-157
-68
-
-query I rowsort
-SELECT DISTINCT col1 - + - 63 FROM tab2
-----
-114
-130
-140
-
-query I rowsort
-SELECT 91 * - - col0 - + col1 AS col2 FROM tab1
-----
-4627
-7730
-8234
-
-query I rowsort
-SELECT + 15 AS col1 FROM tab2 AS cor0 WHERE NOT NULL IS NOT NULL
-----
-15
-15
-15
-
-query II rowsort
-SELECT DISTINCT + ( 75 ) * - + 20 * + + col1 AS col1, + col0 AS col1 FROM tab1
-----
--21000
-51
--70500
-91
--7500
-85
-
-query I rowsort
-SELECT DISTINCT - - 26 * col2 + + 25 AS col2 FROM tab2 AS cor0
-----
-1065
-1533
-623
-
-query III rowsort
-SELECT * FROM tab0 cor0 WHERE NOT - 66 / + 25 IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT - - 67 * 99 * - col1 FROM tab1 AS cor0
-----
--311751
--33165
--92862
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT ( NULL ) > col2 * + ( + ( + + col0 ) ) * - 60
-----
-
-query I rowsort
-SELECT + col1 * 57 AS col0 FROM tab0 AS cor0
-----
-1197
-4617
-57
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE NOT ( - 9 * + col1 ) IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT col1 * + ( - - col2 ) AS col0 FROM tab2
-----
-1173
-3080
-3886
-
-query I rowsort
-SELECT 77 + - + col1 + col0 * - - 94 FROM tab2 AS cor0
-----
-4350
-6016
-7060
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE ( NOT + col1 + + col1 - col0 IS NULL )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT ALL + col2 + 19 + - col0 * + 78 * + 61 FROM tab0 AS cor0
-----
--413917
--461408
--71304
-
-query I rowsort
-SELECT ALL + 59 + + + col2 AS col1 FROM tab1 AS cor0
-----
-118
-127
-155
-
-query I rowsort
-SELECT ALL + - col1 + + 98 + + ( - col1 ) FROM tab1 AS cor0
-----
-4
-70
-88
-
-query I rowsort
-SELECT ALL col2 - + - 82 FROM tab0
-----
-129
-181
-92
-
-query I rowsort
-SELECT DISTINCT - col2 - + ( + col2 ) FROM tab1
-----
--118
--136
--192
-
-query I rowsort
-SELECT + col1 * - + col0 FROM tab2 AS cor0
-----
--2346
--4928
--5025
-
-query II rowsort
-SELECT + ( - - 41 ) * + - 74 + + 51 + 48, col0 AS col0 FROM tab2 AS cor0
-----
--2935
-46
--2935
-64
--2935
-75
-
-query I rowsort
-SELECT - col0 + + col1 FROM tab0 WHERE NOT NULL IS NOT NULL
-----
--66
--96
-66
-
-query I rowsort
-SELECT 26 * col2 AS col2 FROM tab1 AS cor0
-----
-1534
-1768
-2496
-
-query I rowsort
-SELECT DISTINCT 5 FROM tab2 AS cor0 WHERE NOT NULL IS NOT NULL
-----
-5
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT ( - 65 ) > + col2 + col2 * + 87 + + ( col1 )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT ALL 14 * - col2 * col0 * + - col2 FROM tab0 AS cor0 WHERE NOT ( NULL ) <= + - col1 * - + 11 / - col0
-----
-
-query I rowsort
-SELECT - col0 * - - col0 + 66 AS col0 FROM tab1 AS cor0
-----
--2535
--7159
--8215
-
-query I rowsort
-SELECT - col2 * - - 40 * + col1 AS col1 FROM tab1
-----
--11800
--127840
--53760
-
-query I rowsort
-SELECT ( + + 57 ) * - 34 FROM tab2
-----
--1938
--1938
--1938
-
-query I rowsort
-SELECT - + col0 FROM tab0 WHERE NULL IS NOT NULL
-----
-
-query II rowsort
-SELECT col1, - ( ( + col1 ) ) FROM tab2
-----
-51
--51
-67
--67
-77
--77
-
-query I rowsort
-SELECT + col1 FROM tab2 WHERE 12 IS NOT NULL
-----
-51
-67
-77
-
-query I rowsort
-SELECT DISTINCT - col2 * - ( + col0 ) + + col0 FROM tab2 cor0
-----
-1104
-2624
-4425
-
-query I rowsort
-SELECT ALL col1 AS col1 FROM tab1 WHERE NOT + 76 + + + 8 > - col1
-----
-
-query I rowsort
-SELECT + col2 + + 89 + ( - - 64 ) * + 92 * + col1 AS col0 FROM tab2
-----
-300400
-394643
-453505
-
-query II rowsort
-SELECT 80 * - - 85 + - + 14, + col0 AS col0 FROM tab1
-----
-6786
-51
-6786
-85
-6786
-91
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE 62 IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT + + 86 - - + 96 FROM tab1 AS cor0
-----
-182
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE + 1 IS NULL
-----
-
-query II rowsort
-SELECT + 25, 63 AS col1 FROM tab1
-----
-25
-63
-25
-63
-25
-63
-
-query II rowsort
-SELECT ALL col2, + 40 * - 7 * col0 FROM tab1
-----
-59
--23800
-68
--25480
-96
--14280
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT ( - col2 ) IN ( col0 )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT + 5 - col0 + col1 * + col0 IS NOT NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE + 91 > NULL
-----
-
-query I rowsort
-SELECT - 31 * - col0 + - col1 FROM tab2 AS cor0
-----
-1375
-1907
-2258
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT 32 BETWEEN NULL AND - 53
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query II rowsort
-SELECT col1 AS col1, col2 FROM tab0 AS cor0
-----
-1
-99
-21
-10
-81
-47
-
-query I rowsort
-SELECT ALL + col0 FROM tab0 AS cor0 WHERE NOT ( - - col2 ) >= + col0
-----
-87
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT col0 = + col0 * col0 + + + col2
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT col1 * - - 43 FROM tab0
-----
-3483
-43
-903
-
-query I rowsort
-SELECT ( - 96 ) FROM tab1 WHERE + + col1 NOT IN ( - - col2 + col2, col0, col1, + 68 + col1, - + col0 / + 14 * - col1 + + col1 * + + col1 * - ( ( + 54 ) ) )
-----
-
-query III rowsort
-SELECT * FROM tab1 WHERE + - 45 IS NULL
-----
-
-query I rowsort
-SELECT - - 8 * - col0 + - col0 + + 0 FROM tab1 AS cor0
-----
--459
--765
--819
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NOT ( NULL ) NOT BETWEEN - 96 AND - + ( - + col1 )
-----
-
-query I rowsort
-SELECT col0 + + - col0 + + col2 FROM tab0 WHERE NULL IS NULL
-----
-10
-47
-99
-
-query I rowsort
-SELECT ALL - col1 + - 12 + - - 65 + - + 39 * + 18 + - col0 AS col2 FROM tab1 WHERE ( NULL NOT BETWEEN NULL AND col1 * - - col2 )
-----
-
-query I rowsort
-SELECT DISTINCT + - 74 AS col0 FROM tab2 AS cor0 CROSS JOIN tab2 AS cor1
-----
--74
-
-query II rowsort
-SELECT + 68 + 83 * - col2 * + col2 + + - 6 - col1 AS col2, ( - col0 ) FROM tab1 AS cor0
-----
--288866
--85
--383777
--91
--764880
--51
-
-query II rowsort
-SELECT ALL + col0, col1 AS col1 FROM tab0 cor0
-----
-15
-81
-87
-21
-97
-1
-
-query I rowsort
-SELECT 30 + - 16 + 49 FROM tab0 AS cor0
-----
-63
-63
-63
-
-query I rowsort
-SELECT DISTINCT col2 * - + 17 AS col1 FROM tab1 AS cor0
-----
--1003
--1156
--1632
-
-query I rowsort
-SELECT DISTINCT 58 * - col0 FROM tab0 AS cor0
-----
--5046
--5626
--870
-
-query I rowsort
-SELECT 29 FROM tab2 AS cor0 WHERE NOT - col0 IS NULL
-----
-29
-29
-29
-
-query I rowsort
-SELECT ALL - col2 * + 22 * - 58 * + col1 FROM tab2
-----
-1496748
-3930080
-4958536
-
-query I rowsort
-SELECT DISTINCT col2 FROM tab2 WHERE 78 >= NULL
-----
-
-query I rowsort
-SELECT + 64 * col1 * + col0 AS col2 FROM tab0
-----
-116928
-6208
-77760
-
-query I rowsort
-SELECT 41 * + - col2 AS col1 FROM tab2
-----
--1640
--2378
--943
-
-query II rowsort
-SELECT - col1 AS col2, 93 + - 51 FROM tab1
-----
--14
-42
--47
-42
--5
-42
-
-query I rowsort
-SELECT ALL + - 37 AS col0 FROM tab0 AS cor0 CROSS JOIN tab1 AS cor1
-----
-9 values hashing to ed4644af7729c2425ea6cc3d84c6504f
-
-query I rowsort
-SELECT ALL col2 AS col1 FROM tab0 WHERE NULL IS NOT NULL
-----
-
-query I rowsort
-SELECT ALL 9 FROM tab0 cor0
-----
-9
-9
-9
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NULL < col1 * + + col2 * + - col1
-----
-
-query I rowsort
-SELECT 1 - AVG ( ALL - col2 ) FROM tab2 AS cor0 WHERE NULL IS NOT NULL
-----
-NULL
-
-query I rowsort
-SELECT - ( - ( - + col1 ) ) FROM tab2 cor0
-----
--51
--67
--77
-
-query II rowsort
-SELECT - col2, col2 AS col1 FROM tab2 AS cor0 WHERE + col0 * - col2 IS NOT NULL
-----
--23
-23
--40
-40
--58
-58
-
-query I rowsort
-SELECT DISTINCT + col0 + - ( - col0 ) * + 46 * col2 AS col0 FROM tab2 AS cor0
-----
-117824
-200175
-48714
-
-query I rowsort
-SELECT ALL + col0 * - col0 + + - col2 * col1 AS col1 FROM tab1
-----
--11477
--3945
--7520
-
-query I rowsort
-SELECT - ( - 77 ) FROM tab0
-----
-77
-77
-77
-
-query I rowsort
-SELECT + col1 AS col0 FROM tab0 WHERE ( NOT 73 / + - 94 IS NULL )
-----
-1
-21
-81
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE ( - col1 ) IS NOT NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT + col0 * 95 - + - col1 + - col0 FROM tab2 AS cor0
-----
-4375
-6093
-7117
-
-query I rowsort
-SELECT 77 FROM tab0 WHERE - 38 IS NOT NULL
-----
-77
-77
-77
-
-query I rowsort
-SELECT ALL - 87 * + col1 FROM tab0 AS cor0
-----
--1827
--7047
--87
-
-query I rowsort
-SELECT DISTINCT + - 24 * - - col1 FROM tab0 AS cor0
-----
--1944
--24
--504
-
-query I rowsort
-SELECT + col1 + - 5 AS col2 FROM tab1 AS cor0 WHERE NOT + col2 * col1 IS NOT NULL
-----
-
-query I rowsort
-SELECT + - ( 39 ) FROM tab1 AS cor0
-----
--39
--39
--39
-
-query I rowsort
-SELECT + 10 * col0 + + col2 AS col0 FROM tab2 WHERE NOT NULL IS NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE 98 * col1 = col2 * + - col2
-----
-
-query II rowsort
-SELECT col0, + 3 AS col1 FROM tab0 AS cor0
-----
-15
-3
-87
-3
-97
-3
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT ( NOT - 75 - col0 / + col0 NOT BETWEEN NULL AND NULL )
-----
-
-query IIIIII rowsort
-SELECT * FROM ( tab2 AS cor0 CROSS JOIN tab1 AS cor1 ) WHERE NOT NULL IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT - - 84 + 53 AS col2 FROM tab2 AS cor0
-----
-137
-
-query I rowsort
-SELECT - ( ( + col0 ) ) AS col0 FROM tab1 AS cor0
-----
--51
--85
--91
-
-query II rowsort
-SELECT ALL - 73 + + 21 AS col2, + ( - col0 ) + + col0 * col1 AS col1 FROM tab2 AS cor0
-----
--52
-2300
--52
-4864
--52
-4950
-
-query I rowsort
-SELECT DISTINCT + ( - 93 ) + - 16 FROM tab0 AS cor0
-----
--109
-
-query III rowsort
-SELECT * FROM tab1 WHERE 93 = 34
-----
-
-query II rowsort
-SELECT ALL 77, col2 AS col2 FROM tab0
-----
-77
-10
-77
-47
-77
-99
-
-query I rowsort
-SELECT + + 16 FROM tab0 cor0 WHERE ( NULL ) IS NULL
-----
-16
-16
-16
-
-query I rowsort
-SELECT DISTINCT + + 15 * 48 + col0 FROM tab2 AS cor0
-----
-766
-784
-795
-
-query I rowsort
-SELECT DISTINCT - col0 + - ( - col0 ) FROM tab2 AS cor0
-----
-0
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE 91 * + col0 IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT - - 95 / - - col0 FROM tab0 WHERE NULL BETWEEN - - col1 AND - col1 * - col1 + + col1 + - col0 + + col1 + - 56 * + col1 * - col2
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT col2 <= + 36
-----
-15
-81
-47
-97
-1
-99
-
-query I rowsort
-SELECT ( + + 2 ) AS col0 FROM tab2
-----
-2
-2
-2
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE - col1 * + 81 NOT BETWEEN NULL AND - col1 * + 35 * - col1 * + col2
-----
-
-query I rowsort
-SELECT - - ( + + 94 ) AS col0 FROM tab1 AS cor0
-----
-94
-94
-94
-
-query I rowsort
-SELECT DISTINCT + + 2 AS col2 FROM tab2 AS cor0
-----
-2
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT + col0 > NULL
-----
-
-query II rowsort
-SELECT 28 AS col1, 35 * + col2 FROM tab1
-----
-28
-2065
-28
-2380
-28
-3360
-
-query I rowsort
-SELECT ALL 37 * - 10 FROM tab2
-----
--370
--370
--370
-
-query I rowsort
-SELECT + col2 AS col0 FROM tab1 WHERE NOT NULL BETWEEN - col1 + + 71 - + col2 AND + col2
-----
-
-query I rowsort
-SELECT ALL + 45 * - + col0 FROM tab0 AS cor0
-----
--3915
--4365
--675
-
-query I rowsort
-SELECT ( col1 ) * - col1 + col2 + + + col0 FROM tab1 AS cor0
-----
--2050
--49
-119
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE NOT col0 + + + 15 IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT - + col0 + col1 * col0 FROM tab0 AS cor0
-----
-0
-1200
-1740
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NULL >= 61
-----
-
-query I rowsort
-SELECT + 96 * - - col1 * + 88 AS col0 FROM tab0
-----
-177408
-684288
-8448
-
-query I rowsort
-SELECT DISTINCT - 98 - + - col2 * col2 FROM tab0
-----
-2
-2111
-9703
-
-query I rowsort
-SELECT + 51 * - col1 * 84 - - col0 AS col1 FROM tab0
-----
--346989
--4187
--89877
-
-query I rowsort
-SELECT DISTINCT 42 * + ( + col0 ) AS col0 FROM tab1
-----
-2142
-3570
-3822
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT 66 / col0 + + col2 / - 77 * - ( ( + - col2 ) ) * - - col0 + + col0 * 47 * - + col0 IS NOT NULL
-----
-
-query I rowsort
-SELECT 44 * col0 - col2 - 90 + 66 FROM tab0
-----
-3794
-4145
-589
-
-query I rowsort
-SELECT + 4 FROM tab0 AS cor0 WHERE + col0 IS NULL
-----
-
-query I rowsort
-SELECT ALL + 24 * + 29 FROM tab1 AS cor0 WHERE ( NULL ) = NULL
-----
-
-query II rowsort
-SELECT + col0 AS col1, col0 FROM tab0
-----
-15
-15
-87
-87
-97
-97
-
-query III rowsort
-SELECT * FROM tab0 cor0 WHERE NOT 43 * - + col0 * - - col0 + + col1 + + col1 NOT IN ( col0 )
-----
-
-query I rowsort
-SELECT - - 40 AS col1 FROM tab2 AS cor0 WHERE NOT ( NULL ) IS NOT NULL
-----
-40
-40
-40
-
-query I rowsort
-SELECT + col0 AS col0 FROM tab2 AS cor0 WHERE NOT NULL <= 79 * + 23 * + 41
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT - 85 BETWEEN NULL AND NULL
-----
-
-query I rowsort
-SELECT 1 * + ( col0 ) AS col0 FROM tab2
-----
-46
-64
-75
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE - + col2 + - col0 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT - + col1 AS col0 FROM tab0 WHERE - 52 - - 78 + col1 NOT BETWEEN - - 81 * - col2 AND + ( + 54 )
-----
--81
-
-query I rowsort
-SELECT ALL - ( - 63 ) FROM tab0 AS cor0
-----
-63
-63
-63
-
-query I rowsort
-SELECT ALL + col1 + - 61 + col1 AS col1 FROM tab0 AS cor0
-----
--19
--59
-101
-
-query I rowsort
-SELECT DISTINCT + 29 * col1 + 76 FROM tab2 AS cor0
-----
-1555
-2019
-2309
-
-query I rowsort
-SELECT + 85 * - + 73 FROM tab1 AS cor0 CROSS JOIN tab1 AS cor1
-----
-9 values hashing to 56d89b2d116368142a62af0a9f548070
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT NULL >= + 5 + - col2
-----
-
-query II rowsort
-SELECT ALL + col2, col1 AS col1 FROM tab0 AS cor0
-----
-10
-21
-47
-81
-99
-1
-
-query I rowsort
-SELECT 37 + - - ( col2 ) * - + col2 AS col1 FROM tab2 cor0
-----
--1563
--3327
--492
-
-query I rowsort
-SELECT - - ( + 25 ) + + 54 FROM tab0 AS cor0
-----
-79
-79
-79
-
-query I rowsort
-SELECT - 24 AS col1 FROM tab1, tab1 AS cor0
-----
-9 values hashing to 797d0f7c145f8ac623924448c714bbcc
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE NULL > + col2 * + col1
-----
-
-query I rowsort
-SELECT col1 * + + col0 AS col2 FROM tab2
-----
-2346
-4928
-5025
-
-query I rowsort
-SELECT ALL col0 + col0 * - - col1 AS col0 FROM tab0
-----
-1230
-1914
-194
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT ( col1 ) IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT col2 + - 60 IS NOT NULL
-----
-
-query I rowsort
-SELECT ALL + ( - 36 ) FROM tab0 AS cor0
-----
--36
--36
--36
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT 29 + - + col1 IS NOT NULL
-----
-
-query I rowsort
-SELECT col1 * + 60 * + - 82 AS col1 FROM tab1
-----
--231240
--24600
--68880
-
-query II rowsort
-SELECT + col2 AS col1, + ( - + col0 ) * 55 FROM tab0
-----
-10
--4785
-47
--825
-99
--5335
-
-query I rowsort
-SELECT ALL - col0 + - ( - col1 ) AS col2 FROM tab0 AS cor0
-----
--66
--96
-66
-
-query I rowsort
-SELECT ALL - 48 FROM tab1 AS cor0 CROSS JOIN tab2 AS cor1
-----
-9 values hashing to 31c94943c073954e4ca20b170ab61f8c
-
-query I rowsort
-SELECT col1 + + - col0 AS col0 FROM tab1
-----
--37
--44
--80
-
-query I rowsort
-SELECT col2 * - 65 FROM tab2
-----
--1495
--2600
--3770
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE ( NULL ) BETWEEN NULL AND - col0
-----
-
-query I rowsort
-SELECT + 56 * - 25 * + + col0 FROM tab1 AS cor0
-----
--119000
--127400
--71400
-
-query I rowsort
-SELECT DISTINCT col1 - + + col0 AS col1 FROM tab1
-----
--37
--44
--80
-
-query I rowsort
-SELECT col0 * + 43 - + - col0 * + col2 FROM tab2
-----
-3036
-5312
-7575
-
-query III rowsort
-SELECT * FROM tab2 WHERE + col1 + + + col2 * + col2 IS NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT + ( 51 ) > ( NULL )
-----
-
-query I rowsort
-SELECT DISTINCT 70 AS col0 FROM tab2
-----
-70
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT 52 / + 11 IS NOT NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NOT ( + col2 IS NOT NULL )
-----
-
-query I rowsort
-SELECT + - col1 * - + ( col1 ) AS col1 FROM tab2 AS cor0
-----
-2601
-4489
-5929
-
-query I rowsort
-SELECT DISTINCT - col1 * - - 78 AS col1 FROM tab2 AS cor0
-----
--3978
--5226
--6006
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE col1 > ( - - 91 )
-----
-
-query I rowsort
-SELECT + col2 AS col0 FROM tab2 AS cor0 WHERE NOT NULL BETWEEN NULL AND col2
-----
-
-query II rowsort
-SELECT col2, + 12 FROM tab2 AS cor0
-----
-23
-12
-40
-12
-58
-12
-
-query I rowsort
-SELECT DISTINCT - - 8 FROM tab2 AS cor0
-----
-8
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE + col0 < + col0 * + col0
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE - 39 + col0 IS NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE - col2 * + + col1 < NULL
-----
-
-query I rowsort
-SELECT col1 FROM tab0 AS cor0 WHERE NULL IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT col1 + 39 AS col2 FROM tab0
-----
-120
-40
-60
-
-query I rowsort
-SELECT + col2 + - - 37 AS col1 FROM tab0 AS cor0
-----
-136
-47
-84
-
-query I rowsort
-SELECT ALL col0 - - + col1 + + - col2 * - col1 FROM tab0
-----
-197
-318
-3903
-
-query I rowsort
-SELECT DISTINCT + 2 + 79 AS col0 FROM tab2 AS cor0
-----
-81
-
-query I rowsort
-SELECT DISTINCT ( - col1 ) * - 12 AS col2 FROM tab2
-----
-612
-804
-924
-
-query I rowsort
-SELECT + col2 * + 17 * - - col1 FROM tab1
-----
-22848
-5015
-54332
-
-query II rowsort
-SELECT col2, + col1 FROM tab2
-----
-23
-51
-40
-77
-58
-67
-
-query II rowsort
-SELECT ALL + col0 - + col2 AS col2, col2 AS col2 FROM tab0
-----
--2
-99
--32
-47
-77
-10
-
-query I rowsort
-SELECT + + 73 * + + 47 FROM tab2 cor0
-----
-3431
-3431
-3431
-
-query II rowsort
-SELECT - 1 * + col1, + col2 FROM tab1 AS cor0
-----
--14
-96
--47
-68
--5
-59
-
-query II rowsort
-SELECT - 7 AS col0, col1 AS col2 FROM tab2
-----
--7
-51
--7
-67
--7
-77
-
-query II rowsort
-SELECT - 97, col0 AS col0 FROM tab2
-----
--97
-46
--97
-64
--97
-75
-
-query I rowsort
-SELECT ALL - col0 * + - col2 AS col2 FROM tab2
-----
-1058
-2560
-4350
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT 85 <> - col0
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE ( NOT NULL IS NULL )
-----
-
-query I rowsort
-SELECT DISTINCT col1 AS col0 FROM tab0 AS cor0 WHERE NOT + col2 + - 80 IS NULL
-----
-1
-21
-81
-
-query I rowsort
-SELECT col2 * - 42 FROM tab2 AS cor0
-----
--1680
--2436
--966
-
-query I rowsort
-SELECT - col0 + 78 AS col2 FROM tab0
-----
--19
--9
-63
-
-query I rowsort
-SELECT DISTINCT + 11 * - col1 FROM tab2
-----
--561
--737
--847
-
-query I rowsort
-SELECT col2 + col1 * - 43 FROM tab0
-----
--3436
--893
-56
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT ( + 59 ) BETWEEN NULL AND NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT + 76 IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT - 35 * ( col0 * + col0 ) FROM tab2
-----
--143360
--196875
--74060
-
-query I rowsort
-SELECT - 62 * + col0 AS col1 FROM tab2 WHERE NOT NULL IS NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE 65 IN ( - 96 )
-----
-
-query I rowsort
-SELECT DISTINCT 34 + 24 AS col1 FROM tab2 AS cor0
-----
-58
-
-query I rowsort
-SELECT ALL - 83 * - 0 - col1 AS col0 FROM tab1
-----
--14
--47
--5
-
-query I rowsort
-SELECT - 28 AS col0 FROM tab2 AS cor0 WHERE NOT NULL IS NOT NULL
-----
--28
--28
--28
-
-query I rowsort
-SELECT - - col2 * - 73 AS col2 FROM tab0 AS cor0
-----
--3431
--7227
--730
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT NULL = 35
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT NULL BETWEEN ( col0 * - col1 ) AND + col0
-----
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT + col1 >= ( + 56 )
-----
-87
-21
-10
-97
-1
-99
-
-query I rowsort
-SELECT col2 * - col1 FROM tab0 WHERE NOT col0 NOT IN ( col0 * - col1 + + 46 * col0 )
-----
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT ( - 85 ) <= - col0
-----
-87
-21
-10
-97
-1
-99
-
-query I rowsort
-SELECT DISTINCT 62 FROM tab0 AS cor0 CROSS JOIN tab1 AS cor1 WHERE NOT NULL IS NOT NULL
-----
-62
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 cor0 WHERE ( 37 ) + 44 IS NULL
-----
-
-query I rowsort
-SELECT ALL 1 FROM tab1 AS cor0 WHERE NULL IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NULL <= col2 * + col1
-----
-
-query I rowsort
-SELECT DISTINCT + col1 FROM tab1 AS cor0 WHERE col1 NOT BETWEEN - - col1 AND NULL
-----
-
-query I rowsort
-SELECT DISTINCT col2 FROM tab0 AS cor0 WHERE NOT - col2 IN ( + 49 + + col0 )
-----
-10
-47
-99
-
-query III rowsort
-SELECT * FROM tab1 WHERE col0 > + - col1
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE NOT - + col0 * - col1 * + 7 >= ( NULL )
-----
-
-query I rowsort
-SELECT col1 FROM tab2 WHERE ( + 92 ) IS NOT NULL
-----
-51
-67
-77
-
-query I rowsort
-SELECT ALL col0 - + ( + col1 ) FROM tab1
-----
-37
-44
-80
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE ( - 71 ) IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT - 53 + - ( + 59 ) FROM tab0 cor0
-----
--112
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT ( + col2 ) IS NOT NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE ( NULL ) NOT IN ( + col0 + + + col1 )
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 cor0 WHERE - 1 IS NOT NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE NOT - 82 NOT BETWEEN - col0 AND ( NULL )
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT col2 * + - col1 BETWEEN NULL AND col1 - + + 27 + 36
-----
-
-query I rowsort
-SELECT + ( - ( 87 ) ) * - - 11 - ( 95 ) + col1 * 4 * col2 FROM tab0 AS cor0
-----
--212
--656
-14176
-
-query II rowsort
-SELECT ALL - col0 AS col0, 28 FROM tab0 AS cor0
-----
--15
-28
--87
-28
--97
-28
-
-query I rowsort
-SELECT col0 AS col0 FROM tab2 AS cor0 WHERE NOT - ( - col2 ) * - + 4 - - col1 IS NOT NULL
-----
-
-query II rowsort
-SELECT + col2, - col0 AS col0 FROM tab1
-----
-59
--85
-68
--91
-96
--51
-
-query IIIIII rowsort
-SELECT * FROM tab2, tab1 AS cor0 WHERE ( 7 ) > NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE col0 IN ( - + 46 * + 58 )
-----
-
-query II rowsort
-SELECT - col1, + col0 * - col1 + + ( + - col1 ) AS col2 FROM tab0
-----
--1
--98
--21
--1848
--81
--1296
-
-query II rowsort
-SELECT DISTINCT col1 AS col2, - col0 FROM tab1
-----
-14
--51
-47
--91
-5
--85
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT ( NULL ) NOT BETWEEN NULL AND + - col1
-----
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE ( NULL ) BETWEEN col0 AND ( NULL )
-----
-
-query I rowsort
-SELECT ALL 26 + + col2 FROM tab1 AS cor0 WHERE NOT NULL = NULL
-----
-
-query I rowsort
-SELECT DISTINCT ( + - col0 ) AS col0 FROM tab1 AS cor0
-----
--51
--85
--91
-
-query I rowsort
-SELECT DISTINCT - 80 + + 19 + - + col0 FROM tab0 AS cor0
-----
--148
--158
--76
-
-query I rowsort
-SELECT col0 FROM tab0 AS cor0 WHERE col0 * col0 NOT BETWEEN NULL AND + 15
-----
-15
-87
-97
-
-query I rowsort
-SELECT ALL + col0 * + + 77 + col0 AS col2 FROM tab2 AS cor0
-----
-3588
-4992
-5850
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE - 99 * + col1 IN ( - - col2 )
-----
-
-query I rowsort
-SELECT col1 + - ( 81 ) FROM tab1 cor0
-----
--34
--67
--76
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE 79 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query II rowsort
-SELECT ALL col2 + + col1 + - col2 AS col1, col0 FROM tab1 AS cor0
-----
-14
-51
-47
-91
-5
-85
-
-query III rowsort
-SELECT * FROM tab0 WHERE + - col0 + col2 IS NULL
-----
-
-query II rowsort
-SELECT col2 AS col1, + col2 * + 21 + - - 85 * - col2 FROM tab0
-----
-10
--640
-47
--3008
-99
--6336
-
-query II rowsort
-SELECT DISTINCT + col1 AS col2, 69 AS col2 FROM tab0 AS cor0
-----
-1
-69
-21
-69
-81
-69
-
-query I rowsort
-SELECT DISTINCT - 75 * - - col0 FROM tab0 AS cor0
-----
--1125
--6525
--7275
-
-query I rowsort
-SELECT 31 FROM tab2 AS cor0 WHERE NOT + col0 = ( col2 )
-----
-31
-31
-31
-
-query I rowsort
-SELECT ALL 67 AS col0 FROM tab0 AS cor0 WHERE NOT ( NULL ) IS NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT col2 + + 53 IN ( 78 ) AND NOT ( col2 + + 10 IS NULL )
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT 4 * + col1 AS col1 FROM tab0
-----
-324
-4
-84
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE NOT ( - + 13 * 36 + - col1 / - col2 * 98 + col0 * - col2 ) IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT 34 + - col0 * - - ( - col0 ) FROM tab1
-----
-2635
-7259
-8315
-
-query II rowsort
-SELECT col2 + - + 87 AS col2, - col0 FROM tab1
-----
--19
--91
--28
--85
-9
--51
-
-query I rowsort
-SELECT ALL + col1 * - - col1 FROM tab0
-----
-1
-441
-6561
-
-query I rowsort
-SELECT ALL - 62 + - - col1 FROM tab2 cor0
-----
--11
-15
-5
-
-query I rowsort
-SELECT col1 FROM tab2 AS cor0 WHERE NULL IS NOT NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 WHERE ( col2 ) * + col0 IS NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT ( 60 >= - 57 )
-----
-
-query I rowsort
-SELECT + 26 - + ( - col0 ) AS col2 FROM tab2 cor0 WHERE NOT col0 IS NULL
-----
-101
-72
-90
-
-query IIIIII rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 CROSS JOIN tab0 AS cor1 WHERE NOT ( NULL ) IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT col1 * + - 38 + - col2 AS col2 FROM tab1 AS cor0
-----
--1854
--249
--628
-
-query I rowsort
-SELECT - 21 * + 1 FROM tab1 cor0
-----
--21
--21
--21
-
-query I rowsort
-SELECT col1 * + - 31 * + 21 * + col2 * + col0 + col0 AS col1 FROM tab1 AS cor0
-----
--16323740
--189334145
--44622093
-
-query II rowsort
-SELECT ALL col0, 17 FROM tab2 AS cor0
-----
-46
-17
-64
-17
-75
-17
-
-query I rowsort
-SELECT + col2 * - - 37 FROM tab2
-----
-1480
-2146
-851
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT NULL NOT BETWEEN + - col1 AND - col0 * col1 + 81 + col0 / - col1
-----
-
-query I rowsort
-SELECT + col1 AS col0 FROM tab2 WHERE NOT - 97 / + + col2 - + col1 > NULL
-----
-
-query I rowsort
-SELECT ALL - - col0 FROM tab1 WHERE NOT NULL BETWEEN - 3 * - col0 + - - ( - + 93 ) AND - + col0
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE + col1 / + col2 * col0 IS NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT ( - 35 IS NOT NULL )
-----
-
-query IIIIII rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 CROSS JOIN tab2 AS cor1 WHERE NOT 89 IS NULL
-----
-54 values hashing to c419dc2a653bccd84f7a2da103315187
-
-query II rowsort
-SELECT ALL - col1 AS col1, 39 FROM tab2
-----
--51
-39
--67
-39
--77
-39
-
-query I rowsort
-SELECT - + 40 + - + 76 AS col2 FROM tab2 AS cor0
-----
--116
--116
--116
-
-query I rowsort
-SELECT 80 + 65 FROM tab1 AS cor0
-----
-145
-145
-145
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE - col2 = - ( - - col1 )
-----
-
-query I rowsort
-SELECT ALL - 61 + col2 AS col1 FROM tab2
-----
--21
--3
--38
-
-query I rowsort
-SELECT + col1 * + 49 AS col1 FROM tab1
-----
-2303
-245
-686
-
-query I rowsort
-SELECT + 68 * - 66 * - - col2 AS col0 FROM tab0
-----
--210936
--444312
--44880
-
-query II rowsort
-SELECT DISTINCT 94, + col2 FROM tab0
-----
-94
-10
-94
-47
-94
-99
-
-query I rowsort
-SELECT ALL + 22 FROM tab0 WHERE - + col0 IS NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT ( ( NOT NULL IS NOT NULL ) )
-----
-
-query II rowsort
-SELECT - + 18 AS col0, - col1 AS col0 FROM tab1 AS cor0
-----
--18
--14
--18
--47
--18
--5
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE col0 = 84
-----
-
-query II rowsort
-SELECT - col0 AS col0, 81 * + + col0 AS col0 FROM tab1 AS cor0
-----
--51
-4131
--85
-6885
--91
-7371
-
-query II rowsort
-SELECT col1, col0 FROM tab1 AS cor0
-----
-14
-51
-47
-91
-5
-85
-
-query I rowsort
-SELECT - + 71 AS col2 FROM ( tab1 AS cor0 CROSS JOIN tab2 AS cor1 )
-----
-9 values hashing to e72f95c346714d3065a96d67a6fd5062
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT + ( + ( - - col0 ) ) BETWEEN NULL AND NULL
-----
-
-query I rowsort
-SELECT - col1 + + - col1 FROM tab0 AS cor0
-----
--162
--2
--42
-
-query I rowsort
-SELECT col0 * + 45 * col1 + - col1 FROM tab2 AS cor0
-----
-105519
-221683
-226058
-
-query I rowsort
-SELECT DISTINCT ( - 84 ) + col0 FROM tab1 AS cor0
-----
--33
-1
-7
-
-query I rowsort
-SELECT ALL - 21 + - 85 AS col0 FROM tab1
-----
--106
--106
--106
-
-query I rowsort
-SELECT ALL 2 + + + col0 * - - col0 FROM tab2 AS cor0
-----
-2118
-4098
-5627
-
-query I rowsort
-SELECT DISTINCT - 54 * - 28 - 14 * - - col0 * col1 * - + col0 FROM tab2 AS cor0
-----
-1512336
-4417000
-5277762
-
-query I rowsort
-SELECT ALL ( + 70 ) AS col0 FROM tab1 AS cor0 WHERE NOT + 50 * + + col0 IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT - + col1 + - - col0 FROM tab2 AS cor0
-----
--13
--5
-8
-
-query II rowsort
-SELECT ALL - col1 - - col0 + + + 74 + + - col1 AS col1, ( + col2 ) AS col1 FROM tab1 AS cor0
-----
-149
-59
-71
-68
-97
-96
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT NULL IN ( - 17 )
-----
-
-query I rowsort
-SELECT col1 AS col2 FROM tab1 WHERE NOT NULL IS NOT NULL
-----
-14
-47
-5
-
-query I rowsort
-SELECT ALL ( + - col1 ) * - col2 AS col1 FROM tab0
-----
-210
-3807
-99
-
-query I rowsort
-SELECT ALL + col0 AS col1 FROM tab2 WHERE NULL <= NULL
-----
-
-query I rowsort
-SELECT - 68 AS col2 FROM tab2 WHERE NOT + + col0 IS NOT NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT NULL BETWEEN - ( - 16 ) AND 85
-----
-
-query I rowsort
-SELECT DISTINCT - + ( - ( + 56 ) ) FROM tab0 cor0
-----
-56
-
-query I rowsort
-SELECT DISTINCT - 7 FROM tab2 AS cor0 WHERE NOT NULL IS NULL
-----
-
-query II rowsort
-SELECT col0 AS col0, - 1 FROM tab2
-----
-46
--1
-64
--1
-75
--1
-
-query I rowsort
-SELECT - - col2 FROM tab0 WHERE NOT ( NOT col0 IS NOT NULL )
-----
-10
-47
-99
-
-query I rowsort
-SELECT DISTINCT + + 26 AS col1 FROM tab0 AS cor0 WHERE - col0 * + + col2 / - 93 IS NULL
-----
-
-query II rowsort
-SELECT + - 29 AS col2, col0 - 37 FROM tab1 AS cor0
-----
--29
-14
--29
-48
--29
-54
-
-query I rowsort
-SELECT - 29 * + col2 + - 58 * + + 79 FROM tab0 cor0
-----
--4872
--5945
--7453
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NOT NULL <> ( NULL )
-----
-
-query I rowsort
-SELECT - 30 + + 28 * + - 3 - - col1 AS col0 FROM tab2
-----
--37
--47
--63
-
-query I rowsort
-SELECT ALL 16 * + col0 AS col0 FROM tab1
-----
-1360
-1456
-816
-
-query I rowsort
-SELECT ALL col0 + col2 * - - 92 FROM tab1 AS cor0
-----
-5513
-6347
-8883
-
-query I rowsort
-SELECT DISTINCT - 45 + - + 22 AS col1 FROM tab0 AS cor0
-----
--67
-
-query I rowsort
-SELECT ALL - + col1 + - + col1 AS col1 FROM tab2 AS cor0
-----
--102
--134
--154
-
-query I rowsort
-SELECT ALL - ( 54 ) - + col2 FROM tab1 AS cor0
-----
--113
--122
--150
-
-query I rowsort
-SELECT ALL col1 + + 21 FROM tab0 AS cor0 WHERE ( NULL ) IN ( col0 )
-----
-
-query I rowsort
-SELECT col1 + + + col2 * col1 AS col1 FROM tab1 AS cor0
-----
-1358
-300
-3243
-
-query I rowsort
-SELECT ALL + + col0 * + col2 + + + col1 + + + 44 + col1 AS col0 FROM tab1 AS cor0 WHERE ( NULL ) BETWEEN NULL AND NULL
-----
-
-query I rowsort
-SELECT ALL + col2 * + - col0 + - 82 FROM tab2 AS cor0
-----
--1140
--2642
--4432
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NOT - 11 * + 52 + col0 IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT - ( col2 ) NOT BETWEEN - col2 - + col1 AND + col0
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT ALL - - ( + - col1 ) AS col2 FROM tab2 AS cor0
-----
--51
--67
--77
-
-query I rowsort
-SELECT ALL 90 AS col1 FROM tab2, tab2 cor0
-----
-9 values hashing to 96f7a90428db93f472e0d219bab64853
-
-query I rowsort
-SELECT col2 AS col0 FROM tab1 WHERE NOT ( NULL ) IS NULL
-----
-
-query I rowsort
-SELECT ( - 77 ) * + col2 * col1 * - - col1 AS col1 FROM tab0
-----
--23744259
--339570
--7623
-
-query I rowsort
-SELECT + 95 AS col1 FROM tab1 cor0
-----
-95
-95
-95
-
-query I rowsort
-SELECT DISTINCT + - 24 AS col0 FROM tab0 AS cor0 CROSS JOIN tab1 AS cor1
-----
--24
-
-query I rowsort
-SELECT DISTINCT + col1 + + ( + - ( col2 ) ) AS col1 FROM tab1 AS cor0
-----
--21
--54
--82
-
-query I rowsort
-SELECT + 47 * - col0 * + + col2 AS col2 FROM tab0
-----
--33135
--40890
--451341
-
-query I rowsort
-SELECT col2 * + + col1 - col0 FROM tab0
-----
-123
-2
-3792
-
-query II rowsort
-SELECT ALL 52, col2 FROM tab1
-----
-52
-59
-52
-68
-52
-96
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NULL > - col1
-----
-
-query II rowsort
-SELECT DISTINCT + - 87, 29 AS col0 FROM tab0 AS cor0
-----
--87
-29
-
-query I rowsort
-SELECT 31 + - 19 * + col1 FROM tab0
-----
--1508
--368
-12
-
-query I rowsort
-SELECT - + 51 - 97 AS col2 FROM tab1 AS cor0 CROSS JOIN tab0 cor1
-----
-9 values hashing to de37b7db44227c1a24c6d1a028375050
-
-query I rowsort
-SELECT ALL - col0 * + + 78 FROM tab1 AS cor0
-----
--3978
--6630
--7098
-
-query I rowsort
-SELECT col1 + col2 AS col1 FROM tab1 AS cor0 WHERE NOT 25 + 13 <> + + col1 / - col1 + + - 13 / + col1 * + 13 + - 40
-----
-
-query I rowsort
-SELECT ALL - col1 * + 45 + - + col1 + - 88 AS col1 FROM tab0 AS cor0
-----
--1054
--134
--3814
-
-query I rowsort
-SELECT ALL - + ( + ( + col0 ) ) * + - ( 53 ) + - col1 AS col1 FROM tab2 AS cor0
-----
-2387
-3315
-3908
-
-query I rowsort
-SELECT DISTINCT - - 21 FROM tab2 cor0
-----
-21
-
-query I rowsort
-SELECT - col2 AS col2 FROM tab0 AS cor0 WHERE NOT col1 * + col1 NOT BETWEEN + 2 * - col1 AND + - col0 * + + col1
-----
-
-query II rowsort
-SELECT + col2, + ( + - 23 ) * col2 FROM tab1 AS cor0 WHERE NOT NULL IS NULL
-----
-
-query I rowsort
-SELECT - col0 * + - col1 FROM tab1 cor0
-----
-425
-4277
-714
-
-query I rowsort
-SELECT ALL - AVG ( + 7 ) AS col0 FROM tab1 AS cor0 WHERE NOT - col1 IS NOT NULL
-----
-NULL
-
-query II rowsort
-SELECT - col1 AS col1, - 84 FROM tab1
-----
--14
--84
--47
--84
--5
--84
-
-query I rowsort
-SELECT ALL + col0 * - 32 AS col1 FROM tab1
-----
--1632
--2720
--2912
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT col1 > 17
-----
-
-query I rowsort
-SELECT ALL - col0 FROM tab0 AS cor0 WHERE NOT - 98 <= 12 * + + col0
-----
-
-query I rowsort
-SELECT + 12 AS col1 FROM tab1 cor0
-----
-12
-12
-12
-
-query I rowsort
-SELECT ( - + col0 ) AS col0 FROM tab1
-----
--51
--85
--91
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 cor0 WHERE col0 * + - 71 IS NULL
-----
-
-query I rowsort
-SELECT - 56 FROM tab1 AS cor0 WHERE - col0 IS NULL
-----
-
-query I rowsort
-SELECT col1 + - - col2 * + + 16 AS col2 FROM tab1 AS cor0
-----
-1135
-1550
-949
-
-query I rowsort
-SELECT DISTINCT + - col0 + + - 74 AS col1 FROM tab1 AS cor0
-----
--125
--159
--165
-
-query I rowsort
-SELECT DISTINCT + col0 * + col0 + col0 + + + col1 + - 48 AS col2 FROM tab1 AS cor0
-----
-2618
-7267
-8371
-
-query I rowsort
-SELECT DISTINCT + + 0 FROM tab2 cor0
-----
-0
-
-query I rowsort
-SELECT ALL - col2 * - col2 * - col2 - col2 + col0 AS col2 FROM tab0 AS cor0
-----
--103855
--923
--970301
-
-query II rowsort
-SELECT col1 + col1 AS col0, + ( - col0 ) AS col1 FROM tab1 AS cor0
-----
-10
--85
-28
--51
-94
--91
-
-query I rowsort
-SELECT DISTINCT - col1 + + 83 + - + 71 AS col1 FROM tab2 AS cor0
-----
--39
--55
--65
-
-query I rowsort
-SELECT ( - + 55 ) + + - col0 + + col1 * ( - - col2 ) + + - ( - ( col0 ) ) AS col1 FROM tab1
-----
-1289
-240
-3141
-
-query I rowsort
-SELECT ALL - col0 AS col2 FROM tab1 WHERE NOT + 83 IS NULL
-----
--51
--85
--91
-
-query I rowsort
-SELECT ALL 42 AS col2 FROM tab1, tab1 AS cor0
-----
-9 values hashing to 64c29db9f1cd7ed4ddeb1735e3e0d442
-
-query I rowsort
-SELECT DISTINCT + 97 FROM tab0, tab1 AS cor0
-----
-97
-
-query III rowsort
-SELECT * FROM tab0 WHERE ( NOT ( NOT ( NOT - col1 IS NULL ) ) )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT + + ( col1 ) * - + col1 FROM tab1 AS cor0
-----
--196
--2209
--25
-
-query II rowsort
-SELECT DISTINCT + + col0 - + 73 + - col2, + col0 AS col2 FROM tab1 AS cor0
-----
--118
-51
--47
-85
--50
-91
-
-query II rowsort
-SELECT + col2 - - 62 - + - col2, + col1 AS col0 FROM tab0 AS cor0
-----
-156
-81
-260
-1
-82
-21
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE ( NULL ) BETWEEN + + ( - + col0 ) * + 84 + - col1 AND + 22
-----
-
-query II rowsort
-SELECT col2, col1 + 85 AS col0 FROM tab2
-----
-23
-136
-40
-162
-58
-152
-
-query I rowsort
-SELECT + + col1 * + ( 68 ) AS col2 FROM tab2 AS cor0
-----
-3468
-4556
-5236
-
-query II rowsort
-SELECT ALL - + col0, col0 * - col0 + - - col2 AS col1 FROM tab2 AS cor0
-----
--46
--2093
--64
--4056
--75
--5567
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE + 11 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT col0 + - col1 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT + + 76 + col2 * + - col2 FROM tab1 AS cor0
-----
--3405
--4548
--9140
-
-query I rowsort
-SELECT DISTINCT - 36 FROM tab0 AS cor0 WHERE col2 <= NULL
-----
-
-query I rowsort
-SELECT 32 + - col0 FROM tab2
-----
--14
--32
--43
-
-query I rowsort
-SELECT DISTINCT 47 + col2 AS col2 FROM tab1
-----
-106
-115
-143
-
-query I rowsort
-SELECT DISTINCT - 73 * col1 AS col0 FROM tab1 AS cor0
-----
--1022
--3431
--365
-
-query I rowsort
-SELECT col0 FROM tab0 AS cor0 WHERE ( NULL ) IS NULL
-----
-15
-87
-97
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE ( col2 ) IS NULL
-----
-
-query I rowsort
-SELECT + 96 * + col1 * col0 FROM tab1 AS cor0
-----
-40800
-410592
-68544
-
-query I rowsort
-SELECT ALL + 45 * - 56 AS col2 FROM tab0 AS cor0
-----
--2520
--2520
--2520
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE - col0 - - + 60 / - + col0 >= + + col0
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE + 22 < + ( - col0 ) * - + col0
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT + 1 + col2 + - col2 FROM tab1
-----
-1
-1
-1
-
-query I rowsort
-SELECT DISTINCT 8 AS col1 FROM tab2
-----
-8
-
-query I rowsort
-SELECT DISTINCT - + 27 FROM tab2 cor0
-----
--27
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT 31 IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT 31 FROM tab1 AS cor0 WHERE NULL IS NULL
-----
-31
-
-query II rowsort
-SELECT ALL 40 AS col1, 77 FROM tab0
-----
-40
-77
-40
-77
-40
-77
-
-query I rowsort
-SELECT DISTINCT col0 * + 44 * + col1 AS col2 FROM tab2 AS cor0 WHERE NOT + 37 IS NOT NULL
-----
-
-query II rowsort
-SELECT - 60, col0 AS col2 FROM tab2 AS cor0
-----
--60
-46
--60
-64
--60
-75
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NOT + 67 IS NOT NULL
-----
-
-query II rowsort
-SELECT col1 AS col2, col0 + + + ( - + col0 ) AS col1 FROM tab1 AS cor0
-----
-14
-0
-47
-0
-5
-0
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT NULL NOT IN ( col2 * + - 52 )
-----
-
-query II rowsort
-SELECT DISTINCT - col2 AS col0, - col2 * - col1 FROM tab0
-----
--10
-210
--47
-3807
--99
-99
-
-query I rowsort
-SELECT 56 AS col1 FROM tab2 WHERE NOT NULL IS NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT + + 41 IN ( - + 12 * - 40, 13, + ( 33 ) + - col0 )
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT + - 19 AS col0 FROM tab2 WHERE - - col0 <> NULL
-----
-
-query I rowsort
-SELECT DISTINCT + 98 * + col1 FROM tab0
-----
-2058
-7938
-98
-
-query I rowsort
-SELECT + + col2 FROM tab1 AS cor0 WHERE + col2 + col1 IS NOT NULL
-----
-59
-68
-96
-
-query II rowsort
-SELECT + - col1 * + 9 + - + 97, col0 FROM tab0 AS cor0
-----
--106
-97
--286
-87
--826
-15
-
-query I rowsort
-SELECT 69 + + - 69 AS col1 FROM tab0 AS cor0
-----
-0
-0
-0
-
-query I rowsort
-SELECT - - col0 + - col0 * 19 FROM tab1 AS cor0
-----
--1530
--1638
--918
-
-query I rowsort
-SELECT ALL 78 * + - col1 + 18 AS col2 FROM tab1
-----
--1074
--3648
--372
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT - col0 * + 40 - - 70 <> NULL
-----
-
-query I rowsort
-SELECT DISTINCT 49 - + 79 AS col0 FROM tab2
-----
--30
-
-query I rowsort
-SELECT DISTINCT + + 30 AS col1 FROM tab1 WHERE NOT - - col0 + 65 BETWEEN NULL AND - col1
-----
-30
-
-query I rowsort
-SELECT - 31 AS col2 FROM tab1 AS cor0 CROSS JOIN tab1 AS cor1
-----
-9 values hashing to f4b05206ee2fc0cf8007d9c3514885fa
-
-query II rowsort
-SELECT DISTINCT ( + + col0 ) AS col2, 63 FROM tab1
-----
-51
-63
-85
-63
-91
-63
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT col1 * 3 * 71 * - col0 IS NOT NULL
-----
-
-query I rowsort
-SELECT + ( + 74 ) FROM tab1
-----
-74
-74
-74
-
-query II rowsort
-SELECT - col0 AS col1, - col2 AS col0 FROM tab0
-----
--15
--47
--87
--10
--97
--99
-
-query I rowsort
-SELECT col1 * ( + ( 0 ) ) * ( + 31 ) FROM tab1
-----
-0
-0
-0
-
-query II rowsort
-SELECT + 82 AS col2, + col2 * + col1 + - col2 FROM tab2 AS cor0
-----
-82
-1150
-82
-3040
-82
-3828
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE NOT ( NOT NULL <> - col2 )
-----
-
-query I rowsort
-SELECT DISTINCT + + 82 + - 59 + + - ( + col0 ) FROM tab2 cor0
-----
--23
--41
--52
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT - col1 + + ( col2 ) - - col0 IS NOT NULL OR NULL IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT + 21 + + 34 + + + col2 FROM tab0
-----
-102
-154
-65
-
-query I rowsort
-SELECT DISTINCT col1 + 20 + 78 AS col1 FROM tab0 cor0
-----
-119
-179
-99
-
-query I rowsort
-SELECT + + 88 FROM tab2 WHERE NULL IS NULL
-----
-88
-88
-88
-
-query I rowsort
-SELECT - col1 + col2 + + - 21 AS col0 FROM tab2
-----
--30
--49
--58
-
-query I rowsort
-SELECT DISTINCT + ( + - col0 ) * + col1 * - + col0 AS col1 FROM tab1
-----
-36125
-36414
-389207
-
-query III rowsort
-SELECT DISTINCT + + 27 * 59, col0 * - + col0 + - col0 AS col0, - 81 + + col0 + ( + col2 ) + + 46 AS col2 FROM tab0 cor0
-----
-9 values hashing to ba96b1e2f6734a2901e8f7ccc2e854e8
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NOT col2 >= + col2
-----
-
-query I rowsort
-SELECT - ( - + col0 ) AS col0 FROM tab0 AS cor0 WHERE NOT NULL IS NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT + - ( - + col2 ) NOT BETWEEN NULL AND NULL
-----
-
-query I rowsort
-SELECT col0 + + + col1 + + 9 AS col1 FROM tab0
-----
-105
-107
-117
-
-query I rowsort
-SELECT - col1 + - + 7 FROM tab1 cor0
-----
--12
--21
--54
-
-query I rowsort
-SELECT 92 * - col2 + col0 + + + 63 FROM tab1 AS cor0
-----
--5280
--6102
--8718
-
-query I rowsort
-SELECT + col1 + + - col0 * - + col1 AS col0 FROM tab2 AS cor0
-----
-2397
-5005
-5092
-
-query I rowsort
-SELECT col2 + - 31 AS col2 FROM tab0 AS cor0
-----
--21
-16
-68
-
-query III rowsort
-SELECT ALL * FROM tab0 cor0 WHERE NOT NULL >= 50
-----
-
-query I rowsort
-SELECT DISTINCT - col1 + 49 FROM tab2 AS cor0
-----
--18
--2
--28
-
-query I rowsort
-SELECT DISTINCT - + 59 - - 11 FROM tab1 AS cor0
-----
--48
-
-query I rowsort
-SELECT - col1 AS col0 FROM tab0 AS cor0 WHERE ( NULL ) IS NULL
-----
--1
--21
--81
-
-query II rowsort
-SELECT DISTINCT col1, - col2 + + col0 AS col0 FROM tab0
-----
-1
--2
-21
-77
-81
--32
-
-query II rowsort
-SELECT 28 AS col1, col1 AS col1 FROM tab2
-----
-28
-51
-28
-67
-28
-77
-
-query I rowsort
-SELECT ALL 38 * + + col1 * col0 FROM tab2
-----
-187264
-190950
-89148
-
-query I rowsort
-SELECT DISTINCT col2 * + - col1 FROM tab1 AS cor0
-----
--1344
--295
--3196
-
-query I rowsort
-SELECT - + ( + col1 ) * - - col1 FROM tab2 AS cor0
-----
--2601
--4489
--5929
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT - 37 / - 45 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT NULL < - + col0
-----
-
-query I rowsort
-SELECT DISTINCT + col1 * + 93 + - col2 FROM tab0 AS cor0
-----
--6
-1943
-7486
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE NOT ( + 68 ) > ( NULL )
-----
-
-query I rowsort
-SELECT DISTINCT + 23 AS col0 FROM tab2 AS cor0 WHERE NULL >= col2
-----
-
-query I rowsort
-SELECT DISTINCT - col2 + + + 83 FROM tab1 AS cor0
-----
--13
-15
-24
-
-query I rowsort
-SELECT ALL + - col0 + - col2 * + - col0 * + col2 FROM tab1 AS cor0
-----
-295800
-420693
-469965
-
-query I rowsort
-SELECT DISTINCT 41 * - 64 FROM tab0
-----
--2624
-
-query I rowsort
-SELECT ALL - col0 + + col0 + - col2 + + 94 * - col2 * - col1 FROM tab1 AS cor0
-----
-126240
-27671
-300356
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE + 57 IS NOT NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT * FROM tab1 WHERE ( - col0 ) IN ( + 36 )
-----
-
-query I rowsort
-SELECT col0 * + 64 FROM tab1
-----
-3264
-5440
-5824
-
-query I rowsort
-SELECT ALL + col2 AS col0 FROM tab0 WHERE NOT NULL > ( ( 87 ) / col2 )
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE NOT ( + col0 ) NOT BETWEEN NULL AND col1
-----
-
-query I rowsort
-SELECT - col0 * + col2 AS col0 FROM tab0 WHERE 96 IS NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE col1 * + col2 IS NOT NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT col0 * + 44 + 8 FROM tab1
-----
-2252
-3748
-4012
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE + 25 + col0 = col0 + - 11 * col1
-----
-
-query I rowsort
-SELECT + 22 + + 72 FROM tab2
-----
-94
-94
-94
-
-query I rowsort
-SELECT ALL col0 * col2 + 77 AS col0 FROM tab2
-----
-1135
-2637
-4427
-
-query I rowsort
-SELECT + col1 AS col2 FROM tab1 WHERE NOT ( col1 ) + + col1 * col2 IN ( + col2 )
-----
-14
-47
-5
-
-query I rowsort
-SELECT - ( - col1 ) AS col0 FROM tab1 WHERE NULL NOT BETWEEN col1 + + ( col1 ) AND NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE NOT col1 / - col1 - col2 * - col0 IS NOT NULL
-----
-
-query I rowsort
-SELECT ALL + 85 * 58 + + ( 31 ) AS col2 FROM tab0
-----
-4961
-4961
-4961
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT NULL <> ( col2 - 26 )
-----
-
-query I rowsort
-SELECT DISTINCT - col1 * + col0 + + col0 AS col1 FROM tab0
-----
--1200
--1740
-0
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT ( 29 ) NOT BETWEEN col2 * + 1 AND NULL
-----
-
-query I rowsort
-SELECT ALL col0 + col1 FROM tab0 AS cor0 WHERE ( NULL ) IS NULL
-----
-108
-96
-98
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT - col1 IN ( + 30 )
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT ALL + 84 + + 52 AS col0 FROM tab2 AS cor0 CROSS JOIN tab1
-----
-9 values hashing to 241ddcc97f622e1fcc14bd3c6a5bb6f4
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT col0 + col1 IN ( + col1 )
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT + - 91 AS col0 FROM tab2 AS cor0
-----
--91
--91
--91
-
-query I rowsort
-SELECT ALL 84 * - col1 FROM tab1 AS cor0
-----
--1176
--3948
--420
-
-query I rowsort
-SELECT - col1 * + 24 + col2 AS col0 FROM tab0 AS cor0
-----
--1897
--494
-75
-
-query I rowsort
-SELECT + 63 + 78 * - col2 AS col2 FROM tab0 AS cor0
-----
--3603
--717
--7659
-
-query I rowsort
-SELECT - + 87 + col1 AS col0 FROM tab2 AS cor0
-----
--10
--20
--36
-
-query I rowsort
-SELECT DISTINCT + ( col1 ) * - ( + 36 ) + - 88 AS col1 FROM tab2 AS cor0 WHERE NULL > NULL
-----
-
-query I rowsort
-SELECT col1 AS col0 FROM tab2 cor0 WHERE 51 <> ( NULL )
-----
-
-query I rowsort
-SELECT ALL col1 + - 10 FROM tab1 AS cor0
-----
--5
-37
-4
-
-query I rowsort
-SELECT ALL 78 FROM tab1 WHERE 61 <= ( NULL )
-----
-
-query I rowsort
-SELECT col0 + 19 AS col2 FROM tab0 WHERE + col0 IN ( col1 )
-----
-
-query I rowsort
-SELECT ALL + ( col2 ) AS col2 FROM tab2 WHERE NOT NULL IS NOT NULL
-----
-23
-40
-58
-
-query III rowsort
-SELECT * FROM tab0 WHERE - col0 < ( NULL )
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT ( - col0 ) BETWEEN NULL AND NULL
-----
-
-query I rowsort
-SELECT col2 + - 33 FROM tab0
-----
--23
-14
-66
-
-query I rowsort
-SELECT ALL - 75 * - col0 FROM tab0 WHERE NULL IS NOT NULL
-----
-
-query I rowsort
-SELECT ALL + 30 * ( col2 ) + - 65 AS col0 FROM tab0
-----
-1345
-235
-2905
-
-query I rowsort
-SELECT DISTINCT + 88 * col2 FROM tab0 AS cor0 WHERE + col1 * + 14 >= NULL
-----
-
-query I rowsort
-SELECT DISTINCT - 69 FROM ( tab0 cor0 CROSS JOIN tab1 cor1 )
-----
--69
-
-query I rowsort
-SELECT col0 * - + col1 FROM tab1 AS cor0
-----
--425
--4277
--714
-
-query I rowsort
-SELECT 51 * - 80 - + 62 AS col1 FROM tab0 cor0
-----
--4142
--4142
--4142
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 cor0 WHERE NOT NULL <= NULL
-----
-
-query I rowsort
-SELECT col1 + 93 * - col1 AS col1 FROM tab2 AS cor0 WHERE NOT ( NULL ) <= - col0 + 62
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 cor0 WHERE NOT NULL > ( + 20 )
-----
-
-query I rowsort
-SELECT ALL - col2 * - - col1 AS col0 FROM tab0 AS cor0
-----
--210
--3807
--99
-
-query I rowsort
-SELECT col2 FROM tab0 WHERE NOT - ( - col1 ) < - 83 * col0
-----
-10
-47
-99
-
-query I rowsort
-SELECT - 33 FROM tab0 WHERE NOT ( 99 ) NOT IN ( col0 )
-----
-
-query I rowsort
-SELECT + 35 FROM tab1 cor0
-----
-35
-35
-35
-
-query I rowsort
-SELECT 8 / col0 FROM tab1 AS cor0 WHERE NOT NULL > ( + 74 + - col2 )
-----
-
-query I rowsort
-SELECT DISTINCT + - col0 FROM tab0 AS cor0 WHERE - col1 * col2 IS NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 cor0 WHERE ( NULL ) NOT BETWEEN ( NULL ) AND + ( + - col1 ) - - ( col0 )
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT ( - + 49 IS NOT NULL )
-----
-
-query II rowsort
-SELECT DISTINCT 5 AS col0, - col1 * + col2 + + + col0 FROM tab2
-----
-5
--1127
-5
--3016
-5
--3811
-
-query I rowsort
-SELECT 15 + - col1 AS col1 FROM tab2
-----
--36
--52
--62
-
-query I rowsort
-SELECT 53 AS col2 FROM tab1 AS cor0 WHERE col1 * col1 * - + col0 <= ( NULL )
-----
-
-query I rowsort
-SELECT DISTINCT - + ( + 84 ) FROM tab0 AS cor0 WHERE NULL = + col0
-----
-
-query II rowsort
-SELECT + col1 AS col0, - col1 + col2 AS col2 FROM tab2 AS cor0
-----
-51
--28
-67
--9
-77
--37
-
-query I rowsort
-SELECT 15 AS col0 FROM tab1 WHERE NULL NOT BETWEEN NULL AND + - col1
-----
-
-query I rowsort
-SELECT DISTINCT 36 * + col1 FROM tab0
-----
-2916
-36
-756
-
-query I rowsort
-SELECT + ( + 16 ) - + 80 + + + col2 FROM tab2
-----
--24
--41
--6
-
-query I rowsort
-SELECT ALL - col0 * ( col0 ) FROM tab0
-----
--225
--7569
--9409
-
-query II rowsort
-SELECT ALL - 40 AS col2, + col0 AS col2 FROM tab1
-----
--40
-51
--40
-85
--40
-91
-
-query III rowsort
-SELECT * FROM tab1 WHERE ( NOT ( NOT ( NULL <= 23 + col1 ) ) )
-----
-
-query I rowsort
-SELECT ALL col1 * + + ( - 14 ) * + 28 + - 22 FROM tab0
-----
--31774
--414
--8254
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE col0 * + - ( 64 ) > NULL
-----
-
-query I rowsort
-SELECT ALL + col2 + + - 39 + - 82 FROM tab2 AS cor0
-----
--63
--81
--98
-
-query I rowsort
-SELECT ALL - ( 10 ) FROM tab2 AS cor0 WHERE NOT + col0 <= col2
-----
--10
--10
--10
-
-query III rowsort
-SELECT * FROM tab1 cor0 WHERE NOT NULL < col2 * + ( + 71 )
-----
-
-query I rowsort
-SELECT + 74 * col1 FROM tab1
-----
-1036
-3478
-370
-
-query II rowsort
-SELECT col2 AS col0, col1 * - col1 FROM tab2
-----
-23
--2601
-40
--5929
-58
--4489
-
-query II rowsort
-SELECT + 59, - 16 AS col0 FROM tab0
-----
-59
--16
-59
--16
-59
--16
-
-query II rowsort
-SELECT DISTINCT col2 AS col2, 29 AS col1 FROM tab1
-----
-59
-29
-68
-29
-96
-29
-
-query I rowsort
-SELECT DISTINCT + col0 AS col2 FROM tab0 AS cor0 WHERE NOT col0 IS NULL
-----
-15
-87
-97
-
-query I rowsort
-SELECT DISTINCT - - 55 FROM tab2 AS cor0 CROSS JOIN tab1 AS cor1
-----
-55
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT ( NULL ) IN ( - 96 )
-----
-
-query I rowsort
-SELECT ALL + - ( + + col2 ) AS col1 FROM tab1 AS cor0
-----
--59
--68
--96
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE - col2 * - - 24 + - - col1 / - + 77 IS NULL
-----
-
-query I rowsort
-SELECT ALL - 42 + - + col2 * 15 AS col2 FROM tab0 AS cor0
-----
--1527
--192
--747
-
-query I rowsort
-SELECT DISTINCT - - ( - 19 ) + col1 FROM tab1 AS cor0
-----
--14
--5
-28
-
-query I rowsort
-SELECT ALL + 31 AS col0 FROM tab1 cor0 WHERE NULL IS NOT NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT 76 IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE col1 * + col1 BETWEEN ( NULL ) AND ( - + col0 )
-----
-
-query I rowsort
-SELECT - col1 + - ( col0 ) FROM tab2
-----
--141
--142
--97
-
-query I rowsort
-SELECT DISTINCT col0 - + - 84 AS col2 FROM tab2
-----
-130
-148
-159
-
-query III rowsort
-SELECT * FROM tab2 WHERE + + 99 * - ( - 74 ) IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT ( - + col2 ) FROM tab2
-----
--23
--40
--58
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NOT ( 73 + - col0 IS NOT NULL )
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE ( ( + col0 IS NOT NULL ) )
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query II rowsort
-SELECT 17 AS col0, col1 + + - col0 AS col1 FROM tab1
-----
-17
--37
-17
--44
-17
--80
-
-query I rowsort
-SELECT - col0 * col1 * 71 FROM tab1 AS cor0
-----
--30175
--303667
--50694
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT 90 * 70 IS NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT + col1 * + 33 FROM tab2
-----
-1683
-2211
-2541
-
-query I rowsort
-SELECT ALL 17 AS col0 FROM tab0, tab1 AS cor0
-----
-9 values hashing to 43298e43365fccb5146ea32003753c92
-
-query II rowsort
-SELECT + ( + 74 ) AS col1, col2 AS col0 FROM tab0
-----
-74
-10
-74
-47
-74
-99
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT + col2 = NULL
-----
-
-query I rowsort
-SELECT ALL + + 97 + - col1 * col0 AS col0 FROM tab1 AS cor0
-----
--328
--4180
--617
-
-query I rowsort
-SELECT 5 AS col2 FROM tab2 AS cor0 WHERE NULL BETWEEN NULL AND NULL
-----
-
-query I rowsort
-SELECT DISTINCT + - col0 + - 46 FROM tab1 AS cor0
-----
--131
--137
--97
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE NULL >= + ( - col0 ) + + col2
-----
-
-query I rowsort
-SELECT ( + ( - col1 ) ) AS col1 FROM tab0 AS cor0 WHERE NULL IS NULL
-----
--1
--21
--81
-
-query III rowsort
-SELECT * FROM tab0 AS cor0 WHERE col2 / - col1 IS NOT NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT DISTINCT - - ( - col0 ) - - col0 * + col2 AS col1 FROM tab1 AS cor0
-----
-4845
-4930
-6097
-
-query I rowsort
-SELECT DISTINCT + col1 + ( + - 78 ) AS col1 FROM tab0
-----
--57
--77
-3
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE - + 86 IS NULL
-----
-
-query I rowsort
-SELECT ALL 29 - - 51 * - col1 * col1 * - 61 * + col2 AS col1 FROM tab0
-----
-13719539
-308018
-959329766
-
-query III rowsort
-SELECT * FROM tab2 cor0 WHERE NOT + col0 + 15 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT 88 * - 82 AS col0 FROM tab0
-----
--7216
--7216
--7216
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT NULL > - + col2 + col1
-----
-
-query I rowsort
-SELECT + 31 AS col1 FROM tab1 AS cor0 CROSS JOIN tab1 AS cor1
-----
-9 values hashing to d1ebd1cea4a9773069af34fbf8ea3540
-
-query I rowsort
-SELECT ALL - + 78 AS col0 FROM tab0 AS cor0
-----
--78
--78
--78
-
-query II rowsort
-SELECT ALL col1 AS col2, - col1 AS col2 FROM tab2
-----
-51
--51
-67
--67
-77
--77
-
-query I rowsort
-SELECT col2 + + 31 * - - col1 * - col0 AS col2 FROM tab2
-----
--152728
--155717
--72703
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT - col1 + + ( col1 ) + col2 IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT + 35 FROM tab0 WHERE - col0 IS NOT NULL AND NOT - 78 + - col0 IS NULL
-----
-35
-35
-35
-
-query I rowsort
-SELECT DISTINCT - col1 FROM tab2 WHERE NULL IS NULL
-----
--51
--67
--77
-
-query II rowsort
-SELECT - col0 AS col2, - col2 - + col2 FROM tab1 cor0
-----
--51
--192
--85
--118
--91
--136
-
-query II rowsort
-SELECT col0 AS col2, + 20 AS col1 FROM tab2 AS cor0 WHERE NULL < - 55 * 37
-----
-
-query II rowsort
-SELECT DISTINCT 0 AS col2, - 17 FROM tab1 AS cor0 CROSS JOIN tab2 AS cor1
-----
-0
--17
-
-query I rowsort
-SELECT - 38 AS col2 FROM tab2 AS cor0 CROSS JOIN tab2 AS cor1
-----
-9 values hashing to e571541ae40cb0ddaca16e11f4359507
-
-query I rowsort
-SELECT DISTINCT - col0 AS col0 FROM tab1 WHERE ( NULL IS NULL ) OR - col2 * + - 86 IS NOT NULL
-----
--51
--85
--91
-
-query I rowsort
-SELECT + 4 + + - col1 + 25 * + 23 AS col1 FROM tab2 AS cor0
-----
-502
-512
-528
-
-query I rowsort
-SELECT col0 + + + ( + - col1 ) FROM tab0 AS cor0
-----
--66
-66
-96
-
-query I rowsort
-SELECT ALL col2 + - - col0 FROM tab0 AS cor0
-----
-196
-62
-97
-
-query III rowsort
-SELECT ALL * FROM tab2 WHERE NOT + - 41 + - - col0 * - ( + 79 ) * - col0 BETWEEN + ( + 85 ) AND NULL
-----
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT + + ( 39 ) + col2 * col2 <= NULL
-----
-
-query II rowsort
-SELECT 49, - col0 AS col1 FROM tab2
-----
-49
--46
-49
--64
-49
--75
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT NULL NOT BETWEEN + col2 AND - 27 * - col1 + ( - 67 ) / + ( 2 ) + + 58
-----
-
-query I rowsort
-SELECT col1 * + - col0 FROM tab2
-----
--2346
--4928
--5025
-
-query I rowsort
-SELECT DISTINCT - + 11 AS col0 FROM tab2 AS cor0
-----
--11
-
-query I rowsort
-SELECT ALL + 40 FROM tab0 AS cor0 CROSS JOIN tab1 cor1
-----
-9 values hashing to b1e8ffeef334b4a2b01b2f91e649c2d3
-
-query I rowsort
-SELECT - 12 + - + col2 FROM tab0
-----
--111
--22
--59
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE NOT + col1 + - 16 < + col2
-----
-46
-51
-23
-64
-77
-40
-
-query I rowsort
-SELECT DISTINCT + 71 + + col1 FROM tab0 AS cor0
-----
-152
-72
-92
-
-query I rowsort
-SELECT col1 * - 80 AS col0 FROM tab2
-----
--4080
--5360
--6160
-
-query I rowsort
-SELECT DISTINCT + ( - - col1 ) * col0 AS col1 FROM tab2
-----
-2346
-4928
-5025
-
-query I rowsort
-SELECT ALL col0 * - 89 AS col1 FROM tab1
-----
--4539
--7565
--8099
-
-query I rowsort
-SELECT DISTINCT - 25 + - col0 FROM tab1 AS cor0
-----
--110
--116
--76
-
-query II rowsort
-SELECT - 91, col0 AS col0 FROM tab1
-----
--91
-51
--91
-85
--91
-91
-
-query I rowsort
-SELECT ALL - 70 FROM ( tab2 AS cor0 CROSS JOIN tab0 AS cor1 ) WHERE ( + 21 IS NULL )
-----
-
-query I rowsort
-SELECT - col1 * + - 32 AS col0 FROM tab0 cor0 WHERE NOT + col2 >= NULL
-----
-
-query II rowsort
-SELECT ALL + + 41, - col0 AS col2 FROM tab1 AS cor0
-----
-41
--51
-41
--85
-41
--91
-
-query II rowsort
-SELECT ALL - - col2 * 49, - col1 * col1 AS col2 FROM tab0 AS cor0
-----
-2303
--6561
-4851
--1
-490
--441
-
-query III rowsort
-SELECT * FROM tab0 WHERE NOT NULL IN ( + - 25 )
-----
-
-query II rowsort
-SELECT ALL ( - + col0 ), ( - col0 ) FROM tab0
-----
--15
--15
--87
--87
--97
--97
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT + col0 / + 13 NOT BETWEEN NULL AND NULL
-----
-
-query II rowsort
-SELECT DISTINCT + ( 40 ) AS col0, - ( - col1 ) + col2 FROM tab2 AS cor0
-----
-40
-117
-40
-125
-40
-74
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE 77 + + + col2 < NULL
-----
-
-query I rowsort
-SELECT ALL - - col2 + col0 + + col1 FROM tab2 cor0
-----
-120
-181
-200
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE - 19 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT + 3 + - - 44 AS col2 FROM tab2 AS cor0
-----
-47
-
-query I rowsort
-SELECT ALL - + col1 + - 29 AS col0 FROM tab0 AS cor0
-----
--110
--30
--50
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE NOT 34 = - - 76
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT DISTINCT - ( col2 ) FROM tab2 AS cor0 WHERE NOT - col2 < NULL
-----
-
-query I rowsort
-SELECT col2 + - col1 AS col0 FROM tab1 WHERE + - col1 IN ( 66 * col1 + 52, col1 )
-----
-
-query I rowsort
-SELECT DISTINCT - col2 * - col2 + + 9 FROM tab2 AS cor0
-----
-1609
-3373
-538
-
-query II rowsort
-SELECT ALL col0 AS col1, + col1 AS col1 FROM tab0
-----
-15
-81
-87
-21
-97
-1
-
-query II rowsort
-SELECT DISTINCT - col0, col2 FROM tab0 WHERE + - col0 IS NULL
-----
-
-query I rowsort
-SELECT + col0 AS col2 FROM tab2 WHERE NOT col2 IS NULL
-----
-46
-64
-75
-
-query I rowsort
-SELECT DISTINCT - ( - - col0 ) AS col2 FROM tab1
-----
--51
--85
--91
-
-query I rowsort
-SELECT + ( + + ( - col2 ) ) AS col2 FROM tab1 AS cor0
-----
--59
--68
--96
-
-query I rowsort
-SELECT + + 34 * - - 74 * col1 FROM tab0 AS cor0
-----
-203796
-2516
-52836
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT 26 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT 6 * + ( - - col2 ) + col2 AS col1 FROM tab1
-----
-413
-476
-672
-
-query I rowsort
-SELECT 96 + 92 FROM tab1
-----
-188
-188
-188
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE NOT NULL >= 78
-----
-
-query I rowsort
-SELECT ALL - + 12 AS col1 FROM tab1 AS cor0
-----
--12
--12
--12
-
-query I rowsort
-SELECT - + col0 FROM tab1 AS cor0 WHERE NULL <= - col2 * - col0 * col0
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE NOT + 23 IS NOT NULL
-----
-
-query I rowsort
-SELECT - col1 * col2 * + + 39 AS col1 FROM tab1 AS cor0
-----
--11505
--124644
--52416
-
-query I rowsort
-SELECT 10 * + col0 FROM tab1
-----
-510
-850
-910
-
-query I rowsort
-SELECT col0 * 74 AS col1 FROM tab1
-----
-3774
-6290
-6734
-
-query I rowsort
-SELECT + col2 + + - col2 AS col2 FROM tab1
-----
-0
-0
-0
-
-query I rowsort
-SELECT ALL col1 + - 15 AS col1 FROM tab2
-----
-36
-52
-62
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE + col0 NOT BETWEEN NULL AND - col0 + + col0
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT ALL - + 57 FROM tab0 AS cor0 CROSS JOIN tab2 cor1
-----
-9 values hashing to 520dc393896969e02a72ab6c5d92126b
-
-query I rowsort
-SELECT ALL col1 FROM tab0 WHERE - col1 NOT BETWEEN NULL AND NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT col0 BETWEEN col2 AND NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT - col0 < ( - col2 )
-----
-15
-81
-47
-97
-1
-99
-
-query I rowsort
-SELECT ALL + 26 AS col1 FROM tab2 cor0
-----
-26
-26
-26
-
-query I rowsort
-SELECT ALL ( 33 ) * col1 FROM tab0 AS cor0
-----
-2673
-33
-693
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE NOT 3 = NULL
-----
-
-query II rowsort
-SELECT DISTINCT + col2, + 64 FROM tab1
-----
-59
-64
-68
-64
-96
-64
-
-query I rowsort
-SELECT ALL col1 + col2 * + + col2 AS col0 FROM tab1 AS cor0
-----
-3486
-4671
-9230
-
-query I rowsort
-SELECT col2 + + + col0 FROM tab0 AS cor0
-----
-196
-62
-97
-
-query I rowsort
-SELECT - ( - 55 ) + - 30 AS col1 FROM tab1 AS cor0
-----
-25
-25
-25
-
-query I rowsort
-SELECT - col0 + + 8 + - - col0 FROM tab0
-----
-8
-8
-8
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE ( 51 ) = NULL
-----
-
-query I rowsort
-SELECT - + col0 - - col0 FROM tab1 AS cor0
-----
-0
-0
-0
-
-query I rowsort
-SELECT - col1 * - 64 - + ( - 67 ) FROM tab2 cor0
-----
-3331
-4355
-4995
-
-query I rowsort
-SELECT DISTINCT - col2 AS col1 FROM tab2 WHERE NOT NULL NOT IN ( - 34, col0, + col0 * - col2, col1, 22 * + col1 + - col2 )
-----
-
-query II rowsort
-SELECT 12 AS col1, - col2 AS col2 FROM tab2
-----
-12
--23
-12
--40
-12
--58
-
-query I rowsort
-SELECT col2 * 22 AS col2 FROM tab2
-----
-1276
-506
-880
-
-query I rowsort
-SELECT 75 * + + col2 AS col1 FROM tab0 AS cor0
-----
-3525
-7425
-750
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE NOT - col0 * col0 + col2 * col1 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE + col0 * + col1 IS NOT NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT ALL ( - 69 ) AS col2 FROM tab0
-----
--69
--69
--69
-
-query I rowsort
-SELECT DISTINCT - col0 * + - col2 AS col2 FROM tab1
-----
-4896
-5015
-6188
-
-query I rowsort
-SELECT ALL - ( - 16 ) AS col2 FROM tab0 AS cor0
-----
-16
-16
-16
-
-query I rowsort
-SELECT col0 + - + col1 FROM tab1
-----
-37
-44
-80
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NOT + 44 + - 52 - + col2 NOT BETWEEN col1 * + - 62 * + 96 AND NULL
-----
-
-query I rowsort
-SELECT DISTINCT - col2 + - - 61 AS col0 FROM tab0 AS cor0
-----
--38
-14
-51
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE col0 NOT BETWEEN - col0 AND + + col2 * - 63 + - + 96
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT * FROM tab1 AS cor0 WHERE 98 IS NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE ( NULL ) < 48
-----
-
-query I rowsort
-SELECT ALL - col1 * - 82 AS col0 FROM tab0 AS cor0 WHERE NOT ( 62 ) * + col1 * - 13 <= 98
-----
-
-query I rowsort
-SELECT - col0 - col2 + 47 AS col0 FROM tab0
-----
--149
--15
--50
-
-query I rowsort
-SELECT DISTINCT 59 AS col0 FROM tab0 WHERE NOT ( NOT NULL < 11 )
-----
-
-query I rowsort
-SELECT DISTINCT 9 AS col1 FROM tab0 cor0
-----
-9
-
-query I rowsort
-SELECT DISTINCT ( - 26 ) FROM tab0
-----
--26
-
-query I rowsort
-SELECT ALL + - 72 AS col1 FROM tab2 AS cor0
-----
--72
--72
--72
-
-query I rowsort
-SELECT ALL + - col1 * - + 1 + + + col0 FROM tab2 AS cor0
-----
-141
-142
-97
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT NULL < 40 + col1
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 cor0 WHERE NOT - col0 * + col0 > NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT col1 * 74 + - col2 NOT BETWEEN ( col1 ) AND NULL
-----
-
-query I rowsort
-SELECT ALL - col0 FROM tab0 WHERE NULL NOT BETWEEN NULL AND + col1 / 48 * + col2 * + ( + 20 )
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE col0 + - - col1 + - col1 + + col0 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT ALL - 53 * + col2 FROM tab2
-----
--1219
--2120
--3074
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE col1 + col0 IS NULL
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 cor0 WHERE NOT col1 >= + col0
-----
-87
-21
-10
-97
-1
-99
-
-query I rowsort
-SELECT DISTINCT + 0 AS col0 FROM tab2 AS cor0 WHERE NOT ( NULL ) IS NOT NULL
-----
-0
-
-query I rowsort
-SELECT 30 / - col2 + - col1 AS col1 FROM tab1 AS cor0 WHERE - col0 + 39 IS NULL
-----
-
-query I rowsort
-SELECT - col1 + - - col1 * - col0 - col2 AS col0 FROM tab1 cor0
-----
--4392
--489
--824
-
-query I rowsort
-SELECT - 29 * - col0 * + - col1 + - + col0 FROM tab2 AS cor0
-----
--142976
--145800
--68080
-
-query I rowsort
-SELECT DISTINCT - col1 AS col2 FROM tab0 WHERE NOT NULL IS NULL
-----
-
-query I rowsort
-SELECT + + 34 * + col2 * ( - col2 ) AS col1 FROM tab0 AS cor0
-----
--333234
--3400
--75106
-
-query I rowsort
-SELECT DISTINCT - col2 FROM tab2 AS cor0 WHERE NOT NULL BETWEEN NULL AND - col0
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE col2 <= NULL
-----
-
-query II rowsort
-SELECT DISTINCT + + col0 AS col1, col0 + - 81 AS col1 FROM tab0 cor0
-----
-15
--66
-87
-6
-97
-16
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE NOT col1 IN ( + col1, col1, + col0 )
-----
-
-query I rowsort
-SELECT DISTINCT col2 * - - ( col1 ) AS col2 FROM tab1
-----
-1344
-295
-3196
-
-query I rowsort
-SELECT ALL + 35 AS col2 FROM tab0 AS cor0 CROSS JOIN tab2 AS cor1
-----
-9 values hashing to d9b103f79c4e8f0de4b7c1c821783a29
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE col2 + + col1 >= NULL
-----
-
-query I rowsort
-SELECT DISTINCT + 68 + ( + col0 ) + 63 FROM tab0 cor0
-----
-146
-218
-228
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE ( NOT - 14 NOT BETWEEN NULL AND 89 )
-----
-
-query I rowsort
-SELECT ALL - col0 - + + col0 FROM tab2 AS cor0
-----
--128
--150
--92
-
-query I rowsort
-SELECT - - col0 FROM tab0 WHERE NULL IS NULL
-----
-15
-87
-97
-
-query I rowsort
-SELECT DISTINCT col0 - - 99 AS col2 FROM tab1
-----
-150
-184
-190
-
-query I rowsort
-SELECT - col1 AS col0 FROM tab2 WHERE NOT NULL IS NOT NULL
-----
--51
--67
--77
-
-query I rowsort
-SELECT ALL - - 49 FROM tab2 AS cor0 WHERE NOT col1 BETWEEN + + col1 + + col2 AND + 47
-----
-49
-49
-49
-
-query I rowsort
-SELECT ALL + - col0 * + - 74 * - - 11 * - col2 AS col0 FROM tab2 cor0
-----
--2083840
--3540900
--861212
-
-query I rowsort
-SELECT DISTINCT - ( + ( - ( + col0 ) ) ) + - - col2 FROM tab0 AS cor0
-----
-196
-62
-97
-
-query II rowsort
-SELECT + 0 * - 61 * - - 34, - col2 AS col0 FROM tab2 AS cor0
-----
-0
--23
-0
--40
-0
--58
-
-query I rowsort
-SELECT - + col2 FROM tab0 AS cor0 WHERE NOT ( NULL ) IS NULL
-----
-
-query I rowsort
-SELECT - col1 + 43 * - 31 + + col0 + - col0 * - + 17 * - + col1 AS col2 FROM tab1 AS cor0
-----
--13434
--73998
--8478
-
-query I rowsort
-SELECT ALL + col0 + + + ( + col2 ) FROM tab0 WHERE NOT NULL = - col1 * + - 5 + + col0
-----
-
-query I rowsort
-SELECT + - col0 FROM tab1 WHERE NULL IS NULL
-----
--51
--85
--91
-
-query I rowsort
-SELECT ALL - 1 * + 12 FROM tab1
-----
--12
--12
--12
-
-query III rowsort
-SELECT * FROM tab2 AS cor0 WHERE col0 BETWEEN NULL AND + 56 * + + col2 * col1
-----
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE - col1 * 64 * + ( col0 ) IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT - col2 - + - ( - col0 ) AS col1 FROM tab0 AS cor0
-----
--196
--62
--97
-
-query I rowsort
-SELECT DISTINCT - - col0 AS col2 FROM tab1 WHERE NOT col1 IS NULL
-----
-51
-85
-91
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 cor0 WHERE NOT - ( + - ( col0 ) ) + col1 IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT DISTINCT - + 15 AS col0 FROM tab0 AS cor0
-----
--15
-
-query II rowsort
-SELECT DISTINCT - - col0 + col2 AS col1, + col1 * - col0 FROM tab2 AS cor0
-----
-104
--4928
-133
--5025
-69
--2346
-
-query II rowsort
-SELECT - + 70 + + + 82 AS col0, + 24 AS col2 FROM tab2 cor0
-----
-12
-24
-12
-24
-12
-24
-
-query I rowsort
-SELECT + + 53 AS col2 FROM tab0 AS cor0
-----
-53
-53
-53
-
-query I rowsort
-SELECT ALL 72 * 29 FROM tab1 AS cor0
-----
-2088
-2088
-2088
-
-query II rowsort
-SELECT ALL + col0, 69 FROM tab1
-----
-51
-69
-85
-69
-91
-69
-
-query II rowsort
-SELECT ALL - 95, 9 AS col2 FROM tab0
-----
--95
-9
--95
-9
--95
-9
-
-query I rowsort
-SELECT DISTINCT col0 + col2 + + - col1 AS col0 FROM tab0 WHERE NOT - 12 >= NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT + col1 * 64 <= ( + 6 * - col0 )
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE NOT NULL BETWEEN - 18 * - col2 AND NULL
-----
-
-query I rowsort
-SELECT - 60 + - ( - 35 ) AS col1 FROM tab1
-----
--25
--25
--25
-
-query I rowsort
-SELECT - col1 * 59 FROM tab1
-----
--2773
--295
--826
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 WHERE ( col0 ) IS NOT NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query I rowsort
-SELECT + col1 + 40 AS col1 FROM tab2 WHERE ( - col1 ) IS NOT NULL
-----
-107
-117
-91
-
-query I rowsort
-SELECT ALL - col2 * 17 FROM tab2
-----
--391
--680
--986
-
-query I rowsort
-SELECT DISTINCT col0 * + col2 FROM tab0 WHERE NOT NULL IS NOT NULL
-----
-705
-870
-9603
-
-query I rowsort
-SELECT - col2 FROM tab1 WHERE NOT ( col2 ) IS NOT NULL
-----
-
-query I rowsort
-SELECT DISTINCT + col1 FROM tab2 WHERE ( col2 ) <= ( + 4 )
-----
-
-query I rowsort
-SELECT - 52 * + col2 + col1 FROM tab1
-----
--3063
--3489
--4978
-
-query I rowsort
-SELECT - col1 * + col2 + + 75 AS col0 FROM tab0
-----
--135
--24
--3732
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NULL <> ( NULL )
-----
-
-query I rowsort
-SELECT 65 + - 17 AS col0 FROM tab0 cor0
-----
-48
-48
-48
-
-query III rowsort
-SELECT ALL * FROM tab2 AS cor0 WHERE ( + col1 ) >= NULL
-----
-
-query I rowsort
-SELECT ALL 39 - - 78 * - 66 AS col2 FROM tab1 AS cor0
-----
--5109
--5109
--5109
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 AS cor0 WHERE NULL >= col0
-----
-
-query I rowsort
-SELECT col1 + 90 AS col2 FROM tab0 cor0
-----
-111
-171
-91
-
-query I rowsort
-SELECT DISTINCT - col1 FROM tab1 AS cor0 WHERE NOT ( + col2 ) <= NULL
-----
-
-query III rowsort
-SELECT * FROM tab2 cor0 WHERE NOT ( 45 * 99 ) IS NOT NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 AS cor0 WHERE NOT + col0 < NULL
-----
-
-query I rowsort
-SELECT DISTINCT - 84 AS col1 FROM tab1 AS cor0 WHERE col0 IS NOT NULL
-----
--84
-
-query I rowsort
-SELECT + 59 * - 82 * + col1 AS col0 FROM tab0
-----
--101598
--391878
--4838
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE ( col0 ) NOT BETWEEN ( + col0 / 19 ) AND ( NULL )
-----
-
-query I rowsort
-SELECT DISTINCT - ( 28 ) FROM tab1 WHERE ( + 92 ) NOT BETWEEN + ( + 8 ) AND ( + col2 )
-----
--28
-
-query I rowsort
-SELECT DISTINCT + col1 * + + 60 AS col1 FROM tab1
-----
-2820
-300
-840
-
-query III rowsort
-SELECT ALL * FROM tab1 WHERE NOT + col1 IS NOT NULL
-----
-
-query I rowsort
-SELECT - col1 FROM tab1 WHERE NOT - 86 IN ( 47 * - 49 + 22 )
-----
--14
--47
--5
-
-query I rowsort
-SELECT 0 * - - col0 AS col0 FROM tab2 AS cor0
-----
-0
-0
-0
-
-query I rowsort
-SELECT DISTINCT 20 AS col1 FROM tab1 AS cor0 CROSS JOIN tab1 AS cor1
-----
-20
-
-query I rowsort
-SELECT DISTINCT + col1 * col2 * col0 AS col0 FROM tab1
-----
-25075
-290836
-68544
-
-query I rowsort
-SELECT DISTINCT + + 33 AS col1 FROM ( tab1 AS cor0 CROSS JOIN tab2 AS cor1 )
-----
-33
-
-query I rowsort
-SELECT DISTINCT - ( AVG ( 68 ) ) FROM tab1 WHERE ( + 98 + + col0 ) IS NULL
-----
-NULL
-
-query I rowsort
-SELECT ALL 42 * - col1 FROM tab1 AS cor0
-----
--1974
--210
--588
-
-query I rowsort
-SELECT ALL 54 + col2 + + col1 + - col2 FROM tab0 cor0
-----
-135
-55
-75
-
-query III rowsort
-SELECT ALL * FROM tab2 cor0 WHERE - col2 < ( + - 1 )
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT DISTINCT col0 + + + 4 FROM tab1 AS cor0
-----
-55
-89
-95
-
-query I rowsort
-SELECT ALL col0 + col1 + - col2 + - col2 AS col1 FROM tab0 AS cor0
-----
--100
-2
-88
-
-query I rowsort
-SELECT col1 AS col1 FROM tab0 WHERE NOT - col2 + - 12 * 91 IS NOT NULL AND ( + ( - col1 ) ) <= - 6
-----
-
-query I rowsort
-SELECT ALL 15 * + - col2 FROM tab1
-----
--1020
--1440
--885
-
-query I rowsort
-SELECT DISTINCT col2 FROM tab0 WHERE NOT - col1 NOT BETWEEN ( - 69 ) AND + col1 + 60
-----
-10
-99
-
-query II rowsort
-SELECT col2 * + + col1, 99 AS col1 FROM tab1
-----
-1344
-99
-295
-99
-3196
-99
-
-query I rowsort
-SELECT 16 AS col0 FROM tab1 WHERE ( - col2 ) IS NOT NULL
-----
-16
-16
-16
-
-query I rowsort
-SELECT ALL - ( - 80 ) AS col1 FROM tab0
-----
-80
-80
-80
-
-query I rowsort
-SELECT DISTINCT - + col0 FROM tab1 AS cor0 WHERE NULL <= + 9
-----
-
-query I rowsort
-SELECT ALL col1 + - 2 + + ( + col2 ) * + col2 FROM tab1 AS cor0
-----
-3484
-4669
-9228
-
-query I rowsort
-SELECT ALL col0 AS col1 FROM tab0 AS cor0 WHERE 71 * + + col1 <> + col2 + 61
-----
-15
-87
-97
-
-query I rowsort
-SELECT DISTINCT col2 * + col2 + - col2 FROM tab2 cor0 WHERE 15 NOT IN ( + + col2 * 51 + - 94 - - col1 )
-----
-1560
-3306
-506
-
-query I rowsort
-SELECT DISTINCT + 36 + 39 + + ( col0 ) AS col2 FROM tab0 AS cor0
-----
-162
-172
-90
-
-query III rowsort
-SELECT * FROM tab2 WHERE - col1 * + col0 * - + 68 / - col0 BETWEEN ( NULL ) AND NULL
-----
-
-query I rowsort
-SELECT DISTINCT 21 + + + 49 AS col2 FROM tab1
-----
-70
-
-query II rowsort
-SELECT DISTINCT - col1 * - col1 - - 32 AS col2, col2 + - 20 FROM tab0
-----
-33
-79
-473
--10
-6593
-27
-
-query I rowsort
-SELECT col1 * + + col1 AS col2 FROM tab0 WHERE NOT col2 <= ( NULL )
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NULL NOT BETWEEN + col0 * - 15 + + + 99 * col0 AND ( col2 )
-----
-
-query I rowsort
-SELECT - + 0 * - 57 * col2 AS col0 FROM tab0 AS cor0
-----
-0
-0
-0
-
-query I rowsort
-SELECT ALL ( + + 11 ) FROM tab2 AS cor0
-----
-11
-11
-11
-
-query I rowsort
-SELECT + - 31 * - ( + col0 ) + + col2 AS col0 FROM tab0 AS cor0
-----
-2707
-3106
-512
-
-query I rowsort
-SELECT - - col2 * + - col1 FROM tab1 AS cor0
-----
--1344
--295
--3196
-
-query I rowsort
-SELECT + - 47 FROM tab2 cor0
-----
--47
--47
--47
-
-query I rowsort
-SELECT + col1 * col1 * + col1 * + col1 * col1 + col0 FROM tab1 AS cor0
-----
-229345098
-3210
-537875
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT ( col1 ) NOT IN ( + col0 * col2 * - col0 )
-----
-
-query I rowsort
-SELECT - col1 AS col2 FROM tab2 WHERE NOT + 1 = ( + col2 )
-----
--51
--67
--77
-
-query I rowsort
-SELECT DISTINCT col2 * 85 FROM tab0
-----
-3995
-8415
-850
-
-query III rowsort
-SELECT * FROM tab1 WHERE NOT + col2 * - + 41 IS NULL
-----
-9 values hashing to c6c0a4111b36d04dbc811a11e4d54cad
-
-query I rowsort
-SELECT DISTINCT + 49 * col2 FROM tab2 WHERE + ( + col1 ) + + col2 NOT BETWEEN ( - + col2 ) AND ( NULL )
-----
-
-query II rowsort
-SELECT ALL col1, col0 + + col1 FROM tab1
-----
-14
-65
-47
-138
-5
-90
-
-query I rowsort
-SELECT - + 53 AS col2 FROM tab1 AS cor0
-----
--53
--53
--53
-
-query I rowsort
-SELECT DISTINCT + ( - 1 ) FROM tab0 AS cor0
-----
--1
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT NULL > + col2
-----
-
-query II rowsort
-SELECT DISTINCT col1, col1 FROM tab1 AS cor0
-----
-14
-14
-47
-47
-5
-5
-
-query I rowsort
-SELECT ALL + col2 * + col1 * - 22 * + - col1 FROM tab0
-----
-2178
-6784074
-97020
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE NOT ( NULL ) > - col2 * ( col2 )
-----
-
-query III rowsort
-SELECT ALL * FROM tab0 AS cor0 WHERE 28 * + 34 IS NOT NULL
-----
-9 values hashing to c4b42765dff94eaaa46040e537fb43b7
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE col1 - + + 91 / - 45 * col0 * + col1 IS NULL
-----
-
-query I rowsort
-SELECT DISTINCT 12 - + col0 FROM tab0
-----
--3
--75
--85
-
-query I rowsort
-SELECT - col1 + + + ( + + ( + col1 ) ) AS col0 FROM tab2
-----
-0
-0
-0
-
-query I rowsort
-SELECT - 19 / - + col1 * - ( + col2 ) AS col2 FROM tab1 WHERE NULL IS NOT NULL
-----
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NOT NULL > + col0 * + ( + - col1 ) - col0
-----
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE + col2 - + 16 < - - 38 + col2 * - + col1
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE NOT NULL IN ( + 17 * + 86 + + + col0 * + col1 + - col1, - col0 )
-----
-
-query I rowsort
-SELECT ALL - 68 * - - col2 FROM tab2
-----
--1564
--2720
--3944
-
-query I rowsort
-SELECT - ( - 95 ) FROM tab2
-----
-95
-95
-95
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE NOT + - col2 + + col1 IS NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT - col0 * - + 24 * + 88 AS col0 FROM tab2 AS cor0
-----
-135168
-158400
-97152
-
-query I rowsort
-SELECT ( + 45 ) * col1 FROM tab2
-----
-2295
-3015
-3465
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NOT NULL = + col1 * + col1
-----
-
-query I rowsort
-SELECT DISTINCT col0 AS col2 FROM tab2 AS cor0 WHERE NULL BETWEEN - col1 AND + col0
-----
-
-query III rowsort
-SELECT * FROM tab2 WHERE - col2 * + col0 NOT IN ( 49 * - col2 - col0, col2 + col0 )
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT col2 + - 66 * col2 AS col0 FROM tab1 AS cor0
-----
--3835
--4420
--6240
-
-query I rowsort
-SELECT col0 * col0 * + col1 + - col0 AS col0 FROM tab0 AS cor0
-----
-158862
-18210
-9312
-
-query I rowsort
-SELECT ALL - col1 + - + 98 + + col1 AS col0 FROM tab2 AS cor0
-----
--98
--98
--98
-
-query I rowsort
-SELECT DISTINCT col1 - - 3 + - 35 FROM tab1 AS cor0
-----
--18
--27
-15
-
-query III rowsort
-SELECT ALL * FROM tab1 AS cor0 WHERE NULL BETWEEN col2 AND ( + col1 )
-----
-
-query I rowsort
-SELECT DISTINCT - col1 * 38 FROM tab1 AS cor0 WHERE - col0 IS NULL
-----
-
-query I rowsort
-SELECT - + 31 + - col0 AS col0 FROM tab1 AS cor0
-----
--116
--122
--82
-
-query I rowsort
-SELECT ALL - col2 - + col1 + + 21 * + 44 FROM tab0 AS cor0
-----
-796
-824
-893
-
-query I rowsort
-SELECT DISTINCT + - col2 FROM tab2 AS cor0 WHERE ( NULL ) BETWEEN ( 14 ) AND 26
-----
-
-query I rowsort
-SELECT + col2 + - col1 + col0 * col1 FROM tab0 AS cor0
-----
-1181
-1816
-195
-
-query III rowsort
-SELECT DISTINCT * FROM tab2 WHERE + + 12 IS NOT NULL
-----
-9 values hashing to 75c998aa53ac83218cbf2feb962d0a49
-
-query I rowsort
-SELECT ALL - 71 - + 0 + - + col2 AS col0 FROM tab2
-----
--111
--129
--94
-
-query I rowsort
-SELECT - col2 - - col2 + 4 FROM tab0 AS cor0
-----
-4
-4
-4
-
-query I rowsort
-SELECT - 57 - + 5 FROM tab1 cor0
-----
--62
--62
--62
-
-query I rowsort
-SELECT ( 3 ) AS col0 FROM tab2 AS cor0
-----
-3
-3
-3
-
-query I rowsort
-SELECT DISTINCT - 12 AS col1 FROM tab0 cor0 WHERE NULL >= 39
-----
-
-query I rowsort
-SELECT ALL - col0 * - 15 AS col2 FROM tab2 AS cor0
-----
-1125
-690
-960
-
-query I rowsort
-SELECT + 87 * + + 78 AS col2 FROM tab2 cor0
-----
-6786
-6786
-6786
-
-query I rowsort
-SELECT ALL - + 41 FROM tab2 AS cor0 WHERE NOT - col2 IS NULL
-----
--41
--41
--41
-
-query III rowsort
-SELECT DISTINCT * FROM tab1 WHERE + col0 NOT IN ( - col2, - col1, - + col0, col0 )
-----
-
-query I rowsort
-SELECT - ( - 10 ) FROM tab1
-----
-10
-10
-10
-
-query III rowsort
-SELECT DISTINCT * FROM tab0 AS cor0 WHERE NULL >= 5
-----
-
-query IIIIII rowsort
-SELECT * FROM tab0 AS cor0 CROSS JOIN tab2 cor1 WHERE NOT + 32 IS NOT NULL
-----
-
-query I rowsort
-SELECT - col0 * + col0 + + col0 * - 91 AS col2 FROM tab0
-----
--15486
--1590
--18236
-
-query I rowsort
-SELECT ALL ( + - col2 ) AS col2 FROM tab0
-----
--10
--47
--99
-
-query III rowsort
-SELECT ALL * FROM tab0 WHERE NOT NULL >= - - col0
-----
-
-query I rowsort
-SELECT ALL + 96 FROM tab1 AS cor0 WHERE NOT 48 NOT IN ( 77, + col1 )
-----
-
-query I rowsort
-SELECT DISTINCT 65 + + ( + ( - col1 ) ) FROM tab2 AS cor0
-----
--12
--2
-14
-
-query I rowsort
-SELECT + col0 - 32 FROM tab0 AS cor0
-----
... 235521 lines suppressed ...