package com.orgzly.android.provider;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Generic database utilities, not specific to Orgzly database schema.
*
* TODO: Consider creating DSL for constructing queries.
*
* Check existing libraries - something like this (no code generators or such):
* http://www.jooq.org/doc/latest/manual/getting-started/use-cases/jooq-as-a-standalone-sql-builder/
*/
public class GenericDatabaseUtils {
public static void incrementFields(SQLiteDatabase db, String table, String selection, int count, String... fields) {
if (fields.length == 0) {
throw new IllegalArgumentException("No fields passed to incrementFields");
}
List<String> updates = new ArrayList<>();
for (String field: fields) {
updates.add(field + " = " + field + " + (" + count + ")");
}
String sql = "UPDATE " + table + " SET " + TextUtils.join(", ", updates) + " WHERE " + selection;
db.execSQL(sql);
}
public static String whereNullOrZero(String field) {
return "(" + field + " IS NULL OR " + field + " = 0 )";
}
public static String join(String table, String alias, String field1, String onTable, String field2) {
return " LEFT OUTER JOIN " + table + " " + alias + " ON " + field(alias, field1) + " = " + field(onTable, field2) + " ";
}
public static String field(String table, String name) {
return table + "." + name;
}
public static int getCount(Context context, Uri uri, String selection) {
Cursor cursor = context.getContentResolver().query(
uri, new String[] { "COUNT(*) AS count" }, selection, null, null);
try {
if (cursor.moveToFirst()) {
return cursor.getInt(0);
} else {
return 0;
}
} finally {
cursor.close();
}
}
}