Put Pit Log under version control so the app and sync server can live on git.
This commit is contained in:
commit
1030bac79e
79 files changed
+8463
No files matched your search
@@ -0,0 +1,265 @@
|
||||
package com.racingapp.pitlog.data
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Database
|
||||
import androidx.room.Room
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.room.migration.Migration
|
||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||
|
||||
private val MIGRATION_1_2 = object : Migration(1, 2) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN crossPercent REAL")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN springLf INTEGER")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN springRf INTEGER")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN springLr INTEGER")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN springRr INTEGER")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN camberLf REAL")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN camberRf REAL")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN casterLf REAL")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN casterRf REAL")
|
||||
}
|
||||
}
|
||||
|
||||
private val MIGRATION_2_3 = object : Migration(2, 3) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN swayBarHole INTEGER")
|
||||
}
|
||||
}
|
||||
|
||||
private val MIGRATION_3_4 = object : Migration(3, 4) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN blockLr REAL")
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN blockRr REAL")
|
||||
}
|
||||
}
|
||||
|
||||
private val MIGRATION_4_5 = object : Migration(4, 5) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.setForeignKeyConstraintsEnabled(false)
|
||||
db.execSQL(
|
||||
"""
|
||||
CREATE TABLE race_nights_new (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||
dateEpochDay INTEGER NOT NULL,
|
||||
trackName TEXT NOT NULL,
|
||||
seriesName TEXT NOT NULL,
|
||||
carName TEXT NOT NULL,
|
||||
raceClass TEXT NOT NULL,
|
||||
discipline TEXT NOT NULL,
|
||||
airTempF INTEGER,
|
||||
notes TEXT NOT NULL,
|
||||
createdAt INTEGER NOT NULL,
|
||||
crossPercent REAL,
|
||||
springLf INTEGER,
|
||||
springRf INTEGER,
|
||||
springLr INTEGER,
|
||||
springRr INTEGER,
|
||||
camberLf REAL,
|
||||
camberRf REAL,
|
||||
casterLf REAL,
|
||||
casterRf REAL,
|
||||
swayBarHole INTEGER,
|
||||
blockLr REAL,
|
||||
blockRr REAL
|
||||
)
|
||||
""".trimIndent(),
|
||||
)
|
||||
db.execSQL(
|
||||
"""
|
||||
INSERT INTO race_nights_new (
|
||||
id, dateEpochDay, trackName, seriesName, carName, raceClass, discipline,
|
||||
airTempF, notes, createdAt, crossPercent, springLf, springRf, springLr, springRr,
|
||||
camberLf, camberRf, casterLf, casterRf, swayBarHole, blockLr, blockRr
|
||||
)
|
||||
SELECT
|
||||
id, dateEpochDay, trackName, seriesName, carName, raceClass, discipline,
|
||||
airTempF, notes, createdAt, crossPercent, springLf, springRf, springLr, springRr,
|
||||
camberLf, camberRf, casterLf, casterRf, swayBarHole, blockLr, blockRr
|
||||
FROM race_nights
|
||||
""".trimIndent(),
|
||||
)
|
||||
db.execSQL("DROP TABLE race_nights")
|
||||
db.execSQL("ALTER TABLE race_nights_new RENAME TO race_nights")
|
||||
db.setForeignKeyConstraintsEnabled(true)
|
||||
}
|
||||
}
|
||||
|
||||
private val MIGRATION_5_6 = object : Migration(5, 6) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.setForeignKeyConstraintsEnabled(false)
|
||||
db.execSQL(
|
||||
"""
|
||||
CREATE TABLE race_nights_new (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||
dateEpochDay INTEGER NOT NULL,
|
||||
trackName TEXT NOT NULL,
|
||||
carName TEXT NOT NULL,
|
||||
raceClass TEXT NOT NULL,
|
||||
discipline TEXT NOT NULL,
|
||||
airTempF INTEGER,
|
||||
notes TEXT NOT NULL,
|
||||
createdAt INTEGER NOT NULL,
|
||||
crossPercent REAL,
|
||||
springLf INTEGER,
|
||||
springRf INTEGER,
|
||||
springLr INTEGER,
|
||||
springRr INTEGER,
|
||||
camberLf REAL,
|
||||
camberRf REAL,
|
||||
casterLf REAL,
|
||||
casterRf REAL,
|
||||
swayBarHole INTEGER,
|
||||
blockLr REAL,
|
||||
blockRr REAL
|
||||
)
|
||||
""".trimIndent(),
|
||||
)
|
||||
db.execSQL(
|
||||
"""
|
||||
INSERT INTO race_nights_new (
|
||||
id, dateEpochDay, trackName, carName, raceClass, discipline,
|
||||
airTempF, notes, createdAt, crossPercent, springLf, springRf, springLr, springRr,
|
||||
camberLf, camberRf, casterLf, casterRf, swayBarHole, blockLr, blockRr
|
||||
)
|
||||
SELECT
|
||||
id, dateEpochDay, trackName, carName, raceClass, discipline,
|
||||
airTempF, notes, createdAt, crossPercent, springLf, springRf, springLr, springRr,
|
||||
camberLf, camberRf, casterLf, casterRf, swayBarHole, blockLr, blockRr
|
||||
FROM race_nights
|
||||
""".trimIndent(),
|
||||
)
|
||||
db.execSQL("DROP TABLE race_nights")
|
||||
db.execSQL("ALTER TABLE race_nights_new RENAME TO race_nights")
|
||||
db.setForeignKeyConstraintsEnabled(true)
|
||||
}
|
||||
}
|
||||
|
||||
private val MIGRATION_6_7 = object : Migration(6, 7) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS setup_sheets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||
recordedAt INTEGER NOT NULL,
|
||||
note TEXT NOT NULL,
|
||||
crossPercent REAL,
|
||||
springLf INTEGER,
|
||||
springRf INTEGER,
|
||||
springLr INTEGER,
|
||||
springRr INTEGER,
|
||||
camberLf REAL,
|
||||
camberRf REAL,
|
||||
casterLf REAL,
|
||||
casterRf REAL,
|
||||
swayBarHole INTEGER,
|
||||
blockLr REAL,
|
||||
blockRr REAL,
|
||||
toeFront REAL,
|
||||
toeRear REAL
|
||||
)
|
||||
""".trimIndent(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
internal val MIGRATION_7_8 = object : Migration(7, 8) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL("ALTER TABLE car_profile ADD COLUMN updatedAt INTEGER NOT NULL DEFAULT 0")
|
||||
db.execSQL(
|
||||
"""
|
||||
UPDATE car_profile SET updatedAt = 1
|
||||
WHERE carName != '1976 Chevy Camaro'
|
||||
OR raceClass != 'Hobby Stock'
|
||||
OR discipline != 'Oval'
|
||||
""".trimIndent(),
|
||||
)
|
||||
addSyncColumns(db, "race_nights")
|
||||
db.execSQL("UPDATE race_nights SET syncId = lower(hex(randomblob(16))) WHERE syncId = ''")
|
||||
db.execSQL("UPDATE race_nights SET updatedAt = createdAt WHERE updatedAt = 0 AND createdAt != 0")
|
||||
addSyncColumns(db, "setup_sheets")
|
||||
db.execSQL("UPDATE setup_sheets SET syncId = lower(hex(randomblob(16))) WHERE syncId = ''")
|
||||
db.execSQL("UPDATE setup_sheets SET updatedAt = recordedAt WHERE updatedAt = 0 AND recordedAt != 0")
|
||||
db.execSQL("ALTER TABLE runs ADD COLUMN syncId TEXT NOT NULL DEFAULT ''")
|
||||
db.execSQL("ALTER TABLE runs ADD COLUMN nightSyncId TEXT NOT NULL DEFAULT ''")
|
||||
db.execSQL("ALTER TABLE runs ADD COLUMN updatedAt INTEGER NOT NULL DEFAULT 0")
|
||||
db.execSQL("ALTER TABLE runs ADD COLUMN deleted INTEGER NOT NULL DEFAULT 0")
|
||||
db.execSQL("ALTER TABLE runs ADD COLUMN pending INTEGER NOT NULL DEFAULT 1")
|
||||
db.execSQL("UPDATE runs SET syncId = lower(hex(randomblob(16))) WHERE syncId = ''")
|
||||
db.execSQL(
|
||||
"""
|
||||
UPDATE runs SET nightSyncId = (
|
||||
SELECT race_nights.syncId FROM race_nights WHERE race_nights.id = runs.nightId
|
||||
) WHERE nightSyncId = ''
|
||||
""".trimIndent(),
|
||||
)
|
||||
db.execSQL("UPDATE runs SET updatedAt = recordedAt WHERE updatedAt = 0 AND recordedAt != 0")
|
||||
}
|
||||
|
||||
private fun addSyncColumns(db: SupportSQLiteDatabase, table: String) {
|
||||
db.execSQL("ALTER TABLE $table ADD COLUMN syncId TEXT NOT NULL DEFAULT ''")
|
||||
db.execSQL("ALTER TABLE $table ADD COLUMN updatedAt INTEGER NOT NULL DEFAULT 0")
|
||||
db.execSQL("ALTER TABLE $table ADD COLUMN deleted INTEGER NOT NULL DEFAULT 0")
|
||||
db.execSQL("ALTER TABLE $table ADD COLUMN pending INTEGER NOT NULL DEFAULT 1")
|
||||
}
|
||||
}
|
||||
|
||||
internal val MIGRATION_8_9 = object : Migration(8, 9) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS cars (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||
carName TEXT NOT NULL,
|
||||
raceClass TEXT NOT NULL,
|
||||
discipline TEXT NOT NULL,
|
||||
token TEXT NOT NULL DEFAULT '',
|
||||
updatedAt INTEGER NOT NULL DEFAULT 0,
|
||||
syncRev INTEGER NOT NULL DEFAULT 0,
|
||||
deleted INTEGER NOT NULL DEFAULT 0,
|
||||
pending INTEGER NOT NULL DEFAULT 1
|
||||
)
|
||||
""".trimIndent(),
|
||||
)
|
||||
db.execSQL(
|
||||
"""
|
||||
INSERT INTO cars (carName, raceClass, discipline, token, updatedAt, syncRev, deleted, pending)
|
||||
SELECT carName, raceClass, discipline, '', updatedAt, 0, 0, 1 FROM car_profile WHERE id = 1
|
||||
""".trimIndent(),
|
||||
)
|
||||
db.execSQL("ALTER TABLE race_nights ADD COLUMN carId INTEGER NOT NULL DEFAULT 0")
|
||||
db.execSQL("ALTER TABLE setup_sheets ADD COLUMN carId INTEGER NOT NULL DEFAULT 0")
|
||||
db.execSQL("UPDATE race_nights SET carId = (SELECT id FROM cars ORDER BY id LIMIT 1) WHERE carId = 0")
|
||||
db.execSQL("UPDATE setup_sheets SET carId = (SELECT id FROM cars ORDER BY id LIMIT 1) WHERE carId = 0")
|
||||
}
|
||||
}
|
||||
|
||||
@Database(
|
||||
entities = [RaceNight::class, RunLog::class, Car::class, SetupSheet::class],
|
||||
version = 9,
|
||||
exportSchema = false,
|
||||
)
|
||||
abstract class AppDatabase : RoomDatabase() {
|
||||
abstract fun raceDao(): RaceDao
|
||||
|
||||
companion object {
|
||||
fun create(context: Context): AppDatabase {
|
||||
return Room.databaseBuilder(context, AppDatabase::class.java, "pitlog.db")
|
||||
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5, MIGRATION_5_6, MIGRATION_6_7, MIGRATION_7_8, MIGRATION_8_9)
|
||||
.addCallback(
|
||||
object : Callback() {
|
||||
override fun onCreate(db: SupportSQLiteDatabase) {
|
||||
super.onCreate(db)
|
||||
db.execSQL(
|
||||
"""
|
||||
INSERT INTO cars (carName, raceClass, discipline, token, updatedAt, syncRev, deleted, pending)
|
||||
VALUES ('$DEFAULT_CAR', '$DEFAULT_CLASS', '$DEFAULT_DISCIPLINE', lower(hex(randomblob(32))), 1, 0, 0, 1)
|
||||
""".trimIndent(),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user