package com.gimranov.zandy.app;
import java.util.ArrayList;
import android.database.Cursor;
import android.os.Bundle;
import com.gimranov.zandy.app.data.Database;
/**
* This class is intended to provide ways of handling queries to the database.
*
* TODO
* Needed functions:
* - specify sets of fields and terms for those fields
* * related need for mapping of fields-- i.e., publicationTitle = journalTitle
* - provide reasonable efficiency through use of indexes; in SQLite or in Java
* - return data in efficient fashion, preferably by exposing a Cursor or
* some other paged access method.
* - normalize queries and data to let
* - allow saving of queries
*
* Some of this will mean changes to other parts of Zandy's data storage model;
* specifically, the raw JSON we're using now won't get us much further. We
* could in theory maintain an index with tokens drawn from the JSON that
* we populate on original save... Not sure about this.
*
* @author ajlyon
*
*/
public class Query {
private ArrayList<Bundle> parameters;
private String sortBy;
public Query () {
parameters = new ArrayList<Bundle>();
}
public void set(String field, String value) {
Bundle b = new Bundle();
b.putString("field", field);
b.putString("value", value);
parameters.add(b);
}
public void sortBy(String term) {
sortBy = term;
}
public Cursor query(Database db) {
StringBuilder sb = new StringBuilder();
String[] args = new String[parameters.size()];
int i = 0;
for (Bundle b : parameters) {
if (b.getString("field").equals("tag")) {
sb.append("item_content LIKE ?");
args[i] = "%"+b.getString("value")+"%";
} else {
sb.append(b.getString("field") + "=?");
args[i] = b.getString("value");
}
i++;
if (i < parameters.size()) sb.append(",");
}
Cursor cursor = db.query("items", Database.ITEMCOLS, sb.toString(), args, null, null, this.sortBy, null);
return cursor;
}
}