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