public <M extends Metadata> UnboundMetadata<M> apply( Class<? extends RelNode> relClass, final Class<? extends M> metadataClass) { return (rel, mq) -> { if (!(rel instanceof HepRelVertex)) { return null; } HepRelVertex vertex = (HepRelVertex) rel; final RelNode rel2 = vertex.getCurrentRel(); UnboundMetadata<M> function = rel.getCluster().getMetadataProvider().apply(rel2.getClass(), metadataClass); return function.bind(rel2, mq); }; }
public <M extends Metadata> UnboundMetadata<M> apply( Class<? extends RelNode> relClass, final Class<? extends M> metadataClass) { return (rel, mq) -> { if (!(rel instanceof HepRelVertex)) { return null; } HepRelVertex vertex = (HepRelVertex) rel; final RelNode rel2 = vertex.getCurrentRel(); UnboundMetadata<M> function = rel.getCluster().getMetadataProvider().apply(rel2.getClass(), metadataClass); return function.bind(rel2, mq); }; }
public RelNode transform(int ruleSetIndex, RelTraitSet requiredOutputTraits, RelNode rel) throws RelConversionException { ensure(State.STATE_5_CONVERTED); rel.getCluster().setMetadataProvider( new CachingRelMetadataProvider( rel.getCluster().getMetadataProvider(), rel.getCluster().getPlanner())); Program program = programs.get(ruleSetIndex); return program.run(planner, rel, requiredOutputTraits, ImmutableList.of(), ImmutableList.of()); }
public RelNode transform(int ruleSetIndex, RelTraitSet requiredOutputTraits, RelNode rel) throws RelConversionException { ensure(State.STATE_5_CONVERTED); rel.getCluster().setMetadataProvider( new CachingRelMetadataProvider( rel.getCluster().getMetadataProvider(), rel.getCluster().getPlanner())); Program program = programs.get(ruleSetIndex); return program.run(planner, rel, requiredOutputTraits, ImmutableList.of(), ImmutableList.of()); }
final RelSubset subset = (RelSubset) rel; final RelMetadataProvider provider = rel.getCluster().getMetadataProvider();
final RelSubset subset = (RelSubset) rel; final RelMetadataProvider provider = rel.getCluster().getMetadataProvider();
@Test public void testBrokenCustomProvider() { final List<String> buf = new ArrayList<>(); ColTypeImpl.THREAD_LIST.set(buf); final String sql = "select deptno, count(*) from emp where deptno > 10 " + "group by deptno having count(*) = 0"; final RelRoot root = tester .withClusterFactory(cluster -> { cluster.setMetadataProvider( ChainedRelMetadataProvider.of( ImmutableList.of(BrokenColTypeImpl.SOURCE, cluster.getMetadataProvider()))); return cluster; }) .convertSqlToRel(sql); final RelNode rel = root.rel; assertThat(rel, instanceOf(LogicalFilter.class)); final MyRelMetadataQuery mq = new MyRelMetadataQuery(); try { assertThat(colType(mq, rel, 0), equalTo("DEPTNO-rel")); fail("expected error"); } catch (IllegalArgumentException e) { final String value = "No handler for method [public abstract java.lang.String " + "org.apache.calcite.test.RelMetadataTest$ColType.getColType(int)] " + "applied to argument of type [interface org.apache.calcite.rel.RelNode]; " + "we recommend you create a catch-all (RelNode) handler"; assertThat(e.getMessage(), is(value)); } }
JaninoRelMetadataProvider.of(cluster.getMetadataProvider())); RelNode result = convertQueryRecursive(query, top, null).rel; if (top) {
@Test public void testBrokenCustomProvider() { final List<String> buf = new ArrayList<>(); ColTypeImpl.THREAD_LIST.set(buf); final String sql = "select deptno, count(*) from emp where deptno > 10 " + "group by deptno having count(*) = 0"; final RelRoot root = tester .withClusterFactory(cluster -> { cluster.setMetadataProvider( ChainedRelMetadataProvider.of( ImmutableList.of(BrokenColTypeImpl.SOURCE, cluster.getMetadataProvider()))); return cluster; }) .convertSqlToRel(sql); final RelNode rel = root.rel; assertThat(rel, instanceOf(LogicalFilter.class)); final MyRelMetadataQuery mq = new MyRelMetadataQuery(); try { assertThat(colType(mq, rel, 0), equalTo("DEPTNO-rel")); fail("expected error"); } catch (IllegalArgumentException e) { final String value = "No handler for method [public abstract java.lang.String " + "org.apache.calcite.test.RelMetadataTest$ColType.getColType(int)] " + "applied to argument of type [interface org.apache.calcite.rel.RelNode]; " + "we recommend you create a catch-all (RelNode) handler"; assertThat(e.getMessage(), is(value)); } }
JaninoRelMetadataProvider.of(cluster.getMetadataProvider())); RelNode result = convertQueryRecursive(query, top, null).rel; if (top) {
JaninoRelMetadataProvider.of(cluster.getMetadataProvider())); RelNode result = convertQueryRecursive(query, top, null).rel; if (top) {
JaninoRelMetadataProvider.of(cluster.getMetadataProvider())); RelNode result = convertQueryRecursive(query, top, null).rel; if (top) {
cluster.getMetadataProvider()); cluster.setMetadataProvider( ChainedRelMetadataProvider.of(list)); rel.getCluster().setMetadataProvider( new CachingRelMetadataProvider( rel.getCluster().getMetadataProvider(), planner)); assertThat(colType(mq, input, 0), equalTo("DEPTNO-agg")); assertThat(buf.size(), equalTo(5));
cluster.getMetadataProvider()); cluster.setMetadataProvider( ChainedRelMetadataProvider.of(list)); rel.getCluster().setMetadataProvider( new CachingRelMetadataProvider( rel.getCluster().getMetadataProvider(), planner)); assertThat(colType(mq, input, 0), equalTo("DEPTNO-agg")); assertThat(buf.size(), equalTo(5));
/** Checks that we can cache a metadata request that includes a null * argument. */ @Test public void testSelectivityAggCached() { RelNode rel = convertSql("select deptno, count(*) from emp where deptno > 10 " + "group by deptno having count(*) = 0"); rel.getCluster().setMetadataProvider( new CachingRelMetadataProvider( rel.getCluster().getMetadataProvider(), rel.getCluster().getPlanner())); final RelMetadataQuery mq = RelMetadataQuery.instance(); Double result = mq.getSelectivity(rel, null); assertThat(result, within(DEFAULT_COMP_SELECTIVITY * DEFAULT_EQUAL_SELECTIVITY, EPSILON)); }
/** Checks that we can cache a metadata request that includes a null * argument. */ @Test public void testSelectivityAggCached() { RelNode rel = convertSql("select deptno, count(*) from emp where deptno > 10 " + "group by deptno having count(*) = 0"); rel.getCluster().setMetadataProvider( new CachingRelMetadataProvider( rel.getCluster().getMetadataProvider(), rel.getCluster().getPlanner())); final RelMetadataQuery mq = RelMetadataQuery.instance(); Double result = mq.getSelectivity(rel, null); assertThat(result, within(DEFAULT_COMP_SELECTIVITY * DEFAULT_EQUAL_SELECTIVITY, EPSILON)); }