@Override public SimpleIterator<Schema> processQuery( VDBMetaData vdb, CompositeMetadataStore metadataStore, BaseIndexInfo<?> ii, TransformationMetadata metadata, CommandContext commandContext) { return processQuery(vdb, metadataStore.getSchemas(), ii, commandContext); }
@Override public SimpleIterator<Schema> processQuery( VDBMetaData vdb, CompositeMetadataStore metadataStore, BaseIndexInfo<?> ii, TransformationMetadata metadata, CommandContext commandContext) { return processQuery(vdb, metadataStore.getSchemas(), ii, commandContext); }
@Override public SimpleIterator<Schema> processQuery( VDBMetaData vdb, CompositeMetadataStore metadataStore, BaseIndexInfo<?> ii, TransformationMetadata metadata, CommandContext commandContext) { return processQuery(vdb, metadataStore.getSchemas(), ii, commandContext); }
@Override public SimpleIterator<T> processQuery( final VDBMetaData vdb, final CompositeMetadataStore metadataStore, final BaseIndexInfo<?> ii, final TransformationMetadata metadata, final CommandContext commandContext) { final SimpleIterator<Schema> schemas = schemaTable.processQuery(vdb, metadataStore.getSchemas(), ii, commandContext); return new ExpandingSimpleIterator<Schema, T>(schemas) { @Override protected SimpleIterator<T> getChildIterator( Schema parent) { return processQuery(vdb, getChildren(parent, metadata), ii.next, commandContext); } }; }
@Override public SimpleIterator<T> processQuery( final VDBMetaData vdb, final CompositeMetadataStore metadataStore, final BaseIndexInfo<?> ii, final TransformationMetadata metadata, final CommandContext commandContext) { final SimpleIterator<Schema> schemas = schemaTable.processQuery(vdb, metadataStore.getSchemas(), ii, commandContext); return new ExpandingSimpleIterator<Schema, T>(schemas) { @Override protected SimpleIterator<T> getChildIterator( Schema parent) { return processQuery(vdb, getChildren(parent, metadata), ii.next, commandContext); } }; }
@Override public SimpleIterator<T> processQuery( final VDBMetaData vdb, final CompositeMetadataStore metadataStore, final BaseIndexInfo<?> ii, final TransformationMetadata metadata, final CommandContext commandContext) { final SimpleIterator<Schema> schemas = schemaTable.processQuery(vdb, metadataStore.getSchemas(), ii, commandContext); return new ExpandingSimpleIterator<Schema, T>(schemas) { @Override protected SimpleIterator<T> getChildIterator( Schema parent) { return processQuery(vdb, getChildren(parent, metadata), ii.next, commandContext); } }; }
/** * TODO: this resolving mode allows partial matches of a full group name containing . * @param partialGroupName * @return */ public Collection<Table> getGroupsForPartialName(String partialGroupName) { List<Table> result = new LinkedList<Table>(); for (Schema schema : getSchemas().values()) { for (Table t : schema.getTables().values()) { String name = t.getName(); if (matchesPartialName(partialGroupName, name, schema)) { result.add(t); } } } return result; }
/** * TODO: this resolving mode allows partial matches of a full group name containing . * @param partialGroupName * @return */ public Collection<Table> getGroupsForPartialName(String partialGroupName) { List<Table> result = new LinkedList<Table>(); for (Schema schema : getSchemas().values()) { for (Table t : schema.getTables().values()) { String name = t.getName(); if (matchesPartialName(partialGroupName, name, schema)) { result.add(t); } } } return result; }
/** * TODO: this resolving mode allows partial matches of a full group name containing . * @param partialGroupName * @return */ public Collection<Table> getGroupsForPartialName(String partialGroupName) { List<Table> result = new LinkedList<Table>(); for (Schema schema : getSchemas().values()) { for (Table t : schema.getTables().values()) { String name = t.getName(); if (matchesPartialName(partialGroupName, name, schema)) { result.add(t); } } } return result; }
private Schema getSchema(String vdbName, String vdbVersion, String schemaName) { VDBMetaData vdb = getVdbRepository().getLiveVDB(vdbName, vdbVersion); if (vdb == null) { return null; } TransformationMetadata tm = vdb.getAttachment(TransformationMetadata.class); if (tm == null) { return null; } return tm.getMetadataStore().getSchemas().get(schemaName); }
public static TransformationMetadata createTransformationMetadata(CompositeMetadataStore store, String vdbName, Properties vdbProperties, FunctionTree... functionModels) { VDBMetaData vdbMetaData = new VDBMetaData(); vdbMetaData.setName(vdbName); //$NON-NLS-1$ vdbMetaData.setVersion(1); if (vdbProperties != null) { vdbMetaData.setProperties(vdbProperties); } List<FunctionTree> udfs = new ArrayList<FunctionTree>(); udfs.addAll(Arrays.asList(functionModels)); for (Schema schema : store.getSchemas().values()) { vdbMetaData.addModel(RealMetadataFactory.createModel(schema.getName(), schema.isPhysical())); if (!schema.getFunctions().isEmpty()) { udfs.add(new FunctionTree(schema.getName(), new UDFSource(schema.getFunctions().values()), true)); } if (!schema.getProcedures().isEmpty()) { FunctionTree ft = FunctionTree.getFunctionProcedures(schema); if (ft != null) { udfs.add(ft); } } } TransformationMetadata metadata = new TransformationMetadata(vdbMetaData, store, null, SFM.getSystemFunctions(), udfs); vdbMetaData.addAttchment(TransformationMetadata.class, metadata); vdbMetaData.addAttchment(QueryMetadataInterface.class, metadata); return metadata; }
@Test public void testDynamicUpdate() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select '1' as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan(""); t.setUpdatePlan("FOR EACH ROW BEGIN execute immediate 'update pm1.g1 set e1 = new.x where e2 = new.y'; END"); t.setInsertPlan(""); String sql = "update gx set x = 1 where y = 2"; HardcodedDataManager dm = new HardcodedDataManager(); dm.addData("UPDATE pm1.g1 SET e1 = '1' WHERE e2 = 2", new List[] {Arrays.asList(1)}); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(1)}; helpProcess(plan, context, dm, expected); }
@Test public void testUpdateWithNonConstant() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select 1 as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan(""); t.setUpdatePlan("FOR EACH ROW BEGIN update pm1.g1 set e2 = new.y where e2 = old.y; END"); t.setInsertPlan(""); String sql = "update gx set y = x"; FakeDataManager dm = new FakeDataManager(); FakeDataStore.addTable("pm1.g1", dm, metadata); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(1)}; helpProcess(plan, context, dm, expected); assertEquals("UPDATE pm1.g1 SET e2 = 1 WHERE e2 = 2", dm.getQueries().get(0)); }
@Test public void testDynamic() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select '1' as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan("FOR EACH ROW BEGIN ATOMIC END"); t.setUpdatePlan(""); t.setInsertPlan("FOR EACH ROW BEGIN execute immediate 'delete from gx where gx.x = new.x'; END"); String sql = "insert into gx (x, y) select e1, e2 from pm1.g1"; FakeDataManager dm = new FakeDataManager(); FakeDataStore.addTable("pm1.g1", dm, metadata); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(6)}; helpProcess(plan, context, dm, expected); }
@Test public void testInsertWithDefault() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select 1 as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan(""); t.setUpdatePlan(""); t.setInsertPlan("FOR EACH ROW BEGIN insert into pm1.g1 (e1) values (new.x); END"); String sql = "insert into gx (x) values (1)"; FakeDataManager dm = new FakeDataManager(); FakeDataStore.addTable("pm1.g1", dm, metadata); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(1)}; helpProcess(plan, context, dm, expected); }
@Test public void testUpdate() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select 1 as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan(""); t.setUpdatePlan("FOR EACH ROW BEGIN update pm1.g1 set e2 = new.y where e2 = old.y; END"); t.setInsertPlan(""); String sql = "update gx set y = 5"; FakeDataManager dm = new FakeDataManager(); FakeDataStore.addTable("pm1.g1", dm, metadata); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(1)}; helpProcess(plan, context, dm, expected); assertEquals("UPDATE pm1.g1 SET e2 = 5 WHERE e2 = 2", dm.getQueries().get(0)); }
@Test public void testUpdateWithChanging() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select 1 as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan(""); t.setUpdatePlan("FOR EACH ROW BEGIN update pm1.g1 set e2 = case when changing.y then new.y end where e2 = old.y; END"); t.setInsertPlan(""); String sql = "update gx set y = 5"; FakeDataManager dm = new FakeDataManager(); FakeDataStore.addTable("pm1.g1", dm, metadata); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(1)}; helpProcess(plan, context, dm, expected); assertEquals("UPDATE pm1.g1 SET e2 = 5 WHERE e2 = 2", dm.getQueries().get(0)); }
@Test public void testInsert() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select 1 as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan(""); t.setUpdatePlan(""); t.setInsertPlan("FOR EACH ROW BEGIN insert into pm1.g1 (e1) values (new.x); END"); String sql = "insert into gx (x, y) values (1, 2)"; FakeDataManager dm = new FakeDataManager(); FakeDataStore.addTable("pm1.g1", dm, metadata); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(1)}; helpProcess(plan, context, dm, expected); }
@Test public void testInsertWithQueryExpression() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select '1' as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan(""); t.setUpdatePlan(""); t.setInsertPlan("FOR EACH ROW BEGIN insert into pm1.g1 (e1) values (new.x); END"); String sql = "insert into gx (x, y) select e1, e2 from pm1.g1"; FakeDataManager dm = new FakeDataManager(); FakeDataStore.addTable("pm1.g1", dm, metadata); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(6)}; helpProcess(plan, context, dm, expected); }
@Test public void testDelete() throws Exception { TransformationMetadata metadata = TestUpdateValidator.example1(); TestUpdateValidator.createView("select 1 as x, 2 as y", metadata, GX); Table t = metadata.getMetadataStore().getSchemas().get(VM1).getTables().get(GX); t.setDeletePlan("FOR EACH ROW BEGIN delete from pm1.g1 where e2 = old.x; END"); t.setUpdatePlan(""); t.setInsertPlan(""); String sql = "delete from gx where y = 2"; FakeDataManager dm = new FakeDataManager(); FakeDataStore.addTable("pm1.g1", dm, metadata); CommandContext context = createCommandContext(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); ProcessorPlan plan = TestProcessor.helpGetPlan(TestResolver.helpResolve(sql, metadata), metadata, new DefaultCapabilitiesFinder(caps), context); List<?>[] expected = new List[] {Arrays.asList(1)}; helpProcess(plan, context, dm, expected); }