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