Пример #1
0
  @Test
  public void testWindowFunctionPushdown3() throws Exception {
    BasicSourceCapabilities caps = getTypicalCapabilities();
    caps.setCapabilitySupport(Capability.ELEMENTARY_OLAP, true);
    caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
    caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_DISTINCT, true);
    ProcessorPlan plan =
        TestOptimizer.helpPlan(
            "select count(distinct e1) over (partition by e2) as y from pm1.g1", //$NON-NLS-1$
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(caps),
            new String[] {"SELECT g_0.e1, g_0.e2 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.WINDOW_FUNCTION_DISTINCT_AGGREGATES, true);
    plan =
        TestOptimizer.helpPlan(
            "select count(distinct e1) over (partition by e2) as y from pm1.g1", //$NON-NLS-1$
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(caps),
            new String[] {
              "SELECT COUNT(DISTINCT g_0.e1) OVER (PARTITION BY g_0.e2) FROM pm1.g1 AS g_0"
            },
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    checkNodeTypes(plan, FULL_PUSHDOWN);
  }
Пример #2
0
  @Test
  public void testIsolateReads() throws Exception {
    GlobalTableStoreImpl gtsi =
        new GlobalTableStoreImpl(
            BufferManagerFactory.getStandaloneBufferManager(),
            RealMetadataFactory.example1Cached().getVdbMetaData(),
            RealMetadataFactory.example1Cached());
    tempStore = gtsi.getTempTableStore();
    metadata =
        new TempMetadataAdapter(RealMetadataFactory.example1Cached(), tempStore.getMetadataStore());
    execute(
        "create local temporary table x (e1 string, e2 integer)",
        new List[] {Arrays.asList(0)}); // $NON-NLS-1$
    for (int i = 0; i < 300; i++) {
      execute(
          "insert into x (e2, e1) select e2, e1 from pm1.g1",
          new List[] {Arrays.asList(6)}); // $NON-NLS-1$
    }
    setupTransaction(Connection.TRANSACTION_SERIALIZABLE);
    execute("select count(e1) from x", new List[] {Arrays.asList(1500)});
    gtsi.updateMatViewRow("X", Arrays.asList(2), true);
    tc = null;
    // outside of the transaction we can see the row removed
    execute("select count(e1) from x", new List[] {Arrays.asList(1499)});

    // back in the transaction we see the original state
    setupTransaction(Connection.TRANSACTION_SERIALIZABLE);
    execute("select count(e1) from x", new List[] {Arrays.asList(1500)});

    synch.afterCompletion(Status.STATUS_COMMITTED);
  }
Пример #3
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);
  }
