@Override public List<List<Scan>> getScans() { return delegate.getScans(); }
public UnionResultIterators(List<QueryPlan> plans, StatementContext parentStmtCtx) throws SQLException { this.parentStmtCtx = parentStmtCtx; int nPlans = plans.size(); iterators = Lists.newArrayListWithExpectedSize(nPlans); splits = Lists.newArrayListWithExpectedSize(nPlans * 30); scans = Lists.newArrayListWithExpectedSize(nPlans * 10); readMetricsList = Lists.newArrayListWithCapacity(nPlans); overAllQueryMetricsList = Lists.newArrayListWithCapacity(nPlans); for (QueryPlan plan : plans) { readMetricsList.add(plan.getContext().getReadMetricsQueue()); overAllQueryMetricsList.add(plan.getContext().getOverallQueryMetrics()); iterators.add(LookAheadResultIterator.wrap(plan.iterator())); splits.addAll(plan.getSplits()); scans.addAll(plan.getScans()); } }
for (List<Scan> scans : qplan.getScans()) {
.getAdmin()); for (List<Scan> scans : qplan.getScans()) { PhoenixInputSplit inputSplit;
for (List<Scan> scans : queryPlan.getScans()) {
@Override public List<List<Scan>> getScans() { return delegate.getScans(); }
@Override public List<List<Scan>> getScans() { return delegate.getScans(); }
@Test public void testSingleColLocalIndexPruning() throws SQLException { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.createStatement().execute("CREATE TABLE T (\n" + " A CHAR(1) NOT NULL,\n" + " B CHAR(1) NOT NULL,\n" + " C CHAR(1) NOT NULL,\n" + " CONSTRAINT PK PRIMARY KEY (\n" + " A,\n" + " B,\n" + " C\n" + " )\n" + ") SPLIT ON ('A','C','E','G','I')"); conn.createStatement().execute("CREATE LOCAL INDEX IDX ON T(A,C)"); String query = "SELECT * FROM T WHERE A = 'B' and C='C'"; PhoenixStatement statement = conn.createStatement().unwrap(PhoenixStatement.class); QueryPlan plan = statement.optimizeQuery(query); assertEquals("IDX", plan.getContext().getCurrentTable().getTable().getName().getString()); plan.iterator(); List<List<Scan>> outerScans = plan.getScans(); assertEquals(1, outerScans.size()); List<Scan> innerScans = outerScans.get(0); assertEquals(1, innerScans.size()); Scan scan = innerScans.get(0); assertEquals("A", Bytes.toString(scan.getStartRow()).trim()); assertEquals("C", Bytes.toString(scan.getStopRow()).trim()); } }
assertEquals("IDX", plan.getContext().getCurrentTable().getTable().getName().getString()); plan.iterator(); List<List<Scan>> outerScans = plan.getScans(); assertEquals(2, outerScans.size()); List<Scan> innerScans1 = outerScans.get(0);
assertEquals("IDX", plan.getContext().getCurrentTable().getTable().getName().getString()); plan.iterator(); List<List<Scan>> outerScans = plan.getScans(); assertEquals(1, outerScans.size()); List<Scan> innerScans = outerScans.get(0);
assertEquals("IDX", plan.getContext().getCurrentTable().getTable().getName().getString()); plan.iterator(); List<List<Scan>> outerScans = plan.getScans(); assertEquals(1, outerScans.size()); List<Scan> innerScans = outerScans.get(0);
assertEquals("IDX", plan.getContext().getCurrentTable().getTable().getName().getString()); plan.iterator(); List<List<Scan>> outerScans = plan.getScans(); assertEquals(1, outerScans.size()); List<Scan> innerScans = outerScans.get(0);
@Test public void testNoLocalIndexPruning() throws SQLException { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); try (Connection conn = DriverManager.getConnection(getUrl(), props)) { conn.createStatement().execute("CREATE TABLE T (\n" + " A CHAR(1) NOT NULL,\n" + " B CHAR(1) NOT NULL,\n" + " C CHAR(1) NOT NULL,\n" + " CONSTRAINT PK PRIMARY KEY (\n" + " A,\n" + " B,\n" + " C\n" + " )\n" + ") SPLIT ON ('A','C','E','G','I')"); conn.createStatement().execute("CREATE LOCAL INDEX IDX ON T(C)"); String query = "SELECT * FROM T WHERE C='C'"; PhoenixStatement statement = conn.createStatement().unwrap(PhoenixStatement.class); QueryPlan plan = statement.optimizeQuery(query); assertEquals("IDX", plan.getContext().getCurrentTable().getTable().getName().getString()); plan.iterator(); List<List<Scan>> outerScans = plan.getScans(); assertEquals(6, outerScans.size()); } }
assertEquals("IDX", plan.getContext().getCurrentTable().getTable().getName().getString()); plan.iterator(); List<List<Scan>> outerScans = plan.getScans(); assertEquals(1, outerScans.size()); List<Scan> innerScans = outerScans.get(0);
.getScans().get(0).size()); assertTrue(rs.next()); assertEquals(10, rs.getInt(1)); .getScans().get(0).size()); assertTrue(rs.next()); assertEquals(10, rs.getInt(1)); .getScans().get(0).size()); assertTrue(rs.next()); assertEquals(10, rs.getInt(1)); .getScans().get(0).size()); assertTrue(rs.next()); assertEquals(10, rs.getInt(1)); .getScans().get(0).size()); assertTrue(rs.next()); assertEquals(10, rs.getInt(1));
@Test public void testServerNameOnScan() throws Exception { Connection conn = DriverManager.getConnection(getUrl(), TEST_PROPERTIES); byte[][] splits = new byte[][] { K3, K9, KR }; createTable(conn, splits); PhoenixStatement stmt = conn.createStatement().unwrap(PhoenixStatement.class); ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName + " LIMIT 1"); rs.next(); QueryPlan plan = stmt.getQueryPlan(); List<List<Scan>> nestedScans = plan.getScans(); assertNotNull(nestedScans); for (List<Scan> scans : nestedScans) { for (Scan scan : scans) { byte[] serverNameBytes = scan.getAttribute(BaseScannerRegionObserver.SCAN_REGION_SERVER); assertNotNull(serverNameBytes); ServerName serverName = ServerName.parseVersionedServerName(serverNameBytes); assertNotNull(serverName.getHostname()); } } }
rs.getStatement().getQueryPlan().getTableRef().getTable().getName().getString()); assertEquals(useStats ? 11 : 1, rs.unwrap(PhoenixResultSet.class).getStatement() .getQueryPlan().getScans().get(0).size()); .getQueryPlan().getTableRef().getTable().getName().getString()); assertEquals(useStats ? 11 : 1, rs.unwrap(PhoenixResultSet.class).getStatement() .getQueryPlan().getScans().get(0).size()); .getTableRef().getTable().getName().getString()); assertEquals(useStats ? 11 : 1, rs.unwrap(PhoenixResultSet.class).getStatement() .getQueryPlan().getScans().get(0).size()); .getTableRef().getTable().getName().getString()); assertEquals(useStats ? 11 : 1, rs.unwrap(PhoenixResultSet.class).getStatement() .getQueryPlan().getScans().get(0).size()); .getTableRef().getTable().getName().getString()); assertEquals(useStats ? 11 : 1, rs.unwrap(PhoenixResultSet.class).getStatement() .getQueryPlan().getScans().get(0).size()); .getTableRef().getTable().getName().getString()); assertEquals(!useStats ? 11 : 1, rs.unwrap(PhoenixResultSet.class).getStatement() .getQueryPlan().getScans().get(0).size()); .getTableRef().getTable().getName().getString()); assertEquals(!useStats ? 11 : 1, rs.unwrap(PhoenixResultSet.class).getStatement() .getQueryPlan().getScans().get(0).size());
private List<InputSplit> generateSplits(final QueryPlan qplan, final List<KeyRange> splits) throws IOException { Preconditions.checkNotNull(qplan); Preconditions.checkNotNull(splits); final List<InputSplit> psplits = Lists.newArrayListWithExpectedSize(splits.size()); for (List<Scan> scans : qplan.getScans()) { psplits.add(new PhoenixInputSplit(scans)); } return psplits; }
public UnionResultIterators(List<QueryPlan> plans, StatementContext parentStmtCtx) throws SQLException { this.parentStmtCtx = parentStmtCtx; int nPlans = plans.size(); iterators = Lists.newArrayListWithExpectedSize(nPlans); splits = Lists.newArrayListWithExpectedSize(nPlans * 30); scans = Lists.newArrayListWithExpectedSize(nPlans * 10); readMetricsList = Lists.newArrayListWithCapacity(nPlans); overAllQueryMetricsList = Lists.newArrayListWithCapacity(nPlans); for (QueryPlan plan : plans) { readMetricsList.add(plan.getContext().getReadMetricsQueue()); overAllQueryMetricsList.add(plan.getContext().getOverallQueryMetrics()); iterators.add(LookAheadResultIterator.wrap(plan.iterator())); splits.addAll(plan.getSplits()); scans.addAll(plan.getScans()); } }