1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.java.sql; 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.KnownFailure; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.extensions.TestSetup; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.Test; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestSuite; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.DatabaseCreator; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_SQL; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Connection; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.DatabaseMetaData; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.DriverManager; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.PreparedStatement; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.ResultSet; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.ResultSetMetaData; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.SQLException; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Statement; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Types; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Random; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.StringTokenizer; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class DatabaseMetaDataTest extends TestCase { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String VIEW_NAME = "myView"; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String CREATE_VIEW_QUERY = "CREATE VIEW " + VIEW_NAME 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " AS SELECT * FROM " + DatabaseCreator.TEST_TABLE1; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String DROP_VIEW_QUERY = "DROP VIEW " + VIEW_NAME; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static Connection conn; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static DatabaseMetaData meta; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static Statement statement; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static Statement statementForward; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static int id = 1; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann public void setUp() throws Exception { 6279870d81001ab3dc70b3bce7dfcca70153a3a14fUrs Grob super.setUp(); 63c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann Support_SQL.loadDriver(); 64c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann try { 65c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann conn = Support_SQL.getConnection(); 66c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann meta = conn.getMetaData(); 67c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement = conn.createStatement(); 68c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statementForward = conn.createStatement( 69c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann ResultSet.TYPE_FORWARD_ONLY, 70c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann ResultSet.CONCUR_READ_ONLY); 71c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann createTestTables(); 72c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } catch (SQLException e) { 73c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann System.out.println("Error in test setup: "+e.getMessage()); 74c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 75c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 77c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann protected void tearDown() throws Exception { 78c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann try { 79c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann conn = Support_SQL.getConnection(); 80c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann meta = conn.getMetaData(); 81c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement = conn.createStatement(); 82c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann deleteTestTables(); 83c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } catch (SQLException e) { 84c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann System.out.println("Error in teardown: "+e.getMessage()); 85c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } finally { 86c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann try { 87c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann conn.close(); 88c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } catch (SQLException e) { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 90c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 91c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann super.tearDown(); 92c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void createTestTables() { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet userTab = meta.getTables(null, null, null, null); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (userTab.next()) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String tableName = userTab.getString("TABLE_NAME"); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (tableName.equals(DatabaseCreator.TEST_TABLE1)) { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DatabaseCreator.DROP_TABLE1); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (tableName 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(DatabaseCreator.TEST_TABLE3)) { 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DatabaseCreator.DROP_TABLE3); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (tableName.equals(VIEW_NAME)) { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DROP_VIEW_QUERY); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project userTab.close(); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DatabaseCreator.CREATE_TABLE3); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DatabaseCreator.CREATE_TABLE1); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(CREATE_VIEW_QUERY); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta = conn.getMetaData(); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected SQLException " + e.toString()); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void deleteTestTables() { 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DatabaseCreator.DROP_TABLE1); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DatabaseCreator.DROP_TABLE3); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DROP_VIEW_QUERY); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected SQLException " + e.toString()); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (! conn.isClosed()) { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 131f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann /* 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setUp() { 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn = Support_SQL.getConnection(); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement = conn.createStatement(); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statementForward = conn.createStatement( 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet.TYPE_FORWARD_ONLY, 144c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann ResultSet.CONCUR_READ_ONLY); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta = conn.getMetaData(); 146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(conn.isClosed()); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected SQLException " + e.toString()); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 151f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO Auto-generated catch block 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.printStackTrace(); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann */ 159f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 161229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * {@link java.sql.DatabaseMetaData #getBestRowIdentifier(java.lang.String, 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String, java.lang.String, int, boolean) } 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getBestRowIdentifierLjava_lang_StringLjava_lang_StringLjava_lang_StringIZ() 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet result = statementForward.executeQuery("SELECT * FROM " 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE1); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann //Updatable ResultSet not supported, converted to normal insert statement 170c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statementForward.executeUpdate("INSERT INTO " + DatabaseCreator.TEST_TABLE1 171c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann + " (id, field1) VALUES( 1234567, 'test1');"); 172c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann /* not supported 173c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann try { 174c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann result.moveToInsertRow(); 175c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann result.updateInt("id", 1234567); 176c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann result.updateString("field1", "test1"); 177c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann result.insertRow(); 178c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } catch (SQLException e) { 179c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann fail("Unexpected SQLException " + e.toString()); 180c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 181c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann */ 182f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.close(); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getBestRowIdentifier(null, null, 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, DatabaseMetaData.bestRowSession, 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project true); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Rows not obtained", rs.next()); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int col = rsmd.getColumnCount(); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect number of columns", 8, col); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] columnNames = { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "SCOPE", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_DIGITS", 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "PSEUDO_COLUMN"}; 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int c = 1; c <= col; ++c) { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect column name", columnNames[c - 1], rsmd 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getColumnName(c)); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect scope", DatabaseMetaData.bestRowSession, rs 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("SCOPE")); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect column name", "_ROWID_", rs.getString("COLUMN_NAME")); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect data type", java.sql.Types.INTEGER, rs.getInt("DATA_TYPE")); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect type name", "INTEGER", rs.getString("TYPE_NAME")); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception testing 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getColumns(null, null, 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, "%"); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 221229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData #getColumns(java.lang.String, 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String, java.lang.String, java.lang.String) 223f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Not supported : pattern with %") 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getColumnsArbitrary() throws SQLException { 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet setAllNull = null; 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet setMixed = null; 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet allArbitrary = null; 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] tablesName = {DatabaseCreator.TEST_TABLE1, 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE3}; 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(tablesName); 233f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes int setSize = 0; 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project allArbitrary = meta.getColumns("%","%","%","%"); 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(allArbitrary); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkColumnsShape(allArbitrary); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSize = crossCheckGetColumnsAndResultSetMetaData(allArbitrary, false); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(6, setSize); 240f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setMixed = meta.getColumns(null, null,"%","%"); 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(setMixed); 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkColumnsShape(setMixed); 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setSize = crossCheckGetColumnsAndResultSetMetaData(setMixed, false); 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(6, setSize); 246f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception: " + e.getMessage()); 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 250f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception testing 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getColumns(null, null, 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, "%"); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 262f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 264229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData #getColumns(java.lang.String, 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String, java.lang.String, java.lang.String) 266f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Not supported ops applied: test fails on arguments: '', '', '%', '%' ") 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getColumnsTableWithNoCatalogSchema() throws SQLException{ 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet noSchemaTable = meta.getColumns("", "", 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, "fkey"); 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(noSchemaTable); 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project noSchemaTable.last(); 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int size = noSchemaTable.getRow(); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals( 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Does not support empty string as input parameter or Wildcard %", 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1, size); 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception: " + e.getMessage()); 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet noSchemaTable = meta.getColumns("", "", 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, "%"); 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(noSchemaTable); 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project noSchemaTable.last(); 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int size = noSchemaTable.getRow(); 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals( 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Does not support empty string as input parameter or Wildcard %", 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 5, size); 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception: " + e.getMessage()); 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet noSchemaTable = meta.getColumns("", "", "%", "%"); 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(noSchemaTable); 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project noSchemaTable.last(); 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int size = noSchemaTable.getRow(); 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals( 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Does not support double Wildcard '%' as input", 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6, size); 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception: " + e.getMessage()); 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 315f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getColumns(null, null, 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, "%"); 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 327f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 328f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 329f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 331229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData #getColumns(java.lang.String, 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String, java.lang.String, java.lang.String) 333f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Wildcard operator does not seem wo work correctly.") 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getColumnsSpecific() throws SQLException { 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] tablesName = { 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, DatabaseCreator.TEST_TABLE3}; 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] fields = {"id", "field1", "field2", "field3", "fkey"}; 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] nullable = {"YES", "NO",""}; 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] nullableInt = { 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.columnNoNulls, 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.columnNullable, 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.columnNullableUnknown}; 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(tablesName); 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(fields); 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(nullableInt); 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(nullable); 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int countSingle = 0; 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int countAll1 = 0; 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int countAll2 = 0; 352f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getColumns(null, null, 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, "%"); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) { 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Invalid table name", Arrays.binarySearch( 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tablesName, rs.getString("TABLE_NAME")) > -1); 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Invalid field name", Arrays.binarySearch(fields, rs 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("COLUMN_NAME")) > -1); 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Invalid nullable value", Arrays.binarySearch( 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nullable, rs.getString("IS_NULLABLE")) > -1); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Invalid nullable code", Arrays.binarySearch( 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nullableInt, rs.getInt("NULLABLE")) > -1); 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project countSingle++; 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Not all results are found", 5, countSingle); 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception: " + e.getMessage()); 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 374f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getColumns(null, null, "%"+DatabaseCreator.CREATE_TABLE1.substring(0, 3)+"%","%" ); 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) { 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong table name", Arrays.binarySearch(tablesName, 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.getString("TABLE_NAME")) > -1); 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project countAll1++; 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Not all results are found", 6, countAll1); 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception: " + e.getMessage()); 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getColumns(null, null, "%TEST_%", "%"); 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) { 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong table name", Arrays.binarySearch(tablesName, 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.getString("TABLE_NAME")) > -1); 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project countAll2++; 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Not all results are found", 6, countAll2); 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception: " + e.getMessage()); 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 403f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getColumns(null, null, 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, "%"); 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 414f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 415f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 417f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 418f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 419f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 421229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getConnection() 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getConnection() throws SQLException { 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect connection value", conn, meta.getConnection()); 425f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Connection con = meta.getConnection(); 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(con.isClosed()); 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 438229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData #getCrossReference(java.lang.String, 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String, java.lang.String, java.lang.String, 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String, java.lang.String) 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("(Ticket 91) Tables apply foreign key constraint. Catalogs not supported") 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getCrossReferenceLjava_lang_StringLjava_lang_StringLjava_lang_StringLjava_lang_StringLjava_lang_StringLjava_lang_String() 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException { 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getCrossReference(conn.getCatalog(), null, 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE3, conn.getCatalog(), null, 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1); 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Rows do not obtained", rs.next()); 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int col = rsmd.getColumnCount(); 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect number of columns", 14, col); 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] columnNames = { "PKTABLE_CAT", "PKTABLE_SCHEM", 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "PKTABLE_NAME", "PKCOLUMN_NAME", "FKTABLE_CAT", 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "FKTABLE_SCHEM", "FKTABLE_NAME", "FKCOLUMN_NAME", "KEY_SEQ", 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "UPDATE_RULE", "DELETE_RULE", "FK_NAME", "PK_NAME", 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "DEFERRABILITY" }; 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int c = 1; c <= col; ++c) { 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect column name", columnNames[c - 1], rsmd 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getColumnName(c)); 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 461f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes// TODO getCatalog is not supported 462dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertEquals("Incorrect primary key table catalog", conn.getCatalog(), 463dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann rs.getString("PKTABLE_CAT")); 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect primary key table schema", "", rs 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("PKTABLE_SCHEM")); 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect primary key table name", 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE3, rs.getString("PKTABLE_NAME")); 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect primary key column name", "fkey", rs 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("PKCOLUMN_NAME")); 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO getCatalog is not supported 471dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertEquals("Incorrect foreign key table catalog", conn.getCatalog(), 472dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann rs.getString("FKTABLE_CAT")); 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect foreign key table schema", "", rs 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("FKTABLE_SCHEM")); 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect foreign key table name", 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, rs.getString("FKTABLE_NAME")); 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect foreign key column name", "fk", rs 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("FKCOLUMN_NAME")); 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect sequence number within foreign key", 1, rs 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("KEY_SEQ")); 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect update rule value", 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.importedKeyNoAction, rs 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("UPDATE_RULE")); 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect delete rule value", 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.importedKeyNoAction, rs 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("DELETE_RULE")); 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Incorrect foreign key name", rs.getString("FK_NAME")); 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Incorrect primary key name", rs.getString("PK_NAME")); 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect deferrability", 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.importedKeyNotDeferrable, rs 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("DEFERRABILITY")); 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 493f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getCrossReference(conn.getCatalog(), null, 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE3, conn.getCatalog(), null, 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1); 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 505f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getCrossReference(conn.getCatalog(), null, 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE3, conn.getCatalog(), null, 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1); 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 520229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDatabaseMajorVersion() 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDatabaseMajorVersion() throws SQLException { 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrdct database major version", meta 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getDatabaseMajorVersion() >= 0); 526f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 527dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann // Exception checking 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getDatabaseMajorVersion(); 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 536f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 540229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDatabaseMinorVersion() 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDatabaseMinorVersion() throws SQLException { 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect database minor version", meta 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getDatabaseMinorVersion() >= 0); 546f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getDatabaseMinorVersion(); 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 559229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDatabaseProductName() 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDatabaseProductName() throws SQLException { 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect database product name", !"".equals(meta 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getDatabaseProductName().trim())); 565f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getDatabaseProductName(); 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 575dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 579229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDatabaseProductVersion() 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDatabaseProductVersion() throws SQLException { 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect database product version", !"".equals(meta 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getDatabaseProductVersion().trim())); 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getDatabaseProductVersion(); 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 597229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDefaultTransactionIsolation() 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDefaultTransactionIsolation() throws SQLException { 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int defaultLevel = meta.getDefaultTransactionIsolation(); 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (defaultLevel) { 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case Connection.TRANSACTION_NONE: 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case Connection.TRANSACTION_READ_COMMITTED: 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case Connection.TRANSACTION_READ_UNCOMMITTED: 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case Connection.TRANSACTION_REPEATABLE_READ: 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case Connection.TRANSACTION_SERIALIZABLE: 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // these levels are OK 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project default: 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Incorrect value of default transaction isolation level"); 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 613f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getDefaultTransactionIsolation(); 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 626229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDriverMajorVersion() 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDriverMajorVersion() throws SQLException { 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect driver major version", meta 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getDriverMajorVersion() >= 0); 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 634229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDriverMinorVersion() 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDriverMinorVersion() { 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect driver minor version", meta 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getDriverMinorVersion() >= 0); 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 642229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDriverName() 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDriverName() throws SQLException { 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String driverName = meta.getDriverName(); 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect driver name", driverName.trim().startsWith( 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "SQLite")); 649f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Exception checking 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getDriverName(); 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 662229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getDriverVersion() 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getDriverVersion() throws SQLException { 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect driver version", !"".equals(meta 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getDriverVersion().trim())); 668f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 671f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getDriverVersion(); 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 678f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 680f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Keys are not supported: Ticket 91") 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getImportedKeysLjava_lang_StringLjava_lang_StringLjava_lang_String() 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException { 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getImportedKeys(conn.getCatalog(), null, 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1); 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Rows do not obtained", rs.next()); 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int col = rsmd.getColumnCount(); 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect number of columns", 14, col); 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] columnNames = { "PKTABLE_CAT", "PKTABLE_SCHEM", 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "PKTABLE_NAME", "PKCOLUMN_NAME", "FKTABLE_CAT", 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "FKTABLE_SCHEM", "FKTABLE_NAME", "FKCOLUMN_NAME", "KEY_SEQ", 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "UPDATE_RULE", "DELETE_RULE", "FK_NAME", "PK_NAME", 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "DEFERRABILITY" }; 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int c = 1; c <= col; ++c) { 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect column name", columnNames[c - 1], rsmd 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getColumnName(c)); 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// TODO getCatalog is not supported 701dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertEquals("Incorrect primary key table catalog", conn.getCatalog(), 702dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann rs.getString("PKTABLE_CAT")); 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect primary key table schema", "", rs 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("PKTABLE_SCHEM")); 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect primary key table name", 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE3, rs.getString("PKTABLE_NAME")); 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect primary key column name", "fkey", rs 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("PKCOLUMN_NAME")); 709dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertEquals("Incorrect foreign key table catalog", conn.getCatalog(), 710dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann rs.getString("FKTABLE_CAT")); 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect foreign key table schema", "", rs 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("FKTABLE_SCHEM")); 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect foreign key table name", 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, rs.getString("FKTABLE_NAME")); 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect foreign key column name", "fk", rs 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("FKCOLUMN_NAME")); 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect sequence number within foreign key", 1, rs 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("KEY_SEQ")); 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect update rule value", 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.importedKeyNoAction, rs 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("UPDATE_RULE")); 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect delete rule value", 723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.importedKeyNoAction, rs 724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("DELETE_RULE")); 725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // assertNotNull("Incorrect foreign key name", rs.getString("FK_NAME")); 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect primary key name", null, rs 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("PK_NAME")); 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect deferrability", 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseMetaData.importedKeyNotDeferrable, rs 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getShort("DEFERRABILITY")); 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 732f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 735f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getImportedKeys(conn.getCatalog(), null, 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1); 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 746229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getMaxCursorNameLength() 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getMaxCursorNameLength() throws SQLException { 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int nameLength = meta.getMaxCursorNameLength(); 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (nameLength > 0) { 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.setCursorName(new String(new byte[nameLength + 1])); 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Expected SQLException was not thrown"); 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (nameLength < 0) { 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Incorrect length of cursor name"); 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 761f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 763229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getJDBCMinorVersion() 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getJDBCMinorVersion() throws SQLException { 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect JDBC minor version", 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getJDBCMinorVersion() >= 0); 769f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 772f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getJDBCMinorVersion(); 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 779dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 781f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 783229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getJDBCMajorVersion() 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getJDBCMajorVersion() throws SQLException { 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect JDBC major version", 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getJDBCMajorVersion() >= 0); 789f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 792f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getJDBCMajorVersion(); 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 799dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 804229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getNumericFunctions() 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Not supported feature, Ticket 98. Broken because "+ 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "NUMERIC_FUNCTIONS not complete. When fixed change to @KnownFailure") 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getNumericFunctions() throws SQLException { 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project escapedFunctions(NUMERIC_FUNCTIONS, meta.getNumericFunctions()); 810f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 811f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 814f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getNumericFunctions(); 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 821dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 825229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData #getPrimaryKeys(java.lang.String, 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String, java.lang.String) 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure(" Ticket 91 : relies on not supported features: getCatalog, keys") 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getPrimaryKeysLjava_lang_StringLjava_lang_StringLjava_lang_String() 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException { 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getPrimaryKeys(conn.getCatalog(), null, 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1); 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Rows not obtained", rs.next()); 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int col = rsmd.getColumnCount(); 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect number of columns", 6, col); 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] columnNames = { "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "COLUMN_NAME", "KEY_SEQ", "PK_NAME" }; 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int c = 1; c <= col; ++c) { 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect column name", columnNames[c - 1], rsmd 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getColumnName(c)); 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 843dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertEquals("Incorrect table catalogue", conn.getCatalog(), rs 844dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann .getString("TABLE_CAT").toLowerCase()); 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect table schema", "", rs 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("TABLE_SCHEM")); 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect table name", DatabaseCreator.TEST_TABLE1, rs 848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("TABLE_NAME").toLowerCase()); 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect column name", "id", rs.getString("COLUMN_NAME") 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .toLowerCase()); 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect sequence number", 1, rs.getShort("KEY_SEQ")); 852dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertEquals("Incorrect primary key name", "primary", rs.getString( 853dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann "PK_NAME").toLowerCase()); 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 855f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 858f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getPrimaryKeys(conn.getCatalog(), null, 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1); 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 869229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getResultSetHoldability() 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getResultSetHoldability() throws SQLException { 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hdb = meta.getResultSetHoldability(); 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (hdb) { 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case ResultSet.HOLD_CURSORS_OVER_COMMIT: 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case ResultSet.CLOSE_CURSORS_AT_COMMIT: 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // these holdabilities are OK 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project default: 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Incorrect value of holdability"); 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Incorrect result set holdability", meta 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .supportsResultSetHoldability(hdb)); 884f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 887f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getResultSetHoldability(); 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 894dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 898229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getSQLKeywords() 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getSQLKeywords() throws SQLException { 902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect SQL keywords", !"".equals(meta.getSQLKeywords() 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .trim())); 904f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 907f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getSQLKeywords(); 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 914dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 918229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getSQLStateType() 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getSQLStateType() throws SQLException { 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int type = meta.getSQLStateType(); 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (type) { 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case DatabaseMetaData.sqlStateSQL99: 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case DatabaseMetaData.sqlStateXOpen: 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // these types are OK 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project default: 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Incorrect SQL state types"); 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 931f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 932f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 933dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann //Exception checking 934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 935f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getSQLStateType(); 938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 942dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 946229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getSchemas() 947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getSchemas() throws SQLException { 950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getSchemas(); 951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Rows do not obtained", rs.next()); 953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int col = rsmd.getColumnCount(); 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect number of columns", 1, col); 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] columnNames = { "TABLE_SCHEM", "TABLE_CATALOG" }; 956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int c = 1; c <= col; ++c) { 957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect column name", columnNames[c - 1], rsmd 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getColumnName(c)); 959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 961f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 962f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 965f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getSchemas(); 968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 972dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 976229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getSearchStringEscape() 977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getSearchStringEscape() throws SQLException { 980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect search string escape", !"".equals(meta 981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getSearchStringEscape().trim())); 982f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 985f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getSearchStringEscape(); 988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 992dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 996229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getStringFunctions() 997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("not supported") 999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getStringFunctions() throws SQLException { 1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project escapedFunctions(STRING_FUNCTIONS, meta.getStringFunctions()); 1001f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1002f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1005f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getStringFunctions(); 1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1012dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1013f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1016f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1018229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getSystemFunctions() 1019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("not supported") 1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getSystemFunctions() throws SQLException { 1022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project escapedFunctions(SYSTEM_FUNCTIONS, meta.getSystemFunctions()); 1023f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1024f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1027f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getSystemFunctions(); 1030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1034dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1037f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1039229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getTableTypes() 1040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getTableTypes() throws SQLException { 1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] tableTypes = { "LOCAL TEMPORARY", "TABLE", "VIEW" }; 1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getTableTypes(); 1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) { 1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong table type", Arrays.binarySearch(tableTypes, rs 1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("TABLE_TYPE")) > -1); 1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 1051f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1052f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1055f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getTableTypes(); 1058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1062f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1066229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData #getTables(java.lang.String, 1067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String, java.lang.String, java.lang.String[]) 1068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1069dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("If no schema is associated: returns empty string where actually null be returned?. Ticket 98") 1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getTablesLjava_lang_StringLjava_lang_StringLjava_lang_String$Ljava_lang_String() 1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException { 1072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] tablesName = { 1073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project VIEW_NAME, DatabaseCreator.TEST_TABLE1, 1074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE3}; 1075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] tablesType = {"TABLE", "VIEW"}; 1076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(tablesName); 1077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(tablesType); 1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // case 1. get all tables. There are two tables and one view in the 1080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // database 1081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getTables(null, null, null, null); 1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) { 1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong table name", Arrays.binarySearch(tablesName, rs 1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("TABLE_NAME")) > -1); 1085f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes //No Schema associated 1086dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertNull("Wrong table schema: "+rs.getString("TABLE_SCHEM"), rs.getString("TABLE_SCHEM")); 1087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong table type", Arrays.binarySearch(tablesType, rs 1088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("TABLE_TYPE")) > -1); 1089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong parameter REMARKS", "", rs.getString("REMARKS")); 1090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 1092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // case 2. get tables with specified types. There are no tables of such 1094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // types 1095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs = meta.getTables(conn.getCatalog(), null, null, new String[] { 1096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "SYSTEM TABLE", "LOCAL TEMPORARY" }); 1097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Some tables exist", rs.next()); 1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // case 3. get tables with specified types. There is a table of such 1101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // types 1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs = meta.getTables(conn.getCatalog(), null, null, new String[] { 1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "VIEW", "LOCAL TEMPORARY" }); 1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("No tables exist", rs.next()); 1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong table name", VIEW_NAME, rs.getString("TABLE_NAME")); 1107dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertNull("Wrong table schema: "+rs.getString("TABLE_SCHEM"), rs.getString("TABLE_SCHEM")); 1108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong table type", "VIEW", rs.getString("TABLE_TYPE")); 1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong parameter REMARKS", "", rs.getString("REMARKS")); 1110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Wrong size of result set", rs.next()); 1111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Some tables exist", rs.next()); 1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 1113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // case 4. get all tables using tables pattern. 1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // There are two tables and one view in the database 1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs = meta.getTables(null, null, "%", null); 1117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) { 1119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong table name", Arrays.binarySearch(tablesName, rs 1120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("TABLE_NAME")) > -1); 1121dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann assertNull("Wrong table schema ", rs.getString("TABLE_SCHEM")); 1122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong table type", Arrays.binarySearch(tablesType, rs 1123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getString("TABLE_TYPE")) > -1); 1124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong parameter REMARKS", "", rs.getString("REMARKS")); 1125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 1127f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1128f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1131f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getTables(null, null, null, null); 1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1138dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1142229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getTimeDateFunctions() 1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("not supported") 1145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getTimeDateFunctions() throws SQLException { 1146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project escapedFunctions(TIMEDATE_FUNCTIONS, meta.getTimeDateFunctions()); 1148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1149f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1150dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann //Exception checking 1151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getTimeDateFunctions(); 1155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1162229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getTypeInfo() 1163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1164dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("not supported") 1165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getTypeInfo() throws SQLException { 1166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getTypeInfo(); 1169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final String[] names = { "TYPE_NAME", "DATA_TYPE", "PRECISION", 1171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "LITERAL_PREFIX", "LITERAL_SUFFIX", "CREATE_PARAMS", 1172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", 1173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_INCREMENT", 1174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", 1175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX" }; 1176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(names); 1177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) { 1179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("wrong column was return", Arrays.binarySearch(names, rs 1180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMetaData().getColumnName(i + 1)) > -1); 1181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] types = { Types.ARRAY, Types.BIGINT, Types.BINARY, Types.BIT, 1184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.BLOB, Types.BOOLEAN, Types.CHAR, Types.CLOB, 1185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.DATALINK, Types.DATE, Types.DECIMAL, Types.DISTINCT, 1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.DOUBLE, Types.FLOAT, Types.INTEGER, Types.JAVA_OBJECT, 1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.LONGVARBINARY, Types.LONGVARCHAR, Types.NULL, 1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.NUMERIC, Types.OTHER, Types.REAL, Types.REF, 1189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.SMALLINT, Types.STRUCT, Types.TIME, Types.TIMESTAMP, 1190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.TINYINT, Types.VARBINARY, Types.VARCHAR }; 1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(types); 1192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) { 1194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("wrong type was return ", Arrays.binarySearch(types, rs 1195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getInt("DATA_TYPE")) > -1); 1196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 1198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1201f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getTypeInfo(); 1204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1208dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1213229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#getURL() 1214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getURL() throws SQLException { 1217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong url", Support_SQL.sqlUrl, meta.getURL()); 1218f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1221f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getURL(); 1224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1228dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1230f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1231ceacc61d16fe3aec9c805de525a79f547e607a27Elliott Hughes @KnownFailure("Ticket 98") 1232dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann public void s() throws SQLException { 1233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong user name", Support_SQL.sqlUser, meta.getUserName()); 1234f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1237f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getUserName(); 1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1244dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1249229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#insertsAreDetected(int) 1250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_insertsAreDetectedI() throws SQLException { 1253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "visible row insert can be detected for TYPE_FORWARD_ONLY type", 1255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.insertsAreDetected(ResultSet.TYPE_FORWARD_ONLY)); 1256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "visible row insert can be detected for TYPE_SCROLL_INSENSITIVE type", 1258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.insertsAreDetected(ResultSet.TYPE_SCROLL_INSENSITIVE)); 1259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "visible row insert can be detected for TYPE_SCROLL_SENSITIVE type", 1261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.insertsAreDetected(ResultSet.TYPE_SCROLL_SENSITIVE)); 1262f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1263f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1264dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann //Exception checking 1265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1266f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.insertsAreDetected(ResultSet.TYPE_SCROLL_SENSITIVE); 1269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1273dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1277229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#isReadOnly() 1278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_isReadOnly() throws SQLException { 1281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("database is not read-only", meta.isReadOnly()); 1282f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1283f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1286f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.isReadOnly(); 1289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1296229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#othersDeletesAreVisible(int) 1297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_othersDeletesAreVisibleI() throws SQLException { 1300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "deletes made by others are visible for TYPE_FORWARD_ONLY type", 1302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersDeletesAreVisible(ResultSet.TYPE_FORWARD_ONLY)); 1303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "deletes made by others are visible for TYPE_SCROLL_INSENSITIVE type", 1305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersDeletesAreVisible(ResultSet.TYPE_SCROLL_INSENSITIVE)); 1306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "deletes made by others are visible for TYPE_SCROLL_SENSITIVE type", 1308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersDeletesAreVisible(ResultSet.TYPE_SCROLL_SENSITIVE)); 1309f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1310f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1313f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("inserts made by others are visible for unknown type", meta 1316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .othersDeletesAreVisible(ResultSet.CONCUR_READ_ONLY)); 1317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1321dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1325229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#othersInsertsAreVisible(int) 1326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_othersInsertsAreVisibleI() throws SQLException { 1329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "inserts made by others are visible for TYPE_FORWARD_ONLY type", 1331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersInsertsAreVisible(ResultSet.TYPE_FORWARD_ONLY)); 1332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "inserts made by others are visible for TYPE_SCROLL_INSENSITIVE type", 1334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersInsertsAreVisible(ResultSet.TYPE_SCROLL_INSENSITIVE)); 1335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "inserts made by others are visible for TYPE_SCROLL_SENSITIVE type", 1337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersInsertsAreVisible(ResultSet.TYPE_SCROLL_SENSITIVE)); 1338f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1339f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1342f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("inserts made by others are visible for unknown type", meta 1345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .othersInsertsAreVisible(ResultSet.CONCUR_READ_ONLY)); 1346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1350f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1354229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#othersUpdatesAreVisible(int) 1355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_othersUpdatesAreVisibleI() throws SQLException { 1358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "updates made by others are visible for TYPE_FORWARD_ONLY type", 1360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersUpdatesAreVisible(ResultSet.TYPE_FORWARD_ONLY)); 1361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "updates made by others are visible for TYPE_SCROLL_INSENSITIVE type", 1363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersUpdatesAreVisible(ResultSet.TYPE_SCROLL_INSENSITIVE)); 1364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "updates made by others are visible for TYPE_SCROLL_SENSITIVE type", 1366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.othersUpdatesAreVisible(ResultSet.TYPE_SCROLL_SENSITIVE)); 1367f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1369f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("updates made by others are visible for unknown type", meta 1372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .othersUpdatesAreVisible(ResultSet.CONCUR_READ_ONLY)); 1373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1380229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#storesMixedCaseQuotedIdentifiers() 1381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_storesMixedCaseQuotedIdentifiers() throws SQLException { 1383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String quote = meta.getIdentifierQuoteString(); 1384f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1385f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1386f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT " + quote + "fieLD1" + quote + " FROM " 1390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE1; 1391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.executeQuery(selectQuery); 1394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!meta.storesMixedCaseIdentifiers()) { 1395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("mixed case is supported"); 1396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (meta.storesMixedCaseQuotedIdentifiers()) { 1399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("quoted case is not supported"); 1400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1402f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1406f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.storesMixedCaseIdentifiers(); 1409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1413f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1415f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.storesMixedCaseQuotedIdentifiers(); 1418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1422dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1424f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetIdentifierQuoteString() throws SQLException { 1427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull( 1428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getIdentifierQuoteString() 1429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ); 1430f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception test 1432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.getIdentifierQuoteString(); 1436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Should throw exception"); 1437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1441f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1444f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1446229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsColumnAliasing() 1447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1448dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("not supported. SQLException checking test fails") 1449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsColumnAliasing() throws SQLException { 1450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String alias = "FIELD3"; 1453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT field1 AS " + alias + " FROM " 1454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE1; 1455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = statement.executeQuery(selectQuery); 1456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 1457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (meta.supportsColumnAliasing()) { 1459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // supports aliasing 1460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong count of columns", 1, rsmd.getColumnCount()); 1461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Aliasing is not supported", alias, rsmd 1462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getColumnLabel(1)); 1463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 1464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // doesn't support aliasing 1465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Aliasing is supported", 0, rsmd.getColumnCount()); 1466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 1468f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1471f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsColumnAliasing(); 1474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1478dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1481f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1483229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsExpressionsInOrderBy() 1484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1485dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("exception test fails") 1486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsExpressionsInOrderBy() throws SQLException { 1487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT * FROM " + DatabaseCreator.TEST_TABLE1 1490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " ORDER BY id + field3"; 1491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.executeQuery(selectQuery); 1494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!meta.supportsExpressionsInOrderBy()) { 1495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Expressions in order by are supported"); 1496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (meta.supportsExpressionsInOrderBy()) { 1499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Expressions in order by are not supported"); 1500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1502f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1505f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsExpressionsInOrderBy(); 1508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1512dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1517229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsGroupBy() 1518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1519dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("exception test fails") 1520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsGroupBy() throws SQLException { 1521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT * FROM " + DatabaseCreator.TEST_TABLE1 1524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " GROUP BY field3"; 1525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.executeQuery(selectQuery); 1528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!meta.supportsGroupBy()) { 1529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("group by are supported"); 1530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (meta.supportsGroupBy()) { 1533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("group by are not supported"); 1534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1536f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1539f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsGroupBy(); 1542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1546dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1549f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1551229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsGroupByUnrelated() 1552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1553dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("exception test fails") 1554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsGroupByUnrelated() throws SQLException { 1555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT field1, field2 FROM " 1558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE1 + " GROUP BY field3"; 1559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.executeQuery(selectQuery); 1562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!meta.supportsGroupByUnrelated()) { 1563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unrelated columns in group by are supported"); 1564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (meta.supportsGroupByUnrelated()) { 1567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unrelated columns in group by are not supported"); 1568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1570f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1573f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsGroupByUnrelated(); 1576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1580dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1584229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsNonNullableColumns() 1585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @KnownFailure("Ticket 98") 1587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsNonNullableColumns() throws SQLException { 1588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "columns in this database may not be defined as non-nullable", 1590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsNonNullableColumns()); 1591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statementForward.execute("create table companies(id integer not null);"); 1592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statementForward.execute("drop table companies"); 1593f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1594f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1597f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsNonNullableColumns(); 1600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1604f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1608229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsOrderByUnrelated() 1609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1610dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("exception test fails") 1611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsOrderByUnrelated() throws SQLException { 1612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT field1, field2 FROM " 1615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE1 + " ORDER BY id + field3"; 1616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.executeQuery(selectQuery); 1619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!meta.supportsOrderByUnrelated()) { 1620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unrelated columns in order by are supported"); 1621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (meta.supportsOrderByUnrelated()) { 1624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unrelated columns in order by are not supported"); 1625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1627f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1630f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsOrderByUnrelated(); 1633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1637dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1641229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsSelectForUpdate() 1642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1643dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("exception test fails") 1644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsSelectForUpdate() throws SQLException { 1645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT field1 FROM " 1648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE1 + " FOR UPDATE"; 1649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.executeQuery(selectQuery); 1652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!meta.supportsSelectForUpdate()) { 1653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("select for update are supported"); 1654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!meta.supportsSelectForUpdate()) { 1657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("select for update are not supported"); 1658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1660f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1661f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1664f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsSelectForUpdate(); 1667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1671dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1675229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsSubqueriesInExists() 1676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1677dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("exception test fails") 1678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsSubqueriesInExists() throws SQLException { 1679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT field1 FROM " 1682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE1 1683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " WHERE EXISTS(SELECT field2 FROM " 1684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE1 + ")"; 1685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.executeQuery(selectQuery); 1688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!meta.supportsSubqueriesInExists()) { 1689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Subqueries in exists are supported"); 1690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (meta.supportsSubqueriesInExists()) { 1693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Subqueries in exists are not supported"); 1694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1696f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1697f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1700f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsSubqueriesInExists(); 1703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1707dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1711229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsTableCorrelationNames() 1712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1713dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann @KnownFailure("exception test fails") 1714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsTableCorrelationNames() throws SQLException { 1715f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(); 1717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(conn.isClosed()); 1718f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String corelationName = "TABLE_NAME"; 1720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String selectQuery = "SELECT * FROM " + DatabaseCreator.TEST_TABLE1 1721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " AS " + corelationName; 1722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = statementForward.executeQuery(selectQuery); 1723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 1724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int numOfColumn = rsmd.getColumnCount(); 1725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < numOfColumn; i++) { 1727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (meta.supportsTableCorrelationNames()) { 1728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Corelation names is now supported", 1729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project corelationName, rsmd.getTableName(i + 1)); 1730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 1731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Corelation names is supported", 1732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DatabaseCreator.TEST_TABLE1, rsmd.getTableName(i + 1)); 1733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1735f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1736f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1739f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.supportsTableCorrelationNames(); 1742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SQLException not thrown"); 1743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1746dd24dad7f45387655920cd6a21ad97ffc26112b8Jorg Pleumann 1747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1750229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#supportsTransactionIsolationLevel(int) 1751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_supportsTransactionIsolationLevelI() throws SQLException { 1753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("database supports TRANSACTION_NONE isolation level", meta 1754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .supportsTransactionIsolationLevel(Connection.TRANSACTION_NONE)); 1755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO only Connection.TRANSACTION_SERIALIZABLE is supported 1756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// assertTrue( 1757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// "database doesn't supports TRANSACTION_READ_COMMITTED isolation level", 1758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// meta 1759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// .supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED)); 1760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// assertTrue( 1761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// "database doesn't supports TRANSACTION_READ_UNCOMMITTED isolation level", 1762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// meta 1763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// .supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED)); 1764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// assertTrue( 1765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// "database doesn't supports TRANSACTION_REPEATABLE_READ isolation level", 1766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// meta 1767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// .supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ)); 1768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "database doesn't supports TRANSACTION_SERIALIZABLE isolation level", 1770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta 1771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE)); 1772f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1773f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1775f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("database supports unknown isolation level", meta 1778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .supportsTransactionIsolationLevel(Integer.MAX_VALUE));; 1779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1785229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.sql.DatabaseMetaData#updatesAreDetected(int) 1786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_updatesAreDetectedI() throws SQLException { 1788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "visible row update can be detected for TYPE_FORWARD_ONLY type", 1790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.updatesAreDetected(ResultSet.TYPE_FORWARD_ONLY)); 1791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "visible row update can be detected for TYPE_SCROLL_INSENSITIVE type", 1793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.updatesAreDetected(ResultSet.TYPE_SCROLL_INSENSITIVE)); 1794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "visible row update can be detected for TYPE_SCROLL_SENSITIVE type", 1796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.updatesAreDetected(ResultSet.TYPE_SCROLL_SENSITIVE)); 1797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("visible row update can be detected for unknown type", meta 1798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .updatesAreDetected(100)); 1799f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Exception checking 1801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project conn.close(); 1802f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project meta.updatesAreDetected(ResultSet.CLOSE_CURSORS_AT_COMMIT); 1805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("visible row update can be detected for unknown type", meta 1806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .updatesAreDetected(ResultSet.CLOSE_CURSORS_AT_COMMIT)); 1807f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 1809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 1810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected static void insertNewRecord() throws SQLException { 1815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (conn.isClosed()) { 1816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.out.println("DatabaseMetaDataTest.insertNewRecord() : closed"); 1817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1818f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String insertQuery = "INSERT INTO " + DatabaseCreator.TEST_TABLE1 1820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " (id, field1, field2, field3) VALUES(" + id + ", '" 1821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "value" + id + "', " + id + ", " + id + ")"; 1822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project id++; 1823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(insertQuery); 1824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1825f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //BEGIN APACHE-DERBY 1827f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test Method from Apache Derby Project 1830f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Class 1831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * org.apache.derbyTesting.functionTests.tests.jdbcapi.DatabaseMetaDataTest 1832f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 1833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compare a ResultSet from getColumns() with ResultSetMetaData returned 1834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from a SELECT * against the table. This method handles situations where a 1835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * full set of the columns are in the ResultSet. The first action is to call 1836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * rs.next(). The ResultSet will be closed by this method. 1837f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 1838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param rs 1839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * resultset to crossCheck 1840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param partial 1841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used to indicate if ordinal position should get checked 1842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of rows in the resultSet 1843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SQLException 1844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int crossCheckGetColumnsAndResultSetMetaData(ResultSet rs, 1846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean partial) 1847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException 1848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Statement s = conn.createStatement(); 1850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) 1851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String schema = rs.getString("TABLE_SCHEM"); 1853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String table = rs.getString("TABLE_NAME"); 1854f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rst = s.executeQuery( 1856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "SELECT * FROM " + schema+"."+table); 1857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmdt = rst.getMetaData(); 1858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1859f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int col = 1; col <= rsmdt.getColumnCount() ; col++) 1861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!partial) { 1863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (col != 1) 1864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(rs.next()); 1865f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("ORDINAL_POSITION", 1867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project col, rs.getInt("ORDINAL_POSITION")); 1868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1869f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("TABLE_CAT", 1871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "", rs.getString("TABLE_CAT")); 1872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("TABLE_SCHEM", 1873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project schema, rs.getString("TABLE_SCHEM")); 1874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("TABLE_NAME", 1875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project table, rs.getString("TABLE_NAME")); 1876f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project crossCheckGetColumnRowAndResultSetMetaData(rs, rsmdt); 1878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (partial) 1879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 1880f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rst.close(); 1883f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1884f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int count = rs.getRow(); 1887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 1888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 1889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return count; 1890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1891f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * * Test Method from Apache Derby Project 1894f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Class 1895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * org.apache.derbyTesting.functionTests.tests.jdbcapi.DatabaseMetaDataTest 1896f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 1897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Cross check a single row from getColumns() with ResultSetMetaData 1898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for a SELECT * from the same table. 1899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param rs ResultSet from getColumns already positioned on the row. 1900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param rsmdt ResultSetMetaData for the SELECT * 1901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param odbc 0 for JDBC call, 1 for ODBC. Needed to allow for difference 1902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in using BUFFER_LENGTH (ODBC) or no(JDBC). 1903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SQLException 1904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void crossCheckGetColumnRowAndResultSetMetaData( 1906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs, ResultSetMetaData rsmdt) 1907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException 1908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int col = rs.getInt("ORDINAL_POSITION"); 1910f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("RSMD.getCatalogName", 1912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.getCatalogName(col), rs.getString("TABLE_CAT")); 1913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("RSMD.getSchemaName", 1914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.getSchemaName(col), rs.getString("TABLE_SCHEM")); 1915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("RSMD.getTableName", 1916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.getTableName(col), rs.getString("TABLE_NAME")); 1917f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("COLUMN_NAME", 1919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.getColumnName(col), rs.getString("COLUMN_NAME")); 1920f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // DERBY-2285 BOOLEAN columns appear different on 1922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // network client. 1923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // meta returns BOOLEAN 1924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // RSMD returns SMALLINT 1925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int metaColumnType = rs.getInt("DATA_TYPE"); 1926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (metaColumnType == Types.BOOLEAN ) 1927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("TYPE_NAME", 1929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "BOOLEAN", rs.getString("TYPE_NAME")); 1930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("TYPE_NAME", 1931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "SMALLINT", rsmdt.getColumnTypeName(col)); 1932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("DATA_TYPE", 1934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.SMALLINT, rsmdt.getColumnType(col)); 1935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else if (metaColumnType == Types.JAVA_OBJECT) 1937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // meta returns JAVA_OBJECT 1939f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // RSMD returns LONGVARBINARY! 1940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("DATA_TYPE", 1941f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes Types.LONGVARBINARY, rsmdt.getColumnType(col)); 1942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else if (metaColumnType == Types.VARBINARY ) 1944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // meta returns different type name to RSMD 1946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("DATA_TYPE", 1947f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes Types.VARBINARY, rsmdt.getColumnType(col)); 1948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else if (metaColumnType == Types.BINARY ) 1950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // meta returns different type name to RSMD 1952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("DATA_TYPE", 1953f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes Types.BINARY, rsmdt.getColumnType(col)); 1954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else if (metaColumnType == Types.NUMERIC ) 1956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // DERBY-584 inconsistency in numeric & decimal 1958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("DATA_TYPE", 1959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.DECIMAL, rsmdt.getColumnType(col)); 1960f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("TYPE_NAME", 1962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "DECIMAL", rsmdt.getColumnTypeName(col)); 1963f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("TYPE_NAME", 1965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "NUMERIC", rs.getString("TYPE_NAME")); 1966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else 1968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 1969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("DATA_TYPE", 1970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.getColumnType(col), rs.getInt("DATA_TYPE")); 1971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("TYPE_NAME", 1972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.getColumnTypeName(col), rs.getString("TYPE_NAME")); 1973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1974f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (metaColumnType != Types.JAVA_OBJECT) { 1977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.out.println("TYPE " + rs.getInt("DATA_TYPE")); 1978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.out.println(JDBC.escape(schema, table) + " " + rs.getString("COLUMN_NAME")); 1979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("COLUMN_SIZE", 1980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.getPrecision(col), rs.getInt("COLUMN_SIZE")); 1981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1983f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("DECIMAL_DIGITS", 1986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.getScale(col), rs.getInt("DECIMAL_DIGITS")); 1987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1988f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // This assumes the constants defined by meta and ResultSet 1990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // for nullability are equal. They are by inspection 1991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // and since they are static final and part of a defined 1992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // api by definition they cannot change. We also 1993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // check statically this is true in the testConstants fixture. 1994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("NULLABLE", 1995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.isNullable(col), rs.getInt("NULLABLE")); 1996f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // REMARKS set to empty string by Derby 1998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("REMARKS", "", rs.getString("REMARKS")); 1999f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2000f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // IS_NULLABLE 2002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (rsmdt.isNullable(col)) 2003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case ResultSetMetaData.columnNoNulls: 2005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("IS_NULLABLE", "NO", rs.getString("IS_NULLABLE")); 2006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 2007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case ResultSetMetaData.columnNullable: 2008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("IS_NULLABLE", "YES", rs.getString("IS_NULLABLE")); 2009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 2010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case ResultSetMetaData.columnNullableUnknown: 2011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("IS_NULLABLE", "", rs.getString("IS_NULLABLE")); 2012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 2013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project default: 2014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("invalid return from rsmdt.isNullable(col)"); 2015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2016f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // SCOPE not supported 2018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("SCOPE_CATLOG", rs.getString("SCOPE_CATLOG")); 2019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("SCOPE_SCHEMA", rs.getString("SCOPE_SCHEMA")); 2020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("SCOPE_TABLE", rs.getString("SCOPE_TABLE")); 2021f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // DISTINCT not supported 2023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("SOURCE_DATA_TYPE", 0, rs.getShort("SOURCE_DATA_TYPE")); 2024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(rs.wasNull()); 2025f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // IS_AUTOINCREMENT added in JDBC 4.0 2027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("IS_AUTOINCREMENT", 2028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rsmdt.isAutoIncrement(col) ? "YES" : "NO", 2029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.getString("IS_AUTOINCREMENT")); 2030f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes assertFalse(rs.wasNull()); 2031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2032f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 2034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Check the shape of the ResultSet from any getColumns call. 2035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void checkColumnsShape(ResultSet rs) throws SQLException { 2037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] columnTypes = new int[] { 2038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, 2039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.SMALLINT, Types.VARCHAR, Types.INTEGER, Types.INTEGER, 2040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.INTEGER, Types.INTEGER, Types.INTEGER, Types.VARCHAR, 2041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.INTEGER, 2042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.INTEGER, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, 2043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Types.VARCHAR, Types.SMALLINT, Types.VARCHAR}; 2044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertMetaDataResultSet(rs, new String[] { 2046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", 2047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", 2048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE", "REMARKS", 2049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", 2050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE", 2051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "SCOPE_CATLOG", "SCOPE_SCHEMA", "SCOPE_TABLE", 2052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "SOURCE_DATA_TYPE", "IS_AUTOINCREMENT"}, columnTypes, null); 2053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2055f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void assertMetaDataResultSet(ResultSet rs, 2057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] columnNames, int[] columnTypes, 2058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean[] nullability) throws SQLException 2059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2060f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // see ResultSetGetterTest, getType() -> this test fails currently 2061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ResultSet.TYPE_FORWARD_ONLY, rs.getType()); 2062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ResultSet.CONCUR_READ_ONLY, rs.getConcurrency()); 2063f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (columnNames != null) 2065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertColumnNames(rs, columnNames); 2066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (columnTypes != null) 2067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertColumnTypes(rs, columnTypes); 2068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (nullability != null) 2069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNullability(rs, nullability); 2070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2071f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * * Test Method from Apache Derby Project 2074f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Class 2075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * org.apache.derbyTesting.functionTests.tests.jdbcapi.DatabaseMetaDataTest 2076f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 2077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Takes a result set and an array of expected colum names (as 2078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Strings) and asserts that the column names in the result 2079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set metadata match the number, order, and names of those 2080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the array. 2081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 2082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param rs ResultSet for which we're checking column names. 2083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param expectedColNames Array of expected column names. 2084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void assertColumnNames(ResultSet rs, 2086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String [] expectedColNames) throws SQLException 2087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 2089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int actualCols = rsmd.getColumnCount(); 2090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < actualCols; i++) 2092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Column names do not match:", 2094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project expectedColNames[i], rsmd.getColumnName(i+1)); 2095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2096f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Unexpected column count:", 2098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project expectedColNames.length, rsmd.getColumnCount()); 2099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2100f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test Method from Apache Derby Project 2103f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Class 2104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * org.apache.derbyTesting.functionTests.tests.jdbcapi.DatabaseMetaDataTest 2105f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 2106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Takes a result set and an array of expected column types 2107f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * from java.sql.Types 2108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and asserts that the column types in the result 2109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set metadata match the number, order, and names of those 2110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the array. 2111f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 2112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * No length information for variable length types 2113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can be passed. For ResultSets from JDBC DatabaseMetaData 2114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specification only indicates the types of the 2115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * columns, not the length. 2116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 2117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param rs ResultSet for which we're checking column names. 2118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param expectedTypes Array of expected column types. 2119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void assertColumnTypes(ResultSet rs, 2121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] expectedTypes) throws SQLException 2122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 2124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int actualCols = rsmd.getColumnCount(); 2125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Unexpected column count:", 2127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project expectedTypes.length, rsmd.getColumnCount()); 2128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < actualCols; i++) 2130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Column types do not match for column " + (i+1), 2132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project expectedTypes[i], rsmd.getColumnType(i+1)); 2133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2135f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Check the nullability of the column definitions for 2138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the ResultSet matches the expected values. 2139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param rs 2140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param nullability 2141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws SQLException 2142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void assertNullability(ResultSet rs, 2144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean[] nullability) throws SQLException 2145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData rsmd = rs.getMetaData(); 2147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int actualCols = rsmd.getColumnCount(); 2148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Unexpected column count:", 2150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nullability.length, rsmd.getColumnCount()); 2151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < actualCols; i++) 2153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int expected = nullability[i] ? 2155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSetMetaData.columnNullable : ResultSetMetaData.columnNoNulls; 2156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Column nullability do not match for column " + (i+1), 2157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project expected, rsmd.isNullable(i+1)); 2158f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 2159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2160f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //BEGIN Apache Derby DatabaseMetaDataTest 2162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 2164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Escaped function testing TODO complete this list 2165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[][] NUMERIC_FUNCTIONS = { 2167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Section C.1 JDBC 3.0 spec. 2168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"ABS", "-25.67"}, 2169f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"ACOS", "0.0707"}, {"ASIN", "0.997"}, 2171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"ATAN", "14.10"}, {"ATAN2", "0.56", "1.2"}, {"CEILING", "3.45"}, 2172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"COS", "1.2"}, {"COT", "3.4"}, {"DEGREES", "2.1"}, {"EXP", "2.3"}, 2173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"FLOOR", "3.22"}, {"LOG", "34.1"}, {"LOG10", "18.7"}, 2174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"MOD", "124", "7"}, {"PI"}, {"POWER", "2", "3"}, 2175f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes// {"RADIANS", "54"}, {"RAND", "17"}, 2176f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project {"ROUND", "345.345", "1"} 2178f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"SIGN", "-34"}, {"SIN", "0.32"}, {"SQRT", "6.22"}, 2180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"TAN", "0.57",}, {"TRUNCATE", "345.395", "1"} 2181f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 2183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[][] TIMEDATE_FUNCTIONS = { 2185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Section C.3 JDBC 3.0 spec. 2186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project {"date","'now'"} 2188f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //TODO Complete list 2190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 2192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[][] SYSTEM_FUNCTIONS = { 2194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Section C.4 JDBC 3.0 spec. 2195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project {"IFNULL", "'this'", "'that'"}, {"USER"} 2196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 2197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 2199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * TODO complete or check this list 2200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[][] STRING_FUNCTIONS = { 2202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Section C.2 JDBC 3.0 spec. 2203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"ASCII", "'Yellow'"}, {"CHAR", "65"}, 2204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"CONCAT", "'hello'", "'there'"}, 2205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"DIFFERENCE", "'Pires'", "'Piers'"}, 2206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"INSERT", "'Bill Clinton'", "4", "'William'"}, 2207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"LCASE", "'Fernando Alonso'"}, {"LEFT", "'Bonjour'", "3"}, 2208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"LENGTH", "'four '"}, {"LOCATE", "'jour'", "'Bonjour'"}, 2209f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes {"LTRIM", "' left trim '"}, 2210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"REPEAT", "'echo'", "3"}, 2211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"REPLACE", "'to be or not to be'", "'be'", "'England'"}, 2212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"RTRIM", "' right trim '"}, {"SOUNDEX", "'Derby'"}, 2213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"SPACE", "12"}, 2214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"SUBSTRING", "'Ruby the Rubicon Jeep'", "10", "7",}, 2215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// {"UCASE", "'Fernando Alonso'"} 2216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 2217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Six combinations of valid identifiers with mixed case, to see how the 2220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * various pattern matching and returned values handle them. This test only 2221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * creates objects in these schemas. 2222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[] IDS = { 2224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "one_meta_test", "TWO_meta_test", "ThReE_meta_test", 2225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "\"four_meta_test\"", "\"FIVE_meta_test\"", "\"sIx_meta_test\""}; 2226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * All the builtin schemas. 2229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[] BUILTIN_SCHEMAS = { 2231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //TODO: Are there any other built in schemas? 2232f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 2234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String getStoredIdentifier(String sqlIdentifier) { 2236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (sqlIdentifier.charAt(0) == '"') 2237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sqlIdentifier.substring(1, sqlIdentifier.length() - 1); 2238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else 2239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sqlIdentifier.toUpperCase(); 2240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test getSchemas() without modifying the database. 2244f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 2245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SQLException 2246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetSchemasReadOnly() throws SQLException { 2248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = meta.getSchemas(); 2250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkSchemas(rs, new String[0]); 2251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Check the returned information from a getSchemas(). The passed in 2256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * String[] expected is a list of the schemas expected to be present in the 2257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returned set. The returned set may contain additional schemas which will 2258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be ignored, thus this test can be used regardless of the database state. 2259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The builtin schemas are automatically checked and must not be part of the 2260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * passed in list. 2261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void checkSchemas(ResultSet rs, String[] userExpected) 2263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException { 2264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Add in the system schemas 2266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] expected = new String[BUILTIN_SCHEMAS.length 2267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + userExpected.length]; 2268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(BUILTIN_SCHEMAS, 0, expected, 0, 2270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project BUILTIN_SCHEMAS.length); 2271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(userExpected, 0, expected, BUILTIN_SCHEMAS.length, 2272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project userExpected.length); 2273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Remove any quotes from user schemas and upper case 2275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // those without quotes. 2276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = BUILTIN_SCHEMAS.length; i < expected.length; i++) { 2277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project expected[i] = getStoredIdentifier(expected[i]); 2278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // output is ordered by TABLE_SCHEM 2281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Arrays.sort(expected); 2282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int nextMatch = 0; 2284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (rs.next()) { 2286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String schema = rs.getString("TABLE_SCHEM"); 2287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(schema); 2288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Catalogs not supported 2290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// assertNull(rs.getString("TABLE_CATALOG")); 2291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (nextMatch < expected.length) { 2293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (expected[nextMatch].equals(schema)) nextMatch++; 2294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 2297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Schemas missing ", expected.length, nextMatch); 2298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void assertMatchesPattern(String pattern, String result) { 2301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!doesMatch(pattern, 0, result, 0)) { 2302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Bad pattern matching:" + pattern + " result:" + result); 2303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See if a string matches the pattern as defined by DatabaseMetaData. By 2309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * passing in non-zero values can check sub-sets of the pattern against the 2310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sub strings of the result. <BR> 2311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * _ matches a single character <BR> 2312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * % matches zero or more characters <BR> 2313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Other characters match themselves. 2314f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 2315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param pattern 2316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Pattern 2317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param pp 2318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Position in pattern to start the actual pattern from 2319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param result 2320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * result string 2321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param rp 2322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * position in result to starting checking 2323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return true if a match is found 2324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean doesMatch(String pattern, int pp, String result, int rp) { 2326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Find a match 2327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (;;) { 2328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pp == pattern.length() && rp == result.length()) return true; 2329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // more characters to match in the result but 2331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // no more pattern. 2332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pp == pattern.length()) return false; 2333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char pc = pattern.charAt(pp); 2335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pc == '_') { 2336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // need to match a single character but 2337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // exhausted result, so no match. 2338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (rp == result.length()) return false; 2339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp++; 2341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rp++; 2342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (pc == '%') { 2343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // % at end, complete match regardless of 2344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // position of result since % matches zero or more. 2345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pp == pattern.length() - 1) { 2346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 2347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Brut force, we have a pattern like %X 2350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // and we are say in the third character of 2351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // abCdefgX 2352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // then start a 'CdefgX' and look for a match, 2353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // then 'defgX' etc. 2354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int sp = rp; sp < result.length(); sp++) { 2355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (doesMatch(pattern, pp + 1, result, sp)) { 2356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Have a match for the pattern after the % 2357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // which means we have a match for the pattern 2358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with the % since we can match 0 or mor characters 2359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with %. 2360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 2361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Could not match the pattern after the % 2365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 2366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 2367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // need to match a single character but 2368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // exhausted result, so no match. 2369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (rp == result.length()) return false; 2370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Single character, must match exactly. 2372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pc != result.charAt(rp)) { 2373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Computer says no. 2374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 2375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp++; 2377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rp++; 2378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Check that the list of escaped functions provided by the driver is a 2387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * strict subet of the specified set, the list does not contain duplicates, 2388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * all the functions listed can be executed and that if a function is not in 2389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the list but is specified it cannot be executed. 2390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void escapedFunctions(String[][] specList, String metaDataList) 2392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException { 2393f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean[] seenFunction = new boolean[specList.length]; 2395f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringTokenizer st = new StringTokenizer(metaDataList, ","); 2397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int counter = 0; 2398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (st.hasMoreTokens()) { 2399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project counter++; 2400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String function = st.nextToken(); 2401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // find this function in the list 2403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean isSpecFunction = false; 2404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int f = 0; f < specList.length; f++) { 2405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] specDetails = specList[f]; 2406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (function.equals(specDetails[0])) { 2407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Matched spec. 2408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (seenFunction[f]) 2409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Function in list twice: " + function); 2410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project seenFunction[f] = true; 2411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isSpecFunction = true; 2412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project executeEscaped(specDetails); 2413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 2414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!isSpecFunction) { 2418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Non-JDBC spec function in list: " + function); 2419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2421f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Now see if any speced functions are not in the metadata list 2423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertSame("Function missing in metadata impl",specList.length, counter); 2424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int f = 0; f < specList.length; f++) { 2425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (seenFunction[f]) continue; 2426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] specDetails = specList[f]; 2427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // bug DERBY-723 CHAR maps to wrong function 2429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ("CHAR".equals(specDetails[0])) continue; 2430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project executeEscaped(specDetails); 2432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("function works but not declared in list: " 2433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + specDetails[0]); 2434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException e) { 2435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ok 2436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2439f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test we can execute a function listed as a supported 2442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * JDBC escaped function. We don't care about the actual 2443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * return value, that should be tested elsewhere in 2444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specific test of a function. 2445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void executeEscaped(String[] specDetails) 2447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SQLException 2448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2449f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String sql = "SELECT " + specDetails[0] + "("; 2451f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int p = 0; p < specDetails.length - 1; p++) 2453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 2454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (p != 0) 2455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sql = sql + ", "; 2456f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sql = sql + specDetails[p + 1]; 2458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2459f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2460f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sql = sql + ") ;"; 2461f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.out.println("DatabaseMetaDataTest.executeEscaped() "+sql); 2463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Statement st = conn.createStatement(); 2464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = st.executeQuery(sql); 2465f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("not supported function: "+sql,rs); 2467f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 2469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project st.close(); 2470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2471f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //END APACHE-DERBY 2473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 2474