package org.mariadb.jdbc; import org.junit.BeforeClass; import org.junit.Test; import java.sql.*; import static org.junit.Assert.*; public class ResultSetMetaDataTest extends BaseTest { /** * Initialisation. * * @throws SQLException exception */ @BeforeClass() public static void initClass() throws SQLException { createTable("test_rsmd", "id_col int not null primary key auto_increment, " + "nullable_col varchar(20),unikey_col int unique, char_col char(10), us smallint unsigned"); createTable("t1", "id int, name varchar(20)"); createTable("t2", "id int, name varchar(20)"); createTable("t3", "id int, name varchar(20)"); } @Test public void metaDataTest() throws SQLException { requireMinimumVersion(5, 0); Statement stmt = sharedConnection.createStatement(); stmt.execute("insert into test_rsmd (id_col,nullable_col,unikey_col) values (null, 'hej', 9)"); ResultSet rs = stmt .executeQuery("select id_col, nullable_col, unikey_col as something, char_col,us from test_rsmd"); assertEquals(true, rs.next()); ResultSetMetaData rsmd = rs.getMetaData(); assertEquals(true, rsmd.isAutoIncrement(1)); assertEquals(5, rsmd.getColumnCount()); assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(2)); assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(1)); assertEquals(String.class.getName(), rsmd.getColumnClassName(2)); assertEquals(Integer.class.getName(), rsmd.getColumnClassName(1)); assertEquals(Integer.class.getName(), rsmd.getColumnClassName(3)); assertEquals("id_col", rsmd.getColumnLabel(1)); assertEquals("nullable_col", rsmd.getColumnLabel(2)); assertEquals("something", rsmd.getColumnLabel(3)); assertEquals("unikey_col", rsmd.getColumnName(3)); assertEquals(Types.CHAR, rsmd.getColumnType(4)); assertEquals(Types.SMALLINT, rsmd.getColumnType(5)); DatabaseMetaData md = sharedConnection.getMetaData(); ResultSet cols = md.getColumns(null, null, "test\\_rsmd", null); cols.next(); assertEquals("id_col", cols.getString("COLUMN_NAME")); assertEquals(Types.INTEGER, cols.getInt("DATA_TYPE")); cols.next(); /* nullable_col */ cols.next(); /* unikey_col */ cols.next(); /* char_col */ assertEquals("char_col", cols.getString("COLUMN_NAME")); assertEquals(Types.CHAR, cols.getInt("DATA_TYPE")); cols.next(); /* us */// CONJ-96: SMALLINT UNSIGNED gives Types.SMALLINT assertEquals("us", cols.getString("COLUMN_NAME")); assertEquals(Types.SMALLINT, cols.getInt("DATA_TYPE")); } @Test public void conj17() throws Exception { requireMinimumVersion(5, 0); ResultSet rs = sharedConnection.createStatement().executeQuery( "select count(*),1 from information_schema.tables"); rs.next(); assertEquals(rs.getMetaData().getColumnName(1), "count(*)"); assertEquals(rs.getMetaData().getColumnName(2), "1"); } @Test public void conj84() throws Exception { requireMinimumVersion(5, 0); Statement stmt = sharedConnection.createStatement(); stmt.execute("INSERT INTO t1 VALUES (1, 'foo')"); stmt.execute("INSERT INTO t2 VALUES (2, 'bar')"); ResultSet rs = sharedConnection.createStatement().executeQuery( "select t1.*, t2.* FROM t1 join t2"); rs.next(); assertEquals(rs.findColumn("id"), 1); assertEquals(rs.findColumn("name"), 2); assertEquals(rs.findColumn("t1.id"), 1); assertEquals(rs.findColumn("t1.name"), 2); assertEquals(rs.findColumn("t2.id"), 3); assertEquals(rs.findColumn("t2.name"), 4); } /* * CONJ-149: ResultSetMetaData.getTableName returns table alias instead of real table name * * @throws SQLException */ @Test public void tableNameTest() throws Exception { ResultSet rs = sharedConnection.createStatement().executeQuery( "SELECT id AS id_alias FROM t3 AS t1_alias"); ResultSetMetaData rsmd = rs.getMetaData(); // this should return the original name of the table, not the alias logInfo(rsmd.getTableName(1)); assertEquals(rsmd.getTableName(1), "t3"); assertEquals(rsmd.getColumnLabel(1), "id_alias"); assertEquals(rsmd.getColumnName(1), "id"); // add useOldAliasMetadataBehavior to get the alias instead of the real // table name try (Connection connection = setConnection("&useOldAliasMetadataBehavior=true")) { rs = connection.createStatement().executeQuery( "SELECT id AS id_alias FROM t3 AS t1_alias"); rsmd = rs.getMetaData(); // this should return the alias name of the table, i.e. old behavior logInfo(rsmd.getTableName(1)); assertEquals(rsmd.getTableName(1), "t1_alias"); assertEquals(rsmd.getColumnLabel(1), "id_alias"); assertEquals(rsmd.getColumnName(1), "id_alias"); } } }