1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.java.sql;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.KnownFailure;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.CharArrayReader;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigDecimal;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Connection;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Date;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.PreparedStatement;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.ResultSet;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.SQLException;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Statement;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Time;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Calendar;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashMap;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashSet;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.DatabaseCreator;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_SQL;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.extensions.TestSetup;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.Test;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestSuite;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SelectFunctionalityTest extends TestCase {
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static Connection conn;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static Statement statement;
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static Date date;
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static Time time;
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
52c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann    public void setUp() throws Exception {
5379870d81001ab3dc70b3bce7dfcca70153a3a14fUrs Grob        super.setUp();
54c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        Support_SQL.loadDriver();
55c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        try {
56c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            conn = Support_SQL.getConnection();
57c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement = conn.createStatement();
58c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            createTestTables();
59c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        } catch (SQLException e) {
60c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            fail("Unexpected SQLException " + e.toString());
61c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        }
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
64c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann    public void tearDown() throws Exception {
65c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        deleteTestTables();
66c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        conn.close();
67c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        statement.close();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.tearDown();
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
71c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann    private void createTestTables() {
72c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        try {
73c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            ResultSet userTab = conn.getMetaData().getTables(null,
74c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                    null, null, null);
75c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann
76c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            while (userTab.next()) {
77c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                String tableName = userTab.getString("TABLE_NAME");
78c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                if (tableName.equals(DatabaseCreator.TEST_TABLE2)) {
79c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                    statement.execute(DatabaseCreator.DROP_TABLE2);
80c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                } else if (tableName
81c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                        .equals(DatabaseCreator.SALESPEOPLE_TABLE)) {
82c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                    statement
83c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                            .execute(DatabaseCreator.DROP_TABLE_SALESPEOPLE);
84c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                } else if (tableName
85c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                        .equals(DatabaseCreator.CUSTOMERS_TABLE)) {
86c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                    statement
87c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                            .execute(DatabaseCreator.DROP_TABLE_CUSTOMERS);
88c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                } else if (tableName
89c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                        .equals(DatabaseCreator.ORDERS_TABLE)) {
90c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                    statement
91c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann                            .execute(DatabaseCreator.DROP_TABLE_ORDERS);
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
94c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            userTab.close();
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement.execute(DatabaseCreator.CREATE_TABLE2);
97c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement.execute(DatabaseCreator.CREATE_TABLE_SALESPEOPLE);
98c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement.execute(DatabaseCreator.CREATE_TABLE_CUSTOMERS);
99c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement.execute(DatabaseCreator.CREATE_TABLE_ORDERS);
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
101c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            long currentTime = Calendar.getInstance().getTimeInMillis();
102c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            date = new Date(currentTime);
103c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            time = new Time(currentTime);
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            DatabaseCreator.fillTestTable2(conn, 1, 5, currentTime);
106c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            DatabaseCreator.fillCustomersTable(conn);
107c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            DatabaseCreator.fillOrdersTable(conn);
108c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            DatabaseCreator.fillSalesPeopleTable(conn);
109c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann
110c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        } catch (SQLException e) {
111c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            fail("Unexpected SQLException " + e.toString());
112c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        }
113c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann    }
114c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann
115c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann    private void deleteTestTables() {
116c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        try {
117c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement.execute(DatabaseCreator.DROP_TABLE2);
118c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement.execute(DatabaseCreator.DROP_TABLE_SALESPEOPLE);
119c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement.execute(DatabaseCreator.DROP_TABLE_CUSTOMERS);
120c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            statement.execute(DatabaseCreator.DROP_TABLE_ORDERS);
121c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        } catch (SQLException e) {
122c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann            fail("Unexpected SQLException " + e.toString());
123c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann        }
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
127229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectSimple(). Selects all records
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        from the table
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectSimple() throws SQLException {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String sql = "SELECT * FROM " + DatabaseCreator.TEST_TABLE2;
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(sql);
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int counter = 0;
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int id = result.getInt("finteger");
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    DatabaseCreator.defaultString + id, result
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .getString("ftext"));
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    DatabaseCreator.defaultCharacter + id, result
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .getString("fcharacter"));
143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // TODO getBigDecimal is not supported
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            assertEquals("expected value doesn't equal actual", BigDecimal
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                    .valueOf(id + 0.1), result.getBigDecimal("fdecimal"));
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            assertEquals("expected value doesn't equal actual", BigDecimal
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                    .valueOf(id + 0.1), result.getBigDecimal("fnumeric"));
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            assertEquals("expected value doesn't equal actual", id, result
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                    .getInt("fsmallint"));
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual", BigDecimal
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .valueOf(id + 0.1).floatValue(), result.getFloat("ffloat"));
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual", BigDecimal
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .valueOf(id + 0.1).doubleValue(), result.getDouble("freal"));
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual", BigDecimal
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .valueOf(id + 0.1).doubleValue(), result
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getDouble("fdouble"));
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    date.toString(), result.getDate("fdate").toString());
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    time.toString(), result.getTime("ftime").toString());
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            counter++;
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
164f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("number of rows in ResultSet is wrong", 5, counter);
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
170229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectPrepared(). Selects all records
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        from the table using parametric query
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectPrepared() throws SQLException {
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String sql = "SELECT finteger, ftext, fcharacter, fdecimal, fnumeric,"
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " fsmallint, ffloat, freal, fdouble, fdate, ftime" + " FROM "
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.TEST_TABLE2
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " WHERE finteger = ? AND ftext = ? AND fcharacter = ? AND"
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " fdecimal = ? AND fnumeric = ? AND fsmallint = ? AND"
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " freal = ? AND fdouble = ? AND fdate = ?" + " AND ftime = ?";
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PreparedStatement prepStatement = conn.prepareStatement(sql);
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CharArrayReader reader = new CharArrayReader(new String(
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                DatabaseCreator.defaultCharacter + "1").toCharArray());
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        prepStatement.setInt(1, 1);
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        prepStatement.setString(2, DatabaseCreator.defaultString + "1");
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//      TODO setCharacterStream and setBigDecimal are not supported
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        prepStatement.setCharacterStream(3, reader, 4);
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        prepStatement.setBigDecimal(4, BigDecimal.valueOf(1.1));
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        prepStatement.setBigDecimal(5, BigDecimal.valueOf(1.1));
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        prepStatement.setInt(6, 1);
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        prepStatement.setDouble(7, 1.1);
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        prepStatement.setDouble(8, 1.1);
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        prepStatement.setDate(9, date);
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        prepStatement.setTime(10, time);
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int counter = 0;
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = prepStatement.executeQuery();
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int id = result.getInt("finteger");
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    DatabaseCreator.defaultString + id, result
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .getString("ftext"));
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    DatabaseCreator.defaultCharacter + id, result
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .getString("fcharacter"));
206f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//            TODO getBigDecimal is not supported
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            assertEquals("expected value doesn't equal actual", BigDecimal
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                    .valueOf(1.1), result.getBigDecimal("fdecimal"));
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            assertEquals("expected value doesn't equal actual", BigDecimal
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                    .valueOf(1.1), result.getBigDecimal("fnumeric"));
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual", id, result
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getInt("fsmallint"));
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (float) (id + 0.1), result.getFloat("ffloat"));
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (double) (id + 0.1), result.getDouble("freal"));
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (double) (id + 0.1), result.getDouble("fdouble"));
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    date.toString(), result.getDate("fdate").toString());
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("expected value doesn't equal actual",
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    time.toString(), result.getTime("ftime").toString());
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            counter++;
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
225f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//       TODO query wasn't executed due to "not supported" methods
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        assertEquals("number of rows in ResultSet is wrong", 1, counter);
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        prepStatement.close();
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
232229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SubSelect(). Selects records from the
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        table using subselect
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SubSelect() throws SQLException {
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String sql = "SELECT finteger," + " (SELECT ftext FROM "
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.TEST_TABLE2 + " WHERE finteger = 1) as ftext"
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " FROM " + DatabaseCreator.TEST_TABLE2;
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(sql);
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashMap<Integer, String> value = new HashMap<Integer, String>();
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1, DatabaseCreator.defaultString + "1");
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(2, DatabaseCreator.defaultString + "1");
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(3, DatabaseCreator.defaultString + "1");
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(4, DatabaseCreator.defaultString + "1");
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(5, DatabaseCreator.defaultString + "1");
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int key = result.getInt("finteger");
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String val = result.getString("ftext");
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("wrong value of finteger field", value.containsKey(key));
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("wrong value of ftext field", value.get(key), val);
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            value.remove(key);
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("expected rows number doesn't equal actual rows number",
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                value.isEmpty());
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
261229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectThreeTables(). Selects records
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        from a few tables
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectThreeTables() throws SQLException {
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String sql = "SELECT onum, " + DatabaseCreator.ORDERS_TABLE + ".cnum"
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " FROM " + DatabaseCreator.SALESPEOPLE_TABLE + ", "
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE + ", "
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE + " WHERE "
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE + ".city <> "
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.SALESPEOPLE_TABLE + ".city" + " AND "
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE + ".cnum = "
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE + ".cnum" + " AND "
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE + ".snum = "
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.SALESPEOPLE_TABLE + ".snum";
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(sql);
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashMap<Integer, Integer> value = new HashMap<Integer, Integer>();
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(3001, 2008);
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(3002, 2007);
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(3006, 2008);
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(3009, 2002);
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(3007, 2004);
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(3010, 2004);
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int key = result.getInt("onum");
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int val = result.getInt("cnum");
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("wrong value of onum field", value.containsKey(key));
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("wrong value of cnum field", value.get(key),
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (Integer) val);
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            value.remove(key);
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("expected rows number doesn't equal actual rows number",
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                value.isEmpty());
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
299229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectThreeTables(). Selects records
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        from a table using union
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectUnionItself() throws SQLException {
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String sql = "SELECT b.cnum, b.cname" + " FROM "
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE + " a, "
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE + " b"
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " WHERE a.snum = 1002" + " AND b.city = a.city";
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(sql);
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashMap<Integer, String> value = new HashMap<Integer, String>();
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(2003, "Liu");
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(2004, "Grass");
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(2008, "Cisneros");
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int key = result.getInt("cnum");
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String val = result.getString("cname");
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("wrong value of cnum field", value.containsKey(key));
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("wrong value of cname field", value.get(key), val);
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            value.remove(key);
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("expected rows number doesn't equal actual rows number",
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                value.isEmpty());
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
327229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectLeftOuterJoin(). Selects
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        records from a table using left join
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectLeftOuterJoin() throws SQLException {
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String sql = "SELECT distinct s.snum as ssnum, c.snum as ccnum FROM "
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE + " c left outer join "
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.SALESPEOPLE_TABLE + " s on s.snum=c.snum";
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(sql);
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashMap<Integer, Integer> value = new HashMap<Integer, Integer>();
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1001, 1001);
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1002, 1002);
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1003, 1003);
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1004, 1004);
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1007, 1007);
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int key = result.getInt("ssnum");
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object val = result.getObject("ccnum");
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("wrong value of ssnum field", value.containsKey(key));
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("wrong value of ccnum field", value.get(key),
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (Integer) val);
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            value.remove(key);
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("expected rows number doesn't equal actual rows number",
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                value.isEmpty());
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
357229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectRightOuterJoin(). Selects
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        records from a table using right join
359f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
360f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * TODO RIGHT and FULL OUTER JOINs are not supported
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @KnownFailure("not supported")
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectRightOuterJoin() throws SQLException {
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String sql = "SELECT distinct s.snum as ssnum, c.snum as ccnum FROM "
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE + " c right outer join "
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.SALESPEOPLE_TABLE + " s on s.snum=c.snum";
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(sql);
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashMap<Integer, Integer> value = new HashMap<Integer, Integer>();
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1001, 1001);
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1002, 1002);
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1003, 1003);
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1004, 1004);
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1007, 1007);
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value.put(1013, null);
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int key = result.getInt("ssnum");
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object val = result.getObject("ccnum");
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("wrong value of ssnum field", value.containsKey(key));
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("wrong value of ccnum field", value.get(key),
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (Integer) val);
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            value.remove(key);
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("expected rows number doesn't equal actual rows number",
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                value.isEmpty());
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
391229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectGroupBy(). Selects records from
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        a table using group by
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectGroupBy() throws SQLException {
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectQuery = "SELECT rating, SUM(snum) AS sum FROM "
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE + " GROUP BY rating";
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(selectQuery);
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashMap<Integer, Integer> values = new HashMap<Integer, Integer>();
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.put(100, 3006);
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.put(200, 2005);
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.put(300, 2009);
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int rating = result.getInt("rating");
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int sum = result.getInt("sum");
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Wrong value of rating field", values
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .containsKey(rating));
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Wrong value of sum field", values.get(rating),
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new Integer(sum));
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(new Integer(sum), values.remove(rating));
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Result set has wrong size", values.isEmpty());
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
418229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectOrderBy(). Selects records from
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        a table using order by
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectOrderBy() throws SQLException {
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectQuery = "SELECT onum FROM " + DatabaseCreator.ORDERS_TABLE
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " ORDER BY onum";
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(selectQuery);
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList<Integer> values = new ArrayList<Integer>();
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3001));
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3002));
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3003));
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3005));
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3006));
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3007));
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3008));
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3009));
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3010));
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(3011));
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int index = 0;
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Integer onum = result.getInt("onum");
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("result set doesn't contain value", values
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .contains(onum));
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("result set is not sorted", index, values
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .indexOf(onum));
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            index++;
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
451229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectDistinct(). Selects records
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        from a table using distinct
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectDistinct() throws SQLException {
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectQuery = "SELECT DISTINCT rating FROM "
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.CUSTOMERS_TABLE;
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(selectQuery);
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<Integer> values = new HashSet<Integer>();
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(100));
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(200));
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Integer.valueOf(300));
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Integer rating = result.getInt("rating");
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("result set doesn't contain value", values
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .contains(rating));
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("wrong value in the result set", values.remove(rating));
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Result set has wrong size", values.isEmpty());
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
475229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectAgregateFunctions(). Selects
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        records from a table using agregate functions
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectAgregateFunctions() throws SQLException {
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectCount = "SELECT count(onum) as count FROM "
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE;
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectSum = "SELECT sum(onum) as sum FROM "
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE;
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectAvg = "SELECT avg(onum) as avg FROM "
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE;
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectMax = "SELECT max(onum) as max FROM "
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE;
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectMin = "SELECT min(onum) as min FROM "
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE;
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        func("count", selectCount, 10);
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        func("sum", selectSum, 30062);
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        func("avg", selectAvg, 3006);
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        func("max", selectMax, 3011);
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        func("min", selectMin, 3001);
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void func(String name, String query, int expected) {
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int res = 0;
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        double resDouble = 0.0;
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ResultSet result = statement.executeQuery(query);
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            while (result.next()) {
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                res = result.getInt(name);
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (res != 0 ) {
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals(expected,res);
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                break;
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // for Double: getInt not supported yet
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                resDouble  = Double.parseDouble(result.getString(name));
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                res = (int) Math.rint(resDouble);
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals(expected,res);
512f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertFalse("wrong size of result set", result.next());
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            result.close();
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (SQLException e) {
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(e.getMessage());
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
522229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * SelectFunctionalityTest#test_SelectHaving(). Selects records from
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        a table using having
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_SelectHaving() throws SQLException {
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String selectQuery = "SELECT snum, max(amt) AS max FROM "
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + DatabaseCreator.ORDERS_TABLE
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " GROUP BY snum HAVING max(amt) > 3000";
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResultSet result = statement.executeQuery(selectQuery);
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<Double> values = new HashSet<Double>();
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Double.valueOf(9891.88));
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.add(Double.valueOf(5160.45));
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (result.next()) {
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Double max = result.getDouble("max");
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("result set doesn't contain value", values.contains(max));
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("wrong value in the result set", values.remove(max));
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result.close();
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Result set has wrong size", values.isEmpty());
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
544