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