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 2016/05/06 14:36:28 UTC
phoenix git commit: Fix QueryPlan.getSourceRefs()
Repository: phoenix
Updated Branches:
refs/heads/calcite d3b227a18 -> d561370b3
Fix QueryPlan.getSourceRefs()
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/d561370b
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/d561370b
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/d561370b
Branch: refs/heads/calcite
Commit: d561370b309c95cdd6423fa39784b86152b7baa3
Parents: d3b227a
Author: maryannxue <ma...@gmail.com>
Authored: Fri May 6 10:36:05 2016 -0400
Committer: maryannxue <ma...@gmail.com>
Committed: Fri May 6 10:36:05 2016 -0400
----------------------------------------------------------------------
.../apache/phoenix/calcite/PhoenixSchema.java | 50 +++++++-----
.../apache/phoenix/calcite/PhoenixTable.java | 14 ++--
.../apache/phoenix/calcite/TableMapping.java | 83 +++++++++++---------
.../calcite/rel/PhoenixServerAggregate.java | 2 +-
.../phoenix/calcite/rel/PhoenixTableScan.java | 6 +-
.../apache/phoenix/execute/AggregatePlan.java | 10 +--
.../apache/phoenix/execute/BaseQueryPlan.java | 4 +-
.../phoenix/execute/DegenerateQueryPlan.java | 2 +-
.../execute/LiteralResultIterationPlan.java | 2 +-
.../org/apache/phoenix/execute/ScanPlan.java | 10 +--
.../phoenix/calcite/ToExpressionTest.java | 4 +-
11 files changed, 108 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java
index 683a16b..46bcaa0 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixSchema.java
@@ -60,7 +60,7 @@ public class PhoenixSchema implements Schema {
protected final Map<String, Schema> subSchemas;
protected final Map<String, Table> tables;
protected final Map<String, Function> views;
- protected final Set<PTable> viewTables;
+ protected final Set<TableRef> viewTables;
protected PhoenixSchema(String name, String schemaName,
SchemaPlus parentSchema, PhoenixConnection pc) {
@@ -111,10 +111,10 @@ public class PhoenixSchema implements Schema {
ImmutableList.<ColumnDef>of()), pc);
final List<TableRef> tables = x.getTables();
assert tables.size() == 1;
- PTable pTable = tables.get(0).getTable();
- if (!isView(pTable)) {
- pTable = fixTableMultiTenancy(pTable);
- table = new PhoenixTable(pc, pTable);
+ TableRef tableRef = tables.get(0);
+ if (!isView(tableRef.getTable())) {
+ tableRef = fixTableMultiTenancy(tableRef);
+ table = new PhoenixTable(pc, tableRef);
}
} catch (TableNotFoundException e) {
} catch (SQLException e) {
@@ -151,7 +151,8 @@ public class PhoenixSchema implements Schema {
ImmutableList.<ColumnDef>of()), pc);
final List<TableRef> tables = x.getTables();
assert tables.size() == 1;
- PTable pTable = tables.get(0).getTable();
+ final TableRef tableRef = tables.get(0);
+ final PTable pTable = tableRef.getTable();
if (isView(pTable)) {
String viewSql = pTable.getViewStatement();
if (viewSql == null) {
@@ -166,7 +167,7 @@ public class PhoenixSchema implements Schema {
CalciteSchema.from(viewSqlSchema).path(null),
pTable.getViewType() == ViewType.UPDATABLE);
views.put(name, func);
- viewTables.add(pTable);
+ viewTables.add(tableRef);
}
} catch (TableNotFoundException e) {
} catch (SQLException e) {
@@ -226,16 +227,23 @@ public class PhoenixSchema implements Schema {
try {
for (Table table : tables.values()) {
if (table instanceof PhoenixTable) {
- PTable pTable = ((PhoenixTable) table).tableMapping.getPTable();
- for (PTable index : pTable.getIndexes()) {
- addMaterialization(index, path, calciteSchema);
+ TableRef tableRef = ((PhoenixTable) table).tableMapping.getTableRef();
+ for (PTable index : tableRef.getTable().getIndexes()) {
+ TableRef indexTableRef = new TableRef(null, index,
+ tableRef.getTimeStamp(), tableRef.getLowerBoundTimeStamp(),
+ false);
+ addMaterialization(indexTableRef, path, calciteSchema);
}
}
}
- for (PTable pTable : viewTables) {
+ for (TableRef tableRef : viewTables) {
+ final PTable pTable = tableRef.getTable();
for (PTable index : pTable.getIndexes()) {
if (index.getParentName().equals(pTable.getName())) {
- addMaterialization(index, path, calciteSchema);
+ TableRef indexTableRef = new TableRef(null, index,
+ tableRef.getTimeStamp(), tableRef.getLowerBoundTimeStamp(),
+ false);
+ addMaterialization(indexTableRef, path, calciteSchema);
}
}
}
@@ -244,10 +252,11 @@ public class PhoenixSchema implements Schema {
}
}
- private void addMaterialization(PTable index, List<String> path,
+ private void addMaterialization(TableRef indexTableRef, List<String> path,
CalciteSchema calciteSchema) throws SQLException {
- index = fixTableMultiTenancy(index);
- PhoenixTable table = new PhoenixTable(pc, index);
+ indexTableRef = fixTableMultiTenancy(indexTableRef);
+ final PhoenixTable table = new PhoenixTable(pc, indexTableRef);
+ final PTable index = indexTableRef.getTable();
tables.put(index.getTableName().getString(), table);
StringBuffer sb = new StringBuffer();
sb.append("SELECT");
@@ -268,16 +277,19 @@ public class PhoenixSchema implements Schema {
&& table.getViewType() != ViewType.MAPPED;
}
- private PTable fixTableMultiTenancy(PTable table) throws SQLException {
- if (pc.getTenantId() != null || !table.isMultiTenant()) {
- return table;
+ private TableRef fixTableMultiTenancy(TableRef tableRef) throws SQLException {
+ if (pc.getTenantId() != null || !tableRef.getTable().isMultiTenant()) {
+ return tableRef;
}
- return PTableImpl.makePTable(
+ PTable table = tableRef.getTable();
+ table = PTableImpl.makePTable(
table.getTenantId(), table.getSchemaName(), table.getTableName(), table.getType(), table.getIndexState(), table.getTimeStamp(),
table.getSequenceNumber(), table.getPKName(), table.getBucketNum(), PTableImpl.getColumnsToClone(table), table.getParentSchemaName(), table.getParentTableName(),
table.getIndexes(), table.isImmutableRows(), table.getPhysicalNames(), table.getDefaultFamilyName(), table.getViewStatement(),
table.isWALDisabled(), false, table.getStoreNulls(), table.getViewType(), table.getViewIndexId(), table.getIndexType(),
table.rowKeyOrderOptimizable(), table.isTransactional(), table.getUpdateCacheFrequency(), table.getTableStats(), table.getBaseColumnCount(), table.getIndexDisableTimestamp());
+ return new TableRef(null, table, tableRef.getTimeStamp(),
+ tableRef.getLowerBoundTimeStamp(), tableRef.hasDynamicCols());
}
private PhoenixSequence resolveSequence(String name) {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java
index 7b5d287..905441f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java
@@ -20,7 +20,6 @@ import org.apache.calcite.schema.TranslatableTable;
import org.apache.calcite.schema.impl.AbstractTable;
import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.calcite.util.ImmutableBitSet;
-import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Pair;
@@ -42,6 +41,7 @@ import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.SortOrder;
import org.apache.phoenix.schema.TableRef;
import org.apache.phoenix.schema.PTable.IndexType;
+import org.apache.phoenix.schema.PTableType;
import org.apache.phoenix.schema.stats.StatisticsUtil;
import org.apache.phoenix.schema.types.PDataType;
import org.apache.phoenix.util.SchemaUtil;
@@ -61,10 +61,11 @@ public class PhoenixTable extends AbstractTable implements TranslatableTable {
public final long rowCount;
public final PhoenixConnection pc;
- public PhoenixTable(PhoenixConnection pc, PTable pTable) throws SQLException {
+ public PhoenixTable(PhoenixConnection pc, TableRef tableRef) throws SQLException {
this.pc = Preconditions.checkNotNull(pc);
- PTable extendedTable = null;
- if (pTable.getIndexType() == IndexType.LOCAL) {
+ PTable pTable = tableRef.getTable();
+ TableRef dataTable = null;
+ if (pTable.getType() == PTableType.INDEX) {
ColumnResolver x = FromCompiler.getResolver(
NamedTableNode.create(null,
TableName.create(pTable.getParentSchemaName().getString(),
@@ -72,9 +73,9 @@ public class PhoenixTable extends AbstractTable implements TranslatableTable {
ImmutableList.<ColumnDef>of()), pc);
final List<TableRef> tables = x.getTables();
assert tables.size() == 1;
- extendedTable = tables.get(0).getTable();
+ dataTable = tables.get(0);
}
- this.tableMapping = extendedTable == null ? new TableMapping(pTable) : new TableMapping(pTable, extendedTable);
+ this.tableMapping = new TableMapping(tableRef, dataTable, pTable.getIndexType() == IndexType.LOCAL);
List<Integer> pkPositions = Lists.<Integer> newArrayList();
List<RelFieldCollation> fieldCollations = Lists.<RelFieldCollation> newArrayList();
final List<PColumn> columns = tableMapping.getMappedColumns();
@@ -90,7 +91,6 @@ public class PhoenixTable extends AbstractTable implements TranslatableTable {
this.collation = RelCollationTraitDef.INSTANCE.canonize(RelCollations.of(fieldCollations));
try {
PhoenixStatement stmt = new PhoenixStatement(pc);
- TableRef tableRef = new TableRef(CalciteUtils.createTempAlias(), pTable, HConstants.LATEST_TIMESTAMP, false);
ColumnResolver resolver = FromCompiler.getResolver(tableRef);
StatementContext context = new StatementContext(stmt, resolver, new Scan(), new SequenceManager(stmt));
Pair<Long, Long> estimatedCount = BaseResultIterators.getEstimatedCount(context, pTable);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java
index 839370d..ccf460f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/TableMapping.java
@@ -50,53 +50,62 @@ import com.google.common.collect.Sets;
public class TableMapping {
private final TableRef tableRef;
+ private final TableRef dataTableRef;
private final List<PColumn> mappedColumns;
private final int extendedColumnsOffset;
private final TableRef extendedTableRef;
public TableMapping(PTable table) {
this.tableRef = new TableRef(table);
+ this.dataTableRef = null;
this.mappedColumns = getMappedColumns(table);
this.extendedColumnsOffset = mappedColumns.size();
this.extendedTableRef = null;
}
- public TableMapping(PTable table, PTable dataTable) throws SQLException {
- this.tableRef = new TableRef(table);
- this.mappedColumns = Lists.newArrayList();
- this.mappedColumns.addAll(getMappedColumns(table));
- this.extendedColumnsOffset = mappedColumns.size();
- Set<String> names = Sets.newHashSet();
- for (PColumn column : this.mappedColumns) {
- names.add(column.getName().getString());
- }
- TableRef dataTableRef = new TableRef(dataTable);
- List<PColumn> projectedColumns = new ArrayList<PColumn>();
- for (PColumn sourceColumn : dataTable.getColumns()) {
- if (!SchemaUtil.isPKColumn(sourceColumn)) {
- String colName = IndexUtil.getIndexColumnName(sourceColumn);
- if (!names.contains(colName)) {
- ColumnRef sourceColumnRef =
- new ColumnRef(dataTableRef, sourceColumn.getPosition());
- PColumn column = new ProjectedColumn(PNameFactory.newName(colName),
- sourceColumn.getFamilyName(), projectedColumns.size(),
- sourceColumn.isNullable(), sourceColumnRef);
- projectedColumns.add(column);
- }
- }
+ public TableMapping(TableRef tableRef, TableRef dataTableRef, boolean extend) throws SQLException {
+ this.tableRef = tableRef;
+ this.dataTableRef = dataTableRef;
+ if (!extend) {
+ this.mappedColumns = getMappedColumns(tableRef.getTable());
+ this.extendedColumnsOffset = mappedColumns.size();
+ this.extendedTableRef = null;
+ } else {
+ this.mappedColumns = Lists.newArrayList();
+ this.mappedColumns.addAll(getMappedColumns(tableRef.getTable()));
+ this.extendedColumnsOffset = mappedColumns.size();
+ Set<String> names = Sets.newHashSet();
+ for (PColumn column : this.mappedColumns) {
+ names.add(column.getName().getString());
+ }
+ PTable dataTable = dataTableRef.getTable();
+ List<PColumn> projectedColumns = new ArrayList<PColumn>();
+ for (PColumn sourceColumn : dataTable.getColumns()) {
+ if (!SchemaUtil.isPKColumn(sourceColumn)) {
+ String colName = IndexUtil.getIndexColumnName(sourceColumn);
+ if (!names.contains(colName)) {
+ ColumnRef sourceColumnRef =
+ new ColumnRef(dataTableRef, sourceColumn.getPosition());
+ PColumn column = new ProjectedColumn(PNameFactory.newName(colName),
+ sourceColumn.getFamilyName(), projectedColumns.size(),
+ sourceColumn.isNullable(), sourceColumnRef);
+ projectedColumns.add(column);
+ }
+ }
+ }
+ this.mappedColumns.addAll(projectedColumns);
+ PTable extendedTable = PTableImpl.makePTable(dataTable.getTenantId(),
+ TupleProjectionCompiler.PROJECTED_TABLE_SCHEMA, dataTable.getName(),
+ PTableType.PROJECTED, null, dataTable.getTimeStamp(),
+ dataTable.getSequenceNumber(), dataTable.getPKName(), null,
+ projectedColumns, null, null, Collections.<PTable>emptyList(),
+ dataTable.isImmutableRows(), Collections.<PName>emptyList(), null, null,
+ dataTable.isWALDisabled(), false, dataTable.getStoreNulls(),
+ dataTable.getViewType(), null, null, dataTable.rowKeyOrderOptimizable(),
+ dataTable.isTransactional(), dataTable.getUpdateCacheFrequency(),
+ dataTable.getIndexDisableTimestamp());
+ this.extendedTableRef = new TableRef(extendedTable);
}
- this.mappedColumns.addAll(projectedColumns);
- PTable extendedTable = PTableImpl.makePTable(dataTable.getTenantId(),
- TupleProjectionCompiler.PROJECTED_TABLE_SCHEMA, dataTable.getName(),
- PTableType.PROJECTED, null, dataTable.getTimeStamp(),
- dataTable.getSequenceNumber(), dataTable.getPKName(), null,
- projectedColumns, null, null, Collections.<PTable>emptyList(),
- dataTable.isImmutableRows(), Collections.<PName>emptyList(), null, null,
- dataTable.isWALDisabled(), false, dataTable.getStoreNulls(),
- dataTable.getViewType(), null, null, dataTable.rowKeyOrderOptimizable(),
- dataTable.isTransactional(), dataTable.getUpdateCacheFrequency(),
- dataTable.getIndexDisableTimestamp());
- this.extendedTableRef = new TableRef(extendedTable);
}
public TableRef getTableRef() {
@@ -107,6 +116,10 @@ public class TableMapping {
return tableRef.getTable();
}
+ public TableRef getDataTableRef() {
+ return dataTableRef;
+ }
+
public List<PColumn> getMappedColumns() {
return mappedColumns;
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixServerAggregate.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixServerAggregate.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixServerAggregate.java
index 65cca2e..4177764 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixServerAggregate.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixServerAggregate.java
@@ -78,7 +78,7 @@ public class PhoenixServerAggregate extends PhoenixAbstractAggregate {
GroupBy groupBy = super.getGroupBy(implementor);
super.serializeAggregators(implementor, context, groupBy.isEmpty());
- QueryPlan aggPlan = new AggregatePlan(context, basePlan.getStatement(), basePlan.getTableRef(), RowProjector.EMPTY_PROJECTOR, null, null, OrderBy.EMPTY_ORDER_BY, null, groupBy, null, basePlan.getDynamicFilter());
+ QueryPlan aggPlan = new AggregatePlan(context, basePlan.getStatement(), basePlan.getTableRef(), basePlan.getSourceRefs().iterator().next(), RowProjector.EMPTY_PROJECTOR, null, null, OrderBy.EMPTY_ORDER_BY, null, groupBy, null, basePlan.getDynamicFilter());
if (hashJoinPlan != null) {
aggPlan = HashJoinPlan.create(hashJoinPlan.getStatement(), aggPlan, hashJoinPlan.getJoinInfo(), hashJoinPlan.getSubPlans());
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
index b4d64b1..76e9a4d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
@@ -46,6 +46,7 @@ import org.apache.phoenix.query.QueryServicesOptions;
import org.apache.phoenix.schema.PColumn;
import org.apache.phoenix.schema.PName;
import org.apache.phoenix.schema.PTable;
+import org.apache.phoenix.schema.TableRef;
import org.apache.phoenix.schema.types.PDataType;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
@@ -285,7 +286,10 @@ public class PhoenixTableScan extends TableScan implements PhoenixQueryRel {
OrderBy.FWD_ROW_KEY_ORDER_BY
: OrderBy.REV_ROW_KEY_ORDER_BY);
ParallelIteratorFactory iteratorFactory = null;
- return new ScanPlan(context, select, tableMapping.getTableRef(), RowProjector.EMPTY_PROJECTOR, null, null, orderBy, iteratorFactory, true, dynamicFilter);
+ TableRef tableRef = tableMapping.getTableRef();
+ TableRef srcRef = tableMapping.getDataTableRef() == null ?
+ tableRef : tableMapping.getDataTableRef();
+ return new ScanPlan(context, select, tableRef, srcRef, RowProjector.EMPTY_PROJECTOR, null, null, orderBy, iteratorFactory, true, dynamicFilter);
} catch (SQLException e) {
throw new RuntimeException(e);
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java
index e5ea255..5ab8e3a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java
@@ -79,21 +79,21 @@ public class AggregatePlan extends BaseQueryPlan {
private List<List<Scan>> scans;
public static AggregatePlan create(AggregatePlan plan, OrderBy newOrderBy) {
- return new AggregatePlan(plan.getContext(), plan.getStatement(), plan.getTableRef(), plan.getProjector(), null, null, newOrderBy, plan.parallelIteratorFactory, plan.getGroupBy(), plan.getHaving(), plan.dynamicFilter);
+ return new AggregatePlan(plan.getContext(), plan.getStatement(), plan.getTableRef(), plan.getSourceRefs().iterator().next(), plan.getProjector(), null, null, newOrderBy, plan.parallelIteratorFactory, plan.getGroupBy(), plan.getHaving(), plan.dynamicFilter);
}
public AggregatePlan(StatementContext context, FilterableStatement statement, TableRef table,
RowProjector projector, Integer limit, Integer offset, OrderBy orderBy,
ParallelIteratorFactory parallelIteratorFactory, GroupBy groupBy, Expression having) {
- this(context, statement, table, projector, limit, offset, orderBy, parallelIteratorFactory, groupBy, having,
+ this(context, statement, table, table, projector, limit, offset, orderBy, parallelIteratorFactory, groupBy, having,
null);
}
public AggregatePlan(StatementContext context, FilterableStatement statement, TableRef table,
- RowProjector projector, Integer limit, Integer offset, OrderBy orderBy,
+ TableRef srcRef, RowProjector projector, Integer limit, Integer offset, OrderBy orderBy,
ParallelIteratorFactory parallelIteratorFactory, GroupBy groupBy, Expression having,
Expression dynamicFilter) {
- super(context, statement, table, projector, context.getBindManager().getParameterMetaData(), limit, offset,
+ super(context, statement, table, srcRef, projector, context.getBindManager().getParameterMetaData(), limit, offset,
orderBy, groupBy, parallelIteratorFactory, dynamicFilter);
this.having = having;
this.aggregators = context.getAggregationManager().getAggregators();
@@ -260,7 +260,7 @@ public class AggregatePlan extends BaseQueryPlan {
if (limit == this.limit || (limit != null && limit.equals(this.limit)))
return this;
- return new AggregatePlan(this.context, this.statement, this.tableRef, this.projection,
+ return new AggregatePlan(this.context, this.statement, this.tableRef, this.tableRefs.iterator().next(), this.projection,
limit, this.offset, this.orderBy, this.parallelIteratorFactory, this.groupBy, this.having, this.dynamicFilter);
}
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
index c5c9a0e..206a11f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
@@ -112,14 +112,14 @@ public abstract class BaseQueryPlan implements QueryPlan {
protected BaseQueryPlan(
- StatementContext context, FilterableStatement statement, TableRef table,
+ StatementContext context, FilterableStatement statement, TableRef table, TableRef srcRef,
RowProjector projection, ParameterMetaData paramMetaData, Integer limit, Integer offset, OrderBy orderBy,
GroupBy groupBy, ParallelIteratorFactory parallelIteratorFactory,
Expression dynamicFilter) {
this.context = context;
this.statement = statement;
this.tableRef = table;
- this.tableRefs = ImmutableSet.of(table);
+ this.tableRefs = ImmutableSet.of(srcRef);
this.projection = projection;
this.paramMetaData = paramMetaData;
this.limit = limit;
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/execute/DegenerateQueryPlan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/DegenerateQueryPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/DegenerateQueryPlan.java
index dbda84a..8f4711c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/DegenerateQueryPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/DegenerateQueryPlan.java
@@ -38,7 +38,7 @@ import org.apache.phoenix.schema.TableRef;
public class DegenerateQueryPlan extends BaseQueryPlan {
public DegenerateQueryPlan(StatementContext context, FilterableStatement statement, TableRef table) {
- super(context, statement, table, RowProjector.EMPTY_PROJECTOR, PhoenixParameterMetaData.EMPTY_PARAMETER_META_DATA, null,null, OrderBy.EMPTY_ORDER_BY, GroupBy.EMPTY_GROUP_BY, null, null);
+ super(context, statement, table, table, RowProjector.EMPTY_PROJECTOR, PhoenixParameterMetaData.EMPTY_PARAMETER_META_DATA, null,null, OrderBy.EMPTY_ORDER_BY, GroupBy.EMPTY_GROUP_BY, null, null);
context.setScanRanges(ScanRanges.NOTHING);
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
index 055c802..63acaff 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
@@ -52,7 +52,7 @@ public class LiteralResultIterationPlan extends BaseQueryPlan {
public LiteralResultIterationPlan(Iterable<Tuple> tuples, StatementContext context,
FilterableStatement statement, TableRef tableRef, RowProjector projection,
Integer limit, Integer offset, OrderBy orderBy, ParallelIteratorFactory parallelIteratorFactory) {
- super(context, statement, tableRef, projection, context.getBindManager().getParameterMetaData(), limit, offset, orderBy, GroupBy.EMPTY_GROUP_BY, parallelIteratorFactory, null);
+ super(context, statement, tableRef, tableRef, projection, context.getBindManager().getParameterMetaData(), limit, offset, orderBy, GroupBy.EMPTY_GROUP_BY, parallelIteratorFactory, null);
this.tuples = tuples;
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
index 581dc05..b085f08 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
@@ -83,15 +83,15 @@ public class ScanPlan extends BaseQueryPlan {
private boolean allowPageFilter;
public static ScanPlan create(ScanPlan plan, OrderBy newOrderBy) throws SQLException {
- return new ScanPlan(plan.getContext(), plan.getStatement(), plan.getTableRef(), plan.getProjector(), null, null, newOrderBy, plan.parallelIteratorFactory, plan.allowPageFilter, plan.dynamicFilter);
+ return new ScanPlan(plan.getContext(), plan.getStatement(), plan.getTableRef(), plan.getSourceRefs().iterator().next(), plan.getProjector(), null, null, newOrderBy, plan.parallelIteratorFactory, plan.allowPageFilter, plan.dynamicFilter);
}
public ScanPlan(StatementContext context, FilterableStatement statement, TableRef table, RowProjector projector, Integer limit, Integer offset, OrderBy orderBy, ParallelIteratorFactory parallelIteratorFactory, boolean allowPageFilter) throws SQLException {
- this(context, statement, table, projector, limit, offset, orderBy, parallelIteratorFactory, allowPageFilter, null);
+ this(context, statement, table, table, projector, limit, offset, orderBy, parallelIteratorFactory, allowPageFilter, null);
}
- public ScanPlan(StatementContext context, FilterableStatement statement, TableRef table, RowProjector projector, Integer limit, Integer offset, OrderBy orderBy, ParallelIteratorFactory parallelIteratorFactory, boolean allowPageFilter, Expression dynamicFilter) throws SQLException {
- super(context, statement, table, projector, context.getBindManager().getParameterMetaData(), limit,offset, orderBy, GroupBy.EMPTY_GROUP_BY,
+ public ScanPlan(StatementContext context, FilterableStatement statement, TableRef table, TableRef srcRef, RowProjector projector, Integer limit, Integer offset, OrderBy orderBy, ParallelIteratorFactory parallelIteratorFactory, boolean allowPageFilter, Expression dynamicFilter) throws SQLException {
+ super(context, statement, table, srcRef, projector, context.getBindManager().getParameterMetaData(), limit,offset, orderBy, GroupBy.EMPTY_GROUP_BY,
parallelIteratorFactory != null ? parallelIteratorFactory :
buildResultIteratorFactory(context, statement, table, orderBy, limit, offset, allowPageFilter), dynamicFilter);
this.allowPageFilter = allowPageFilter;
@@ -271,7 +271,7 @@ public class ScanPlan extends BaseQueryPlan {
return this;
try {
- return new ScanPlan(this.context, this.statement, this.tableRef, this.projection,
+ return new ScanPlan(this.context, this.statement, this.tableRef, this.tableRefs.iterator().next(), this.projection,
limit, this.offset, this.orderBy, this.parallelIteratorFactory, this.allowPageFilter, this.dynamicFilter);
} catch (SQLException e) {
throw new RuntimeException(e);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d561370b/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java b/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java
index e49df4a..5917617 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/calcite/ToExpressionTest.java
@@ -40,7 +40,7 @@ import org.apache.phoenix.query.BaseConnectionlessQueryTest;
import org.apache.phoenix.schema.PName;
import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.PTableKey;
-
+import org.apache.phoenix.schema.TableRef;
import org.junit.Test;
@@ -167,7 +167,7 @@ public class ToExpressionTest extends BaseConnectionlessQueryTest {
PTable table = rootTables.get(name);
try {
- return new PhoenixTable(pc, table);
+ return new PhoenixTable(pc, new TableRef(table));
} catch (SQLException e) {
throw new RuntimeException(e);
}