private Cancellable? _cancellable;
public async int query (string table, MovieFilter filter, MovieSource.ReceiveMovieFunction callback, int limit, Cancellable? cancellable) {
- var sql = "SELECT Title, Year, Rating, Genres FROM %s".printf (table);
+ var sql = new StringBuilder ();
+ sql.append ("SELECT Title, Year, Rating, Genres");
+ if (table == "Watched")
+ sql.append (", Date");
+ sql.append (" FROM ");
+ sql.append (table);
var sep = " WHERE ";
Statement stmt;
int rc;
db.progress_handler (1000, progress_handler);
if (filter.title != null && filter.title != "") {
- if ("*" in filter.title)
- sql += sep + "Title GLOB \"%s (*)\"".printf (filter.title);
- else
- sql += sep + "Title LIKE \"%s%%\"".printf (filter.title);
+ if ("*" in filter.title) {
+ sql.append (sep);
+ sql.append_printf ("Title GLOB \"%s\"", filter.title);
+ } else {
+ sql.append (sep);
+ sql.append_printf ("Title LIKE \"%s%%\"", filter.title);
+ }
sep = " AND ";
}
if (filter.year_min > 0) {
- sql += sep + "Year >= %d".printf (filter.year_min);
+ sql.append (sep);
+ sql.append_printf ("Year >= %d", filter.year_min);
sep = " AND ";
}
if (filter.year_max > 0) {
- sql += sep + "Year <= %d".printf (filter.year_max);
+ sql.append (sep);
+ sql.append_printf ("Year <= %d", filter.year_max);
sep = " AND ";
}
if (filter.rating_min > 0) {
- sql += sep + "Rating >= %d".printf (filter.rating_min);
+ sql.append (sep);
+ sql.append_printf ("Rating >= %d", filter.rating_min);
sep = " AND ";
}
if (filter.genres.field != 0) {
- sql += sep + "Genres&%d = %d".printf (filter.genres.field, filter.genres.field);
+ sql.append (sep);
+ sql.append_printf ("Genres&%d = %d", filter.genres.field, filter.genres.field);
}
- sql += " LIMIT %d;".printf (limit);
+ sql.append_printf (" LIMIT %d;", limit);
- stdout.printf("SQL: \"%s\"\n", sql);
+ stdout.printf("SQL: \"%s\"\n", sql.str);
- rc = db.prepare_v2 (sql, -1, out stmt);
+ rc = db.prepare_v2 (sql.str, -1, out stmt);
if (rc != Sqlite.OK) {
stderr.printf ("SQL error: %d, %s\n", rc, db.errmsg ());
db.progress_handler (0, null);