本文整理汇总了Java中org.apache.calcite.rel.rules.ProjectMergeRule类的典型用法代码示例。如果您正苦于以下问题:Java ProjectMergeRule类的具体用法?Java ProjectMergeRule怎么用?Java ProjectMergeRule使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ProjectMergeRule类属于org.apache.calcite.rel.rules包,在下文中一共展示了ProjectMergeRule类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。
示例1: toLeafJoinForm
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
/**
* Converts a relational expression to a form where
* {@link org.apache.calcite.rel.logical.LogicalJoin}s are
* as close to leaves as possible.
*/
public static RelNode toLeafJoinForm(RelNode rel) {
final Program program = Programs.hep(
ImmutableList.of(
JoinProjectTransposeRule.RIGHT_PROJECT,
JoinProjectTransposeRule.LEFT_PROJECT,
FilterJoinRule.FilterIntoJoinRule.FILTER_ON_JOIN,
ProjectRemoveRule.INSTANCE,
ProjectMergeRule.INSTANCE),
false,
DefaultRelMetadataProvider.INSTANCE);
if (CalcitePrepareImpl.DEBUG) {
System.out.println(
RelOptUtil.dumpPlan("before", rel, SqlExplainFormat.TEXT,
SqlExplainLevel.DIGEST_ATTRIBUTES));
}
final RelNode rel2 = program.run(null, rel, null,
ImmutableList.<RelOptMaterialization>of(),
ImmutableList.<RelOptLattice>of());
if (CalcitePrepareImpl.DEBUG) {
System.out.println(
RelOptUtil.dumpPlan("after", rel2, SqlExplainFormat.TEXT,
SqlExplainLevel.DIGEST_ATTRIBUTES));
}
return rel2;
}
开发者ID:apache,项目名称:calcite,代码行数:31,代码来源:RelOptMaterialization.java
示例2: testStrengthenJoinType
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testStrengthenJoinType() {
// The "Filter(... , right.c IS NOT NULL)" above a left join is pushed into
// the join, makes it an inner join, and then disappears because c is NOT
// NULL.
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.build();
final String sql = "select *\n"
+ "from dept left join emp using (deptno)\n"
+ "where emp.deptno is not null and emp.sal > 100";
sql(sql)
.withDecorrelation(true)
.withTrim(true)
.withPre(preProgram)
.with(program)
.check();
}
开发者ID:apache,项目名称:calcite,代码行数:24,代码来源:RelOptRulesTest.java
示例3: testJoinProjectTranspose
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testJoinProjectTranspose() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(ProjectJoinTransposeRule.INSTANCE)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(JoinProjectTransposeRule.LEFT_PROJECT_INCLUDE_OUTER)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(JoinProjectTransposeRule.RIGHT_PROJECT_INCLUDE_OUTER)
.addRuleInstance(JoinProjectTransposeRule.LEFT_PROJECT_INCLUDE_OUTER)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final String sql = "select a.name\n"
+ "from dept a\n"
+ "left join dept b on b.deptno > 10\n"
+ "right join dept c on b.deptno > 10\n";
checkPlanning(tester, preProgram, new HepPlanner(program), sql);
}
开发者ID:apache,项目名称:calcite,代码行数:21,代码来源:RelOptRulesTest.java
示例4: testSemiJoinRuleExists
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testSemiJoinRuleExists() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select * from dept where exists (\n"
+ " select * from emp\n"
+ " where emp.deptno = dept.deptno\n"
+ " and emp.sal > 100)";
sql(sql)
.withDecorrelation(true)
.withTrim(true)
.withPre(preProgram)
.with(program)
.check();
}
开发者ID:apache,项目名称:calcite,代码行数:23,代码来源:RelOptRulesTest.java
示例5: testSemiJoinRule
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testSemiJoinRule() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select dept.* from dept join (\n"
+ " select distinct deptno from emp\n"
+ " where sal > 100) using (deptno)";
sql(sql)
.withDecorrelation(true)
.withTrim(true)
.withPre(preProgram)
.with(program)
.check();
}
开发者ID:apache,项目名称:calcite,代码行数:22,代码来源:RelOptRulesTest.java
示例6: testSemiJoinRuleRight
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-1495">[CALCITE-1495]
* SemiJoinRule should not apply to RIGHT and FULL JOIN</a>. */
@Test public void testSemiJoinRuleRight() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select dept.* from dept right join (\n"
+ " select distinct deptno from emp\n"
+ " where sal > 100) using (deptno)";
sql(sql)
.withPre(preProgram)
.with(program)
.withDecorrelation(true)
.withTrim(true)
.checkUnchanged();
}
开发者ID:apache,项目名称:calcite,代码行数:25,代码来源:RelOptRulesTest.java
示例7: testSemiJoinRuleFull
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
/** Similar to {@link #testSemiJoinRuleRight()} but FULL. */
@Test public void testSemiJoinRuleFull() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select dept.* from dept full join (\n"
+ " select distinct deptno from emp\n"
+ " where sal > 100) using (deptno)";
sql(sql)
.withPre(preProgram)
.with(program)
.withDecorrelation(true)
.withTrim(true)
.checkUnchanged();
}
开发者ID:apache,项目名称:calcite,代码行数:23,代码来源:RelOptRulesTest.java
示例8: testSemiJoinRuleLeft
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
/** Similar to {@link #testSemiJoinRule()} but LEFT. */
@Test public void testSemiJoinRuleLeft() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select name from dept left join (\n"
+ " select distinct deptno from emp\n"
+ " where sal > 100) using (deptno)";
sql(sql)
.withPre(preProgram)
.with(program)
.withDecorrelation(true)
.withTrim(true)
.check();
}
开发者ID:apache,项目名称:calcite,代码行数:23,代码来源:RelOptRulesTest.java
示例9: testEmptyFilterProjectUnion
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testEmptyFilterProjectUnion() throws Exception {
HepProgram program = new HepProgramBuilder()
.addRuleInstance(FilterSetOpTransposeRule.INSTANCE)
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(ValuesReduceRule.PROJECT_FILTER_INSTANCE)
.addRuleInstance(PruneEmptyRules.PROJECT_INSTANCE)
.addRuleInstance(PruneEmptyRules.UNION_INSTANCE)
.build();
// Plan should be same as for
// select * from (values (30, 3)) as t(x, y)");
checkPlanning(program,
"select * from (\n"
+ "select * from (values (10, 1), (30, 3)) as t (x, y)\n"
+ "union all\n"
+ "select * from (values (20, 2))\n"
+ ")\n"
+ "where x + y > 30");
}
开发者ID:apache,项目名称:calcite,代码行数:21,代码来源:RelOptRulesTest.java
示例10: testPullFilterThroughAggregateGroupingSets
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testPullFilterThroughAggregateGroupingSets()
throws Exception {
HepProgram preProgram = HepProgram.builder()
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(ProjectFilterTransposeRule.INSTANCE)
.build();
HepProgram program = HepProgram.builder()
.addRuleInstance(AggregateFilterTransposeRule.INSTANCE)
.build();
final String sql = "select ename, sal, deptno from ("
+ " select ename, sal, deptno"
+ " from emp"
+ " where sal > 5000)"
+ "group by rollup(ename, sal, deptno)";
checkPlanning(tester, preProgram, new HepPlanner(program), sql);
}
开发者ID:apache,项目名称:calcite,代码行数:17,代码来源:RelOptRulesTest.java
示例11: testProjectWindowTransposeRuleWithConstants
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testProjectWindowTransposeRuleWithConstants() {
HepProgram program = new HepProgramBuilder()
.addRuleInstance(ProjectToWindowRule.PROJECT)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(ProjectWindowTransposeRule.INSTANCE)
.build();
final String sql = "select col1, col2\n"
+ "from (\n"
+ " select empno,\n"
+ " sum(100) over (partition by deptno order by sal) as col1,\n"
+ " sum(1000) over(partition by deptno order by sal) as col2\n"
+ " from emp)";
checkPlanning(program, sql);
}
开发者ID:apache,项目名称:calcite,代码行数:17,代码来源:RelOptRulesTest.java
示例12: substitute
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
private static List<RelNode> substitute(
RelNode root, RelOptMaterialization materialization) {
// First, if the materialization is in terms of a star table, rewrite
// the query in terms of the star table.
if (materialization.starTable != null) {
RelNode newRoot = RelOptMaterialization.tryUseStar(root,
materialization.starRelOptTable);
if (newRoot != null) {
root = newRoot;
}
}
// Push filters to the bottom, and combine projects on top.
RelNode target = materialization.queryRel;
HepProgram program =
new HepProgramBuilder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(ProjectRemoveRule.INSTANCE)
.build();
final HepPlanner hepPlanner = new HepPlanner(program);
hepPlanner.setRoot(target);
target = hepPlanner.findBestExp();
hepPlanner.setRoot(root);
root = hepPlanner.findBestExp();
return new MaterializedViewSubstitutionVisitor(target, root)
.go(materialization.tableRel);
}
开发者ID:apache,项目名称:calcite,代码行数:32,代码来源:RelOptMaterializations.java
示例13: testMergeProjectForceMode
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-648">[CALCITE-649]
* Update ProjectMergeRule description for new naming convention</a>. */
@Test public void testMergeProjectForceMode() throws Exception {
RuleSet ruleSet =
RuleSets.ofList(
new ProjectMergeRule(true,
RelBuilder.proto(RelFactories.DEFAULT_PROJECT_FACTORY)));
Planner planner = getPlanner(null, Programs.of(ruleSet));
planner.close();
}
开发者ID:apache,项目名称:calcite,代码行数:12,代码来源:PlannerTest.java
示例14: testConvertSemiJoin
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testConvertSemiJoin() {
final String sql = "select * from dept where exists (\n"
+ " select * from emp\n"
+ " where emp.deptno = dept.deptno\n"
+ " and emp.sal > 100)";
checkConvertMutableRel(
"SemiJoin",
sql,
true,
ImmutableList.of(
FilterProjectTransposeRule.INSTANCE,
FilterJoinRule.FILTER_ON_JOIN,
ProjectMergeRule.INSTANCE,
SemiJoinRule.PROJECT));
}
开发者ID:apache,项目名称:calcite,代码行数:16,代码来源:MutableRelTest.java
示例15: basePushFilterPastAggWithGroupingSets
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
private void basePushFilterPastAggWithGroupingSets(boolean unchanged)
throws Exception {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(FilterAggregateTransposeRule.INSTANCE)
.build();
checkPlanning(tester, preProgram, new HepPlanner(program), "${sql}",
unchanged);
}
开发者ID:apache,项目名称:calcite,代码行数:15,代码来源:RelOptRulesTest.java
示例16: testDistinctCountMixed
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testDistinctCountMixed() {
final HepProgram program = HepProgram.builder()
.addRuleInstance(AggregateExpandDistinctAggregatesRule.INSTANCE)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
checkPlanning(program,
"select deptno, count(distinct deptno, job) as cddj, sum(sal) as s\n"
+ " from sales.emp group by deptno");
}
开发者ID:apache,项目名称:calcite,代码行数:10,代码来源:RelOptRulesTest.java
示例17: testDistinctCountMixed2
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testDistinctCountMixed2() {
final HepProgram program = HepProgram.builder()
.addRuleInstance(AggregateExpandDistinctAggregatesRule.INSTANCE)
.addRuleInstance(AggregateProjectMergeRule.INSTANCE)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
checkPlanning(program,
"select deptno, count(distinct ename) as cde,\n"
+ " count(distinct job, ename) as cdje,\n"
+ " count(distinct deptno, job) as cddj,\n"
+ " sum(sal) as s\n"
+ " from sales.emp group by deptno");
}
开发者ID:apache,项目名称:calcite,代码行数:14,代码来源:RelOptRulesTest.java
示例18: testDistinctCountGroupingSets1
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testDistinctCountGroupingSets1() {
final HepProgram program = HepProgram.builder()
.addRuleInstance(AggregateExpandDistinctAggregatesRule.INSTANCE)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
checkPlanning(program,
"select deptno, job, count(distinct ename)"
+ " from sales.emp group by rollup(deptno,job)");
}
开发者ID:apache,项目名称:calcite,代码行数:10,代码来源:RelOptRulesTest.java
示例19: testDistinctCountGroupingSets2
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testDistinctCountGroupingSets2() {
final HepProgram program = HepProgram.builder()
.addRuleInstance(AggregateExpandDistinctAggregatesRule.INSTANCE)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
checkPlanning(program,
"select deptno, job, count(distinct ename), sum(sal)"
+ " from sales.emp group by rollup(deptno,job)");
}
开发者ID:apache,项目名称:calcite,代码行数:10,代码来源:RelOptRulesTest.java
示例20: testReduceValuesUnderProject
import org.apache.calcite.rel.rules.ProjectMergeRule; //导入依赖的package包/类
@Test public void testReduceValuesUnderProject() throws Exception {
HepProgram program = new HepProgramBuilder()
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(ValuesReduceRule.PROJECT_INSTANCE)
.build();
// Plan should be same as for
// select a, b as x from (values (11), (23)) as t(x)");
checkPlanning(program,
"select a + b from (values (10, 1), (20, 3)) as t(a, b)");
}
开发者ID:apache,项目名称:calcite,代码行数:12,代码来源:RelOptRulesTest.java
注:本文中的org.apache.calcite.rel.rules.ProjectMergeRule类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论