package org.wordpress.android.datasets; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import android.support.annotation.NonNull; import android.text.TextUtils; import org.wordpress.android.util.DateTimeUtils; import org.wordpress.android.util.SqlUtils; import java.util.Date; /** * search suggestion table - populated by user's reader search history */ public class ReaderSearchTable { public static final String COL_ID = "_id"; public static final String COL_QUERY = "query_string"; protected static void createTables(SQLiteDatabase db) { db.execSQL("CREATE TABLE tbl_search_suggestions (" + " _id INTEGER PRIMARY KEY AUTOINCREMENT," + " query_string TEXT NOT NULL COLLATE NOCASE," + " date_used TEXT)"); db.execSQL("CREATE UNIQUE INDEX idx_search_suggestions_query ON tbl_search_suggestions(query_string)"); } protected static void dropTables(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS tbl_search_suggestions"); } /* * adds the passed query string, updating the usage date */ public static void addOrUpdateQueryString(@NonNull String query) { String date = DateTimeUtils.iso8601FromDate(new Date()); SQLiteStatement stmt = ReaderDatabase.getWritableDb().compileStatement( "INSERT OR REPLACE INTO tbl_search_suggestions (query_string, date_used) VALUES (?1,?2)"); try { stmt.bindString(1, query); stmt.bindString(2, date); stmt.execute(); } finally { SqlUtils.closeStatement(stmt); } } public static void deleteQueryString(@NonNull String query) { String[]args = new String[]{query}; ReaderDatabase.getWritableDb().delete("tbl_search_suggestions", "query_string=?", args); } public static void deleteAllQueries() { SqlUtils.deleteAllRowsInTable(ReaderDatabase.getWritableDb(), "tbl_search_suggestions"); } /** * Returns a cursor containing query strings previously typed by the user * @param filter - filters the list using LIKE syntax (pass null for no filter) * @param max - limit the list to this many items (pass zero for no limit) */ public static Cursor getQueryStringCursor(String filter, int max) { String sql; String[] args; if (TextUtils.isEmpty(filter)) { sql = "SELECT * FROM tbl_search_suggestions"; args = null; } else { sql = "SELECT * FROM tbl_search_suggestions WHERE query_string LIKE ?"; args = new String[]{filter + "%"}; } sql += " ORDER BY date_used DESC"; if (max > 0) { sql += " LIMIT " + max; } return ReaderDatabase.getReadableDb().rawQuery(sql, args); } }