package org.wikipedia.database; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.annotation.NonNull; import android.text.TextUtils; import org.wikipedia.database.column.Column; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public final class DbUtil { public static String namesCsv(Column<?>... cols) { return namesCsv(Arrays.asList(cols)); } public static String namesCsv(Collection<? extends Column<?>> cols) { return TextUtils.join(", ", names(cols)); } public static String[] names(Column<?>... cols) { return names(Arrays.asList(cols)).toArray(new String[cols.length]); } public static Collection<String> names(Collection<? extends Column<?>> cols) { Collection<String> strs = new ArrayList<>(cols.size()); for (Column<?> col : cols) { strs.add(col.getName()); } return strs; } public static String[] qualifiedNames(Column<?>... cols) { return qualifiedNames(Arrays.asList(cols)).toArray(new String[cols.length]); } public static Collection<String> qualifiedNames(Collection<? extends Column<?>> cols) { Collection<String> strs = new ArrayList<>(cols.size()); for (Column<?> col : cols) { strs.add(col.qualifiedName()); } return strs; } public static void execSqlTransaction(@NonNull SQLiteDatabase db, @NonNull String statements) { try { db.beginTransaction(); for (String statement : statements.split(";")) { db.execSQL(statement); } db.setTransactionSuccessful(); } finally { db.endTransaction(); } } @NonNull public static <T> Collection<T> cursorToCollection(@NonNull DatabaseClient<T> client, @NonNull Cursor cursor) { Collection<T> ret = new ArrayList<>(); while (cursor.moveToNext()) { ret.add(client.fromCursor(cursor)); } return ret; } private DbUtil() { } }