18ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng/* 28ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Copyright (C) 2013 The Android Open Source Project 38ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 48ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 58ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * you may not use this file except in compliance with the License. 68ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * You may obtain a copy of the License at 78ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 88ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 98ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 108ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Unless required by applicable law or agreed to in writing, software 118ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 128ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * See the License for the specific language governing permissions and 148ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * limitations under the License 158ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng */ 168ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 178ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengpackage com.android.providers.contacts.database; 188ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 194a732664f285ebe3dcd495c5e94d4043ebd59dcbChiao Chengimport com.android.providers.contacts.util.NeededForTesting; 204a732664f285ebe3dcd495c5e94d4043ebd59dcbChiao Cheng 218ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng/** 228ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Static methods for database operations. 238ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng */ 248ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Chengpublic class MoreDatabaseUtils { 258ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 268ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng /** 278ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Builds a CREATE INDEX ddl statement for a given table and field. 288ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 298ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * @param table The table name. 308ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * @param field The field to index. 318ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * @return The create index sql statement. 328ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng */ 338ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng public static String buildCreateIndexSql(String table, String field) { 348ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng return "CREATE INDEX " + buildIndexName(table, field) + " ON " + table 358ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng + "(" + field + ")"; 368ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 378ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 388ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng /** 398ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Builds a DROP INDEX ddl statement for a given table and field. 408ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 418ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * @param table The table name that was originally used to create the index. 428ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * @param field The field that was originally used to create the index. 438ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * @return The drop index sql statement. 448ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng */ 454a732664f285ebe3dcd495c5e94d4043ebd59dcbChiao Cheng @NeededForTesting 468ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng public static String buildDropIndexSql(String table, String field) { 478ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng return "DROP INDEX IF EXISTS " + buildIndexName(table, field); 488ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 498ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 508ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng /** 518ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * The index is created with a name using the following convention: 528ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * <p> 538ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * [table name]_[field name]_index 548ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng */ 558ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng public static String buildIndexName(String table, String field) { 568ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng return table + "_" + field + "_index"; 578ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 588ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng 598ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng /** 608ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * Build a bind arg where clause. 618ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * <p> 628ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * e.g. Calling this method with value of 4 results in: 638ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * <p> 648ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * "?,?,?,?" 658ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * 668ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * @param numArgs The number of arguments. 678ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng * @return A string that can be used for bind args in a sql where clause. 688ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng */ 694a732664f285ebe3dcd495c5e94d4043ebd59dcbChiao Cheng @NeededForTesting 708ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng public static String buildBindArgString(int numArgs) { 718ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng final StringBuilder sb = new StringBuilder(); 728ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng String delimiter = ""; 738ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng for (int i = 0; i < numArgs; i++) { 748ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng sb.append(delimiter).append("?"); 758ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng delimiter = ","; 768ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 778ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng return sb.toString(); 788ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng } 798ed367fdc0b086d54c489f68d555e2f0a4035f63Chiao Cheng} 80