package net.sourceforge.mayfly.acceptance; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.Statement; /** * There is a question of whether our JDBC metadata should somehow be * limited to reflect what is portable against various JDBC drivers. * For now, it is merely limited by what we've gotten around to * implementing. * * As for the general question of how portable DatabaseMetaData is, * there are issues. See Hypersonic sources for example. */ public class MetaDataTest extends SqlTestCase { public void testMetaData() throws Exception { DatabaseMetaData metaData = connection.getMetaData(); if (!dialect.wishThisWereTrue()) { assertFalse(metaData.supportsUnion()); } else { assertTrue(metaData.supportsUnion()); } } public void xtestNoTables() throws Exception { // not sure about null vs "" for schema, catalog. // But null is clearly what hypersonic wants for "across all schemas/catalogs". ResultSet tables = connection.getMetaData().getTables(null, null, "", null); assertFalse(tables.next()); tables.close(); } public void xtestOneTable() throws Exception { Statement statement = connection.createStatement(); assertEquals(0, statement.executeUpdate("create table foo (a integer)")); statement.close(); connection.commit(); ResultSet tables = connection.getMetaData().getTables(null, null, "%", null); assertTrue("first row", tables.next()); assertEquals("foo", tables.getString("TABLE_NAME")); assertFalse("no second row", tables.next()); tables.close(); } public void testListColumnsWithLowercaseSearch() throws Exception { execute("create table foo(a integer, b integer)"); ResultSet columns = connection.getMetaData().getColumns( null, null, "foo", "a"); if (dialect.metaDataExpectsUppercase()) { assertFalse(columns.next()); } else { assertTrue(columns.next()); assertEquals("a", columns.getString("COLUMN_NAME")); assertFalse(columns.next()); } } public void testListColumnsMixedCase() throws Exception { execute("create table FOO(a integer, b integer)"); ResultSet columns = connection.getMetaData().getColumns( null, null, "FOO", "A"); if (!dialect.metaDataProblemWithUppercaseTableName()) { assertTrue(columns.next()); if (dialect.metaDataExpectsUppercase()) { assertEquals("A", columns.getString("COLUMN_NAME")); } else { assertEquals("a", columns.getString("COLUMN_NAME")); } } assertFalse(columns.next()); } public void testListColumnsSearchIsUppercase() throws Exception { execute("create table FOO(A integer, b integer)"); ResultSet columns = connection.getMetaData().getColumns( null, null, "FOO", "A"); if (!dialect.metaDataProblemWithUppercaseTableName()) { assertTrue(columns.next()); assertEquals("A", columns.getString("COLUMN_NAME")); } assertFalse(columns.next()); } public void testListColumnsNoColumns() throws Exception { execute("create table foo(a integer, b integer)"); ResultSet columns = connection.getMetaData().getColumns( null, null, "FOO", "C"); assertFalse(columns.next()); } public void testListColumnsNoTable() throws Exception { execute("create table foo(a integer, b integer)"); ResultSet columns = connection.getMetaData().getColumns( null, null, "NO_SUCH_TABLE", "A"); assertFalse(columns.next()); } public void testDatabaseName() throws Exception { assertEquals( dialect.productName(), connection.getMetaData().getDatabaseProductName()); } }