SQLiteDatabaseHelper.kt (1358B) - raw


      1 package me.rhunk.snapenhance.common.util
      2 
      3 import android.annotation.SuppressLint
      4 import android.database.sqlite.SQLiteDatabase
      5 import me.rhunk.snapenhance.common.logger.AbstractLogger
      6 
      7 object SQLiteDatabaseHelper {
      8     @SuppressLint("Range")
      9     fun createTablesFromSchema(sqLiteDatabase: SQLiteDatabase, databaseSchema: Map<String, List<String>>) {
     10         databaseSchema.forEach { (tableName, columns) ->
     11             sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS $tableName (${columns.joinToString(", ")})")
     12 
     13             val cursor = sqLiteDatabase.rawQuery("PRAGMA table_info($tableName)", null)
     14             val existingColumns = mutableListOf<String>()
     15             while (cursor.moveToNext()) {
     16                 existingColumns.add(cursor.getString(cursor.getColumnIndex("name")) + " " + cursor.getString(cursor.getColumnIndex("type")))
     17             }
     18             cursor.close()
     19 
     20             val newColumns = columns.filter {
     21                 existingColumns.none { existingColumn -> it.startsWith(existingColumn) }
     22             }
     23 
     24             if (newColumns.isEmpty()) return@forEach
     25 
     26             AbstractLogger.directDebug("Schema for table $tableName has changed")
     27             sqLiteDatabase.execSQL("DROP TABLE $tableName")
     28             sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS $tableName (${columns.joinToString(", ")})")
     29         }
     30     }
     31 }