DBQueries { public static void createIndexOnTable(final String tableName, final Connection connection){ final String sqlCreateIndex = String.format( "CREATE INDEX IF NOT EXISTS cqidx_%s_value ON cqtbl_%s (value);", tableName, tableName); Statement statement = null; try { statement = connection.createStatement(); statement.executeUpdate(sqlCreateIndex); }catch (SQLException e){ throw new IllegalStateException("Unable to add index on table: " + tableName, e); }finally { DBUtils.closeQuietly(statement); } }  static void createIndexTable(final String tableName, final Class<K> objectKeyClass, final Class<A> valueClass, final Connection connection); static boolean indexTableExists(final String tableName, final Connection connection); static void createIndexOnTable(final String tableName, final Connection connection); static void suspendSyncAndJournaling(final Connection connection); static void setSyncAndJournaling(final Connection connection, final SQLiteConfig.SynchronousMode pragmaSynchronous, final SQLiteConfig.JournalMode pragmaJournalMode); static SQLiteConfig.SynchronousMode getPragmaSynchronousOrNull(final Connection connection); static SQLiteConfig.JournalMode getPragmaJournalModeOrNull(final Connection connection); static void dropIndexOnTable(final String tableName, final Connection connection); static void dropIndexTable(final String tableName, final Connection connection); static void clearIndexTable(final String tableName, final Connection connection); static void compactDatabase(final Connection connection); static void expandDatabase(final Connection connection, long numBytes); static long getDatabaseSize(final Connection connection); static int bulkAdd(Iterable<Row<K, A>> rows, final String tableName, final Connection connection); static int bulkRemove(Iterable<K> objectKeys, final String tableName, final Connection connection); static int count(final Query<O> query, final String tableName, final Connection connection); static int countDistinct(final Query<O> query, final String tableName, final Connection connection); static java.sql.ResultSet search(final Query<O> query, final String tableName, final Connection connection); static java.sql.ResultSet getDistinctKeys(final Query<O> query, boolean descending, final String tableName, final Connection connection); static java.sql.ResultSet getKeysAndValues(final Query<O> query, boolean descending, final String tableName, final Connection connection); static int getCountOfDistinctKeys(final String tableName, final Connection connection); static java.sql.ResultSet getDistinctKeysAndCounts(boolean sortByKeyDescending, final String tableName, final Connection connection); static java.sql.ResultSet getAllIndexEntries(final String tableName, final Connection connection); static java.sql.ResultSet getIndexEntryByObjectKey(final K key , final String tableName, final Connection connection); static boolean contains(final K objectKey, final Query<O> query, final String tableName, final Connection connection);  }
@Test public void testCreateIndexOnTable() throws SQLException { Connection connection = null; Statement statement = null; try { ConnectionManager connectionManager = temporaryFileDatabase.getConnectionManager(true); connection = spy(connectionManager.getConnection(null, noQueryOptions())); statement = spy(connection.createStatement()); when(connection.createStatement()).thenReturn(statement); DBQueries.createIndexTable(NAME, Integer.class, String.class, connection); DBQueries.createIndexOnTable(NAME, connection); assertObjectExistenceInSQLIteMasterTable(TABLE_NAME, "table", true, connectionManager); assertObjectExistenceInSQLIteMasterTable(INDEX_NAME, "index", true, connectionManager); verify(statement, times(2)).close(); }finally { DBUtils.closeQuietly(connection); DBUtils.closeQuietly(statement); } }