@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); }
@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); }
@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); }
@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}); }
@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 }); }
@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}); }
@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$ }
@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()); }
@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()); }
@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()); }
@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$ }
@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$ }
@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); }
@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); }
@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); }
@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); }
@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); }
@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); }
/** * 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); }
@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$ }
@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); }
@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); }
@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); }
@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); }
@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); }
@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")}); }
@Before public void setUp() { FakeDataManager fdm = new FakeDataManager(); TestProcessor.sampleData1(fdm); this.setUp(RealMetadataFactory.example1Cached(), fdm); }