@Override public Set<TableRef> getSourceRefs() { return dataPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return originalQueryPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return originalQueryPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return delegate.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return dataPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { // TODO is this correct? Set<TableRef> sources = Sets.newHashSetWithExpectedSize(plans.size()); for (QueryPlan plan : plans) { sources.addAll(plan.getSourceRefs()); } return sources; }
public SortMergeJoinPlan(StatementContext context, FilterableStatement statement, TableRef table, JoinType type, QueryPlan lhsPlan, QueryPlan rhsPlan, List<Expression> lhsKeyExpressions, List<Expression> rhsKeyExpressions, PTable joinedTable, PTable lhsTable, PTable rhsTable, int rhsFieldPosition, boolean isSingleValueOnly) { if (type == JoinType.Right) throw new IllegalArgumentException("JoinType should not be " + type); this.context = context; this.statement = statement; this.table = table; this.type = type; this.lhsPlan = lhsPlan; this.rhsPlan = rhsPlan; this.lhsKeyExpressions = lhsKeyExpressions; this.rhsKeyExpressions = rhsKeyExpressions; this.joinedSchema = buildSchema(joinedTable); this.lhsSchema = buildSchema(lhsTable); this.rhsSchema = buildSchema(rhsTable); this.rhsFieldPosition = rhsFieldPosition; this.isSingleValueOnly = isSingleValueOnly; this.tableRefs = Sets.newHashSetWithExpectedSize(lhsPlan.getSourceRefs().size() + rhsPlan.getSourceRefs().size()); this.tableRefs.addAll(lhsPlan.getSourceRefs()); this.tableRefs.addAll(rhsPlan.getSourceRefs()); this.thresholdBytes = context.getConnection().getQueryServices().getProps().getInt( QueryServices.SPOOL_THRESHOLD_BYTES_ATTRIB, QueryServicesOptions.DEFAULT_SPOOL_THRESHOLD_BYTES); }
private HashJoinPlan(SelectStatement statement, QueryPlan plan, HashJoinInfo joinInfo, SubPlan[] subPlans, boolean recompileWhereClause, Map<ImmutableBytesPtr,ServerCache> dependencies) throws SQLException { super(plan); this.dependencies.putAll(dependencies); this.statement = statement; this.joinInfo = joinInfo; this.subPlans = subPlans; this.recompileWhereClause = recompileWhereClause; this.tableRefs = Sets.newHashSetWithExpectedSize(subPlans.length + plan.getSourceRefs().size()); this.tableRefs.addAll(plan.getSourceRefs()); this.hasSubPlansWithPersistentCache = false; for (SubPlan subPlan : subPlans) { tableRefs.addAll(subPlan.getInnerPlan().getSourceRefs()); if (subPlan instanceof HashSubPlan && ((HashSubPlan)subPlan).usePersistentCache) { this.hasSubPlansWithPersistentCache = true; } } QueryServices services = plan.getContext().getConnection().getQueryServices(); this.maxServerCacheTimeToLive = services.getProps().getInt( QueryServices.MAX_SERVER_CACHE_TIME_TO_LIVE_MS_ATTRIB, QueryServicesOptions.DEFAULT_MAX_SERVER_CACHE_TIME_TO_LIVE_MS); this.serverCacheLimit = services.getProps().getLong( QueryServices.MAX_SERVER_CACHE_SIZE_ATTRIB, QueryServicesOptions.DEFAULT_MAX_SERVER_CACHE_SIZE); }
private void verifyQueryPlanSourceRefs(String query, int refCount) throws SQLException { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.createStatement().execute("CREATE TABLE A (\n" + " K1 VARCHAR(10) NOT NULL PRIMARY KEY,\n" + " V1 VARCHAR(10))"); conn.createStatement().execute("CREATE LOCAL INDEX IDX1 ON A(V1)"); conn.createStatement().execute("CREATE TABLE B (\n" + " K2 VARCHAR(10) NOT NULL PRIMARY KEY,\n" + " V2 VARCHAR(10))"); conn.createStatement().execute("CREATE LOCAL INDEX IDX2 ON B(V2)"); PhoenixStatement stmt = conn.createStatement().unwrap(PhoenixStatement.class); QueryPlan plan = stmt.compileQuery(query); Set<TableRef> sourceRefs = plan.getSourceRefs(); assertEquals(refCount, sourceRefs.size()); for (TableRef table : sourceRefs) { assertTrue(table.getTable().getType() == PTableType.TABLE); } plan = stmt.optimizeQuery(query); sourceRefs = plan.getSourceRefs(); assertEquals(refCount, sourceRefs.size()); for (TableRef table : sourceRefs) { assertTrue(table.getTable().getType() == PTableType.INDEX); } } }
@Override public Set<TableRef> getSourceRefs() { return dataPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return delegate.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return dataPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return originalQueryPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return originalQueryPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return originalQueryPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return dataPlan.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { return delegate.getSourceRefs(); }
@Override public Set<TableRef> getSourceRefs() { // TODO is this correct? Set<TableRef> sources = Sets.newHashSetWithExpectedSize(plans.size()); for (QueryPlan plan : plans) { sources.addAll(plan.getSourceRefs()); } return sources; }
@Override public Set<TableRef> getSourceRefs() { // TODO is this correct? Set<TableRef> sources = Sets.newHashSetWithExpectedSize(plans.size()); for (QueryPlan plan : plans) { sources.addAll(plan.getSourceRefs()); } return sources; }
private static int totalIndexTable(QueryPlan plan) { int counter = 0; for (TableRef tableRef : plan.getSourceRefs()) { counter += tableRef.getTable().getType() == PTableType.INDEX ? 1 : 0; } return counter; }