use of org.teiid.metadata.MetadataFactory in project teiid by teiid.
the class SQLServerExecutionFactory method getMetadataProcessor.
@Override
public MetadataProcessor<Connection> getMetadataProcessor() {
return new JDBCMetadataProcessor() {
@Override
protected Column addColumn(ResultSet columns, Table table, MetadataFactory metadataFactory, int rsColumns) throws SQLException {
Column c = super.addColumn(columns, table, metadataFactory, rsColumns);
// The ms jdbc driver does not correctly report the auto incremented column
if (!c.isAutoIncremented() && c.getNativeType() != null && StringUtil.endsWithIgnoreCase(c.getNativeType(), " identity")) {
// $NON-NLS-1$
c.setAutoIncremented(true);
}
return c;
}
@Override
protected ResultSet executeSequenceQuery(Connection conn) throws SQLException {
if (getVersion().compareTo(ELEVEN_0) < 0) {
return null;
}
String query = // $NON-NLS-1$
"select db_name() as sequence_catalog, SCHEMA_NAME(schema_id) as sequence_schema, name as sequence_name from sys.sequences" + // $NON-NLS-1$
"where db_name() like ? and SCHEMA_NAME(schema_id) like ? and name like ?";
PreparedStatement ps = conn.prepareStatement(query);
// $NON-NLS-1$
ps.setString(1, getCatalog() == null ? "%" : getCatalog());
// $NON-NLS-1$
ps.setString(2, getSchemaPattern() == null ? "%" : getSchemaPattern());
// $NON-NLS-1$
ps.setString(3, getSequenceNamePattern() == null ? "%" : getSequenceNamePattern());
return ps.executeQuery();
}
};
}
use of org.teiid.metadata.MetadataFactory in project teiid by teiid.
the class TestMetadataProcessor method testInvalidIndex.
@Test
public void testInvalidIndex() throws SQLException {
JDBCMetadataProcessor processor = new JDBCMetadataProcessor();
processor.setImportIndexes(true);
processor.setWidenUnsingedTypes(false);
MetadataFactory mf = new MetadataFactory("vdb", 1, "x", SystemMetadata.getInstance().getRuntimeTypeMap(), new Properties(), null);
DatabaseMetaData dmd = Mockito.mock(DatabaseMetaData.class);
Table t = mf.addTable("c");
JDBCMetadataProcessor.TableInfo ti = new JDBCMetadataProcessor.TableInfo("a", "b", "c", t);
ResultSet rs = Mockito.mock(ResultSet.class);
Mockito.stub(rs.next()).toAnswer(new Answer<Boolean>() {
int count = 0;
@Override
public Boolean answer(InvocationOnMock invocation) throws Throwable {
if (count++ == 0) {
return true;
}
return false;
}
});
// intentionally leave the column name null
Mockito.stub(rs.getShort(7)).toReturn(DatabaseMetaData.tableIndexOther);
Mockito.stub(dmd.getIndexInfo("a", "b", "c", false, true)).toReturn(rs);
processor.getIndexes(mf, dmd, Arrays.asList(ti), false);
Mockito.verify(rs).getString(9);
assertTrue(t.getIndexes().isEmpty());
}
use of org.teiid.metadata.MetadataFactory in project teiid by teiid.
the class TestMongoDBMetadataProcessor method testMetadata.
@Test
public void testMetadata() throws TranslatorException {
MongoDBMetadataProcessor mp = new MongoDBMetadataProcessor();
MetadataFactory mf = processExampleMetadata(mp);
String metadataDDL = DDLStringVisitor.getDDLString(mf.getSchema(), null, null);
String expected = "SET NAMESPACE 'http://www.teiid.org/ext/relational/2012' AS teiid_rel;\n" + "SET NAMESPACE 'http://www.teiid.org/translator/mongodb/2013' AS teiid_mongo;\n" + "\n" + "CREATE FOREIGN TABLE \"table\" (\n" + " \"_id\" integer,\n" + " col2 double,\n" + " col3 long,\n" + " col5 boolean,\n" + " col6 string,\n" + " col7 object[] OPTIONS (SEARCHABLE 'Unsearchable'),\n" + " col8 varbinary OPTIONS (NATIVE_TYPE 'org.bson.types.Binary'),\n" + " CONSTRAINT PK0 PRIMARY KEY(\"_id\"),\n" + " CONSTRAINT FK_col6 FOREIGN KEY(col6) REFERENCES ns \n" + ") OPTIONS (UPDATABLE TRUE, \"teiid_rel:fqn\" 'collection=table');\n" + "\n" + "CREATE FOREIGN TABLE child (\n" + " col1 string,\n" + " col2 string,\n" + " \"_id\" integer OPTIONS (UPDATABLE FALSE),\n" + " CONSTRAINT PK0 PRIMARY KEY(\"_id\"),\n" + " FOREIGN KEY(\"_id\") REFERENCES \"table\" \n" + ") OPTIONS (UPDATABLE TRUE, \"teiid_rel:fqn\" 'collection=table/embedded=child', \"teiid_mongo:MERGE\" 'table');\n" + "\n" + "CREATE FOREIGN TABLE embedded (\n" + " col1 string OPTIONS (SEARCHABLE 'Unsearchable'),\n" + " col2 object OPTIONS (SEARCHABLE 'Unsearchable'),\n" + " \"_id\" integer OPTIONS (UPDATABLE FALSE),\n" + " CONSTRAINT PK0 PRIMARY KEY(\"_id\"),\n" + " FOREIGN KEY(\"_id\") REFERENCES \"table\" \n" + ") OPTIONS (UPDATABLE TRUE, \"teiid_rel:fqn\" 'collection=table/embedded=embedded', \"teiid_mongo:EMBEDDABLE\" 'true');\n" + "\n" + "CREATE FOREIGN TABLE emptyFirst (\n" + " \"_id\" string AUTO_INCREMENT OPTIONS (NATIVE_TYPE 'org.bson.types.ObjectId'),\n" + " col2 double,\n" + " col3 long,\n" + " CONSTRAINT PK0 PRIMARY KEY(\"_id\")\n" + ") OPTIONS (UPDATABLE TRUE, \"teiid_rel:fqn\" 'collection=emptyFirst');";
assertEquals(expected, metadataDDL.replace("\t", " "));
}
use of org.teiid.metadata.MetadataFactory in project teiid by teiid.
the class TestMongoDBMetadataProcessor method processExampleMetadata.
private MetadataFactory processExampleMetadata(MongoDBMetadataProcessor mp) throws TranslatorException {
MetadataFactory mf = new MetadataFactory("vdb", 1, "mongodb", SystemMetadata.getInstance().getRuntimeTypeMap(), new Properties(), null);
MongoDBConnection conn = Mockito.mock(MongoDBConnection.class);
DBCollection tableDBCollection = Mockito.mock(DBCollection.class);
DBCollection embeddedDBCollection = Mockito.mock(DBCollection.class);
DBCollection emptyDBCollection = Mockito.mock(DBCollection.class);
DBCollection emptyFirstDBCollection = Mockito.mock(DBCollection.class);
LinkedHashSet<String> tables = new LinkedHashSet<String>();
tables.add("table");
tables.add("embedded");
tables.add("empty");
tables.add("emptyFirst");
DB db = Mockito.mock(DB.class);
BasicDBList array = new BasicDBList();
array.add("one");
array.add("two");
BasicDBObject row = new BasicDBObject();
row.append("_id", new Integer(1));
row.append("col2", new Double(2.0));
row.append("col3", new Long(3L));
row.append("col5", Boolean.TRUE);
row.append("col6", new Date(0L));
row.append("col6", new DBRef(db.getName(), "ns", "one"));
row.append("col7", array);
row.append("col8", new Binary("binary".getBytes()));
BasicDBObject child = new BasicDBObject();
child.append("col1", "one");
child.append("col2", "two");
row.append("child", child);
BasicDBObject emptyFirstRow = new BasicDBObject();
emptyFirstRow.append("_id", new ObjectId("5835a598944716c40d2f26ae"));
emptyFirstRow.append("col2", new Double(2.0));
emptyFirstRow.append("col3", new Long(3L));
BasicDBObject embedded = new BasicDBObject();
embedded.append("col1", 1);
embedded.append("col2", new byte[0]);
row.append("embedded", embedded);
Mockito.stub(db.getCollectionNames()).toReturn(tables);
Mockito.stub(db.getCollection(Mockito.eq("table"))).toReturn(tableDBCollection);
Mockito.stub(db.getCollection(Mockito.eq("embedded"))).toReturn(embeddedDBCollection);
Mockito.stub(db.getCollection(Mockito.eq("empty"))).toReturn(emptyDBCollection);
Mockito.stub(db.getCollection(Mockito.eq("emptyFirst"))).toReturn(emptyFirstDBCollection);
BasicDBObject nextRow = new BasicDBObject();
nextRow.append("_id", new Integer(2));
nextRow.append("col2", new Double(3.0));
nextRow.append("col3", "A");
nextRow.append("col5", Boolean.TRUE);
nextRow.append("col9", "another");
DBCursor tableCursor = Mockito.mock(DBCursor.class);
Mockito.when(tableCursor.numSeen()).thenReturn(1).thenReturn(2);
Mockito.when(tableCursor.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false);
Mockito.when(tableCursor.next()).thenReturn(row).thenReturn(nextRow);
Mockito.when(tableDBCollection.find()).thenReturn(tableCursor);
DBCursor embeddedCursor = Mockito.mock(DBCursor.class);
Mockito.when(embeddedCursor.hasNext()).thenReturn(true).thenReturn(false);
Mockito.when(embeddedCursor.next()).thenReturn(child);
Mockito.when(embeddedDBCollection.find()).thenReturn(embeddedCursor);
DBCursor emptyFirstCursor = Mockito.mock(DBCursor.class);
Mockito.when(emptyFirstCursor.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false);
Mockito.when(emptyFirstCursor.next()).thenReturn(null).thenReturn(emptyFirstRow);
Mockito.when(emptyFirstDBCollection.find()).thenReturn(emptyFirstCursor);
DBCursor emptyCursor = Mockito.mock(DBCursor.class);
Mockito.when(emptyCursor.hasNext()).thenReturn(true).thenReturn(false);
Mockito.when(emptyCursor.next()).thenReturn(null);
Mockito.when(emptyDBCollection.find()).thenReturn(emptyCursor);
Mockito.stub(conn.getDatabase()).toReturn(db);
mp.process(mf, conn);
return mf;
}
use of org.teiid.metadata.MetadataFactory in project teiid by teiid.
the class TestMongoDBMetadataProcessor method testMetadataMoreSamples.
@Test
public void testMetadataMoreSamples() throws TranslatorException {
MongoDBMetadataProcessor mp = new MongoDBMetadataProcessor();
mp.setSampleSize(2);
MetadataFactory mf = processExampleMetadata(mp);
String metadataDDL = DDLStringVisitor.getDDLString(mf.getSchema(), null, null);
String expected = "SET NAMESPACE 'http://www.teiid.org/ext/relational/2012' AS teiid_rel;\n" + "SET NAMESPACE 'http://www.teiid.org/translator/mongodb/2013' AS teiid_mongo;\n" + "\n" + "CREATE FOREIGN TABLE \"table\" (\n" + " \"_id\" integer,\n" + " col2 double,\n" + " col3 string OPTIONS (SEARCHABLE 'Unsearchable'),\n" + " col5 boolean,\n" + " col6 string,\n" + " col7 object[] OPTIONS (SEARCHABLE 'Unsearchable'),\n" + " col8 varbinary OPTIONS (NATIVE_TYPE 'org.bson.types.Binary'),\n" + " col9 string,\n" + " CONSTRAINT PK0 PRIMARY KEY(\"_id\"),\n" + " CONSTRAINT FK_col6 FOREIGN KEY(col6) REFERENCES ns \n" + ") OPTIONS (UPDATABLE TRUE, \"teiid_rel:fqn\" 'collection=table');\n" + "\n" + "CREATE FOREIGN TABLE child (\n" + " col1 string,\n" + " col2 string,\n" + " \"_id\" integer OPTIONS (UPDATABLE FALSE),\n" + " CONSTRAINT PK0 PRIMARY KEY(\"_id\"),\n" + " FOREIGN KEY(\"_id\") REFERENCES \"table\" \n" + ") OPTIONS (UPDATABLE TRUE, \"teiid_rel:fqn\" 'collection=table/embedded=child', \"teiid_mongo:MERGE\" 'table');\n" + "\n" + "CREATE FOREIGN TABLE embedded (\n" + " col1 string OPTIONS (SEARCHABLE 'Unsearchable'),\n" + " col2 object OPTIONS (SEARCHABLE 'Unsearchable'),\n" + " \"_id\" integer OPTIONS (UPDATABLE FALSE),\n" + " CONSTRAINT PK0 PRIMARY KEY(\"_id\"),\n" + " FOREIGN KEY(\"_id\") REFERENCES \"table\" \n" + ") OPTIONS (UPDATABLE TRUE, \"teiid_rel:fqn\" 'collection=table/embedded=embedded', \"teiid_mongo:EMBEDDABLE\" 'true');\n" + "\n" + "CREATE FOREIGN TABLE emptyFirst (\n" + " \"_id\" string AUTO_INCREMENT OPTIONS (NATIVE_TYPE 'org.bson.types.ObjectId'),\n" + " col2 double,\n" + " col3 long,\n" + " CONSTRAINT PK0 PRIMARY KEY(\"_id\")\n" + ") OPTIONS (UPDATABLE TRUE, \"teiid_rel:fqn\" 'collection=emptyFirst');";
assertEquals(expected, metadataDDL.replace("\t", " "));
}
Aggregations