Esempio n. 1
0
  @Test
  public void testFKAccrossSchemas() throws Exception {
    String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar, PRIMARY KEY(g1e1, g1e2));\n";

    String ddl2 =
        "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, PRIMARY KEY(g2e1, g2e2),"
            + "FOREIGN KEY (g2e1, g2e2) REFERENCES model.G1)";

    MetadataFactory f1 = helpParse(ddl, "model");
    MetadataFactory f2 = helpParse(ddl2, "model2");

    VDBMetaData vdb = new VDBMetaData();
    vdb.setName("myVDB"); // $NON-NLS-1$
    ModelMetaData modelOne = new ModelMetaData();
    modelOne.setName("model"); // $NON-NLS-1$
    vdb.addModel(modelOne);

    ModelMetaData modelTwo = new ModelMetaData();
    modelTwo.setName("model2"); // $NON-NLS-1$
    vdb.addModel(modelTwo);

    MetadataStore s = f1.asMetadataStore();
    f2.mergeInto(s);

    ValidatorReport report = new MetadataValidator().validate(vdb, s);

    assertFalse(report.hasItems());

    Table table = s.getSchema("model2").getTable("G2");
    ForeignKey fk = table.getForeignKeys().get(0);
    assertEquals(fk.getColumns(), table.getColumns());
    assertEquals("G1", fk.getReferenceTableName());

    assertEquals(fk.getPrimaryKey().getColumns(), s.getSchema("model").getTable("G1").getColumns());
  }
Esempio n. 2
0
  @Test
  public void testOptionalFKFail() throws Exception {
    String ddl =
        "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar);\n"
            + "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, PRIMARY KEY(g2e1, g2e2),"
            + "FOREIGN KEY (g2e1, g2e2) REFERENCES G1)";

    MetadataFactory s = helpParse(ddl, "model");
    Map<String, Table> tableMap = s.getSchema().getTables();
    assertEquals(2, tableMap.size());

    assertTrue("Table not found", tableMap.containsKey("G1"));
    assertTrue("Table not found", tableMap.containsKey("G2"));

    Table table = tableMap.get("G2");
    ForeignKey fk = table.getForeignKeys().get(0);
    assertEquals(fk.getColumns(), table.getColumns());
    assertEquals("G1", fk.getReferenceTableName());

    VDBMetaData vdb = new VDBMetaData();
    vdb.setName("myVDB"); // $NON-NLS-1$
    ModelMetaData modelOne = new ModelMetaData();
    modelOne.setName("model"); // $NON-NLS-1$
    vdb.addModel(modelOne);

    ValidatorReport report = new MetadataValidator().validate(vdb, s.asMetadataStore());

    assertTrue(report.hasItems());
  }
  @BeforeClass
  public static void setUp() throws Exception {
    server = new FakeServer(true);

    LoopbackExecutionFactory loopy = new LoopbackExecutionFactory();
    loopy.setRowCount(10);
    loopy.start();
    server.addTranslator("l", loopy);

    String DDL = "CREATE FOREIGN TABLE G1 (e1 string, e2 integer);";
    ModelMetaData model = new ModelMetaData();
    model.setName("TEMP");
    model.setModelType(Model.Type.PHYSICAL);
    model.setSchemaSourceType("DDL");
    model.setSchemaText(DDL);
    SourceMappingMetadata sm = new SourceMappingMetadata();
    sm.setName("loopy");
    sm.setTranslatorName("l");
    model.addSourceMapping(sm);

    server.deployVDB("test", model);
    conn = server.createConnection("jdbc:teiid:test");
  }