private MetadataRepository getMetadataRepository(VDBMetaData vdb, String schemaName) { ModelMetaData model = vdb.getModel(schemaName); return model.getAttachment(MetadataRepository.class); }
private MetadataRepository getMetadataRepository(VDBMetaData vdb, String schemaName) { ModelMetaData model = vdb.getModel(schemaName); return model.getAttachment(MetadataRepository.class); }
private MetadataRepository getMetadataRepository(VDBMetaData vdb, String schemaName) { ModelMetaData model = vdb.getModel(schemaName); return model.getAttachment(MetadataRepository.class); }
public MetadataRepository getMetadataRepository(AbstractMetadataRecord target, VDBMetaData vdb) { String modelName = null; while (target.getParent() != null) { target = target.getParent(); } modelName = target.getName(); if (modelName != null) { ModelMetaData model = vdb.getModel(modelName); if (model != null) { return model.getAttachment(MetadataRepository.class); } } return null; }
public MetadataRepository getMetadataRepository(AbstractMetadataRecord target, VDBMetaData vdb) { String modelName = null; while (target.getParent() != null) { target = target.getParent(); } modelName = target.getName(); if (modelName != null) { ModelMetaData model = vdb.getModel(modelName); if (model != null) { return model.getAttachment(MetadataRepository.class); } } return null; }
public MetadataRepository getMetadataRepository(AbstractMetadataRecord target, VDBMetaData vdb) { String modelName = null; while (target.getParent() != null) { target = target.getParent(); } modelName = target.getName(); if (modelName != null) { ModelMetaData model = vdb.getModel(modelName); if (model != null) { return model.getAttachment(MetadataRepository.class); } } return null; }
@Test public void testRedirectionLayerDeletePlan() { RedirectionSchemaBuilder mg = new RedirectionSchemaBuilder(this.context, "redirected"); ModelMetaData model = mg.buildRedirectionLayer(buildSourceTableWithPK().getAttachment(MetadataFactory.class), "base"); String expected = "FOR EACH ROW\n" + "BEGIN ATOMIC\n" + " DECLARE boolean VARIABLES.address_FK_EXISTS = (SELECT COUNT(*) > 0 FROM teiid.address WHERE pid = OLD.id);\n" + " IF (VARIABLES.address_FK_EXISTS)\n" + " BEGIN\n" + " RAISE SQLEXCEPTION 'referential integrity check failed on address table, cascade deletes are not supported';\n" + " END\n" + " UPSERT INTO redirected.Person_REDIRECTED(id, ROW__STATUS) VALUES (OLD.id, 3);\n" + "END"; MetadataFactory mf = model.getAttachment(MetadataFactory.class); Table table = mf.getSchema().getTable("Person"); assertEquals(expected, table.getDeletePlan().replace("\t", " ")); } }
@Test public void testRedirectionLayerUpdatePlan() { RedirectionSchemaBuilder mg = new RedirectionSchemaBuilder(this.context, "redirected"); ModelMetaData model = mg.buildRedirectionLayer(buildSourceTableWithPK().getAttachment(MetadataFactory.class), "base"); String expected = "FOR EACH ROW\n" + "BEGIN ATOMIC\n" + "IF (CHANGING.id)\n" + "BEGIN\n" + " DECLARE boolean VARIABLES.Person_PK_EXISTS = (SELECT true FROM source.Person WHERE id = NEW.id);\n" + " IF (VARIABLES.Person_PK_EXISTS)\n" + " BEGIN\n" + " RAISE SQLEXCEPTION 'duplicate key';\n" + " END\n" + " ELSE\n" + " BEGIN\n" + " DECLARE boolean VARIABLES.address_FK_EXISTS = (SELECT COUNT(*) > 0 FROM teiid.address WHERE pid = OLD.id);\n" + " IF (VARIABLES.address_FK_EXISTS)\n" + " BEGIN\n" + " RAISE SQLEXCEPTION 'referential integrity check failed on address table, cascade deletes are not supported';\n" + " END\n" + " UPSERT INTO redirected.Person_REDIRECTED(id, ROW__STATUS) VALUES (OLD.id, 3);\n" + " UPSERT INTO redirected.Person_REDIRECTED(id, name, dob, ROW__STATUS) VALUES (NEW.id, NEW.name, NEW.dob, 1);\n" + " END\n" + "END\n" + "ELSE\n" + "BEGIN\n" + " UPSERT INTO redirected.Person_REDIRECTED(id, name, dob, ROW__STATUS) VALUES (NEW.id, NEW.name, NEW.dob, 2);\n" + "END\n" + "END"; MetadataFactory mf = model.getAttachment(MetadataFactory.class); Table table = mf.getSchema().getTable("Person"); assertEquals(expected, table.getUpdatePlan().replace("\t", " ")); }
@Test public void testRedirectionLayerInsertPlan() { RedirectionSchemaBuilder mg = new RedirectionSchemaBuilder(this.context, "redirected"); VDBMetaData vdb = new VDBMetaData(); vdb.addModel(buildSourceTable()); ModelMetaData model = mg.buildRedirectionLayer(buildSourceTableWithPK().getAttachment(MetadataFactory.class), "base"); String expected = "FOR EACH ROW\n" + "BEGIN ATOMIC\n" + " DECLARE boolean VARIABLES.Person_PK_EXISTS = (SELECT true FROM source.Person WHERE id = NEW.id);\n" + " IF (VARIABLES.Person_PK_EXISTS)\n" + " BEGIN\n" + " RAISE SQLEXCEPTION 'duplicate key';\n" + " END\n" + " ELSE\n" + " BEGIN\n" + " INSERT INTO redirected.Person_REDIRECTED (id, name, dob, ROW__STATUS) VALUES (NEW.id, NEW.name, NEW.dob, 1);\n" + " END\n" + "END"; MetadataFactory mf = model.getAttachment(MetadataFactory.class); Table table = mf.getSchema().getTable("Person"); assertEquals(expected, table.getInsertPlan().replace("\t", " ")); }
@Test public void testRedirectionLayerSelectPlan() { RedirectionSchemaBuilder mg = new RedirectionSchemaBuilder(this.context, "redirected"); VDBMetaData vdb = new VDBMetaData(); vdb.addModel(buildSourceTable()); ModelMetaData model = mg.buildRedirectionLayer(buildSourceTableWithPK().getAttachment(MetadataFactory.class), "base"); String expected = "SELECT o.id, o.name, o.dob FROM internal.Person AS o LEFT OUTER JOIN " + "redirected.Person_REDIRECTED AS m ON (o.id = m.id) WHERE m.ROW__STATUS IS NULL \n" + " UNION ALL \n" + "SELECT id, name, dob FROM redirected.Person_REDIRECTED WHERE ROW__STATUS <> 3"; MetadataFactory mf = model.getAttachment(MetadataFactory.class); Table table = mf.getSchema().getTable("Person"); assertEquals(expected, table.getSelectTransformation()); }
@Test(expected = IllegalStateException.class) public void testRedirectionLayer_noPK() { RedirectionSchemaBuilder mg = new RedirectionSchemaBuilder(this.context, "redirected"); VDBMetaData vdb = new VDBMetaData(); vdb.addModel(buildSourceTable()); mg.buildRedirectionLayer(buildSourceTable().getAttachment(MetadataFactory.class), "base"); }
MetadataRepository metadataRepository = model.getAttachment(MetadataRepository.class); if (model.getModelType() == Model.Type.PHYSICAL || model.getModelType() == Model.Type.VIRTUAL) { loadMetadata(vdb, model, cmr, metadataRepository, store, loadCount, vdbResources);
MetadataRepository baseRepo = model.getAttachment(MetadataRepository.class);