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 testMultiDependentJoin() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT a.a FROM MultiModel.Phys a inner join MultiModel.Phys b makedep on (a.a = b.a) order by a"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$ Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$ Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$ Arrays.asList(new Object[] { "x"}), //$NON-NLS-1$ Arrays.asList(new Object[] { "y"}), //$NON-NLS-1$ Arrays.asList(new Object[] { "y"}), //$NON-NLS-1$ Arrays.asList(new Object[] { "y"}), //$NON-NLS-1$ Arrays.asList(new Object[] { "y"})}; //$NON-NLS-1$ final HardcodedDataManager dataMgr = new HardcodedDataManager(); dataMgr.addData("SELECT g_0.a FROM MultiModel.Phys AS g_0", //$NON-NLS-1$ new List<?>[] { Arrays.asList(new Object[] { "x" }), //$NON-NLS-1$ Arrays.asList(new Object[] { "y" })}); //$NON-NLS-1$ dataMgr.addData("SELECT g_0.a FROM MultiModel.Phys AS g_0 WHERE g_0.a IN ('x', 'y')", //$NON-NLS-1$ new List<?>[] { Arrays.asList(new Object[] { "x" }), //$NON-NLS-1$ Arrays.asList(new Object[] { "y" })}); //$NON-NLS-1$ 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 testMultiReplacementWithOrderBy() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT a, b, source_name || a FROM MultiModel.Phys order by a"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList("e", "z", "be"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Arrays.asList("f", "z", "bf"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Arrays.asList("x", "z", "ax"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Arrays.asList("y", "z", "ay"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ }; final HardcodedDataManager dataMgr = new HardcodedDataManager(); dataMgr.addData("SELECT g_0.a, g_0.b, concat('a', g_0.a) FROM MultiModel.Phys AS g_0", //$NON-NLS-1$ new List<?>[] { Arrays.asList("y", "z", "ay"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Arrays.asList("x", "z", "ax")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ dataMgr.addData("SELECT g_0.a, g_0.b, concat('b', g_0.a) FROM MultiModel.Phys AS g_0", //$NON-NLS-1$ new List<?>[] { Arrays.asList("e", "z", "be"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Arrays.asList("f", "z", "bf")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 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 testMultiReplacementWithLimit() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT distinct a, b, source_name || a FROM MultiModel.Phys order by a limit 1"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList("e", "z", "be"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ }; final HardcodedDataManager dataMgr = new HardcodedDataManager(); dataMgr.addData("SELECT g_0.a, g_0.b, concat('a', g_0.a) FROM MultiModel.Phys AS g_0", //$NON-NLS-1$ new List<?>[] { Arrays.asList("y", "z", "ay"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Arrays.asList("x", "z", "ax")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ dataMgr.addData("SELECT g_0.a, g_0.b, concat('b', g_0.a) FROM MultiModel.Phys AS g_0", //$NON-NLS-1$ new List<?>[] { Arrays.asList("e", "z", "be"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Arrays.asList("f", "z", "bf")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 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()); }
/** * With implicit join turned off, we now get the join of the union of the source queries. */ @Test public void testMultiJoinNotImplicit() 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"), Arrays.asList("a"), Arrays.asList("a"), }; final HardcodedDataManager dataMgr = new HardcodedDataManager(); dataMgr.addData("SELECT g_0.a FROM MultiModel.Phys AS g_0", //$NON-NLS-1$ new List<?>[] {Arrays.asList("a")}); dataMgr.addData("SELECT g_0.b FROM MultiModel.Phys1 AS g_0", //$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 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 testMultiReplacementWithLimit1() throws Exception { final QueryMetadataInterface metadata = RealMetadataFactory.exampleMultiBinding(); final String userSql = "SELECT a, b FROM MultiModel.Phys limit 1, 1"; //$NON-NLS-1$ final String multiModel = "MultiModel"; //$NON-NLS-1$ final int sources = 2; final List<?>[] expected = new List<?>[] { Arrays.asList("x", "z"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ }; final HardcodedDataManager dataMgr = new HardcodedDataManager(); dataMgr.addData("SELECT g_0.a AS c_0, g_0.b AS c_1 FROM MultiModel.Phys AS g_0 LIMIT 2", //$NON-NLS-1$ new List<?>[] { Arrays.asList("y", "z"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Arrays.asList("x", "z")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ RelationalPlan plan = (RelationalPlan)helpTestMultiSourcePlan(metadata, userSql, multiModel, sources, dataMgr, expected, RealMetadataFactory.exampleMultiBindingVDB()); assertTrue(plan.getRootNode() instanceof LimitNode); }
@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()); }