public ProcessorPlan helpTestMultiSourcePlan(QueryMetadataInterface metadata, String userSql, String multiModel, int sourceCount, ProcessorDataManager dataMgr, List<?>[] expectedResults, VDBMetaData vdb) throws Exception { return helpTestMultiSourcePlan(metadata, userSql, multiModel, sourceCount, dataMgr, expectedResults, vdb, null, null); }
@Test public void testMultiReplacement() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT * FROM MultiModel.Phys"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List<?>[] { Arrays.asList(new Object[] { null, null}), Arrays.asList(new Object[] { null, null}), Arrays.asList(new Object[] { null, null})}; final ProcessorDataManager dataMgr = new MultiSourceDataManager(); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testProcedureAll() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "exec MultiModel.proc(\"in\"=>'b')"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List<?>[] { Arrays.asList(1), Arrays.asList(1), Arrays.asList(1)}; final MultiSourceDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(true); dataMgr.addData("EXEC MultiModel.proc('b')", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$ helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testSingleReplacementInDynamicCommand() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "exec Virt.sq1('a')"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List<?>[] { Arrays.asList(new Object[] { null, null}), }; final ProcessorDataManager dataMgr = new MultiSourceDataManager(); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testPreparedReplacement() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT * FROM MultiModel.Phys WHERE SOURCE_NAME = ?"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList(new Object[] { null, null}) }; final HardcodedDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(false); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB(), Arrays.asList("a"), null); }
@Test public void testMultiJoinImplicit() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT phys.a FROM MultiModel.Phys, MultiModel.phys1 where phys.a = phys1.b"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList("a"), Arrays.asList("a"), }; final HardcodedDataManager dataMgr = new HardcodedDataManager(); dataMgr.addData("SELECT g_0.a FROM MultiModel.Phys AS g_0, MultiModel.Phys1 AS g_1 WHERE g_0.a = g_1.b", //$NON-NLS-1$ new List<?>[] { Arrays.asList("a")}); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testProcedure() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "exec MultiModel.proc('b', 'a')"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List<?>[] { Arrays.asList(1)}; final MultiSourceDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(true); dataMgr.addData("EXEC MultiModel.proc('b')", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$ helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testMultiUpdateAll() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "update MultiModel.Phys set a = '1' where b = 'z'"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List<?>[] { Arrays.asList(3)}; final MultiSourceDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(true); dataMgr.addData("UPDATE MultiModel.Phys SET a = '1' WHERE b = 'z'", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$ helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testInsertMatching() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "INSERT INTO MultiModel.Phys(a, SOURCE_NAME) VALUES ('a', 'a')"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List<?>[] { Arrays.asList(1)}; final MultiSourceDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(true); dataMgr.addData("INSERT INTO MultiModel.Phys (a) VALUES ('a')", new List<?>[] {Arrays.asList(1)}); //$NON-NLS-1$ helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testTempInsert() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "INSERT INTO #x select * from MultiModel.Phys"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List<?>[] { Arrays.asList(3)}; final MultiSourceDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(true); dataMgr.addData("SELECT g_0.a, g_0.b FROM MultiModel.Phys AS g_0", new List<?>[] {Arrays.asList("a", "b")}); //$NON-NLS-1$ helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testInsertNotMatching() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "INSERT INTO MultiModel.Phys(a, SOURCE_NAME) VALUES ('a', 'x')"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List<?>[] { Arrays.asList(0)}; final MultiSourceDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(true); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testSingleReplacement() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT * FROM MultiModel.Phys WHERE SOURCE_NAME = 'a'"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList(new Object[] { null, null}) }; final HardcodedDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(false); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testMultiJoinPartitionedExplicit() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT phys.a FROM MultiModel.Phys, MultiModel.phys1 where phys.a = phys1.b and Phys.source_name = phys1.source_name"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList("a"), Arrays.asList("a"), }; final HardcodedDataManager dataMgr = new HardcodedDataManager(); dataMgr.addData("SELECT g_0.a FROM MultiModel.Phys AS g_0, MultiModel.Phys1 AS g_1 WHERE g_0.a = g_1.b", //$NON-NLS-1$ new List<?>[] { Arrays.asList("a")}); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB(), null, new Options().implicitMultiSourceJoin(false)); }
@Test public void testNoReplacement() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT * FROM MultiModel.Phys WHERE SOURCE_NAME = 'bogus'"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List[0]; final ProcessorDataManager dataMgr = new MultiSourceDataManager(); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
@Test public void testSingleReplacementInDynamicCommandNullValue() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "exec Virt.sq1(null)"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 3; final List<?>[] expected = new List[0]; final ProcessorDataManager dataMgr = new MultiSourceDataManager(); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); }
public ProcessorPlan helpTestMultiSourcePlan(QueryMetadataInterface metadata, String userSql, String multiModel, int sourceCount, ProcessorDataManager dataMgr, List<?>[] expectedResults, VDBMetaData vdb, List<?> params, Options options) throws Exception { BasicSourceCapabilities bsc = TestOptimizer.getTypicalCapabilities(); bsc.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true); bsc.setCapabilitySupport(Capability.ROW_LIMIT, true); bsc.setCapabilitySupport(Capability.QUERY_GROUP_BY, true); bsc.setFunctionSupport(SourceSystemFunctions.CONCAT, true); return helpTestMultiSourcePlan(metadata, userSql, multiModel, sourceCount, dataMgr, expectedResults, vdb, params, options, bsc); }
@Test public void testNotPartitionedGroupBy() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT max(a) FROM MultiModel.Phys1 group by b"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList("a") }; final HardcodedDataManager dataMgr = new HardcodedDataManager(metadata); dataMgr.addData("SELECT g_0.b, MAX(g_0.a) FROM Phys1 AS g_0 GROUP BY g_0.b", //$NON-NLS-1$ new List<?>[] { Arrays.asList("b", "a")}); BasicSourceCapabilities bsc = TestAggregatePushdown.getAggregateCapabilities(); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB(), null, new Options().implicitMultiSourceJoin(false), bsc); }
@Test public void testUnsupportedPredicate() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT phys.a FROM MultiModel.Phys where Phys.source_name like 'a%'"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList("a"), }; final HardcodedDataManager dataMgr = new HardcodedDataManager(); dataMgr.addData("SELECT MultiModel.Phys.a FROM MultiModel.Phys", //$NON-NLS-1$ new List<?>[] { Arrays.asList("a")}); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB(), null, new Options().implicitMultiSourceJoin(false), new BasicSourceCapabilities()); assertEquals(3, dataMgr.getCommandHistory().size()); }
@Test public void testSingleReplacementAltName() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT * FROM MultiModel.Phys WHERE foo = 'a'"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList(new Object[] { null, null}) }; final HardcodedDataManager dataMgr = new MultiSourceDataManager(); dataMgr.setMustRegisterCommands(false); VDBMetaData vdb = RealMetadataFactory.exampleMultiBindingVDB(); vdb.getModel("MultiModel").addProperty(MultiSourceMetadataWrapper.MULTISOURCE_COLUMN_NAME, "foo"); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, vdb); }
@Test public void testNonPartitionedDistinct() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT distinct a FROM MultiModel.Phys"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList("a"), }; final HardcodedDataManager dataMgr = new HardcodedDataManager(metadata); dataMgr.addData("SELECT DISTINCT g_0.a FROM Phys AS g_0", //$NON-NLS-1$ new List<?>[] { Arrays.asList("a")}); BasicSourceCapabilities bsc = TestAggregatePushdown.getAggregateCapabilities(); bsc.setCapabilitySupport(Capability.QUERY_SELECT_DISTINCT, true); helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB(), null, new Options().implicitMultiSourceJoin(false), bsc); }