blob: 4dbcdfdff6011930e7ad207924236d2dcefcd993 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package libcore.java.sql;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
public final class OldResultSetMetaDataTest extends OldSQLTest {
ResultSetMetaData rsmd = null;
Statement st = null;
ResultSet rs = null;
@Override
public void setUp() throws Exception {
super.setUp();
try {
conn.setAutoCommit(false);
assertFalse(conn.getAutoCommit());
String query = "select * from zoo";
st = conn.createStatement();
st.execute(query);
rs = st.getResultSet();
rsmd = rs.getMetaData();
} catch (SQLException e) {
fail("Couldn't get ResultSetMetaData object");
}
}
@Override
public void tearDown() throws SQLException {
try {
rs.close();
st.close();
} catch (SQLException e) {
fail("Couldn't close Statement object");
}
super.tearDown();
}
// not supported
public void testGetCatalogName() throws SQLException {
try {
assertNotNull(rsmd.getCatalogName(1));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
try {
conn.close();
rsmd.getCatalogName(0);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
public void testGetColumnClassName() {
try {
assertNotNull(rsmd);
assertEquals(Short.class.getName(), rsmd.getColumnClassName(1));
assertEquals(String.class.getName(), rsmd.getColumnClassName(2));
assertEquals(String.class.getName(), rsmd.getColumnClassName(3));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
try {
String name = rsmd.getColumnClassName(0);
assertNull(name);
} catch (SQLException e) {
fail("SQLException is thrown");
}
try {
String name = rsmd.getColumnClassName(4);
assertNull(name);
} catch (SQLException e) {
fail("SQLException is thrown");
}
}
// SQLException checking test fails
public void testGetColumnCount() {
try {
assertEquals(3, rsmd.getColumnCount());
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
try {
rs.close();
rsmd.getColumnCount();
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
// Column label has format TABLE.COLUMN expected: COLUMN
public void testGetColumnLabel() {
String[] labels = { "id", "name", "family" };
try {
for (int i = 0; i < rsmd.getColumnCount(); i++) {
String label = rsmd.getColumnLabel(i + 1);
assertTrue("expected "+labels[i] + "got "+label,labels[i].contains(label));
}
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
try {
String label = rsmd.getColumnLabel(0);
fail("SQLException expected");
} catch (SQLException e) {
//ok
}
try {
String label = rsmd.getColumnLabel(5);
fail("SQLException expected");
} catch (SQLException e) {
//ok
}
}
// Column label has format TABLE.COLUMN expected: COLUMN
public void testGetColumnName() {
String[] labels = { "id", "name", "family" };
try {
for (int i = 0; i < rsmd.getColumnCount(); i++) {
String name = rsmd.getColumnName(i + 1);
assertEquals(labels[i], name);
}
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
try {
String label = rsmd.getColumnName(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
//ok
}
try {
String label = rsmd.getColumnName(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
//ok
}
}
/**
* For extensive tests see: ResultSetGetterTest.testGetMetaData
*/
public void testGetColumnType() {
int[] types = { Types.SMALLINT, Types.VARCHAR, Types.VARCHAR};
try {
for (int i = 0; i < rsmd.getColumnCount(); i++) {
int type = rsmd.getColumnType(i + 1);
assertEquals(types[i], type);
}
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
try {
rsmd.getColumnType(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.getColumnType(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
}
/**
* for extensive tests see: ResultSetGetterTest.testGetMetaData
*/
public void testGetColumnTypeName() {
try {
assertTrue("smallint".equalsIgnoreCase(rsmd.getColumnTypeName(1)));
assertTrue("varchar".equalsIgnoreCase(rsmd.getColumnTypeName(2)));
assertTrue("varchar".equalsIgnoreCase(rsmd.getColumnTypeName(3)));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
try {
rsmd.getColumnTypeName(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.getColumnTypeName(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
}
// For int = 0, exception expected
public void testGetTableName() throws SQLException {
try {
assertEquals("zoo", rsmd.getTableName(1));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
Statement st1 = null;
ResultSet rs1 = null;
try {
String create = "create table hutch (id integer not null, animal_id integer, address char(20), primary key (id));";
String insert1 = "insert into hutch (id, animal_id, address) values (1, 2, 'Birds-house, 1');";
String insert2 = "insert into hutch (id, animal_id, address) values (2, 1, 'Horse-house, 5');";
String query = "select name, animal_id from hutch, zoo where zoo.id = 1" ;
st1 = conn.createStatement();
st1.executeUpdate(create);
st1.executeUpdate(insert1);
st1.executeUpdate(insert2);
rs1 = st1.executeQuery(query);
assertNotNull(rs1);
ResultSetMetaData rsmd1 = rs1.getMetaData();
assertEquals("zoo", rsmd1.getTableName(1));
assertEquals("hutch", rsmd1.getTableName(2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
} finally {
try {
if (rs1 != null) rs1.close();
if (st1 != null) {
st1.executeUpdate("drop table if exists hutch");
st1.close();
}
} catch (SQLException sqle) {
}
}
//Exception Text
try {
String name = rsmd.getTableName(0);
fail("SQLException Expected");
} catch (SQLException e) {
// ok
}
}
// not supported
public void testGetPrecision() throws SQLException {
Statement st2 = null;
Statement st3 = null;
ResultSetMetaData rsmd2 = null;
try {
int precisionNum = 10;
int scale = 3;
int precicisionReal = 10;
String createTable = "create table DecimalNumbers ( valueDouble DOUBLE,"+
"valueFloat FLOAT , scaleTest NUMERIC("+precisionNum+","+scale+"),"+
" valueReal REAL("+precicisionReal+") );";
String insert = "insert into DecimalNumbers values (1.5, 20.55, 30.666, 100000);";
String select = "select * from DecimalNumbers;";
st2 = conn.createStatement();
st2.executeUpdate(createTable);
st2.executeUpdate(insert);
st2.close();
st3 = conn.createStatement();
rs = st3.executeQuery(select);
assertTrue(rs.next());
rsmd2 = rs.getMetaData();
assertNotNull(rsmd2);
assertEquals(precicisionReal, rsmd2.getPrecision(4));
assertEquals(precisionNum,rsmd2.getPrecision(3));
assertTrue(rsmd2.getPrecision(2) > 0);
assertTrue(rsmd2.getPrecision(1) > 0);
// non numeric field
try {
rsmd.getPrecision(3);
} catch (SQLException e1) {
System.out.println("ResultSetMetaDataTest.testGetPrecision()"+e1.getMessage());
e1.printStackTrace();
}
try {
rsmd.getPrecision(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.getPrecision(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rs.close();
rsmd.getPrecision(1);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
} finally {
if (st2 != null) st2.close();
if (st3 != null) st3.close();
}
}
/**
* Always returns 0, exception tests fail no positive test case for
* black-box test possible: no default value indicated.
*
* Not supported
*/
public void testGetScale() throws SQLException {
try {
int scale = 3;
String createTable = "create table DecimalNumbers ( valueDouble DOUBLE,"+
"valueFloat FLOAT , scaleTest NUMERIC(10,"+scale+") );";
String insert = "insert into DecimalNumbers values (1.5, 20.55, 30.666);";
String select = "select * from DecimalNumbers;";
Statement st = conn.createStatement();
st.executeUpdate(createTable);
st.executeUpdate(insert);
rs = st.executeQuery(select);
ResultSetMetaData rsmd2 = rs.getMetaData();
assertNotNull(rsmd2);
assertEquals(scale,rsmd2.getScale(3));
assertTrue(rsmd2.getScale(1) > 0);
assertTrue(rsmd2.getScale(2) > 0);
try {
rsmd.getScale(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.getScale(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
conn.close();
rsmd.getScale(1);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
} finally {
st.cancel();
}
}
// not supported
public void testGetSchema() {
try {
assertNull("Functionality is now supported. Change test",rsmd.getSchemaName(2));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.testGetScale()"+e1.getMessage());
e1.printStackTrace();
}
try {
rsmd.getSchemaName(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.getSchemaName(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
conn.close();
rsmd.getSchemaName(2);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
/**
* Tests fail: always returns false, failing statements commented out.
* Feature only partially implemented.Missing: Test positive case
*
* Not supported.
*/
public void testisAutoIncrement() {
try {
assertFalse(rsmd.isAutoIncrement(1));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.testGetScale()"+e1.getMessage());
e1.printStackTrace();
}
/*
// Exception testing
try {
rsmd.isAutoIncrement(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.isAutoIncrement(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
*/
try {
conn.close();
rsmd.getSchemaName(2);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
// not supported
public void testIsCaseSensitive() {
try {
assertFalse(rsmd.isCaseSensitive(1));
assertFalse(rsmd.isCaseSensitive(2));
assertFalse(rsmd.isCaseSensitive(3));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.testGetScale()"+e1.getMessage());
e1.printStackTrace();
}
/*
// Exception testing
try {
rsmd.isCaseSensitive(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.isCaseSensitive(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
*/
try {
conn.close();
rsmd.isCaseSensitive(1);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
/**
* Tests fail: always returns false. Exceptions and tests non Numeric fields
* fail, failing statements commented out. Feature only partially
* implemented. May be an optional feature.
*
* Not supported.
*/
public void testIsCurrency() {
try {
assertFalse(rsmd.isCurrency(1));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.testGetScale()"+e1.getMessage());
e1.printStackTrace();
}
// Exception testing
try {
rsmd.isCurrency(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.isCurrency(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rs.close();
rsmd.isCurrency(1);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
// not supported
public void testIsDefinitlyWritable() {
try {
assertTrue(rsmd.isDefinitelyWritable(1));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.testisDefinitelyWritable()"
+ e1.getMessage());
e1.printStackTrace();
}
// Exception testing
try {
rsmd.isDefinitelyWritable(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.isDefinitelyWritable(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
}
/**
* Tests fail: always returns ResultSetMetaData.columnNullableUnknown.
* Exceptions fail, failing statements commented out. Feature only
* partially implemented. May be an optional feature.
*
* Not supported.
*/
public void testIsNullable() {
try {
assertEquals(ResultSetMetaData.columnNullable, rsmd
.isNullable(1));
assertEquals(ResultSetMetaData.columnNullable, rsmd
.isNullable(2));
assertEquals(ResultSetMetaData.columnNullable, rsmd
.isNullable(3));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.isNullable()" + e1.getMessage());
e1.printStackTrace();
}
/*
// Exception testing
try {
rsmd.isNullable(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.isNullable(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
*/
}
/**
* Cannot know from blackbox test if readonly or writable. Exceptions fail,
* Feature only partially implemented.
*/
public void testIsReadOnly() {
try {
assertFalse(rsmd.isReadOnly(1));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.isReadOnly" + e1.getMessage());
e1.printStackTrace();
}
// Exception testing
try {
rsmd.isReadOnly(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
}
/**
* Tests fail: always returns false. Exceptions fail, Feature only partially
* implemented. Missing: test for searchable field.
*/
public void testIsSearchable() {
try {
assertTrue(rsmd.isSearchable(1));
assertTrue(rsmd.isSearchable(2));
assertTrue(rsmd.isSearchable(3));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.isReadOnly" + e1.getMessage());
e1.printStackTrace();
}
// Exception testing
try {
rsmd.isSearchable(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
}
/**
* Tests fail: always returns false. Exceptions and tests on non numeric
* fields fail, Feature only partially implemented. Missing: test positive
* result
*/
public void testIsSigned() {
try {
assertFalse(rsmd.isSigned(1));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.isSigned" + e1.getMessage());
e1.printStackTrace();
}
// Exception testing
try {
rsmd.isSigned(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
}
/**
* Analogous to is Readonly. Exceptions and tests on non numeric fields
* fail, Failing statements commented out. Feature only partially
* implemented.
*/
public void testIsWritable() {
try {
assertTrue(rsmd.isWritable(1));
assertTrue(rsmd.isWritable(2));
assertTrue(rsmd.isWritable(3));
} catch (SQLException e1) {
fail("ResultSetMetaDataTest.isWritable" + e1.getMessage());
e1.printStackTrace();
}
// Exception testing
try {
rsmd.isWritable(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
}
/**
* Tests fail. always returns 0. Missing case where display size greater than 0
*/
public void testGetColumnDisplaySize() {
try {
for (int i = 0; i < rsmd.getColumnCount(); i++) {
int size = rsmd.getColumnDisplaySize(i + 1);
assertTrue(size > 0);
}
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
}
// Exception testing
try {
rsmd.getColumnDisplaySize(0);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
rsmd.getColumnDisplaySize(5);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
}
}