You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2018/03/19 06:27:19 UTC
[42/50] [abbrv] ignite git commit: IGNITE-7879: Fixed splitter logic
for DISTINCT with subqueries. This closes #3634.
IGNITE-7879: Fixed splitter logic for DISTINCT with subqueries. This closes #3634.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/78e8627a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/78e8627a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/78e8627a
Branch: refs/heads/ignite-zk
Commit: 78e8627adae904774aa8513adfbedd0b225cc86e
Parents: f623ef1
Author: tledkov-gridgain <tl...@gridgain.com>
Authored: Fri Mar 16 14:38:38 2018 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Mar 16 14:38:38 2018 +0300
----------------------------------------------------------------------
.../query/h2/sql/GridSqlQuerySplitter.java | 3 +-
.../query/SqlPushDownFunctionTest.java | 78 ++++++++++++++++++++
.../IgniteCacheQuerySelfTestSuite.java | 2 +
3 files changed, 82 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/78e8627a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
index c96b486..d2fb149 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
@@ -962,7 +962,8 @@ public class GridSqlQuerySplitter {
select.setColumn(i, expr);
}
- if (isAllRelatedToTables(tblAliases, GridSqlQuerySplitter.<GridSqlAlias>newIdentityHashSet(), expr)) {
+ if (isAllRelatedToTables(tblAliases, GridSqlQuerySplitter.<GridSqlAlias>newIdentityHashSet(), expr)
+ && !hasAggregates(expr)) {
// Push down the whole expression.
pushDownColumn(tblAliases, cols, wrapAlias, expr, 0);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/78e8627a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlPushDownFunctionTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlPushDownFunctionTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlPushDownFunctionTest.java
new file mode 100644
index 0000000..9e78770
--- /dev/null
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlPushDownFunctionTest.java
@@ -0,0 +1,78 @@
+/*
+ * 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.processors.query;
+
+import java.util.List;
+import org.apache.ignite.cache.query.SqlFieldsQuery;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+/**
+ * Tests for schemas.
+ */
+public class SqlPushDownFunctionTest extends GridCommonAbstractTest {
+ /** Node. */
+ private IgniteEx node;
+
+ /** {@inheritDoc} */
+ @Override protected void beforeTest() throws Exception {
+ node = (IgniteEx)startGrid();
+
+ startGrid(2);
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void afterTest() throws Exception {
+ stopAllGrids();
+ }
+
+ /**
+ */
+ public void testPushDownFunction() {
+ sql("CREATE TABLE Person(id INTEGER PRIMARY KEY, company_id INTEGER)");
+ sql("CREATE TABLE Company(id INTEGER PRIMARY KEY, name VARCHAR)");
+
+ sql("INSERT INTO Person(id,company_id) VALUES (1, 1), (2, 2), (3, 3)");
+ sql("INSERT INTO Company(id,name) VALUES (1,'n1'), (2,'n2'), (3,'n3')");
+
+ sql("SELECT p.id, sum(p.id) FROM person p " +
+ "LEFT JOIN (select distinct id from company) as c on c.id=p.company_id " +
+ "GROUP BY p.id");
+
+ sql("SELECT count(1) FROM person p " +
+ "LEFT JOIN (select id from company union select id from company) as c on c.id=p.company_id");
+
+ sql("SELECT count(1) FROM person p " +
+ "LEFT JOIN (select id from company union select id from company) as c on c.id=p.company_id");
+
+ sql("SELECT 1, (select count(1)) FROM person p " +
+ "LEFT JOIN (select id from company union select id from company) as c on c.id=p.company_id");
+ }
+
+ /**
+ * @param sql SQL query.
+ * @return Results.
+ */
+ private List<List<?>> sql(String sql) {
+ GridQueryProcessor qryProc = node.context().query();
+
+ SqlFieldsQuery qry = new SqlFieldsQuery(sql).setSchema("PUBLIC");
+
+ return qryProc.querySqlFields(qry, true).getAll();
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/78e8627a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java
index c01eaa6..35d1be2 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java
@@ -157,6 +157,7 @@ import org.apache.ignite.internal.processors.query.IgniteSqlSkipReducerOnUpdateD
import org.apache.ignite.internal.processors.query.IgniteSqlSplitterSelfTest;
import org.apache.ignite.internal.processors.query.LazyQuerySelfTest;
import org.apache.ignite.internal.processors.query.MultipleStatementsSqlQuerySelfTest;
+import org.apache.ignite.internal.processors.query.SqlPushDownFunctionTest;
import org.apache.ignite.internal.processors.query.SqlSchemaSelfTest;
import org.apache.ignite.internal.processors.query.h2.GridH2IndexingInMemSelfTest;
import org.apache.ignite.internal.processors.query.h2.GridH2IndexingOffheapSelfTest;
@@ -230,6 +231,7 @@ public class IgniteCacheQuerySelfTestSuite extends TestSuite {
// Queries tests.
suite.addTestSuite(LazyQuerySelfTest.class);
suite.addTestSuite(IgniteSqlSplitterSelfTest.class);
+ suite.addTestSuite(SqlPushDownFunctionTest.class);
suite.addTestSuite(IgniteSqlSegmentedIndexSelfTest.class);
suite.addTestSuite(IgniteCachelessQueriesSelfTest.class);
suite.addTestSuite(IgniteSqlSegmentedIndexMultiNodeSelfTest.class);