diff options
author | Chris Warrington <cmw@google.com> | 2016-10-18 12:29:21 +0100 |
---|---|---|
committer | Chris Warrington <cmw@google.com> | 2016-10-18 12:34:18 +0100 |
commit | e3780081075c01aa1dff6d1f373cb43192b33e68 (patch) | |
tree | fb734615933a39f3d009210dc0d1457160479b35 /WordPress/src/main/java/org/wordpress/android/datasets/ReaderSearchTable.java | |
parent | 7e05eb7e57827eddc885570bc00aed8a50320dbf (diff) | |
parent | 025b8b226c8d8edba2b309ca878572f40512eca7 (diff) | |
download | gradle-perf-android-medium-e3780081075c01aa1dff6d1f373cb43192b33e68.tar.gz |
Merge remote-tracking branch 'origin/upstream-master' into masterHEADstudio-3.4.0studio-3.2.1studio-3.1.2studio-3.0studio-2.3gradle_3.4.0gradle_3.1.2gradle_3.0.0gradle_2.3.0studio-master-devmirror-goog-studio-master-devmastermain
Change-Id: I63f5e16d09297c48432192761b840310935eb903
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/datasets/ReaderSearchTable.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/datasets/ReaderSearchTable.java | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/ReaderSearchTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/ReaderSearchTable.java new file mode 100644 index 000000000..77c54cf98 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/datasets/ReaderSearchTable.java @@ -0,0 +1,84 @@ +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); + } +} |