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/02/12 05:59:58 UTC
[3/4] git commit: Fix merge conflicts
Fix merge conflicts
Project: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/commit/9ee8d645
Tree: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/tree/9ee8d645
Diff: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/diff/9ee8d645
Branch: refs/heads/master
Commit: 9ee8d645d55da0d079eef632df3123f535390115
Parents: 7ac4ee2 7a6a46c
Author: maryannxue <ma...@apache.org>
Authored: Tue Feb 11 23:13:53 2014 -0500
Committer: maryannxue <ma...@apache.org>
Committed: Tue Feb 11 23:13:53 2014 -0500
----------------------------------------------------------------------
phoenix-core/src/main/antlr3/PhoenixSQL.g | 32 +-
.../phoenix/compile/CreateSequenceCompiler.java | 10 +-
.../apache/phoenix/compile/DeleteCompiler.java | 8 +-
.../phoenix/compile/ExpressionCompiler.java | 20 +-
.../phoenix/compile/ExpressionProjector.java | 2 +-
.../apache/phoenix/compile/FromCompiler.java | 4 +-
.../apache/phoenix/compile/JoinCompiler.java | 4 +-
.../apache/phoenix/compile/LimitCompiler.java | 4 +-
.../apache/phoenix/compile/OrderByCompiler.java | 6 +-
.../phoenix/compile/ProjectionCompiler.java | 151 +-
.../TrackOrderPreservingExpressionCompiler.java | 10 +-
.../apache/phoenix/compile/UpsertCompiler.java | 22 +-
.../apache/phoenix/compile/WhereCompiler.java | 8 +-
.../apache/phoenix/compile/WhereOptimizer.java | 25 +-
.../coprocessor/MetaDataEndpointImpl.java | 32 +-
.../phoenix/coprocessor/ScanRegionObserver.java | 125 +-
.../coprocessor/SequenceRegionObserver.java | 11 +-
.../UngroupedAggregateRegionObserver.java | 17 +-
.../expression/ArrayConstructorExpression.java | 2 +-
.../phoenix/expression/BaseExpression.java | 6 +-
.../phoenix/expression/CoerceExpression.java | 28 +-
.../phoenix/expression/ColumnExpression.java | 14 +-
.../expression/ComparisonExpression.java | 22 +-
.../phoenix/expression/DateAddExpression.java | 12 +-
.../expression/DateSubtractExpression.java | 12 +-
.../expression/DecimalAddExpression.java | 6 +-
.../expression/DecimalDivideExpression.java | 6 +-
.../expression/DecimalMultiplyExpression.java | 6 +-
.../expression/DecimalSubtractExpression.java | 8 +-
.../phoenix/expression/DoubleAddExpression.java | 2 +-
.../expression/DoubleDivideExpression.java | 2 +-
.../expression/DoubleMultiplyExpression.java | 2 +-
.../expression/DoubleSubtractExpression.java | 2 +-
.../phoenix/expression/ExpressionType.java | 4 +-
.../phoenix/expression/InListExpression.java | 12 +-
.../IndexKeyValueColumnExpression.java | 26 -
.../expression/KeyValueColumnExpression.java | 12 +-
.../phoenix/expression/LikeExpression.java | 4 +-
.../phoenix/expression/LiteralExpression.java | 43 +-
.../phoenix/expression/LongAddExpression.java | 2 +-
.../expression/LongDivideExpression.java | 2 +-
.../expression/LongMultiplyExpression.java | 2 +-
.../expression/LongSubtractExpression.java | 2 +-
.../expression/ProjectedColumnExpression.java | 22 +-
.../expression/RowKeyColumnExpression.java | 2 +-
.../RowValueConstructorExpression.java | 4 +-
.../expression/StringConcatExpression.java | 8 +-
.../expression/TimestampAddExpression.java | 12 +-
.../expression/TimestampSubtractExpression.java | 12 +-
.../expression/aggregator/BaseAggregator.java | 12 +-
.../aggregator/BaseDecimalStddevAggregator.java | 6 +-
.../aggregator/BaseStddevAggregator.java | 6 +-
.../expression/aggregator/CountAggregator.java | 4 +-
.../aggregator/DecimalStddevPopAggregator.java | 6 +-
.../aggregator/DecimalStddevSampAggregator.java | 6 +-
.../aggregator/DecimalSumAggregator.java | 8 +-
.../DistinctCountClientAggregator.java | 7 +-
.../DistinctValueWithCountClientAggregator.java | 20 +-
.../DistinctValueWithCountServerAggregator.java | 3 +-
.../aggregator/DoubleSumAggregator.java | 10 +-
.../expression/aggregator/IntSumAggregator.java | 6 +-
.../aggregator/LongSumAggregator.java | 6 +-
.../expression/aggregator/MaxAggregator.java | 6 +-
.../expression/aggregator/MinAggregator.java | 8 +-
.../aggregator/NumberSumAggregator.java | 14 +-
.../aggregator/PercentRankClientAggregator.java | 6 +-
.../aggregator/PercentileClientAggregator.java | 6 +-
.../PercentileDiscClientAggregator.java | 6 +-
.../aggregator/StddevPopAggregator.java | 6 +-
.../aggregator/StddevSampAggregator.java | 6 +-
.../aggregator/UnsignedIntSumAggregator.java | 6 +-
.../aggregator/UnsignedLongSumAggregator.java | 6 +-
.../expression/function/ArrayIndexFunction.java | 2 +-
.../function/AvgAggregateFunction.java | 6 +-
.../function/CeilTimestampExpression.java | 8 +-
.../function/CountAggregateFunction.java | 2 +-
.../DistinctCountAggregateFunction.java | 2 +-
.../expression/function/InvertFunction.java | 8 +-
.../expression/function/LTrimFunction.java | 12 +-
.../expression/function/LengthFunction.java | 2 +-
.../expression/function/LowerFunction.java | 2 +-
.../function/MaxAggregateFunction.java | 10 +-
.../function/MinAggregateFunction.java | 10 +-
.../function/PercentRankAggregateFunction.java | 2 +-
.../PercentileContAggregateFunction.java | 2 +-
.../PercentileDiscAggregateFunction.java | 2 +-
.../expression/function/RTrimFunction.java | 10 +-
.../function/RegexpReplaceFunction.java | 4 +-
.../function/RegexpSubstrFunction.java | 4 +-
.../expression/function/ReverseFunction.java | 10 +-
.../function/RoundDateExpression.java | 8 +-
.../function/RoundDecimalExpression.java | 2 +-
.../function/RoundTimestampExpression.java | 8 +-
.../function/SqlTypeNameFunction.java | 2 +-
.../expression/function/StddevPopFunction.java | 4 +-
.../expression/function/StddevSampFunction.java | 4 +-
.../expression/function/SubstrFunction.java | 20 +-
.../function/SumAggregateFunction.java | 18 +-
.../expression/function/ToCharFunction.java | 2 +-
.../expression/function/ToDateFunction.java | 2 +-
.../expression/function/ToNumberFunction.java | 4 +-
.../expression/function/TrimFunction.java | 12 +-
.../expression/function/UpperFunction.java | 2 +-
.../apache/phoenix/index/IndexMaintainer.java | 81 +-
.../apache/phoenix/iterate/ExplainTable.java | 8 +-
.../phoenix/iterate/ParallelIterators.java | 10 +-
.../phoenix/jdbc/PhoenixDatabaseMetaData.java | 12 +-
.../phoenix/jdbc/PhoenixParameterMetaData.java | 6 +-
.../apache/phoenix/jdbc/PhoenixStatement.java | 6 +-
.../org/apache/phoenix/parse/ColumnDef.java | 19 +-
.../phoenix/parse/IndexKeyConstraint.java | 12 +-
.../apache/phoenix/parse/ParseNodeFactory.java | 14 +-
.../phoenix/parse/PrimaryKeyConstraint.java | 26 +-
.../query/ConnectionQueryServicesImpl.java | 7 +-
.../java/org/apache/phoenix/query/KeyRange.java | 6 +-
.../apache/phoenix/query/QueryConstants.java | 18 +-
.../org/apache/phoenix/schema/ColumnRef.java | 36 +-
.../apache/phoenix/schema/DelegateColumn.java | 4 +-
.../apache/phoenix/schema/DelegateDatum.java | 4 +-
.../apache/phoenix/schema/KeyValueSchema.java | 2 +-
.../apache/phoenix/schema/MetaDataClient.java | 71 +-
.../apache/phoenix/schema/PArrayDataType.java | 18 +-
.../org/apache/phoenix/schema/PColumnImpl.java | 21 +-
.../org/apache/phoenix/schema/PDataType.java | 573 ++++---
.../java/org/apache/phoenix/schema/PDatum.java | 4 +-
.../apache/phoenix/schema/PMetaDataImpl.java | 2 +-
.../org/apache/phoenix/schema/PTableImpl.java | 12 +-
.../org/apache/phoenix/schema/RowKeySchema.java | 4 +-
.../org/apache/phoenix/schema/SaltingUtil.java | 6 +-
.../org/apache/phoenix/schema/Sequence.java | 14 +-
.../org/apache/phoenix/schema/SortOrder.java | 142 ++
.../org/apache/phoenix/schema/ValueSchema.java | 29 +-
.../java/org/apache/phoenix/util/ByteUtil.java | 14 +-
.../java/org/apache/phoenix/util/IndexUtil.java | 10 +-
.../org/apache/phoenix/util/MetaDataUtil.java | 3 +-
.../org/apache/phoenix/util/PhoenixRuntime.java | 101 +-
.../org/apache/phoenix/util/SchemaUtil.java | 26 +-
.../org/apache/phoenix/util/StringUtil.java | 38 +-
.../phoenix/compile/HavingClauseTest.java | 194 ---
.../phoenix/compile/HavingCompilerTest.java | 199 +++
.../phoenix/compile/JoinQueryCompileTest.java | 146 --
.../phoenix/compile/JoinQueryCompilerTest.java | 146 ++
.../apache/phoenix/compile/LimitClauseTest.java | 157 --
.../phoenix/compile/LimitCompilerTest.java | 157 ++
.../phoenix/compile/QueryCompileTest.java | 1298 --------------
.../phoenix/compile/QueryCompilerTest.java | 1313 ++++++++++++++
.../apache/phoenix/compile/ScanRangesTest.java | 14 +-
.../apache/phoenix/compile/ViewCompileTest.java | 119 --
.../phoenix/compile/ViewCompilerTest.java | 119 ++
.../phoenix/compile/WhereClauseCompileTest.java | 931 ----------
.../compile/WhereClauseOptimizerTest.java | 1620 ------------------
.../phoenix/compile/WhereCompilerTest.java | 931 ++++++++++
.../phoenix/compile/WhereOptimizerTest.java | 1620 ++++++++++++++++++
.../apache/phoenix/end2end/AlterTableTest.java | 9 +-
.../org/apache/phoenix/end2end/ArrayTest.java | 157 +-
.../end2end/DescColumnSortOrderTest.java | 555 ------
.../phoenix/end2end/DynamicColumnTest.java | 9 +-
.../phoenix/end2end/DynamicFamilyTest.java | 11 +-
.../apache/phoenix/end2end/HashJoinTest.java | 23 +-
.../end2end/QueryDatabaseMetaDataTest.java | 2 +-
...RangeParallelIteratorRegionSplitterTest.java | 8 +-
.../apache/phoenix/end2end/SortOrderFTest.java | 554 ++++++
.../phoenix/end2end/index/IndexTestUtil.java | 6 +-
.../expression/ColumnExpressionTest.java | 9 +-
.../DescColumnSortOrderExpressionTest.java | 325 ----
.../expression/SortOrderExpressionTest.java | 324 ++++
.../filter/SkipScanFilterIntersectTest.java | 8 +-
.../phoenix/filter/SkipScanFilterTest.java | 8 +-
.../iterate/AggregateResultScannerTest.java | 6 +-
.../apache/phoenix/parse/QueryParserTest.java | 14 +-
.../query/BaseConnectionlessQueryTest.java | 44 +-
.../apache/phoenix/schema/PDataTypeTest.java | 172 +-
.../apache/phoenix/schema/RowKeySchemaTest.java | 12 +-
.../phoenix/schema/RowKeyValueAccessorTest.java | 2 +-
.../apache/phoenix/schema/SortOrderTest.java | 113 ++
.../apache/phoenix/schema/ValueBitSetTest.java | 4 +-
.../apache/phoenix/util/PhoenixRuntimeTest.java | 26 +
.../org/apache/phoenix/util/ScanUtilTest.java | 14 +-
.../java/org/apache/phoenix/util/TestUtil.java | 4 +-
.../flume/serializer/BaseEventSerializer.java | 48 +-
180 files changed, 7385 insertions(+), 6551 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/main/antlr3/PhoenixSQL.g
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java
----------------------------------------------------------------------
diff --cc phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java
index e0b3704,0afbd3f..e7e0d56
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java
@@@ -346,16 -341,24 +346,16 @@@ public class JoinCompiler
String colName = sourceColumn.getName().getString();
String fullName = getProjectedColumnName(schemaName, tableName, colName);
String aliasedName = sourceTable.getTableAlias() == null ? fullName : getProjectedColumnName(null, sourceTable.getTableAlias(), colName);
- String displayName = aliasedName;
- if (isRewrite) {
- String dataColName = IndexUtil.getDataColumnName(colName);
- displayName = sourceTable.getTableAlias() == null ? getProjectedColumnName(schemaName, table.getParentTableName().getString(), dataColName) : getProjectedColumnName(null, sourceTable.getTableAlias(), dataColName);
- }
- columnNameMap.put(colName, displayName);
- if (!fullName.equals(displayName)) {
- columnNameMap.put(fullName, displayName);
- }
- if (!aliasedName.equals(displayName) && !aliasedName.equals(fullName)) {
- columnNameMap.put(aliasedName, displayName);
+ columnNameMap.put(colName, aliasedName);
+ if (!fullName.equals(aliasedName)) {
+ columnNameMap.put(fullName, aliasedName);
}
- PName name = PNameFactory.newName(displayName);
+ PName name = PNameFactory.newName(aliasedName);
PColumnImpl column = new PColumnImpl(name, familyName, sourceColumn.getDataType(),
sourceColumn.getMaxLength(), sourceColumn.getScale(), sourceColumn.isNullable(),
- position, sourceColumn.getColumnModifier(), sourceColumn.getArraySize());
+ position, sourceColumn.getSortOrder(), sourceColumn.getArraySize());
Expression sourceExpression = new ColumnRef(sourceTable, sourceColumn.getPosition()).newColumnExpression();
projectedColumns.add(column);
sourceExpressions.add(sourceExpression);
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/main/java/org/apache/phoenix/compile/ProjectionCompiler.java
----------------------------------------------------------------------
diff --cc phoenix-core/src/main/java/org/apache/phoenix/compile/ProjectionCompiler.java
index 72f5c1a,2869a25..1fb6f5d
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/ProjectionCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/ProjectionCompiler.java
@@@ -52,9 -57,8 +57,10 @@@ import org.apache.phoenix.parse.Functio
import org.apache.phoenix.parse.ParseNode;
import org.apache.phoenix.parse.SelectStatement;
import org.apache.phoenix.parse.SequenceValueParseNode;
+import org.apache.phoenix.parse.TableName;
+import org.apache.phoenix.parse.TableWildcardParseNode;
import org.apache.phoenix.parse.WildcardParseNode;
+ import org.apache.phoenix.query.QueryConstants;
import org.apache.phoenix.schema.ArgumentTypeMismatchException;
import org.apache.phoenix.schema.ColumnNotFoundException;
import org.apache.phoenix.schema.ColumnRef;
@@@ -205,12 -196,13 +221,14 @@@ public class ProjectionCompiler
* @throws SQLException
*/
public static RowProjector compile(StatementContext context, SelectStatement statement, GroupBy groupBy, List<? extends PDatum> targetColumns) throws SQLException {
+ List<KeyValueColumnExpression> arrayKVRefs = new ArrayList<KeyValueColumnExpression>();
+ List<Expression> arrayKVFuncs = new ArrayList<Expression>();
List<AliasedNode> aliasedNodes = statement.getSelect();
// Setup projected columns in Scan
- SelectClauseVisitor selectVisitor = new SelectClauseVisitor(context, groupBy);
+ SelectClauseVisitor selectVisitor = new SelectClauseVisitor(context, groupBy, arrayKVRefs, arrayKVFuncs, statement);
List<ExpressionProjector> projectedColumns = new ArrayList<ExpressionProjector>();
- TableRef tableRef = context.getResolver().getTables().get(0);
+ ColumnResolver resolver = context.getResolver();
+ TableRef tableRef = context.getCurrentTable();
PTable table = tableRef.getTable();
boolean isWildcard = false;
Scan scan = context.getScan();
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/test/java/org/apache/phoenix/compile/JoinQueryCompilerTest.java
----------------------------------------------------------------------
diff --cc phoenix-core/src/test/java/org/apache/phoenix/compile/JoinQueryCompilerTest.java
index 0000000,2c1d1ab..7c52e55
mode 000000,100644..100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/compile/JoinQueryCompilerTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/compile/JoinQueryCompilerTest.java
@@@ -1,0 -1,146 +1,146 @@@
+ /*
+ * Copyright 2014 The Apache Software Foundation
+ *
+ * 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.phoenix.compile;
+
-import static org.apache.phoenix.util.TestUtil.JOIN_CUSTOMER_TABLE;
-import static org.apache.phoenix.util.TestUtil.JOIN_CUSTOMER_TABLE_NORMALIZED;
-import static org.apache.phoenix.util.TestUtil.JOIN_ITEM_TABLE;
-import static org.apache.phoenix.util.TestUtil.JOIN_ITEM_TABLE_NORMALIZED;
-import static org.apache.phoenix.util.TestUtil.JOIN_ORDER_TABLE;
-import static org.apache.phoenix.util.TestUtil.JOIN_ORDER_TABLE_NORMALIZED;
-import static org.apache.phoenix.util.TestUtil.JOIN_SUPPLIER_TABLE;
-import static org.apache.phoenix.util.TestUtil.JOIN_SUPPLIER_TABLE_NORMALIZED;
++import static org.apache.phoenix.util.TestUtil.JOIN_CUSTOMER_TABLE_FULL_NAME;
++import static org.apache.phoenix.util.TestUtil.JOIN_CUSTOMER_TABLE_DISPLAY_NAME;
++import static org.apache.phoenix.util.TestUtil.JOIN_ITEM_TABLE_FULL_NAME;
++import static org.apache.phoenix.util.TestUtil.JOIN_ITEM_TABLE_DISPLAY_NAME;
++import static org.apache.phoenix.util.TestUtil.JOIN_ORDER_TABLE_FULL_NAME;
++import static org.apache.phoenix.util.TestUtil.JOIN_ORDER_TABLE_DISPLAY_NAME;
++import static org.apache.phoenix.util.TestUtil.JOIN_SUPPLIER_TABLE_FULL_NAME;
++import static org.apache.phoenix.util.TestUtil.JOIN_SUPPLIER_TABLE_DISPLAY_NAME;
+ import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES;
+ import static org.junit.Assert.assertEquals;
+
+ import java.sql.Connection;
+ import java.sql.DriverManager;
+ import java.sql.ResultSet;
+ import java.sql.SQLException;
+ import java.util.Collections;
+ import java.util.List;
+
+ import org.junit.Test;
+ import org.apache.hadoop.hbase.client.Scan;
+ import org.apache.phoenix.compile.JoinCompiler.JoinSpec;
+ import org.apache.phoenix.jdbc.PhoenixConnection;
+ import org.apache.phoenix.jdbc.PhoenixStatement;
+ import org.apache.phoenix.parse.SQLParser;
+ import org.apache.phoenix.parse.SelectStatement;
+ import org.apache.phoenix.query.BaseConnectionlessQueryTest;
+ import org.apache.phoenix.util.QueryUtil;
+
+ /**
+ * Test compilation of queries containing joins.
+ */
+ public class JoinQueryCompilerTest extends BaseConnectionlessQueryTest {
+
+ @Test
+ public void testExplainPlan() throws Exception {
+ Connection conn = DriverManager.getConnection(getUrl());
- String query = "EXPLAIN SELECT s.\"supplier_id\", \"order_id\", c.name, i.name, quantity, o.date FROM " + JOIN_ORDER_TABLE + " o LEFT JOIN "
- + JOIN_CUSTOMER_TABLE + " c ON o.\"customer_id\" = c.\"customer_id\" AND c.name LIKE 'C%' LEFT JOIN "
- + JOIN_ITEM_TABLE + " i ON o.\"item_id\" = i.\"item_id\" RIGHT JOIN "
- + JOIN_SUPPLIER_TABLE + " s ON s.\"supplier_id\" = i.\"supplier_id\" WHERE i.name LIKE 'T%'";
++ String query = "EXPLAIN SELECT s.\"supplier_id\", \"order_id\", c.name, i.name, quantity, o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o LEFT JOIN "
++ + JOIN_CUSTOMER_TABLE_FULL_NAME + " c ON o.\"customer_id\" = c.\"customer_id\" AND c.name LIKE 'C%' LEFT JOIN "
++ + JOIN_ITEM_TABLE_FULL_NAME + " i ON o.\"item_id\" = i.\"item_id\" RIGHT JOIN "
++ + JOIN_SUPPLIER_TABLE_FULL_NAME + " s ON s.\"supplier_id\" = i.\"supplier_id\" WHERE i.name LIKE 'T%'";
+ ResultSet rs = conn.createStatement().executeQuery(query);
+ assertEquals(
- "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SUPPLIER_TABLE_NORMALIZED + "\n" +
++ "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + "\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " PARALLEL EQUI-JOIN 1 HASH TABLES:\n" +
+ " BUILD HASH TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_NORMALIZED + "\n" +
++ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
+ " PARALLEL EQUI-JOIN 2 HASH TABLES:\n" +
+ " BUILD HASH TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_CUSTOMER_TABLE_NORMALIZED + "\n" +
++ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_CUSTOMER_TABLE_DISPLAY_NAME + "\n" +
+ " SERVER FILTER BY NAME LIKE 'C%'\n" +
+ " BUILD HASH TABLE 1\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_NORMALIZED + "\n" +
++ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
+ " AFTER-JOIN SERVER FILTER BY I.NAME LIKE 'T%'", QueryUtil.getExplainPlan(rs));
+ }
+
+ @Test
+ public void testWhereClauseOptimization() throws Exception {
+ PhoenixConnection pconn = DriverManager.getConnection(getUrl(), TEST_PROPERTIES).unwrap(PhoenixConnection.class);
- String queryTemplate = "SELECT t1.\"item_id\", t2.\"item_id\", t3.\"item_id\" FROM " + JOIN_ITEM_TABLE + " t1 "
- + "%s JOIN " + JOIN_ITEM_TABLE + " t2 ON t1.\"item_id\" = t2.\"item_id\" "
- + "%s JOIN " + JOIN_ITEM_TABLE + " t3 ON t1.\"item_id\" = t3.\"item_id\" "
++ String queryTemplate = "SELECT t1.\"item_id\", t2.\"item_id\", t3.\"item_id\" FROM " + JOIN_ITEM_TABLE_FULL_NAME + " t1 "
++ + "%s JOIN " + JOIN_ITEM_TABLE_FULL_NAME + " t2 ON t1.\"item_id\" = t2.\"item_id\" "
++ + "%s JOIN " + JOIN_ITEM_TABLE_FULL_NAME + " t3 ON t1.\"item_id\" = t3.\"item_id\" "
+ + "WHERE t1.\"item_id\" = '0000000001' AND t2.\"item_id\" = '0000000002' AND t3.\"item_id\" = '0000000003'";
+
+ String query = String.format(queryTemplate, "INNER", "INNER");
+ JoinSpec joinSpec = getJoinSpec(query, pconn);
+ assertEquals(1, joinSpec.getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(0).getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(1).getPreFilters().size());
+
+ query = String.format(queryTemplate, "INNER", "LEFT");
+ joinSpec = getJoinSpec(query, pconn);
+ assertEquals(1, joinSpec.getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(0).getPreFilters().size());
+ assertEquals(0, joinSpec.getJoinTables().get(1).getPreFilters().size());
+
+ query = String.format(queryTemplate, "INNER", "RIGHT");
+ joinSpec = getJoinSpec(query, pconn);
+ assertEquals(0, joinSpec.getPreFilters().size());
+ assertEquals(0, joinSpec.getJoinTables().get(0).getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(1).getPreFilters().size());
+
+ query = String.format(queryTemplate, "LEFT", "INNER");
+ joinSpec = getJoinSpec(query, pconn);
+ assertEquals(1, joinSpec.getPreFilters().size());
+ assertEquals(0, joinSpec.getJoinTables().get(0).getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(1).getPreFilters().size());
+
+ query = String.format(queryTemplate, "LEFT", "LEFT");
+ joinSpec = getJoinSpec(query, pconn);
+ assertEquals(1, joinSpec.getPreFilters().size());
+ assertEquals(0, joinSpec.getJoinTables().get(0).getPreFilters().size());
+ assertEquals(0, joinSpec.getJoinTables().get(1).getPreFilters().size());
+
+ query = String.format(queryTemplate, "LEFT", "RIGHT");
+ joinSpec = getJoinSpec(query, pconn);
+ assertEquals(0, joinSpec.getPreFilters().size());
+ assertEquals(0, joinSpec.getJoinTables().get(0).getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(1).getPreFilters().size());
+
+ query = String.format(queryTemplate, "RIGHT", "INNER");
+ joinSpec = getJoinSpec(query, pconn);
+ assertEquals(0, joinSpec.getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(0).getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(1).getPreFilters().size());
+
+ query = String.format(queryTemplate, "RIGHT", "RIGHT");
+ joinSpec = getJoinSpec(query, pconn);
+ assertEquals(0, joinSpec.getPreFilters().size());
+ assertEquals(0, joinSpec.getJoinTables().get(0).getPreFilters().size());
+ assertEquals(1, joinSpec.getJoinTables().get(1).getPreFilters().size());
+ }
+
+ private static JoinSpec getJoinSpec(String query, PhoenixConnection connection) throws SQLException {
+ Scan scan = new Scan();
+ List<Object> binds = Collections.emptyList();
+ SQLParser parser = new SQLParser(query);
+ SelectStatement select = parser.parseQuery();
+ ColumnResolver resolver = FromCompiler.getResolver(select, connection);
+ select = StatementNormalizer.normalize(select, resolver);
+ StatementContext context = new StatementContext(new PhoenixStatement(connection), resolver, binds, scan);
+ return JoinCompiler.getJoinSpec(context, select);
+ }
+ }
+
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/test/java/org/apache/phoenix/end2end/HashJoinTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/test/java/org/apache/phoenix/end2end/SkipRangeParallelIteratorRegionSplitterTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/test/java/org/apache/phoenix/query/BaseConnectionlessQueryTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/9ee8d645/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java
----------------------------------------------------------------------