mirror of
https://github.com/etesync/android
synced 2025-02-10 14:43:17 +00:00
![Tom Hacohen](/assets/img/avatar_default.png)
Having it in raw sql was slowing down development, and was error-prone. It's much cleaner now, easier to handle, and enables us to develop faster. In this change I also fixed the fetching of journals to be by service and id, not just id, because just id is not guaranteed to be unique.
147 lines
4.9 KiB
Java
147 lines
4.9 KiB
Java
/*
|
||
* 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.accounts.Account;
|
||
import android.content.ContentValues;
|
||
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 android.support.annotation.NonNull;
|
||
import android.support.annotation.Nullable;
|
||
import android.support.annotation.RequiresApi;
|
||
|
||
import com.etesync.syncadapter.App;
|
||
import com.etesync.syncadapter.Constants;
|
||
import lombok.Cleanup;
|
||
|
||
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.log.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
|
||
@Cleanup 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");
|
||
@Cleanup 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", "<CR>")
|
||
.replace("\n", "<LF>"));
|
||
else
|
||
sb.append("<null>");
|
||
|
||
} catch (SQLiteException e) {
|
||
sb.append("<unprintable>");
|
||
}
|
||
sb.append(" |");
|
||
}
|
||
sb.append("\n");
|
||
}
|
||
sb.append("----------\n");
|
||
}
|
||
db.endTransaction();
|
||
}
|
||
}
|
||
}
|