Пример #4
0
  @Test
  public void testPartialProjection() throws TeiidComponentException, TeiidProcessingException {
    String sql =
        "SELECT user() AS a, "
            + " AVG(e2) OVER ( ) AS b,"
            + " MAX(e2) OVER ( ) AS b"
            + " FROM pm1.g1";

    HardcodedDataManager dataMgr = new HardcodedDataManager();
    dataMgr.addData(
        "SELECT ROUND(convert((g_0.L_DISCOUNT - AVG(g_0.L_DISCOUNT) OVER ()), FLOAT), 0) FROM TPCR_Oracle_9i.LINEITEM AS g_0",
        Arrays.asList(2.0f),
        Arrays.asList(2.0f));

    BasicSourceCapabilities bsc = TestOptimizer.getTypicalCapabilities();
    bsc.setCapabilitySupport(Capability.ELEMENTARY_OLAP, true);
    bsc.setCapabilitySupport(Capability.QUERY_AGGREGATES_AVG, true);
    bsc.setCapabilitySupport(Capability.WINDOW_FUNCTION_ORDER_BY_AGGREGATES, true);

    ProcessorPlan plan =
        TestOptimizer.helpPlan(
            sql,
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(bsc),
            new String[] {"SELECT AVG(g_0.e2) OVER (), g_0.e2 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});

    List<?>[] expected =
        new List<?>[] {
          Arrays.asList(null, BigDecimal.valueOf(1.5), 2),
          Arrays.asList(null, BigDecimal.valueOf(1.5), 2)
        };

    dataMgr.addData(
        "SELECT AVG(g_0.e2) OVER (), g_0.e2 FROM pm1.g1 AS g_0", //$NON-NLS-1$
        Arrays.asList(1.5, 2),
        Arrays.asList(1.5, 1));

    helpProcess(plan, dataMgr, expected);

    // should completely eliminate the window function node
    plan =
        TestOptimizer.helpPlan(
            "SELECT uuid() AS a, AVG(e2) OVER ( ) AS b FROM pm1.g1",
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(bsc),
            new String[] {"SELECT AVG(g_0.e2) OVER () FROM pm1.g1 AS g_0"},
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    checkNodeTypes(plan, new int[] {1, 1}, new Class<?>[] {AccessNode.class, ProjectNode.class});
  }
Пример #5
0
  @Test
  public void testWindowFunctionPushdown1() throws Exception {
    BasicSourceCapabilities caps = getTypicalCapabilities();
    caps.setCapabilitySupport(Capability.ELEMENTARY_OLAP, true);
    caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
    ProcessorPlan plan =
        TestOptimizer.helpPlan(
            "select max(e1) over (order by e1) 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, // Access
          0, // DependentAccess
          0, // DependentSelect
          0, // DependentProject
          0, // DupRemove
          0, // Grouping
          0, // NestedLoopJoinStrategy
          0, // MergeJoinStrategy
          0, // Null
          0, // PlanExecution
          1, // Project
          0, // Select
          0, // Sort
          0 // UnionAll
        });
  }
Пример #6
0
  @Test
  public void testOrderByConstant() throws TeiidComponentException, TeiidProcessingException {
    String sql =
        "select 1 as jiraissue_assignee, "
            + "row_number() over(order by subquerytable.jiraissue_id desc) as calculatedfield1 "
            + "from  pm1.g1 as jiraissue left outer join "
            + "(select jiraissue_sub.e1 as jiraissue_assignee, jiraissue_sub.e1 as jiraissue_id from pm2.g2 jiraissue_sub "
            + "where (jiraissue_sub.e4 between null and 2)"
            + " ) subquerytable on jiraissue.e1 = subquerytable.jiraissue_assignee";

    BasicSourceCapabilities bsc = TestOptimizer.getTypicalCapabilities();
    bsc.setCapabilitySupport(Capability.ELEMENTARY_OLAP, true);
    bsc.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
    bsc.setCapabilitySupport(Capability.QUERY_ORDERBY_NULL_ORDERING, true);
    bsc.setCapabilitySupport(Capability.WINDOW_FUNCTION_ORDER_BY_AGGREGATES, true);

    ProcessorPlan plan =
        TestOptimizer.helpPlan(
            sql,
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(bsc),
            new String[] {"SELECT 1 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});
  }
Пример #7
0
  @Test
  public void testMustPushdownOverMultipleSourcesWithViewDupRemoval() throws Exception {
    QueryMetadataInterface metadata =
        RealMetadataFactory.createTransformationMetadata(
            RealMetadataFactory.example1Cached().getMetadataStore(),
            "example1",
            new FunctionTree("foo", new FakeFunctionMetadataSource()));

    FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
    BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
    caps.setFunctionSupport("misc.namespace.func", true);
    capFinder.addCapabilities("pm1", caps); // $NON-NLS-1$
    capFinder.addCapabilities("pm2", caps); // $NON-NLS-1$

    String sql =
        "select func(x.e1) from (select distinct x.* from pm1.g1 as x, pm2.g1 as y where x.e2 = y.e2 order by e1 limit 10) as x"; //$NON-NLS-1$

    helpPlan(
        sql,
        metadata,
        null,
        capFinder,
        new String[] {},
        ComparisonMode.FAILED_PLANNING); // $NON-NLS-1$
  }
Пример #8
0
 @Test
 public void testUnionOrderBy() throws Exception {
   String sql =
       "select e1, e2 as c_0 from pm1.g1 union all select 1, e1 from pm1.g2 order by e1"; //$NON-NLS-1$
   String expected =
       "SELECT g_1.e1 AS c_0, convert(g_1.e2, string) AS c_1 FROM pm1.g1 AS g_1 UNION ALL SELECT '1' AS c_0, g_0.e1 AS c_1 FROM pm1.g2 AS g_0 ORDER BY c_0"; //$NON-NLS-1$
   helpTest(sql, expected, true, false, RealMetadataFactory.example1Cached());
 }
Пример #9
0
 @Test
 public void testDuplicateShortElementName() throws Exception {
   String sql =
       "select pm1.g1.e1, pm1.g2.e1 from pm1.g1, pm1.g2 order by pm1.g1.e1, pm1.g2.e1"; //$NON-NLS-1$
   String expected =
       "SELECT g_0.e1 AS c_0, g_1.e1 AS c_1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 ORDER BY c_0, c_1"; //$NON-NLS-1$
   helpTest(sql, expected, true, false, RealMetadataFactory.example1Cached());
 }
Пример #10
0
 @Test
 public void testLongOrderByAlias() throws Exception {
   String sql =
       "select pm1.g1.e1 || pm1.g1.e2 as asfasdfadfasdfasdfadfasdfadsfasdfasdfasdfasdfasdfadfa, pm1.g1.e2 from pm1.g1 order by asfasdfadfasdfasdfadfasdfadsfasdfasdfasdfasdfasdfadfa"; //$NON-NLS-1$
   String expected =
       "SELECT concat(g_0.e1, convert(g_0.e2, string)) AS c_0, g_0.e2 AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0"; //$NON-NLS-1$
   helpTest(sql, expected, true, false, RealMetadataFactory.example1Cached());
 }
Пример #11
0
 @Test
 public void testOrderBySymbolName() throws Exception {
   String sql = "select e1 from pm1.g1 order by e1"; // $NON-NLS-1$
   String expected = "SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0"; // $NON-NLS-1$
   Query command =
       (Query) helpTest(sql, expected, true, false, RealMetadataFactory.example1Cached());
   assertEquals(
       ((Symbol) command.getOrderBy().getSortKeys().get(0)).getName(), "c_0"); // $NON-NLS-1$
   assertEquals(
       ((Symbol) command.getProjectedSymbols().get(0)).getShortName(), "c_0"); // $NON-NLS-1$
 }
Пример #12
0
  @Test
  public void testConcat2() throws Exception {
    QueryMetadataInterface metadata = RealMetadataFactory.example1Cached();

    FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
    BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
    caps.setFunctionSupport(SourceSystemFunctions.CONCAT2, true);
    capFinder.addCapabilities("pm1", caps); // $NON-NLS-1$

    String sql = "select concat2(x.e1, x.e1) from pm1.g1 as x"; // $NON-NLS-1$

    helpPlan(
        sql,
        metadata,
        null,
        capFinder,
        new String[] {"SELECT concat2(g_0.e1, g_0.e1) FROM pm1.g1 AS g_0"},
        ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    // cannot pushdown
    caps.setFunctionSupport(SourceSystemFunctions.CONCAT2, false);

    ProcessorPlan plan =
        helpPlan(
            sql,
            metadata,
            null,
            capFinder,
            new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0"},
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$
    HardcodedDataManager dataManager = new HardcodedDataManager();
    dataManager.addData(
        "SELECT g_0.e1 FROM pm1.g1 AS g_0",
        new List[] {Arrays.asList("a"), Arrays.asList((String) null)});
    TestProcessor.helpProcess(
        plan, dataManager, new List[] {Arrays.asList("aa"), Arrays.asList((String) null)});

    caps.setFunctionSupport(SourceSystemFunctions.CONCAT, true);
    caps.setFunctionSupport(SourceSystemFunctions.IFNULL, true);
    caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);

    // will get replaced in the LanguageBridgeFactory
    helpPlan(
        sql,
        metadata,
        null,
        capFinder,
        new String[] {"SELECT concat2(g_0.e1, g_0.e1) FROM pm1.g1 AS g_0"},
        ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$
  }
Пример #13
0
  @Test
  public void testXMLAggDelimitedConcatFiltered() throws Exception {
    String sql =
        "SELECT XMLAGG(XMLPARSE(CONTENT (case when rn = 1 then '' else ',' end) || e1 WELLFORMED) ORDER BY rn) FROM (SELECT e1, e2, row_number() FILTER (WHERE e1 IS NOT NULL) over (order by e1) as rn FROM pm1.g1) X"; //$NON-NLS-1$

    List<?>[] expected =
        new List<?>[] {
          Arrays.asList("a,a,a,b,c"),
        };

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    ProcessorPlan plan = helpGetPlan(sql, RealMetadataFactory.example1Cached());

    helpProcess(plan, dataManager, expected);
  }
Пример #14
0
  @Test
  public void testRowNumberMedian() throws Exception {
    String sql =
        "select e1, r, c from (select e1, row_number() over (order by e1) as r, count(*) over () c from pm1.g1) x where r = ceiling(c/2)";

    List<?>[] expected =
        new List[] {
          Arrays.asList("a", 3, 6),
        };

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    ProcessorPlan plan =
        helpGetPlan(sql, RealMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());

    helpProcess(plan, dataManager, expected);
  }
Пример #15
0
  @Test
  public void testRankingView() throws Exception {
    String sql =
        "select * from (select e1, row_number() over (order by e1) as rn, rank() over (order by e1) as r, dense_rank() over (order by e1 nulls last) as dr from pm1.g1) as x where e1 = 'a'";

    List<?>[] expected =
        new List[] {
          Arrays.asList("a", 2, 2, 1), Arrays.asList("a", 3, 2, 1), Arrays.asList("a", 4, 2, 1),
        };

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    ProcessorPlan plan =
        helpGetPlan(sql, RealMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());

    helpProcess(plan, dataManager, expected);
  }
Пример #16
0
  @Test
  public void testWindowFunctionPushdown() 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);
    ProcessorPlan plan =
        TestOptimizer.helpPlan(
            "select max(e1) over (order by e1) 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) FROM pm1.g1 AS g_0"},
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    checkNodeTypes(plan, FULL_PUSHDOWN);
  }
Пример #17
0
  @Test
  public void testPartitionedRowNumber() throws Exception {
    String sql =
        "select e1, e3, row_number() over (partition by e3 order by e1) as r from pm1.g1 order by r limit 2";

    List<?>[] expected =
        new List[] {
          Arrays.asList(null, Boolean.FALSE, 1), Arrays.asList("a", Boolean.TRUE, 1),
        };

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    ProcessorPlan plan =
        helpGetPlan(sql, RealMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());

    helpProcess(plan, dataManager, expected);
  }
Пример #18
0
  @Test
  public void testViewNotRemoved() throws Exception {
    BasicSourceCapabilities caps = getTypicalCapabilities();
    caps.setCapabilitySupport(Capability.ELEMENTARY_OLAP, true);
    caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
    ProcessorPlan plan =
        TestOptimizer.helpPlan(
            "SELECT y FROM (select row_number() over (order by e1) as y from pm1.g1) as x where x.y = 10", //$NON-NLS-1$
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(caps),
            new String[] {
              "SELECT v_0.c_0 FROM (SELECT ROW_NUMBER() OVER (ORDER BY g_0.e1) AS c_0 FROM pm1.g1 AS g_0) AS v_0 WHERE v_0.c_0 = 10"
            },
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    checkNodeTypes(plan, FULL_PUSHDOWN);
  }
Пример #19
0
  /**
   * Note that we've optimized the ordering to be performed prior to the windowing. If we change the
   * windowing logic to not preserve the incoming row ordering, then this optimization will need to
   * change
   *
   * @throws Exception
   */
  @Test
  public void testCountDuplicates() throws Exception {
    String sql = "select e1, count(e1) over (order by e1) as c from pm1.g1 order by e1";

    List<?>[] expected =
        new List[] {
          Arrays.asList("a", 2), Arrays.asList("a", 2), Arrays.asList("b", 3),
        };

    HardcodedDataManager dataManager = new HardcodedDataManager();
    dataManager.addData(
        "SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0",
        new List[] {Arrays.asList("a"), Arrays.asList("a"), Arrays.asList("b")});
    ProcessorPlan plan =
        helpGetPlan(sql, RealMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());

    helpProcess(plan, dataManager, expected);
  }
Пример #20
0
  @Test
  public void testDDLMetadata() throws Exception {
    String ddl =
        "CREATE VIRTUAL FUNCTION SourceFunc(msg varchar) RETURNS varchar "
            + "OPTIONS(CATEGORY 'misc', DETERMINISM 'DETERMINISTIC', "
            + "\"NULL-ON-NULL\" 'true', JAVA_CLASS '"
            + TestFunctionPushdown.class.getName()
            + "', JAVA_METHOD 'sourceFunc');"
            + "CREATE VIEW X (Y varchar) as SELECT e1 from pm1.g1;";

    MetadataFactory mf = TestDDLParser.helpParse(ddl, "model");
    mf.getSchema().setPhysical(false);
    MetadataStore ms = mf.asMetadataStore();
    ms.merge(RealMetadataFactory.example1Cached().getMetadataStore());

    QueryMetadataInterface metadata =
        RealMetadataFactory.createTransformationMetadata(ms, "example1");

    FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
    BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
    caps.setFunctionSupport("model.SourceFunc", true);
    capFinder.addCapabilities("pm1", caps); // $NON-NLS-1$

    helpPlan(
        "select sourceFunc(y) from x",
        metadata,
        null,
        capFinder,
        new String[] {"SELECT sourceFunc(g_0.e1) FROM pm1.g1 AS g_0"},
        ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    caps.setFunctionSupport("model.SourceFunc", false);

    helpPlan(
        "select sourceFunc(y) from x",
        metadata,
        null,
        capFinder,
        new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0"},
        ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$
  }
Пример #21
0
  @Test
  public void testPartitionedMax() throws Exception {
    String sql = "select e2, max(e1) over (partition by e2) as y from pm1.g1";

    List<?>[] expected =
        new List[] {
          Arrays.asList(0, "a"),
          Arrays.asList(1, "c"),
          Arrays.asList(3, "a"),
          Arrays.asList(1, "c"),
          Arrays.asList(2, "b"),
          Arrays.asList(0, "a"),
        };

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    ProcessorPlan plan =
        helpGetPlan(sql, RealMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());

    helpProcess(plan, dataManager, expected);
  }
Пример #22
0
  @Test
  public void testWindowFunctionOrderBy() throws Exception {
    String sql = "select e2, e1, count(e1) over (partition by e3) as c from pm1.g1 order by c, e2";

    List<?>[] expected =
        new List[] {
          Arrays.asList(1, "c", 2),
          Arrays.asList(3, "a", 2),
          Arrays.asList(0, "a", 3),
          Arrays.asList(0, "a", 3),
          Arrays.asList(1, null, 3),
          Arrays.asList(2, "b", 3),
        };

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    ProcessorPlan plan =
        helpGetPlan(sql, RealMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());

    helpProcess(plan, dataManager, expected);
  }
Пример #23
0
  @Test
  public void testViewLimit() throws Exception {
    BasicSourceCapabilities caps = getTypicalCapabilities();
    caps.setCapabilitySupport(Capability.ELEMENTARY_OLAP, true);
    ProcessorPlan plan =
        TestOptimizer.helpPlan(
            "SELECT * FROM (select e1, e3, count(distinct e1) over (partition by e3) as r from pm1.g1) as x limit 1", //$NON-NLS-1$
            RealMetadataFactory.example1Cached(),
            null,
            new DefaultCapabilitiesFinder(caps),
            new String[] {"SELECT g_0.e1, g_0.e3 FROM pm1.g1 AS g_0"},
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    List<?>[] expected =
        new List<?>[] {
          Arrays.asList("a", Boolean.FALSE, 2),
        };
    helpProcess(plan, dataManager, expected);
  }
Пример #24
0
  @Test
  public void testPartitionedDistinctCount() throws Exception {
    String sql =
        "select e1, e3, count(distinct e1) over (partition by e3) as r from pm1.g1 order by e1, e3";

    List<?>[] expected =
        new List[] {
          Arrays.asList(null, Boolean.FALSE, 2),
          Arrays.asList("a", Boolean.FALSE, 2),
          Arrays.asList("a", Boolean.FALSE, 2),
          Arrays.asList("a", Boolean.TRUE, 2),
          Arrays.asList("b", Boolean.FALSE, 2),
          Arrays.asList("c", Boolean.TRUE, 2),
        };

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    ProcessorPlan plan = helpGetPlan(sql, RealMetadataFactory.example1Cached());

    helpProcess(plan, dataManager, expected);
  }
Пример #25
0
  @Test
  public void testEmptyOver() throws Exception {
    String sql = "select e1, max(e1) over () as c from pm1.g1";

    List<?>[] expected =
        new List[] {
          Arrays.asList("a", "c"),
          Arrays.asList(null, "c"),
          Arrays.asList("a", "c"),
          Arrays.asList("c", "c"),
          Arrays.asList("b", "c"),
          Arrays.asList("a", "c"),
        };

    FakeDataManager dataManager = new FakeDataManager();
    sampleData1(dataManager);
    ProcessorPlan plan =
        helpGetPlan(sql, RealMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());

    helpProcess(plan, dataManager, expected);
  }
Пример #26
0
  @Test
  public void testMustPushdownOverMultipleSources() throws Exception {
    QueryMetadataInterface metadata =
        RealMetadataFactory.createTransformationMetadata(
            RealMetadataFactory.example1Cached().getMetadataStore(),
            "example1",
            new FunctionTree("foo", new FakeFunctionMetadataSource()));

    FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
    BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
    caps.setFunctionSupport("misc.namespace.func", true);
    capFinder.addCapabilities("pm1", caps); // $NON-NLS-1$
    capFinder.addCapabilities("pm2", caps); // $NON-NLS-1$

    String sql = "select func(x.e1) from pm1.g1 as x, pm2.g1 as y where x.e2 = y.e2"; // $NON-NLS-1$

    ProcessorPlan plan =
        helpPlan(
            sql,
            metadata,
            null,
            capFinder,
            new String[] {
              "SELECT g_0.e2 AS c_0, func(g_0.e1) AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0",
              "SELECT g_0.e2 AS c_0 FROM pm2.g1 AS g_0 ORDER BY c_0"
            },
            ComparisonMode.EXACT_COMMAND_STRING); // $NON-NLS-1$

    HardcodedDataManager dataManager = new HardcodedDataManager();
    dataManager.addData(
        "SELECT g_0.e2 AS c_0, func(g_0.e1) AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0",
        new List[] {Arrays.asList(1, "a")});
    dataManager.addData(
        "SELECT g_0.e2 AS c_0 FROM pm2.g1 AS g_0 ORDER BY c_0",
        new List[] {Arrays.asList(1), Arrays.asList(2)});

    TestProcessor.helpProcess(plan, dataManager, new List[] {Arrays.asList("a")});
  }
Пример #27
0
 @Before
 public void setUp() {
   FakeDataManager fdm = new FakeDataManager();
   TestProcessor.sampleData1(fdm);
   this.setUp(RealMetadataFactory.example1Cached(), fdm);
 }