/* * Copyright © 2013 – 2016 Ricki Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html */ package com.etesync.syncadapter.model; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.os.Build; import androidx.annotation.RequiresApi; import com.etesync.syncadapter.App; public class ServiceDB { public static class Settings { public static final String _TABLE = "settings", NAME = "setting", VALUE = "value"; } @Deprecated public static class Services { public static final String _TABLE = "services", ID = "_id", ACCOUNT_NAME = "accountName", SERVICE = "service"; } @Deprecated public static class Collections { public static final String _TABLE = "collections", ID = "_id", SERVICE_ID = "serviceID", URL = "url", READ_ONLY = "readOnly", DISPLAY_NAME = "displayName", DESCRIPTION = "description", COLOR = "color", TIME_ZONE = "timezone", SYNC = "sync"; } public static class OpenHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "services.db"; private static final int DATABASE_VERSION = 1; public OpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onOpen(SQLiteDatabase db) { if (Build.VERSION.SDK_INT < 16) db.execSQL("PRAGMA foreign_keys=ON;"); } @Override @RequiresApi(16) public void onConfigure(SQLiteDatabase db) { setWriteAheadLoggingEnabled(true); db.setForeignKeyConstraintsEnabled(true); } @Override public void onCreate(SQLiteDatabase db) { App.Companion.getLog().info("Creating database " + db.getPath()); db.execSQL("CREATE TABLE " + Settings._TABLE + "(" + Settings.NAME + " TEXT NOT NULL," + Settings.VALUE + " TEXT NOT NULL" + ")"); db.execSQL("CREATE UNIQUE INDEX settings_name ON " + Settings._TABLE + " (" + Settings.NAME + ")"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // no different versions yet } public void dump(StringBuilder sb) { SQLiteDatabase db = getReadableDatabase(); db.beginTransactionNonExclusive(); // iterate through all tables Cursor cursorTables = db.query("sqlite_master", new String[]{"name"}, "type='table'", null, null, null, null); while (cursorTables.moveToNext()) { String table = cursorTables.getString(0); sb.append(table).append("\n"); Cursor cursor = db.query(table, null, null, null, null, null, null); // print columns int cols = cursor.getColumnCount(); sb.append("\t| "); for (int i = 0; i < cols; i++) { sb.append(" "); sb.append(cursor.getColumnName(i)); sb.append(" |"); } sb.append("\n"); // print rows while (cursor.moveToNext()) { sb.append("\t| "); for (int i = 0; i < cols; i++) { sb.append(" "); try { String value = cursor.getString(i); if (value != null) sb.append(value .replace("\r", "") .replace("\n", "")); else sb.append(""); } catch (SQLiteException e) { sb.append(""); } sb.append(" |"); } sb.append("\n"); } cursor.close(); sb.append("----------\n"); } cursorTables.close(); db.endTransaction(); } } }