You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ma...@apache.org on 2014/08/19 22:04:03 UTC
[1/2] git commit: PHOENIX-1182 UPSERT SELECT not working with joins;
Add a test in DerivedTableIT
Repository: phoenix
Updated Branches:
refs/heads/master c9b9a40bf -> b0703c1d4
PHOENIX-1182 UPSERT SELECT not working with joins; Add a test in DerivedTableIT
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/7b1ba69f
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/7b1ba69f
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/7b1ba69f
Branch: refs/heads/master
Commit: 7b1ba69ffe1b32a0af1045d481110d26a4818be6
Parents: c85d4c6
Author: maryannxue <ma...@apache.org>
Authored: Tue Aug 19 15:57:14 2014 -0400
Committer: maryannxue <ma...@apache.org>
Committed: Tue Aug 19 15:57:14 2014 -0400
----------------------------------------------------------------------
.../apache/phoenix/end2end/DerivedTableIT.java | 13 ++++++
.../org/apache/phoenix/end2end/HashJoinIT.java | 49 ++++++++++++++++++++
.../apache/phoenix/compile/QueryCompiler.java | 13 +++---
3 files changed, 69 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/7b1ba69f/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
index 2e45313..8a80764 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
@@ -395,6 +395,19 @@ public class DerivedTableIT extends BaseClientManagedTimeIT {
} catch (SQLFeatureNotSupportedException e) {
assertEquals(MSG, e.getMessage());
}
+
+ // (groupby orderby) limit
+ query = "SELECT a, s FROM (SELECT a_string a, sum(a_byte) s FROM aTable GROUP BY a_string ORDER BY sum(a_byte)) LIMIT 2";
+ statement = conn.prepareStatement(query);
+ rs = statement.executeQuery();
+ assertTrue (rs.next());
+ assertEquals(C_VALUE,rs.getString(1));
+ assertEquals(9,rs.getInt(2));
+ assertTrue (rs.next());
+ assertEquals(A_VALUE,rs.getString(1));
+ assertEquals(10,rs.getInt(2));
+
+ assertFalse(rs.next());
} finally {
conn.close();
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/7b1ba69f/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
index e880253..65ebaa6 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
@@ -2889,6 +2889,55 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
assertNull(rs.getDate(5));
assertFalse(rs.next());
+
+ //Bug: PHOENIX-1182
+ String sourceTable = "SOURCE_TABLE";
+ String joinTable = "JOIN_TABLE";
+ conn.createStatement().execute("CREATE TABLE " + sourceTable
+ + " (TID CHAR(3) NOT NULL, "
+ + " A UNSIGNED_INT NOT NULL, "
+ + " B UNSIGNED_INT NOT NULL "
+ + " CONSTRAINT pk PRIMARY KEY (TID, A, B))");
+ conn.createStatement().execute("CREATE TABLE " + joinTable
+ + " (TID CHAR(3) NOT NULL, "
+ + " A UNSIGNED_INT NOT NULL, "
+ + " B UNSIGNED_INT NOT NULL, "
+ + " COUNT UNSIGNED_INT "
+ + " CONSTRAINT pk PRIMARY KEY (TID, A, B))");
+
+ PreparedStatement upsertStmt = conn.prepareStatement(
+ "upsert into " + sourceTable + "(TID, A, B) " + "values (?, ?, ?)");
+ upsertStmt.setString(1, "1");
+ upsertStmt.setInt(2, 1);
+ upsertStmt.setInt(3, 1);
+ upsertStmt.execute();
+ upsertStmt.setString(1, "1");
+ upsertStmt.setInt(2, 1);
+ upsertStmt.setInt(3, 2);
+ upsertStmt.execute();
+ upsertStmt.setString(1, "1");
+ upsertStmt.setInt(2, 1);
+ upsertStmt.setInt(3, 3);
+ upsertStmt.execute();
+ upsertStmt.setString(1, "1");
+ upsertStmt.setInt(2, 2);
+ upsertStmt.setInt(3, 1);
+ upsertStmt.execute();
+ upsertStmt.setString(1, "1");
+ upsertStmt.setInt(2, 2);
+ upsertStmt.setInt(3, 2);
+ upsertStmt.execute();
+ conn.commit();
+
+ upsertStmt = conn.prepareStatement(
+ "upsert into " + joinTable + "(TID, A, B, COUNT) "
+ + "SELECT t1.TID, t1.A, t2.A, COUNT(*) "
+ + "FROM " + sourceTable + " t1 "
+ + "INNER JOIN " + sourceTable + " t2 ON t1.B = t2.B "
+ + "WHERE t1.A != t2.A AND t1.TID = '1' AND t2.TID = '1' "
+ + "GROUP BY t1.TID, t1.A, t2.A");
+ upsertStmt.execute();
+ conn.commit();
} finally {
conn.close();
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/7b1ba69f/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
index 20c0acd..1cf5514 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
@@ -129,7 +129,7 @@ public class QueryCompiler {
JoinTable joinTable = JoinCompiler.compile(statement, select, context.getResolver());
return compileJoinQuery(context, binds, joinTable, false);
} else {
- return compileSingleQuery(context, select, binds, parallelIteratorFactory, true);
+ return compileSingleQuery(context, select, binds, false, true);
}
}
@@ -146,7 +146,7 @@ public class QueryCompiler {
context.setCurrentTable(table.getTableRef());
context.setResolver(projectedTable.createColumnResolver());
table.projectColumns(context.getScan());
- return compileSingleQuery(context, subquery, binds, null, true);
+ return compileSingleQuery(context, subquery, binds, asSubquery, true);
}
QueryPlan plan = compileSubquery(subquery);
ProjectedPTableWrapper projectedTable = table.createProjectedTable(plan.getProjector());
@@ -221,7 +221,7 @@ public class QueryCompiler {
}
context.setCurrentTable(tableRef);
context.setResolver(needsProject ? projectedTable.createColumnResolver() : joinTable.getOriginalResolver());
- BasicQueryPlan plan = compileSingleQuery(context, query, binds, parallelIteratorFactory, joinTable.isAllLeftJoin());
+ BasicQueryPlan plan = compileSingleQuery(context, query, binds, asSubquery, joinTable.isAllLeftJoin());
Expression postJoinFilterExpression = joinTable.compilePostFilterExpression(context);
Integer limit = null;
if (query.getLimit() != null && !query.isAggregate() && !query.isDistinct() && query.getOrderBy().isEmpty()) {
@@ -276,7 +276,7 @@ public class QueryCompiler {
TupleProjector.serializeProjectorIntoScan(context.getScan(), rhsProjTable.createTupleProjector());
context.setCurrentTable(rhsTableRef);
context.setResolver(projectedTable.createColumnResolver());
- BasicQueryPlan rhsPlan = compileSingleQuery(context, rhs, binds, parallelIteratorFactory, type == JoinType.Right);
+ BasicQueryPlan rhsPlan = compileSingleQuery(context, rhs, binds, asSubquery, type == JoinType.Right);
Expression postJoinFilterExpression = joinTable.compilePostFilterExpression(context);
Integer limit = null;
if (rhs.getLimit() != null && !rhs.isAggregate() && !rhs.isDistinct() && rhs.getOrderBy().isEmpty()) {
@@ -297,7 +297,7 @@ public class QueryCompiler {
return statement.getConnection().getQueryServices().getOptimizer().optimize(statement, plan);
}
- protected BasicQueryPlan compileSingleQuery(StatementContext context, SelectStatement select, List<Object> binds, ParallelIteratorFactory parallelIteratorFactory, boolean allowPageFilter) throws SQLException{
+ protected BasicQueryPlan compileSingleQuery(StatementContext context, SelectStatement select, List<Object> binds, boolean asSubquery, boolean allowPageFilter) throws SQLException{
PhoenixConnection connection = statement.getConnection();
ColumnResolver resolver = context.getResolver();
TableRef tableRef = context.getCurrentTable();
@@ -324,7 +324,7 @@ public class QueryCompiler {
WhereCompiler.compile(context, select, viewWhere);
context.setResolver(resolver); // recover resolver
OrderBy orderBy = OrderByCompiler.compile(context, select, groupBy, limit);
- RowProjector projector = ProjectionCompiler.compile(context, select, groupBy, targetColumns);
+ RowProjector projector = ProjectionCompiler.compile(context, select, groupBy, asSubquery ? Collections.<PDatum>emptyList() : targetColumns);
// Final step is to build the query plan
int maxRows = statement.getMaxRows();
@@ -335,6 +335,7 @@ public class QueryCompiler {
limit = maxRows;
}
}
+ ParallelIteratorFactory parallelIteratorFactory = asSubquery ? null : this.parallelIteratorFactory;
if (select.isAggregate() || select.isDistinct()) {
return new AggregatePlan(context, select, tableRef, projector, limit, orderBy, parallelIteratorFactory, groupBy, having);
} else {
[2/2] git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/phoenix
Posted by ma...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/phoenix
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/b0703c1d
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/b0703c1d
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/b0703c1d
Branch: refs/heads/master
Commit: b0703c1d461c43b56712ea093214d1db9e3e29d6
Parents: 7b1ba69 c9b9a40
Author: maryannxue <ma...@apache.org>
Authored: Tue Aug 19 15:58:08 2014 -0400
Committer: maryannxue <ma...@apache.org>
Committed: Tue Aug 19 15:58:08 2014 -0400
----------------------------------------------------------------------
.../phoenix/end2end/ArithmeticQueryIT.java | 29 ++
.../org/apache/phoenix/end2end/ReadOnlyIT.java | 98 ++++++
.../phoenix/end2end/index/IndexHandlerIT.java | 4 +-
.../apache/phoenix/trace/BaseTracingTestIT.java | 18 +-
.../trace/PhoenixTableMetricsWriterIT.java | 5 +-
.../phoenix/trace/PhoenixTracingEndToEndIT.java | 3 +-
.../coprocessor/MetaDataEndpointImpl.java | 2 +
.../coprocessor/MetaDataRegionObserver.java | 9 +-
.../phoenix/exception/SQLExceptionCode.java | 7 +-
.../ipc/PhoenixIndexRpcSchedulerFactory.java | 23 +-
.../index/table/CoprocessorHTableFactory.java | 12 -
.../write/ParallelWriterIndexCommitter.java | 345 ++++++++++---------
.../TrackingParallelWriterIndexCommitter.java | 345 ++++++++++---------
.../apache/phoenix/jdbc/PhoenixConnection.java | 9 +-
.../apache/phoenix/jdbc/PhoenixStatement.java | 16 +-
.../query/ConnectionQueryServicesImpl.java | 57 +--
.../org/apache/phoenix/query/QueryServices.java | 10 +
.../phoenix/query/QueryServicesOptions.java | 20 +-
.../org/apache/phoenix/schema/PDataType.java | 11 +-
.../trace/PhoenixTableMetricsWriter.java | 10 +-
.../org/apache/phoenix/trace/TraceReader.java | 13 +-
.../trace/util/ConfigurationAdapter.java | 11 +-
.../org/apache/phoenix/trace/util/Tracing.java | 20 +-
.../PhoenixIndexRpcSchedulerFactoryTest.java | 5 +-
.../arithmetic/ArithmeticOperationTest.java | 5 +-
.../org/apache/phoenix/trace/TracingCompat.java | 8 -
26 files changed, 634 insertions(+), 461 deletions(-)
----------------------------------------------------------------------