示例#1
0
  @Test
  public void testWindowFunctionPushdown2() throws Exception {
    BasicSourceCapabilities caps = getTypicalCapabilities();
    caps.setCapabilitySupport(Capability.ELEMENTARY_OLAP, true);
    caps.setCapabilitySupport(Capability.WINDOW_FUNCTION_ORDER_BY_AGGREGATES, true);
    caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
    caps.setSourceProperty(Capability.QUERY_ORDERBY_DEFAULT_NULL_ORDER, NullOrder.UNKNOWN);
    ProcessorPlan plan =
        TestOptimizer.helpPlan(
            "select max(e1) over (order by e1 nulls first) as y from pm1.g1", //$NON-NLS-1$
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(caps),
            new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0"},
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    checkNodeTypes(
        plan,
        new int[] {1, 1, 1},
        new Class<?>[] {AccessNode.class, WindowFunctionProjectNode.class, ProjectNode.class});

    caps.setCapabilitySupport(Capability.QUERY_ORDERBY_NULL_ORDERING, true);
    plan =
        TestOptimizer.helpPlan(
            "select max(e1) over (order by e1 nulls first) as y from pm1.g1", //$NON-NLS-1$
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(caps),
            new String[] {
              "SELECT MAX(g_0.e1) OVER (ORDER BY g_0.e1 NULLS FIRST) FROM pm1.g1 AS g_0"
            },
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    checkNodeTypes(plan, FULL_PUSHDOWN);
  }