refactor(core): switch from room to sqldelight
sqldelight provides far more control over the sql and allows me to make more optimisations such as removing generated rowid etc. sql also just looks better than the annotation hell from room.
This commit is contained in:
parent
ff2af310fb
commit
f1770744db
74 changed files with 601 additions and 5037 deletions
|
|
@ -7,6 +7,7 @@ plugins {
|
||||||
alias(libs.plugins.composeCompiler) apply false
|
alias(libs.plugins.composeCompiler) apply false
|
||||||
alias(libs.plugins.kotlinJvm) apply false
|
alias(libs.plugins.kotlinJvm) apply false
|
||||||
alias(libs.plugins.kotlinMultiplatform) apply false
|
alias(libs.plugins.kotlinMultiplatform) apply false
|
||||||
|
alias(libs.plugins.sqldelight) apply false
|
||||||
alias(libs.plugins.wire) apply false
|
alias(libs.plugins.wire) apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,6 @@ plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
alias(libs.plugins.kotlinMultiplatform)
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
alias(libs.plugins.androidMultiplatformLibrary)
|
alias(libs.plugins.androidMultiplatformLibrary)
|
||||||
alias(libs.plugins.ksp)
|
|
||||||
alias(libs.plugins.room)
|
|
||||||
}
|
|
||||||
|
|
||||||
room {
|
|
||||||
schemaDirectory("$projectDir/schemas")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
|
@ -46,18 +40,9 @@ kotlin {
|
||||||
implementation(libs.kotlinx.datetime)
|
implementation(libs.kotlinx.datetime)
|
||||||
implementation(libs.kotlinx.serialization.json)
|
implementation(libs.kotlinx.serialization.json)
|
||||||
implementation(libs.kotlinx.serialization.protobuf)
|
implementation(libs.kotlinx.serialization.protobuf)
|
||||||
implementation(libs.room.runtime)
|
|
||||||
implementation(libs.sqlite.bundled)
|
|
||||||
}
|
}
|
||||||
iosMain.dependencies {
|
iosMain.dependencies {
|
||||||
implementation(libs.ktor.client.darwin)
|
implementation(libs.ktor.client.darwin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
|
||||||
add("kspAndroid", libs.room.compiler)
|
|
||||||
add("kspIosArm64", libs.room.compiler)
|
|
||||||
add("kspIosSimulatorArm64", libs.room.compiler)
|
|
||||||
add("kspJvm", libs.room.compiler)
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ kotlin {
|
||||||
implementation(libs.kotlinx.serialization.protobuf)
|
implementation(libs.kotlinx.serialization.protobuf)
|
||||||
|
|
||||||
implementation(projects.core)
|
implementation(projects.core)
|
||||||
implementation(projects.core.room)
|
implementation(projects.core.sqld)
|
||||||
}
|
}
|
||||||
iosMain.dependencies {
|
iosMain.dependencies {
|
||||||
implementation(libs.ktor.client.darwin)
|
implementation(libs.ktor.client.darwin)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import moe.lava.banksia.core.data.sources.stop.StopLocalDataSource
|
||||||
import moe.lava.banksia.core.data.sources.stop.StopRemoteDataSource
|
import moe.lava.banksia.core.data.sources.stop.StopRemoteDataSource
|
||||||
import moe.lava.banksia.core.data.sources.stoptime.StopTimeLocalDataSource
|
import moe.lava.banksia.core.data.sources.stoptime.StopTimeLocalDataSource
|
||||||
import moe.lava.banksia.core.data.sources.stoptime.StopTimeRemoteDataSource
|
import moe.lava.banksia.core.data.sources.stoptime.StopTimeRemoteDataSource
|
||||||
import moe.lava.banksia.core.room.roomDiModule
|
import moe.lava.banksia.core.sqld.sqldDiModule
|
||||||
import moe.lava.banksia.core.util.log
|
import moe.lava.banksia.core.util.log
|
||||||
import moe.lava.banksia.data.ptv.PtvService
|
import moe.lava.banksia.data.ptv.PtvService
|
||||||
import org.koin.core.module.dsl.singleOf
|
import org.koin.core.module.dsl.singleOf
|
||||||
|
|
@ -28,7 +28,7 @@ import org.koin.dsl.bind
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val clientDataDiModule = module {
|
val clientDataDiModule = module {
|
||||||
includes(roomDiModule)
|
includes(sqldDiModule)
|
||||||
|
|
||||||
// HTTP Clients
|
// HTTP Clients
|
||||||
singleOf(::PtvService)
|
singleOf(::PtvService)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
import moe.lava.banksia.core.data.sources.route.RouteLocalDataSource
|
import moe.lava.banksia.core.data.sources.route.RouteLocalDataSource
|
||||||
import moe.lava.banksia.core.data.sources.route.RouteRemoteDataSource
|
import moe.lava.banksia.core.data.sources.route.RouteRemoteDataSource
|
||||||
|
import moe.lava.banksia.core.sqld.mappers.asModel
|
||||||
|
|
||||||
internal class ClientRouteRepository internal constructor(
|
internal class ClientRouteRepository internal constructor(
|
||||||
private val local: RouteLocalDataSource,
|
private val local: RouteLocalDataSource,
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
import moe.lava.banksia.core.data.sources.stop.StopLocalDataSource
|
import moe.lava.banksia.core.data.sources.stop.StopLocalDataSource
|
||||||
import moe.lava.banksia.core.data.sources.stop.StopRemoteDataSource
|
import moe.lava.banksia.core.data.sources.stop.StopRemoteDataSource
|
||||||
|
import moe.lava.banksia.core.sqld.mappers.asModel
|
||||||
|
|
||||||
internal class ClientStopRepository internal constructor(
|
internal class ClientStopRepository internal constructor(
|
||||||
private val local: StopLocalDataSource,
|
private val local: StopLocalDataSource,
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,22 @@
|
||||||
package moe.lava.banksia.core.data.sources.route
|
package moe.lava.banksia.core.data.sources.route
|
||||||
|
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.IO
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import moe.lava.banksia.core.model.Route
|
import moe.lava.banksia.core.model.Route
|
||||||
import moe.lava.banksia.core.room.dao.RouteDao
|
import moe.lava.banksia.core.sqld.RouteQueries
|
||||||
import moe.lava.banksia.core.room.entity.asEntity
|
import moe.lava.banksia.core.sqld.mappers.asDb
|
||||||
|
|
||||||
internal class RouteLocalDataSource(private val dao: RouteDao) {
|
internal class RouteLocalDataSource(private val queries: RouteQueries) {
|
||||||
suspend fun get(id: String) = dao.get(id)
|
suspend fun get(id: String) = withContext(Dispatchers.IO) { queries.get(id).executeAsOneOrNull() }
|
||||||
suspend fun getAll() = dao.getAll()
|
suspend fun getAll() = withContext(Dispatchers.IO) { queries.getAll().executeAsList() }
|
||||||
suspend fun save(vararg routes: Route) = dao.insertOrReplaceAll(*routes.map { it.asEntity() }.toTypedArray())
|
suspend fun save(vararg routes: Route) {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
queries.transaction {
|
||||||
|
routes.forEach {
|
||||||
|
queries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,22 @@
|
||||||
package moe.lava.banksia.core.data.sources.stop
|
package moe.lava.banksia.core.data.sources.stop
|
||||||
|
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.IO
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import moe.lava.banksia.core.model.Stop
|
import moe.lava.banksia.core.model.Stop
|
||||||
import moe.lava.banksia.core.room.dao.RouteDao
|
import moe.lava.banksia.core.sqld.StopQueries
|
||||||
import moe.lava.banksia.core.room.dao.StopDao
|
import moe.lava.banksia.core.sqld.mappers.asDb
|
||||||
import moe.lava.banksia.core.room.entity.asEntity
|
|
||||||
|
|
||||||
internal class StopLocalDataSource(private val dao: StopDao, private val routeDao: RouteDao) {
|
internal class StopLocalDataSource(private val queries: StopQueries) {
|
||||||
suspend fun get(id: String) = dao.get(id)
|
suspend fun get(id: String) = withContext(Dispatchers.IO) { queries.get(id).executeAsOneOrNull() }
|
||||||
suspend fun getByRoute(id: String) = routeDao.stops(id)
|
suspend fun getByRoute(id: String) = withContext(Dispatchers.IO) { queries.getByRoute(id).executeAsList() }
|
||||||
suspend fun save(vararg stops: Stop) = dao.insertOrReplaceAll(*stops.map { it.asEntity() }.toTypedArray())
|
suspend fun save(vararg stops: Stop) {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
queries.transaction {
|
||||||
|
stops.forEach {
|
||||||
|
queries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,35 @@
|
||||||
package moe.lava.banksia.core.data.sources.stoptime
|
package moe.lava.banksia.core.data.sources.stoptime
|
||||||
|
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.IO
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
import kotlinx.datetime.TimeZone
|
import kotlinx.datetime.TimeZone
|
||||||
import kotlinx.datetime.todayIn
|
import kotlinx.datetime.todayIn
|
||||||
import moe.lava.banksia.core.model.StopTimeDated
|
import moe.lava.banksia.core.model.StopTimeDated
|
||||||
import moe.lava.banksia.core.model.atDate
|
import moe.lava.banksia.core.model.atDate
|
||||||
import moe.lava.banksia.core.room.dao.StopTimeDao
|
import moe.lava.banksia.core.sqld.StopTimeQueries
|
||||||
|
import moe.lava.banksia.core.sqld.mappers.asModel
|
||||||
import moe.lava.banksia.core.util.serialise
|
import moe.lava.banksia.core.util.serialise
|
||||||
import kotlin.time.Clock
|
import kotlin.time.Clock
|
||||||
|
|
||||||
internal class StopTimeLocalDataSource(
|
internal class StopTimeLocalDataSource(
|
||||||
private val stopTimeDao: StopTimeDao,
|
private val queries: StopTimeQueries,
|
||||||
) {
|
) {
|
||||||
suspend fun getAtStop(
|
suspend fun getAtStop(
|
||||||
stopId: String,
|
stopId: String,
|
||||||
date: LocalDate = Clock.System.todayIn(TimeZone.currentSystemDefault()),
|
date: LocalDate = Clock.System.todayIn(TimeZone.currentSystemDefault()),
|
||||||
): List<StopTimeDated> {
|
): List<StopTimeDated> {
|
||||||
return stopTimeDao
|
return withContext(Dispatchers.IO) {
|
||||||
|
queries
|
||||||
.getForStopDated(
|
.getForStopDated(
|
||||||
|
listOf(date.dayOfWeek).serialise().toLong(),
|
||||||
|
date.toEpochDays(),
|
||||||
stopId,
|
stopId,
|
||||||
listOf(date.dayOfWeek).serialise(),
|
|
||||||
date.toEpochDays().toInt(),
|
|
||||||
)
|
)
|
||||||
|
.executeAsList()
|
||||||
.map { it.asModel().atDate(date) }
|
.map { it.asModel().atDate(date) }
|
||||||
.sortedBy { it.departureTime }
|
.sortedBy { it.departureTime }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,5 +17,4 @@ dependencies {
|
||||||
|
|
||||||
api(projects.core.data)
|
api(projects.core.data)
|
||||||
implementation(projects.core)
|
implementation(projects.core)
|
||||||
implementation(projects.core.room)
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 1,
|
|
||||||
"identityHash": "e536f5a9b1408377bcc449195169648c",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e536f5a9b1408377bcc449195169648c')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,477 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 10,
|
|
||||||
"identityHash": "5b90bc800bfae6d22124ea0a6a906ca7",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Service",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `days` INTEGER NOT NULL, `start` INTEGER NOT NULL, `end` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "days",
|
|
||||||
"columnName": "days",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "start",
|
|
||||||
"columnName": "start",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "end",
|
|
||||||
"columnName": "end",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Service_days",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"days"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Service_days` ON `${TABLE_NAME}` (`days`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "ServiceException",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`serviceId` TEXT NOT NULL, `date` INTEGER NOT NULL, `type` INTEGER NOT NULL, PRIMARY KEY(`serviceId`, `date`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "date",
|
|
||||||
"columnName": "date",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"serviceId",
|
|
||||||
"date"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_ServiceException_serviceId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"serviceId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_ServiceException_serviceId` ON `${TABLE_NAME}` (`serviceId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_ServiceException_type",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_ServiceException_type` ON `${TABLE_NAME}` (`type`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_tripId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_tripId` ON `${TABLE_NAME}` (`tripId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_stopId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_stopId` ON `${TABLE_NAME}` (`stopId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`serviceId`) REFERENCES `Service`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_shapeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_shapeId` ON `${TABLE_NAME}` (`shapeId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Service",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"serviceId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5b90bc800bfae6d22124ea0a6a906ca7')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,498 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 11,
|
|
||||||
"identityHash": "c4be3d0c2a25f8c5c33132646a070d0e",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Service",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `days` INTEGER NOT NULL, `start` INTEGER NOT NULL, `end` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "days",
|
|
||||||
"columnName": "days",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "start",
|
|
||||||
"columnName": "start",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "end",
|
|
||||||
"columnName": "end",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Service_days",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"days"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Service_days` ON `${TABLE_NAME}` (`days`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "ServiceException",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`serviceId` TEXT NOT NULL, `date` INTEGER NOT NULL, `type` INTEGER NOT NULL, PRIMARY KEY(`serviceId`, `date`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "date",
|
|
||||||
"columnName": "date",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"serviceId",
|
|
||||||
"date"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_ServiceException_serviceId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"serviceId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_ServiceException_serviceId` ON `${TABLE_NAME}` (`serviceId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_ServiceException_type",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_ServiceException_type` ON `${TABLE_NAME}` (`type`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`parent`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED)",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "SET NULL",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_tripId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_tripId` ON `${TABLE_NAME}` (`tripId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_stopId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_stopId` ON `${TABLE_NAME}` (`stopId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`serviceId`) REFERENCES `Service`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_shapeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_shapeId` ON `${TABLE_NAME}` (`shapeId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_serviceId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"serviceId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_serviceId` ON `${TABLE_NAME}` (`serviceId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Service",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"serviceId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c4be3d0c2a25f8c5c33132646a070d0e')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,315 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 2,
|
|
||||||
"identityHash": "83ece554400bb035c267dc2414c23293",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '83ece554400bb035c267dc2414c23293')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,339 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 3,
|
|
||||||
"identityHash": "5a7252ab3bcae4d0d0950024b19ba002",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5a7252ab3bcae4d0d0950024b19ba002')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,368 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 4,
|
|
||||||
"identityHash": "4426fd2ccc826d9d9d9021546b105850",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_tripId",
|
|
||||||
"unique": true,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_StopTime_tripId` ON `${TABLE_NAME}` (`tripId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_stopId",
|
|
||||||
"unique": true,
|
|
||||||
"columnNames": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_StopTime_stopId` ON `${TABLE_NAME}` (`stopId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_shapeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_shapeId` ON `${TABLE_NAME}` (`shapeId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '4426fd2ccc826d9d9d9021546b105850')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,368 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 5,
|
|
||||||
"identityHash": "4426fd2ccc826d9d9d9021546b105850",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_tripId",
|
|
||||||
"unique": true,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_StopTime_tripId` ON `${TABLE_NAME}` (`tripId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_stopId",
|
|
||||||
"unique": true,
|
|
||||||
"columnNames": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_StopTime_stopId` ON `${TABLE_NAME}` (`stopId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_shapeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_shapeId` ON `${TABLE_NAME}` (`shapeId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '4426fd2ccc826d9d9d9021546b105850')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,368 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 6,
|
|
||||||
"identityHash": "5f52de4cc0ddbcf02a0d8be4cf4d4cfd",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_tripId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_tripId` ON `${TABLE_NAME}` (`tripId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_stopId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_stopId` ON `${TABLE_NAME}` (`stopId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_shapeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_shapeId` ON `${TABLE_NAME}` (`shapeId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5f52de4cc0ddbcf02a0d8be4cf4d4cfd')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,415 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 7,
|
|
||||||
"identityHash": "15c94df0a62438ff28d451c074c94c59",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Service",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `days` INTEGER NOT NULL, `start` INTEGER NOT NULL, `end` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "days",
|
|
||||||
"columnName": "days",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "start",
|
|
||||||
"columnName": "start",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "end",
|
|
||||||
"columnName": "end",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Service_days",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"days"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Service_days` ON `${TABLE_NAME}` (`days`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_tripId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_tripId` ON `${TABLE_NAME}` (`tripId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_stopId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_stopId` ON `${TABLE_NAME}` (`stopId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_shapeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_shapeId` ON `${TABLE_NAME}` (`shapeId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '15c94df0a62438ff28d451c074c94c59')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,426 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 8,
|
|
||||||
"identityHash": "6e0f07bf1af88b2e37b5ad7c38a3fb2a",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Service",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `days` INTEGER NOT NULL, `start` INTEGER NOT NULL, `end` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "days",
|
|
||||||
"columnName": "days",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "start",
|
|
||||||
"columnName": "start",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "end",
|
|
||||||
"columnName": "end",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Service_days",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"days"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Service_days` ON `${TABLE_NAME}` (`days`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_tripId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_tripId` ON `${TABLE_NAME}` (`tripId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_stopId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_stopId` ON `${TABLE_NAME}` (`stopId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`serviceId`) REFERENCES `Service`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_shapeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_shapeId` ON `${TABLE_NAME}` (`shapeId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Service",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"serviceId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '6e0f07bf1af88b2e37b5ad7c38a3fb2a')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,426 +0,0 @@
|
||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 9,
|
|
||||||
"identityHash": "6e0f07bf1af88b2e37b5ad7c38a3fb2a",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "Route",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `type` INTEGER NOT NULL, `number` TEXT, `name` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "number",
|
|
||||||
"columnName": "number",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Service",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `days` INTEGER NOT NULL, `start` INTEGER NOT NULL, `end` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "days",
|
|
||||||
"columnName": "days",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "start",
|
|
||||||
"columnName": "start",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "end",
|
|
||||||
"columnName": "end",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Service_days",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"days"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Service_days` ON `${TABLE_NAME}` (`days`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Shape",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `path` BLOB NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "path",
|
|
||||||
"columnName": "path",
|
|
||||||
"affinity": "BLOB",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Stop",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT NOT NULL, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"columnName": "name",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lat",
|
|
||||||
"columnName": "lat",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lng",
|
|
||||||
"columnName": "lng",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "parent",
|
|
||||||
"columnName": "parent",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "hasWheelChairBoarding",
|
|
||||||
"columnName": "hasWheelChairBoarding",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "level",
|
|
||||||
"columnName": "level",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "platformCode",
|
|
||||||
"columnName": "platformCode",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Stop_parent",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"parent"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `${TABLE_NAME}` (`parent`)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "StopTime",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`tripId` TEXT NOT NULL, `stopId` TEXT NOT NULL, `arrivalTime` INTEGER NOT NULL, `departureTime` INTEGER NOT NULL, `headsign` TEXT, `pickupType` INTEGER NOT NULL, `dropOffType` INTEGER NOT NULL, PRIMARY KEY(`tripId`, `stopId`), FOREIGN KEY(`tripId`) REFERENCES `Trip`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`stopId`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "tripId",
|
|
||||||
"columnName": "tripId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "stopId",
|
|
||||||
"columnName": "stopId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "arrivalTime",
|
|
||||||
"columnName": "arrivalTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "departureTime",
|
|
||||||
"columnName": "departureTime",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "headsign",
|
|
||||||
"columnName": "headsign",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "pickupType",
|
|
||||||
"columnName": "pickupType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "dropOffType",
|
|
||||||
"columnName": "dropOffType",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId",
|
|
||||||
"stopId"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_tripId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_tripId` ON `${TABLE_NAME}` (`tripId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_StopTime_stopId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_StopTime_stopId` ON `${TABLE_NAME}` (`stopId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Trip",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"tripId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Stop",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"stopId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "Trip",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `routeId` TEXT NOT NULL, `serviceId` TEXT NOT NULL, `shapeId` TEXT, `tripHeadsign` TEXT NOT NULL, `directionId` TEXT NOT NULL, `blockId` TEXT NOT NULL, `wheelchairAccessible` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`routeId`) REFERENCES `Route`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`serviceId`) REFERENCES `Service`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`shapeId`) REFERENCES `Shape`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "routeId",
|
|
||||||
"columnName": "routeId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "serviceId",
|
|
||||||
"columnName": "serviceId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "shapeId",
|
|
||||||
"columnName": "shapeId",
|
|
||||||
"affinity": "TEXT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "tripHeadsign",
|
|
||||||
"columnName": "tripHeadsign",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "directionId",
|
|
||||||
"columnName": "directionId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "blockId",
|
|
||||||
"columnName": "blockId",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "wheelchairAccessible",
|
|
||||||
"columnName": "wheelchairAccessible",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_Trip_shapeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_shapeId` ON `${TABLE_NAME}` (`shapeId`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_Trip_routeId",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Trip_routeId` ON `${TABLE_NAME}` (`routeId`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "Route",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"routeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Service",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"serviceId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"table": "Shape",
|
|
||||||
"onDelete": "CASCADE",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"shapeId"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "VersionMetadata",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`type` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, PRIMARY KEY(`type`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "type",
|
|
||||||
"columnName": "type",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "lastUpdated",
|
|
||||||
"columnName": "lastUpdated",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"type"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '6e0f07bf1af88b2e37b5ad7c38a3fb2a')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
package moe.lava.banksia.core.room
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.room.Room
|
|
||||||
import org.koin.core.component.KoinComponent
|
|
||||||
import org.koin.core.component.get
|
|
||||||
import org.koin.core.component.inject
|
|
||||||
|
|
||||||
actual class DatabaseManager actual constructor() : KoinComponent {
|
|
||||||
private val ctx by inject<Context>()
|
|
||||||
|
|
||||||
actual val database by lazy {
|
|
||||||
val ctx = get<Context>().applicationContext
|
|
||||||
val dbFile = ctx.getDatabasePath("room.db")
|
|
||||||
val builder = Room.databaseBuilder<Database>(
|
|
||||||
context = ctx,
|
|
||||||
name = dbFile.absolutePath,
|
|
||||||
)
|
|
||||||
|
|
||||||
Database.build(builder)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
||||||
package moe.lava.banksia.core.room
|
|
||||||
|
|
||||||
import androidx.room.AutoMigration
|
|
||||||
import androidx.room.RoomDatabase
|
|
||||||
import androidx.room.TypeConverters
|
|
||||||
import androidx.room.migration.Migration
|
|
||||||
import androidx.room.util.foreignKeyCheck
|
|
||||||
import androidx.sqlite.SQLiteConnection
|
|
||||||
import androidx.sqlite.driver.bundled.BundledSQLiteDriver
|
|
||||||
import androidx.sqlite.execSQL
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.IO
|
|
||||||
import moe.lava.banksia.core.room.converter.RouteTypeConverter
|
|
||||||
import moe.lava.banksia.core.room.dao.RouteDao
|
|
||||||
import moe.lava.banksia.core.room.dao.ServiceDao
|
|
||||||
import moe.lava.banksia.core.room.dao.ServiceExceptionDao
|
|
||||||
import moe.lava.banksia.core.room.dao.ShapeDao
|
|
||||||
import moe.lava.banksia.core.room.dao.StopDao
|
|
||||||
import moe.lava.banksia.core.room.dao.StopTimeDao
|
|
||||||
import moe.lava.banksia.core.room.dao.TripDao
|
|
||||||
import moe.lava.banksia.core.room.dao.VersionMetadataDao
|
|
||||||
import moe.lava.banksia.core.room.entity.RouteEntity
|
|
||||||
import moe.lava.banksia.core.room.entity.ServiceEntity
|
|
||||||
import moe.lava.banksia.core.room.entity.ServiceExceptionEntity
|
|
||||||
import moe.lava.banksia.core.room.entity.ShapeEntity
|
|
||||||
import moe.lava.banksia.core.room.entity.StopEntity
|
|
||||||
import moe.lava.banksia.core.room.entity.StopTimeEntity
|
|
||||||
import moe.lava.banksia.core.room.entity.TripEntity
|
|
||||||
import moe.lava.banksia.core.room.entity.VersionMetadataEntity
|
|
||||||
import androidx.room.Database as DatabaseAnnotation
|
|
||||||
|
|
||||||
@DatabaseAnnotation(
|
|
||||||
version = 11,
|
|
||||||
entities = [
|
|
||||||
RouteEntity::class,
|
|
||||||
ServiceEntity::class,
|
|
||||||
ServiceExceptionEntity::class,
|
|
||||||
ShapeEntity::class,
|
|
||||||
StopEntity::class,
|
|
||||||
StopTimeEntity::class,
|
|
||||||
TripEntity::class,
|
|
||||||
VersionMetadataEntity::class,
|
|
||||||
],
|
|
||||||
autoMigrations = [
|
|
||||||
AutoMigration(from = 1, to = 2),
|
|
||||||
AutoMigration(from = 2, to = 3),
|
|
||||||
AutoMigration(from = 9, to = 10),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
@TypeConverters(RouteTypeConverter::class)
|
|
||||||
abstract class Database : RoomDatabase() {
|
|
||||||
abstract val versionMetadataDao: VersionMetadataDao
|
|
||||||
abstract val routeDao: RouteDao
|
|
||||||
abstract val serviceDao: ServiceDao
|
|
||||||
abstract val serviceExceptionDao: ServiceExceptionDao
|
|
||||||
abstract val shapeDao: ShapeDao
|
|
||||||
abstract val stopDao: StopDao
|
|
||||||
abstract val stopTimeDao: StopTimeDao
|
|
||||||
abstract val tripDao: TripDao
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun build(base: Builder<Database>) =
|
|
||||||
base.fallbackToDestructiveMigration(true)
|
|
||||||
.setDriver(BundledSQLiteDriver())
|
|
||||||
.setQueryCoroutineContext(Dispatchers.IO)
|
|
||||||
.addMigrations(MIGRATION_10_11)
|
|
||||||
// .fallbackToDestructiveMigration(true)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val MIGRATION_10_11 = object : Migration(10, 11) {
|
|
||||||
override fun migrate(connection: SQLiteConnection) {
|
|
||||||
connection.execSQL("CREATE TABLE IF NOT EXISTS `_new_Stop` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `lat` REAL NOT NULL, `lng` REAL NOT NULL, `parent` TEXT, `hasWheelChairBoarding` INTEGER NOT NULL, `level` TEXT NOT NULL, `platformCode` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`parent`) REFERENCES `Stop`(`id`) ON UPDATE NO ACTION ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED)")
|
|
||||||
connection.execSQL("INSERT INTO `_new_Stop` (`id`,`name`,`lat`,`lng`,`parent`,`hasWheelChairBoarding`,`level`,`platformCode`) SELECT `id`,`name`,`lat`,`lng`,`parent`,`hasWheelChairBoarding`,`level`,`platformCode` FROM `Stop`")
|
|
||||||
connection.execSQL("UPDATE `_new_Stop` SET `parent` = NULL WHERE `parent` == \"\"")
|
|
||||||
connection.execSQL("DROP TABLE `Stop`")
|
|
||||||
connection.execSQL("ALTER TABLE `_new_Stop` RENAME TO `Stop`")
|
|
||||||
connection.execSQL("CREATE INDEX IF NOT EXISTS `index_Stop_parent` ON `Stop` (`parent`)")
|
|
||||||
connection.execSQL("CREATE INDEX IF NOT EXISTS `index_Trip_serviceId` ON `Trip` (`serviceId`)")
|
|
||||||
foreignKeyCheck(connection, "Stop")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
package moe.lava.banksia.core.room
|
|
||||||
|
|
||||||
import org.koin.core.module.dsl.singleOf
|
|
||||||
import org.koin.dsl.module
|
|
||||||
|
|
||||||
val roomDiModule = module {
|
|
||||||
singleOf(::DatabaseManager)
|
|
||||||
factory { get<DatabaseManager>().database }
|
|
||||||
|
|
||||||
factory { get<Database>().versionMetadataDao }
|
|
||||||
factory { get<Database>().routeDao }
|
|
||||||
factory { get<Database>().serviceDao }
|
|
||||||
factory { get<Database>().serviceExceptionDao }
|
|
||||||
factory { get<Database>().shapeDao }
|
|
||||||
factory { get<Database>().stopDao }
|
|
||||||
factory { get<Database>().stopTimeDao }
|
|
||||||
factory { get<Database>().tripDao }
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.converter
|
|
||||||
|
|
||||||
import androidx.room.TypeConverter
|
|
||||||
import moe.lava.banksia.core.model.RouteType
|
|
||||||
|
|
||||||
object RouteTypeConverter {
|
|
||||||
@TypeConverter
|
|
||||||
fun from(value: Int) = RouteType.from(value)
|
|
||||||
|
|
||||||
@TypeConverter
|
|
||||||
fun to(routeType: RouteType) = routeType.value
|
|
||||||
}
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.converter
|
|
||||||
|
|
||||||
import androidx.room.TypeConverter
|
|
||||||
import moe.lava.banksia.core.model.ShapePath
|
|
||||||
import moe.lava.banksia.core.util.Point
|
|
||||||
|
|
||||||
object ShapePathConverter {
|
|
||||||
@TypeConverter
|
|
||||||
fun from(value: ByteArray): ShapePath {
|
|
||||||
return value
|
|
||||||
.asIterable()
|
|
||||||
.chunked(8) {
|
|
||||||
(it[0].toLong() and 0xFF) or
|
|
||||||
(it[1].toLong() and 0xFF shl 8) or
|
|
||||||
(it[2].toLong() and 0xFF shl 16) or
|
|
||||||
(it[3].toLong() and 0xFF shl 24) or
|
|
||||||
(it[4].toLong() and 0xFF shl 32) or
|
|
||||||
(it[5].toLong() and 0xFF shl 40) or
|
|
||||||
(it[6].toLong() and 0xFF shl 48) or
|
|
||||||
(it[7].toLong() and 0xFF shl 56)
|
|
||||||
}
|
|
||||||
.map { Double.fromBits(it) }
|
|
||||||
.chunked(2)
|
|
||||||
.map { (lat, lng) -> Point(lat, lng) }
|
|
||||||
}
|
|
||||||
|
|
||||||
@TypeConverter
|
|
||||||
fun to(path: ShapePath): ByteArray {
|
|
||||||
return path
|
|
||||||
.flatMap { (lat, lng) -> listOf(lat.toBits(), lng.toBits()) }
|
|
||||||
.flatMap { i -> listOf(
|
|
||||||
i.toByte(),
|
|
||||||
(i shr 8).toByte(),
|
|
||||||
(i shr 16).toByte(),
|
|
||||||
(i shr 24).toByte(),
|
|
||||||
(i shr 32).toByte(),
|
|
||||||
(i shr 40).toByte(),
|
|
||||||
(i shr 48).toByte(),
|
|
||||||
(i shr 56).toByte(),
|
|
||||||
) }
|
|
||||||
.toByteArray()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Delete
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
|
||||||
import androidx.room.Query
|
|
||||||
import moe.lava.banksia.core.room.entity.RouteEntity
|
|
||||||
import moe.lava.banksia.core.room.entity.StopEntity
|
|
||||||
|
|
||||||
@Dao
|
|
||||||
interface RouteDao {
|
|
||||||
@Query("SELECT * FROM Route")
|
|
||||||
suspend fun getAll(): List<RouteEntity>
|
|
||||||
|
|
||||||
@Query("SELECT * FROM Route WHERE id == :id")
|
|
||||||
suspend fun get(id: String): RouteEntity?
|
|
||||||
|
|
||||||
@Insert
|
|
||||||
suspend fun insertAll(vararg routes: RouteEntity)
|
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
|
||||||
suspend fun insertOrReplaceAll(vararg routes: RouteEntity)
|
|
||||||
|
|
||||||
@Delete
|
|
||||||
suspend fun delete(route: RouteEntity)
|
|
||||||
|
|
||||||
@Query("DELETE FROM Route")
|
|
||||||
suspend fun deleteAll()
|
|
||||||
|
|
||||||
@Query("""
|
|
||||||
SELECT Stop.* FROM Stop
|
|
||||||
INNER JOIN StopTime ON StopTime.stopId == Stop.id
|
|
||||||
INNER JOIN Trip ON Trip.id == StopTime.tripId
|
|
||||||
WHERE Trip.routeId == :id
|
|
||||||
GROUP BY Stop.id
|
|
||||||
""")
|
|
||||||
suspend fun stops(id: String): List<StopEntity>
|
|
||||||
|
|
||||||
// I vibecoded this, sorry
|
|
||||||
@Query("""
|
|
||||||
WITH Tree AS (
|
|
||||||
SELECT Stop.* FROM Stop
|
|
||||||
INNER JOIN StopTime ON StopTime.stopId == Stop.id
|
|
||||||
INNER JOIN Trip ON Trip.id == StopTime.tripId
|
|
||||||
WHERE Trip.routeId == :id
|
|
||||||
GROUP BY Stop.id
|
|
||||||
|
|
||||||
UNION ALL
|
|
||||||
|
|
||||||
SELECT s.*
|
|
||||||
FROM Stop s
|
|
||||||
INNER JOIN Tree t ON s.id = t.parent
|
|
||||||
)
|
|
||||||
SELECT DISTINCT * FROM Tree WHERE parent IS NULL;
|
|
||||||
""")
|
|
||||||
suspend fun stopsParent(id: String): List<StopEntity>
|
|
||||||
}
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Delete
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
|
||||||
import androidx.room.Query
|
|
||||||
import moe.lava.banksia.core.room.entity.ServiceEntity
|
|
||||||
|
|
||||||
@Dao
|
|
||||||
interface ServiceDao {
|
|
||||||
@Query("SELECT * FROM Service")
|
|
||||||
suspend fun getAll(): List<ServiceEntity>
|
|
||||||
|
|
||||||
@Query("SELECT * FROM Service WHERE id == :id")
|
|
||||||
suspend fun get(id: String): ServiceEntity?
|
|
||||||
|
|
||||||
@Insert
|
|
||||||
suspend fun insertAll(vararg services: ServiceEntity)
|
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
|
||||||
suspend fun insertOrReplaceAll(vararg services: ServiceEntity)
|
|
||||||
|
|
||||||
@Delete
|
|
||||||
suspend fun delete(service: ServiceEntity)
|
|
||||||
|
|
||||||
@Query("DELETE FROM Service")
|
|
||||||
suspend fun deleteAll()
|
|
||||||
}
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Delete
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
|
||||||
import androidx.room.Query
|
|
||||||
import moe.lava.banksia.core.room.entity.ServiceExceptionEntity
|
|
||||||
|
|
||||||
@Dao
|
|
||||||
interface ServiceExceptionDao {
|
|
||||||
@Query("SELECT * FROM ServiceException")
|
|
||||||
suspend fun getAll(): List<ServiceExceptionEntity>
|
|
||||||
|
|
||||||
@Query("SELECT * FROM ServiceException WHERE serviceId == :id")
|
|
||||||
suspend fun get(id: String): List<ServiceExceptionEntity>
|
|
||||||
|
|
||||||
@Insert
|
|
||||||
suspend fun insertAll(vararg exceptions: ServiceExceptionEntity)
|
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
|
||||||
suspend fun insertOrReplaceAll(vararg exceptions: ServiceExceptionEntity)
|
|
||||||
|
|
||||||
@Delete
|
|
||||||
suspend fun delete(service: ServiceExceptionEntity)
|
|
||||||
|
|
||||||
@Query("DELETE FROM ServiceException")
|
|
||||||
suspend fun deleteAll()
|
|
||||||
}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Delete
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
|
||||||
import androidx.room.Query
|
|
||||||
import moe.lava.banksia.core.room.entity.ShapeEntity
|
|
||||||
|
|
||||||
@Dao
|
|
||||||
interface ShapeDao {
|
|
||||||
@Query("SELECT * FROM Shape WHERE id == :id")
|
|
||||||
suspend fun get(id: String): ShapeEntity?
|
|
||||||
|
|
||||||
@Insert
|
|
||||||
suspend fun insertAll(vararg shapes: ShapeEntity)
|
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
|
||||||
suspend fun insertOrReplaceAll(vararg shapes: ShapeEntity)
|
|
||||||
|
|
||||||
@Delete
|
|
||||||
suspend fun delete(shape: ShapeEntity)
|
|
||||||
|
|
||||||
@Query("DELETE FROM Shape")
|
|
||||||
suspend fun deleteAll()
|
|
||||||
}
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Delete
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
|
||||||
import androidx.room.Query
|
|
||||||
import moe.lava.banksia.core.room.entity.StopEntity
|
|
||||||
|
|
||||||
@Dao
|
|
||||||
interface StopDao {
|
|
||||||
@Query("SELECT * FROM Stop")
|
|
||||||
suspend fun getAll(): List<StopEntity>
|
|
||||||
|
|
||||||
@Query("""
|
|
||||||
SELECT * FROM Stop
|
|
||||||
WHERE platformCode <> ""
|
|
||||||
AND parent IS NULL
|
|
||||||
""")
|
|
||||||
suspend fun getAllParentless(): List<StopEntity>
|
|
||||||
|
|
||||||
@Query("SELECT * FROM Stop WHERE id == :id")
|
|
||||||
suspend fun get(id: String): StopEntity?
|
|
||||||
|
|
||||||
@Query("SELECT * FROM Stop WHERE id IN (:ids)")
|
|
||||||
suspend fun get(ids: List<String>): List<StopEntity>
|
|
||||||
|
|
||||||
@Insert
|
|
||||||
suspend fun insertAll(vararg stops: StopEntity)
|
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
|
||||||
suspend fun insertOrReplaceAll(vararg stops: StopEntity)
|
|
||||||
|
|
||||||
@Delete
|
|
||||||
suspend fun delete(stop: StopEntity)
|
|
||||||
|
|
||||||
@Query("DELETE FROM Stop")
|
|
||||||
suspend fun deleteAll()
|
|
||||||
|
|
||||||
@Query("UPDATE Stop SET parent = :parent WHERE id IN (:ids)")
|
|
||||||
suspend fun updateParents(ids: List<String>, parent: String)
|
|
||||||
}
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Delete
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
|
||||||
import androidx.room.Query
|
|
||||||
import moe.lava.banksia.core.room.entity.StopTimeEntity
|
|
||||||
|
|
||||||
@Dao
|
|
||||||
interface StopTimeDao {
|
|
||||||
@Query("SELECT * FROM StopTime")
|
|
||||||
suspend fun getAll(): List<StopTimeEntity>
|
|
||||||
|
|
||||||
@Query("SELECT * FROM StopTime WHERE tripId == :tripId")
|
|
||||||
suspend fun getForTrip(tripId: String): StopTimeEntity?
|
|
||||||
|
|
||||||
@Query("SELECT * FROM StopTime WHERE tripId IN (:tripIds)")
|
|
||||||
suspend fun getForTrips(tripIds: List<String>): List<StopTimeEntity>
|
|
||||||
|
|
||||||
@Query("SELECT * FROM StopTime WHERE stopId == :stopId")
|
|
||||||
suspend fun getForStop(stopId: String): List<StopTimeEntity>
|
|
||||||
|
|
||||||
@Query("""
|
|
||||||
SELECT DISTINCT StopTime.* FROM StopTime
|
|
||||||
INNER JOIN Service ON Service.days & :days = :days AND :date BETWEEN Service.start AND Service.`end`
|
|
||||||
INNER JOIN Trip ON Trip.serviceId == Service.id
|
|
||||||
LEFT JOIN ServiceException ON ServiceException.serviceId == Service.id AND ServiceException.date == :date
|
|
||||||
WHERE StopTime.tripId == Trip.id
|
|
||||||
AND StopTime.stopId IN (SELECT Stop.id FROM Stop WHERE Stop.parent == :stopId OR Stop.id == :stopId)
|
|
||||||
AND ServiceException.type IS NULL
|
|
||||||
""")
|
|
||||||
suspend fun getForStopDated(stopId: String, days: Int, date: Int): List<StopTimeEntity>
|
|
||||||
|
|
||||||
@Insert
|
|
||||||
suspend fun insertAll(vararg stopTimes: StopTimeEntity)
|
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
|
||||||
suspend fun insertOrReplaceAll(vararg stopTimes: StopTimeEntity)
|
|
||||||
|
|
||||||
@Delete
|
|
||||||
suspend fun delete(stopTime: StopTimeEntity)
|
|
||||||
|
|
||||||
@Query("DELETE FROM StopTime")
|
|
||||||
suspend fun deleteAll()
|
|
||||||
}
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Delete
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
|
||||||
import androidx.room.Query
|
|
||||||
import moe.lava.banksia.core.room.entity.TripEntity
|
|
||||||
|
|
||||||
@Dao
|
|
||||||
interface TripDao {
|
|
||||||
@Query("SELECT * FROM Trip")
|
|
||||||
suspend fun getAll(): List<TripEntity>
|
|
||||||
|
|
||||||
@Query("SELECT * FROM Trip WHERE id == :id")
|
|
||||||
suspend fun get(id: String): TripEntity?
|
|
||||||
|
|
||||||
@Query("SELECT * FROM Trip WHERE routeId == :id")
|
|
||||||
suspend fun getByRoute(id: String): List<TripEntity>
|
|
||||||
|
|
||||||
@Insert
|
|
||||||
suspend fun insertAll(vararg trips: TripEntity)
|
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
|
||||||
suspend fun insertOrReplaceAll(vararg trips: TripEntity)
|
|
||||||
|
|
||||||
@Delete
|
|
||||||
suspend fun delete(trip: TripEntity)
|
|
||||||
|
|
||||||
@Query("DELETE FROM Trip")
|
|
||||||
suspend fun deleteAll()
|
|
||||||
}
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
|
||||||
import androidx.room.Query
|
|
||||||
import moe.lava.banksia.core.room.entity.VersionMetadataEntity
|
|
||||||
|
|
||||||
@Dao
|
|
||||||
interface VersionMetadataDao {
|
|
||||||
@Query("SELECT * FROM VersionMetadata WHERE type == :type")
|
|
||||||
suspend fun get(type: String): VersionMetadataEntity?
|
|
||||||
|
|
||||||
@Query("SELECT * FROM VersionMetadata")
|
|
||||||
suspend fun getAll(): List<VersionMetadataEntity>
|
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
|
||||||
suspend fun update(vararg data: VersionMetadataEntity)
|
|
||||||
|
|
||||||
suspend fun update(vararg data: Pair<String, Long>) {
|
|
||||||
update(*data.map { (type, lastUpdated) -> VersionMetadataEntity(type, lastUpdated) }.toTypedArray())
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun update(lastUpdated: Long, types: Collection<String>) {
|
|
||||||
update(*types.map { VersionMetadataEntity(it, lastUpdated) }.toTypedArray())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.entity
|
|
||||||
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import moe.lava.banksia.core.model.Route
|
|
||||||
import moe.lava.banksia.core.model.RouteType
|
|
||||||
|
|
||||||
@Entity("Route")
|
|
||||||
data class RouteEntity(
|
|
||||||
@PrimaryKey val id: String,
|
|
||||||
val type: RouteType,
|
|
||||||
val number: String?,
|
|
||||||
val name: String,
|
|
||||||
) {
|
|
||||||
fun asModel() = Route(id, type, number, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Route.asEntity() = RouteEntity(id, type, number, name)
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.entity
|
|
||||||
|
|
||||||
import androidx.room.ColumnInfo
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import kotlinx.datetime.LocalDate
|
|
||||||
import moe.lava.banksia.core.model.Service
|
|
||||||
import moe.lava.banksia.core.util.deserialiseDaysBitflag
|
|
||||||
import moe.lava.banksia.core.util.serialise
|
|
||||||
|
|
||||||
@Entity("Service")
|
|
||||||
data class ServiceEntity(
|
|
||||||
@PrimaryKey val id: String,
|
|
||||||
@ColumnInfo(index = true) val days: Int,
|
|
||||||
val start: Int,
|
|
||||||
val end: Int,
|
|
||||||
) {
|
|
||||||
fun asModel() = Service(
|
|
||||||
id,
|
|
||||||
days.deserialiseDaysBitflag(),
|
|
||||||
LocalDate.fromEpochDays(start),
|
|
||||||
LocalDate.fromEpochDays(end),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Service.asEntity() = ServiceEntity(
|
|
||||||
id,
|
|
||||||
days.serialise(),
|
|
||||||
start.toEpochDays().toInt(),
|
|
||||||
end.toEpochDays().toInt(),
|
|
||||||
)
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.entity
|
|
||||||
|
|
||||||
import androidx.room.ColumnInfo
|
|
||||||
import androidx.room.Entity
|
|
||||||
import kotlinx.datetime.LocalDate
|
|
||||||
import moe.lava.banksia.core.model.ServiceException
|
|
||||||
|
|
||||||
@Entity(
|
|
||||||
"ServiceException",
|
|
||||||
primaryKeys = ["serviceId", "date"]
|
|
||||||
)
|
|
||||||
data class ServiceExceptionEntity(
|
|
||||||
@ColumnInfo(index = true) val serviceId: String,
|
|
||||||
val date: Int,
|
|
||||||
@ColumnInfo(index = true) val type: Int,
|
|
||||||
) {
|
|
||||||
fun asModel() = ServiceException(
|
|
||||||
serviceId,
|
|
||||||
LocalDate.fromEpochDays(date),
|
|
||||||
type,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ServiceException.asEntity() = ServiceExceptionEntity(
|
|
||||||
serviceId,
|
|
||||||
date.toEpochDays().toInt(),
|
|
||||||
type,
|
|
||||||
)
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.entity
|
|
||||||
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import androidx.room.TypeConverters
|
|
||||||
import moe.lava.banksia.core.model.Shape
|
|
||||||
import moe.lava.banksia.core.model.ShapePath
|
|
||||||
import moe.lava.banksia.core.room.converter.ShapePathConverter
|
|
||||||
|
|
||||||
@Entity("Shape")
|
|
||||||
@TypeConverters(ShapePathConverter::class)
|
|
||||||
data class ShapeEntity(
|
|
||||||
@PrimaryKey val id: String,
|
|
||||||
val path: ShapePath,
|
|
||||||
) {
|
|
||||||
fun asModel() = Shape(id, path)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Shape.asEntity() = ShapeEntity(id, path)
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.entity
|
|
||||||
|
|
||||||
import androidx.room.ColumnInfo
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.ForeignKey
|
|
||||||
import androidx.room.ForeignKey.Companion.SET_NULL
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import moe.lava.banksia.core.model.Stop
|
|
||||||
import moe.lava.banksia.core.util.Point
|
|
||||||
|
|
||||||
@Entity(
|
|
||||||
"Stop",
|
|
||||||
foreignKeys = [
|
|
||||||
ForeignKey(
|
|
||||||
StopEntity::class,
|
|
||||||
parentColumns = ["id"],
|
|
||||||
childColumns = ["parent"],
|
|
||||||
onDelete = SET_NULL,
|
|
||||||
deferred = true,
|
|
||||||
),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
data class StopEntity(
|
|
||||||
@PrimaryKey val id: String,
|
|
||||||
val name: String,
|
|
||||||
val lat: Double,
|
|
||||||
val lng: Double,
|
|
||||||
@ColumnInfo(index = true) val parent: String?,
|
|
||||||
val hasWheelChairBoarding: Boolean,
|
|
||||||
val level: String,
|
|
||||||
val platformCode: String,
|
|
||||||
) {
|
|
||||||
fun asModel() = Stop(id, name, Point(lat, lng), parent, hasWheelChairBoarding, level, platformCode)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Stop.asEntity() = StopEntity(id, name, pos.lat, pos.lng, parent, hasWheelChairBoarding, level, platformCode)
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.entity
|
|
||||||
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.ForeignKey
|
|
||||||
import androidx.room.ForeignKey.Companion.CASCADE
|
|
||||||
import androidx.room.Index
|
|
||||||
import kotlinx.serialization.ExperimentalSerializationApi
|
|
||||||
import moe.lava.banksia.core.model.FutureTime
|
|
||||||
import moe.lava.banksia.core.model.FutureTime.Companion.asInt
|
|
||||||
import moe.lava.banksia.core.model.StopTime
|
|
||||||
|
|
||||||
@Entity(
|
|
||||||
"StopTime",
|
|
||||||
primaryKeys = ["tripId", "stopId"],
|
|
||||||
indices = [
|
|
||||||
Index("tripId", unique = false),
|
|
||||||
Index("stopId", unique = false),
|
|
||||||
],
|
|
||||||
foreignKeys = [
|
|
||||||
ForeignKey(TripEntity::class, parentColumns = ["id"], childColumns = ["tripId"], onDelete = CASCADE),
|
|
||||||
ForeignKey(StopEntity::class, parentColumns = ["id"], childColumns = ["stopId"], onDelete = CASCADE),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
data class StopTimeEntity(
|
|
||||||
val tripId: String,
|
|
||||||
val stopId: String,
|
|
||||||
val arrivalTime: Int,
|
|
||||||
val departureTime: Int,
|
|
||||||
val headsign: String?,
|
|
||||||
val pickupType: Int,
|
|
||||||
val dropOffType: Int,
|
|
||||||
) {
|
|
||||||
fun asModel() = StopTime(
|
|
||||||
tripId,
|
|
||||||
stopId,
|
|
||||||
FutureTime.fromInt(arrivalTime),
|
|
||||||
FutureTime.fromInt(departureTime),
|
|
||||||
headsign,
|
|
||||||
pickupType,
|
|
||||||
dropOffType,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@OptIn(ExperimentalSerializationApi::class)
|
|
||||||
fun StopTime.asEntity() = StopTimeEntity(
|
|
||||||
tripId,
|
|
||||||
stopId,
|
|
||||||
arrivalTime.asInt(),
|
|
||||||
departureTime.asInt(),
|
|
||||||
headsign,
|
|
||||||
pickupType,
|
|
||||||
dropOffType,
|
|
||||||
)
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.entity
|
|
||||||
|
|
||||||
import androidx.room.ColumnInfo
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.ForeignKey
|
|
||||||
import androidx.room.ForeignKey.Companion.CASCADE
|
|
||||||
import androidx.room.Index
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import moe.lava.banksia.core.model.Trip
|
|
||||||
|
|
||||||
@Entity(
|
|
||||||
"Trip",
|
|
||||||
foreignKeys = [
|
|
||||||
ForeignKey(RouteEntity::class, parentColumns = ["id"], childColumns = ["routeId"], onDelete = CASCADE),
|
|
||||||
ForeignKey(ServiceEntity::class, parentColumns = ["id"], childColumns = ["serviceId"], onDelete = CASCADE),
|
|
||||||
ForeignKey(ShapeEntity::class, parentColumns = ["id"], childColumns = ["shapeId"], onDelete = CASCADE),
|
|
||||||
],
|
|
||||||
indices = [Index("shapeId"), Index("serviceId")],
|
|
||||||
)
|
|
||||||
data class TripEntity(
|
|
||||||
@PrimaryKey val id: String,
|
|
||||||
@ColumnInfo(index = true) val routeId: String,
|
|
||||||
val serviceId: String,
|
|
||||||
val shapeId: String?,
|
|
||||||
val tripHeadsign: String,
|
|
||||||
val directionId: String,
|
|
||||||
val blockId: String,
|
|
||||||
val wheelchairAccessible: String,
|
|
||||||
)
|
|
||||||
|
|
||||||
fun Trip.Companion.from(tripEntity: TripEntity, serviceEntity: ServiceEntity): Trip {
|
|
||||||
if (tripEntity.serviceId != serviceEntity.id) {
|
|
||||||
throw IllegalArgumentException("trip and service id mismatch (${tripEntity.serviceId} != ${serviceEntity.id})")
|
|
||||||
}
|
|
||||||
return with(tripEntity) {
|
|
||||||
Trip(
|
|
||||||
id = id,
|
|
||||||
routeId = routeId,
|
|
||||||
service = serviceEntity.asModel(),
|
|
||||||
shapeId = shapeId,
|
|
||||||
tripHeadsign = tripHeadsign,
|
|
||||||
directionId = directionId,
|
|
||||||
blockId = blockId,
|
|
||||||
wheelchairAccessible = wheelchairAccessible
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Trip.asEntity() = TripEntity(id, routeId, service.id, shapeId, tripHeadsign, directionId, blockId, wheelchairAccessible)
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
package moe.lava.banksia.core.room.entity
|
|
||||||
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import moe.lava.banksia.core.model.VersionMetadata
|
|
||||||
|
|
||||||
@Entity(
|
|
||||||
"VersionMetadata",
|
|
||||||
)
|
|
||||||
data class VersionMetadataEntity(
|
|
||||||
/** Entity type this metadata applies to */
|
|
||||||
@PrimaryKey val type: String,
|
|
||||||
/** Last updated */
|
|
||||||
val lastUpdated: Long,
|
|
||||||
) {
|
|
||||||
fun asModel() = VersionMetadata(type, lastUpdated)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun VersionMetadata.asEntity() = VersionMetadataEntity(type, lastUpdated)
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
package moe.lava.banksia.core.room
|
|
||||||
|
|
||||||
import org.koin.core.component.KoinComponent
|
|
||||||
|
|
||||||
actual class DatabaseManager actual constructor() : KoinComponent {
|
|
||||||
actual val database: Database
|
|
||||||
get() = TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
||||||
package moe.lava.banksia.core.room
|
|
||||||
|
|
||||||
import androidx.room.Room
|
|
||||||
import androidx.room.RoomDatabase
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.delay
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import moe.lava.banksia.core.util.error
|
|
||||||
import org.koin.core.component.KoinComponent
|
|
||||||
import java.io.File
|
|
||||||
import kotlin.system.exitProcess
|
|
||||||
|
|
||||||
actual class DatabaseManager : KoinComponent {
|
|
||||||
private var liveDatabase: Database = Database.build(getBuilder())
|
|
||||||
actual val database get() = liveDatabase
|
|
||||||
|
|
||||||
private fun getBuilder(path: String = "./data/room.db"): RoomDatabase.Builder<Database> {
|
|
||||||
val dbFile = File(path)
|
|
||||||
return Room.databaseBuilder<Database>(
|
|
||||||
name = dbFile.absolutePath,
|
|
||||||
).setJournalMode(RoomDatabase.JournalMode.TRUNCATE)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun makeAlt() = Database.build(getBuilder("./data/room_alt.db"))
|
|
||||||
|
|
||||||
private fun deleteAll(file: File): Boolean {
|
|
||||||
val r1 = file.takeIf { it.exists() }?.delete()
|
|
||||||
val r2 = File(file.parentFile, file.name + ".lck").takeIf { it.exists() }?.delete()
|
|
||||||
val r3 = File(file.parentFile, file.name + "-journal").takeIf { it.exists() }?.delete()
|
|
||||||
return r1 != false && r2 != false && r3 != false
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun renameAll(from: File, to: File): Boolean {
|
|
||||||
val r1 = from.takeIf { it.exists() }?.renameTo(to)
|
|
||||||
val r2 = File(from.parentFile, from.name + ".lck").takeIf { it.exists() }?.renameTo(File(to.parentFile, to.name + ".lck"))
|
|
||||||
val r3 = File(from.parentFile, from.name + "-journal").takeIf { it.exists() }?.renameTo(File(to.parentFile, to.name + "-journal"))
|
|
||||||
return r1 != false && r2 != false && r3 != false
|
|
||||||
}
|
|
||||||
|
|
||||||
fun swap(scope: CoroutineScope = CoroutineScope(Dispatchers.IO)) {
|
|
||||||
val live = File("./data/room.db")
|
|
||||||
val alt = File("./data/room_alt.db")
|
|
||||||
val old = File("./data/room_old.db")
|
|
||||||
|
|
||||||
if (!renameAll(live, old)) {
|
|
||||||
error("DatabaseManager", "Failed to rename database from live to old (${live.absolutePath} -> ${old.absolutePath})")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!renameAll(alt, live)) {
|
|
||||||
error("DatabaseManager", "Failed to rename database from alt to live, trying to undo.. (${alt.absolutePath} -> ${live.absolutePath})")
|
|
||||||
if (!live.renameTo(old)) {
|
|
||||||
error("DatabaseManager", "Failed to undo, critical failure, exiting..")
|
|
||||||
exitProcess(1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
val oldDatabase = liveDatabase
|
|
||||||
liveDatabase = Database.build(getBuilder())
|
|
||||||
|
|
||||||
scope.launch {
|
|
||||||
delay(5000)
|
|
||||||
if (!deleteAll(old)) {
|
|
||||||
error("DatabaseManager", "Failed to unlink old database, stray files! (${old.absolutePath})")
|
|
||||||
}
|
|
||||||
oldDatabase.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -4,17 +4,12 @@ plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
alias(libs.plugins.kotlinMultiplatform)
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
alias(libs.plugins.androidMultiplatformLibrary)
|
alias(libs.plugins.androidMultiplatformLibrary)
|
||||||
alias(libs.plugins.ksp)
|
alias(libs.plugins.sqldelight)
|
||||||
alias(libs.plugins.room)
|
|
||||||
}
|
|
||||||
|
|
||||||
room {
|
|
||||||
schemaDirectory("$projectDir/schemas")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
android {
|
android {
|
||||||
namespace = "moe.lava.banksia.core.room"
|
namespace = "moe.lava.banksia.core.sqld"
|
||||||
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
||||||
|
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
|
|
@ -22,33 +17,36 @@ kotlin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
compilerOptions {
|
|
||||||
freeCompilerArgs.add("-opt-in=kotlin.time.ExperimentalTime")
|
|
||||||
}
|
|
||||||
|
|
||||||
iosArm64()
|
iosArm64()
|
||||||
iosSimulatorArm64()
|
iosSimulatorArm64()
|
||||||
|
|
||||||
jvm()
|
jvm()
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
|
androidMain.dependencies {
|
||||||
|
implementation(libs.sqldelight.driver.android)
|
||||||
|
}
|
||||||
commonMain.dependencies {
|
commonMain.dependencies {
|
||||||
implementation(libs.okio)
|
implementation(libs.okio)
|
||||||
implementation(libs.koin.core)
|
implementation(libs.koin.core)
|
||||||
implementation(libs.kotlinx.coroutines.core)
|
implementation(libs.kotlinx.coroutines.core)
|
||||||
implementation(libs.kotlinx.datetime)
|
implementation(libs.kotlinx.datetime)
|
||||||
implementation(libs.kotlinx.serialization.json)
|
|
||||||
implementation(libs.room.runtime)
|
|
||||||
implementation(libs.sqlite.bundled)
|
|
||||||
|
|
||||||
implementation(projects.core)
|
implementation(projects.core)
|
||||||
}
|
}
|
||||||
|
nativeMain.dependencies {
|
||||||
|
implementation(libs.sqldelight.driver.native)
|
||||||
|
}
|
||||||
|
jvmMain.dependencies {
|
||||||
|
implementation(libs.sqldelight.driver.jvm)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
sqldelight {
|
||||||
add("kspAndroid", libs.room.compiler)
|
databases {
|
||||||
add("kspIosArm64", libs.room.compiler)
|
register("BanksiaDatabase") {
|
||||||
add("kspIosSimulatorArm64", libs.room.compiler)
|
packageName.set("moe.lava.banksia.core.sqld")
|
||||||
add("kspJvm", libs.room.compiler)
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package moe.lava.banksia.core.sqld
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
|
||||||
|
import org.koin.core.component.KoinComponent
|
||||||
|
import org.koin.core.component.get
|
||||||
|
|
||||||
|
actual class DatabaseManager actual constructor() : KoinComponent {
|
||||||
|
actual val database by lazy {
|
||||||
|
val ctx = get<Context>().applicationContext
|
||||||
|
val driver = AndroidSqliteDriver(BanksiaDatabase.Schema, ctx, "timetable.db")
|
||||||
|
BanksiaDatabase(driver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package moe.lava.banksia.core.room
|
package moe.lava.banksia.core.sqld
|
||||||
|
|
||||||
import org.koin.core.component.KoinComponent
|
import org.koin.core.component.KoinComponent
|
||||||
|
|
||||||
expect class DatabaseManager() : KoinComponent {
|
expect class DatabaseManager() : KoinComponent {
|
||||||
val database: Database
|
val database: BanksiaDatabase
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package moe.lava.banksia.core.sqld
|
||||||
|
|
||||||
|
import org.koin.core.module.dsl.singleOf
|
||||||
|
import org.koin.dsl.module
|
||||||
|
|
||||||
|
val sqldDiModule = module {
|
||||||
|
singleOf(::DatabaseManager)
|
||||||
|
factory { get<DatabaseManager>().database }
|
||||||
|
factory { get<BanksiaDatabase>().routeQueries }
|
||||||
|
factory { get<BanksiaDatabase>().serviceQueries }
|
||||||
|
factory { get<BanksiaDatabase>().serviceExceptionQueries }
|
||||||
|
factory { get<BanksiaDatabase>().shapeQueries }
|
||||||
|
factory { get<BanksiaDatabase>().stopQueries }
|
||||||
|
factory { get<BanksiaDatabase>().stopTimeQueries }
|
||||||
|
factory { get<BanksiaDatabase>().tripQueries }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package moe.lava.banksia.core.sqld.mappers
|
||||||
|
|
||||||
|
import moe.lava.banksia.core.model.Route
|
||||||
|
import moe.lava.banksia.core.model.RouteType
|
||||||
|
import moe.lava.banksia.core.sqld.Route as DbRoute
|
||||||
|
|
||||||
|
fun DbRoute.asModel() = Route(
|
||||||
|
id = id,
|
||||||
|
type = RouteType.from(type.toInt()),
|
||||||
|
number = number,
|
||||||
|
name = name,
|
||||||
|
)
|
||||||
|
|
||||||
|
fun Route.asDb() = DbRoute(id, type.value.toLong(), number, name)
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package moe.lava.banksia.core.sqld.mappers
|
||||||
|
|
||||||
|
import kotlinx.datetime.LocalDate
|
||||||
|
import moe.lava.banksia.core.model.Service
|
||||||
|
import moe.lava.banksia.core.util.deserialiseDaysBitflag
|
||||||
|
import moe.lava.banksia.core.util.serialise
|
||||||
|
import moe.lava.banksia.core.sqld.Service as DbService
|
||||||
|
|
||||||
|
fun DbService.asModel() = Service(
|
||||||
|
id = id,
|
||||||
|
days = days.toInt().deserialiseDaysBitflag(),
|
||||||
|
start = LocalDate.fromEpochDays(start),
|
||||||
|
end = LocalDate.fromEpochDays(end),
|
||||||
|
)
|
||||||
|
|
||||||
|
fun Service.asDb() = DbService(
|
||||||
|
id = id,
|
||||||
|
days = days.serialise().toLong(),
|
||||||
|
start = start.toEpochDays(),
|
||||||
|
end = end.toEpochDays(),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package moe.lava.banksia.core.sqld.mappers
|
||||||
|
|
||||||
|
import kotlinx.datetime.LocalDate
|
||||||
|
import moe.lava.banksia.core.model.ServiceException
|
||||||
|
import moe.lava.banksia.core.sqld.ServiceException as DbServiceException
|
||||||
|
|
||||||
|
fun DbServiceException.asModel() = ServiceException(
|
||||||
|
serviceId = serviceId,
|
||||||
|
date = LocalDate.fromEpochDays(date),
|
||||||
|
type = type.toInt(),
|
||||||
|
)
|
||||||
|
|
||||||
|
fun ServiceException.asDb() = DbServiceException(
|
||||||
|
serviceId = serviceId,
|
||||||
|
type = date.toEpochDays(),
|
||||||
|
date = type.toLong(),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package moe.lava.banksia.core.sqld.mappers
|
||||||
|
|
||||||
|
import moe.lava.banksia.core.model.Shape
|
||||||
|
import moe.lava.banksia.core.model.ShapePath
|
||||||
|
import moe.lava.banksia.core.util.Point
|
||||||
|
import moe.lava.banksia.core.sqld.Shape as DbShape
|
||||||
|
|
||||||
|
fun DbShape.asModel() = Shape(
|
||||||
|
id = id,
|
||||||
|
path = bytesToPath(path),
|
||||||
|
)
|
||||||
|
|
||||||
|
fun Shape.asDb() = DbShape(
|
||||||
|
id = id,
|
||||||
|
path = bytesFromPath(path),
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun bytesToPath(value: ByteArray): ShapePath {
|
||||||
|
return value
|
||||||
|
.asSequence()
|
||||||
|
.asIterable()
|
||||||
|
.chunked(8) {
|
||||||
|
(it[0].toLong() and 0xFF) or
|
||||||
|
(it[1].toLong() and 0xFF shl 8) or
|
||||||
|
(it[2].toLong() and 0xFF shl 16) or
|
||||||
|
(it[3].toLong() and 0xFF shl 24) or
|
||||||
|
(it[4].toLong() and 0xFF shl 32) or
|
||||||
|
(it[5].toLong() and 0xFF shl 40) or
|
||||||
|
(it[6].toLong() and 0xFF shl 48) or
|
||||||
|
(it[7].toLong() and 0xFF shl 56)
|
||||||
|
}
|
||||||
|
.map { Double.fromBits(it) }
|
||||||
|
.chunked(2)
|
||||||
|
.map { (lat, lng) -> Point(lat, lng) }
|
||||||
|
.toList()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun bytesFromPath(path: ShapePath): ByteArray {
|
||||||
|
return path
|
||||||
|
.flatMap { (lat, lng) -> listOf(lat.toBits(), lng.toBits()) }
|
||||||
|
.flatMap { i -> listOf(
|
||||||
|
i.toByte(),
|
||||||
|
(i shr 8).toByte(),
|
||||||
|
(i shr 16).toByte(),
|
||||||
|
(i shr 24).toByte(),
|
||||||
|
(i shr 32).toByte(),
|
||||||
|
(i shr 40).toByte(),
|
||||||
|
(i shr 48).toByte(),
|
||||||
|
(i shr 56).toByte(),
|
||||||
|
) }
|
||||||
|
.toByteArray()
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package moe.lava.banksia.core.sqld.mappers
|
||||||
|
|
||||||
|
import moe.lava.banksia.core.model.Stop
|
||||||
|
import moe.lava.banksia.core.util.Point
|
||||||
|
import moe.lava.banksia.core.sqld.Stop as DbStop
|
||||||
|
|
||||||
|
fun DbStop.asModel() = Stop(
|
||||||
|
id = id,
|
||||||
|
name = name,
|
||||||
|
pos = Point(lat, lng),
|
||||||
|
parent = parent,
|
||||||
|
hasWheelChairBoarding = hasWheelChairBoarding == 1L,
|
||||||
|
level = level,
|
||||||
|
platformCode = platformCode,
|
||||||
|
)
|
||||||
|
|
||||||
|
fun Stop.asDb() = DbStop(
|
||||||
|
id = id,
|
||||||
|
name = name,
|
||||||
|
lat = pos.lat,
|
||||||
|
lng = pos.lng,
|
||||||
|
parent = parent,
|
||||||
|
hasWheelChairBoarding = if (hasWheelChairBoarding) 1L else 0L,
|
||||||
|
level = level,
|
||||||
|
platformCode = platformCode
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
package moe.lava.banksia.core.sqld.mappers
|
||||||
|
|
||||||
|
import moe.lava.banksia.core.model.FutureTime
|
||||||
|
import moe.lava.banksia.core.model.FutureTime.Companion.asInt
|
||||||
|
import moe.lava.banksia.core.model.StopTime
|
||||||
|
import moe.lava.banksia.core.sqld.StopTime as DbStopTime
|
||||||
|
|
||||||
|
fun DbStopTime.asModel() = StopTime(
|
||||||
|
tripId = tripId,
|
||||||
|
stopId = stopId,
|
||||||
|
arrivalTime = FutureTime.fromInt(arrivalTime.toInt()),
|
||||||
|
departureTime = FutureTime.fromInt(departureTime.toInt()),
|
||||||
|
headsign = null,
|
||||||
|
pickupType = pickupType.toInt(),
|
||||||
|
dropOffType = dropOffType.toInt(),
|
||||||
|
)
|
||||||
|
|
||||||
|
fun StopTime.asDb() = DbStopTime(
|
||||||
|
tripId = tripId,
|
||||||
|
stopId = stopId,
|
||||||
|
arrivalTime = arrivalTime.asInt().toLong(),
|
||||||
|
departureTime = departureTime.asInt().toLong(),
|
||||||
|
pickupType = pickupType.toLong(),
|
||||||
|
dropOffType = dropOffType.toLong(),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
package moe.lava.banksia.core.sqld.mappers
|
||||||
|
|
||||||
|
import moe.lava.banksia.core.model.Service
|
||||||
|
import moe.lava.banksia.core.model.Trip
|
||||||
|
import moe.lava.banksia.core.sqld.Trip as DbTrip
|
||||||
|
|
||||||
|
fun DbTrip.asModel(service: Service): Trip {
|
||||||
|
if (serviceId != service.id) {
|
||||||
|
throw IllegalArgumentException("trip and service id mismatch (${serviceId} != ${service.id})")
|
||||||
|
}
|
||||||
|
return Trip(
|
||||||
|
id = id,
|
||||||
|
routeId = routeId,
|
||||||
|
service = service,
|
||||||
|
shapeId = shapeId,
|
||||||
|
tripHeadsign = tripHeadsign,
|
||||||
|
directionId = directionId,
|
||||||
|
blockId = blockId,
|
||||||
|
wheelchairAccessible = wheelchairAccessible == 1L
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Trip.asDb() = DbTrip(
|
||||||
|
id = id,
|
||||||
|
routeId = routeId,
|
||||||
|
serviceId = service.id,
|
||||||
|
shapeId = shapeId,
|
||||||
|
tripHeadsign = tripHeadsign,
|
||||||
|
directionId = directionId,
|
||||||
|
blockId = blockId,
|
||||||
|
wheelchairAccessible = if (wheelchairAccessible) 1L else 0L
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
CREATE TABLE Route (
|
||||||
|
id TEXT PRIMARY KEY NOT NULL,
|
||||||
|
type INTEGER NOT NULL,
|
||||||
|
number TEXT,
|
||||||
|
name TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
getAll:
|
||||||
|
SELECT * FROM Route;
|
||||||
|
|
||||||
|
get:
|
||||||
|
SELECT * FROM Route WHERE id == ?;
|
||||||
|
|
||||||
|
insert:
|
||||||
|
INSERT INTO Route VALUES ?;
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
CREATE TABLE Service (
|
||||||
|
id TEXT PRIMARY KEY NOT NULL,
|
||||||
|
days INTEGER NOT NULL,
|
||||||
|
start INTEGER NOT NULL,
|
||||||
|
end INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_Service_days ON Service (days);
|
||||||
|
|
||||||
|
insert:
|
||||||
|
INSERT INTO Service VALUES ?;
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
CREATE TABLE ServiceException (
|
||||||
|
serviceId TEXT NOT NULL,
|
||||||
|
type INTEGER NOT NULL,
|
||||||
|
date INTEGER NOT NULL,
|
||||||
|
PRIMARY KEY (serviceId, type)
|
||||||
|
);
|
||||||
|
|
||||||
|
insert:
|
||||||
|
INSERT INTO ServiceException VALUES ?;
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE TABLE Shape (
|
||||||
|
id TEXT PRIMARY KEY NOT NULL,
|
||||||
|
path BLOB NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
insert:
|
||||||
|
INSERT INTO Shape VALUES ?;
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
CREATE TABLE Stop (
|
||||||
|
id TEXT PRIMARY KEY NOT NULL,
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
lat REAL NOT NULL,
|
||||||
|
lng REAL NOT NULL,
|
||||||
|
parent TEXT REFERENCES Stop(id),
|
||||||
|
hasWheelChairBoarding INTEGER NOT NULL,
|
||||||
|
level TEXT,
|
||||||
|
platformCode TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_Stop_parent ON Stop (parent);
|
||||||
|
|
||||||
|
getAll:
|
||||||
|
SELECT * FROM Stop;
|
||||||
|
|
||||||
|
getAllParentless:
|
||||||
|
SELECT * FROM Stop WHERE platformCode IS NULL AND parent IS NULL;
|
||||||
|
|
||||||
|
get:
|
||||||
|
SELECT * FROM Stop WHERE id == ?;
|
||||||
|
|
||||||
|
getMany:
|
||||||
|
SELECT * FROM Stop WHERE id IN ?;
|
||||||
|
|
||||||
|
insert:
|
||||||
|
INSERT INTO Stop VALUES ?;
|
||||||
|
|
||||||
|
updateParents:
|
||||||
|
UPDATE Stop SET parent = ? WHERE id IN ?;
|
||||||
|
|
||||||
|
getByRoute:
|
||||||
|
SELECT Stop.* FROM Stop
|
||||||
|
INNER JOIN StopTime ON StopTime.stopId == Stop.id
|
||||||
|
INNER JOIN Trip ON Trip.id == StopTime.tripId
|
||||||
|
WHERE Trip.routeId == :id
|
||||||
|
GROUP BY Stop.id;
|
||||||
|
|
||||||
|
-- I vibecoded this, sorry
|
||||||
|
getParentsByRoute:
|
||||||
|
WITH RECURSIVE Tree AS (
|
||||||
|
SELECT Stop.* FROM Stop
|
||||||
|
INNER JOIN StopTime ON StopTime.stopId == Stop.id
|
||||||
|
INNER JOIN Trip ON Trip.id == StopTime.tripId
|
||||||
|
WHERE Trip.routeId == :id
|
||||||
|
GROUP BY Stop.id
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT s.*
|
||||||
|
FROM Stop s
|
||||||
|
INNER JOIN Tree t ON s.id = t.parent
|
||||||
|
)
|
||||||
|
SELECT DISTINCT * FROM Tree WHERE parent IS NULL;
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
CREATE TABLE StopTime (
|
||||||
|
tripId TEXT NOT NULL REFERENCES Trip (id),
|
||||||
|
stopId TEXT NOT NULL REFERENCES Stop (id),
|
||||||
|
arrivalTime INTEGER NOT NULL,
|
||||||
|
departureTime INTEGER NOT NULL,
|
||||||
|
pickupType INTEGER NOT NULL,
|
||||||
|
dropOffType INTEGER NOT NULL,
|
||||||
|
PRIMARY KEY (tripId, stopId)
|
||||||
|
) WITHOUT ROWID;
|
||||||
|
|
||||||
|
CREATE INDEX idx_StopTime_stopId ON StopTime (stopId);
|
||||||
|
|
||||||
|
insert:
|
||||||
|
INSERT OR REPLACE INTO StopTime VALUES ?;
|
||||||
|
|
||||||
|
getForStopDated:
|
||||||
|
SELECT DISTINCT StopTime.* FROM StopTime
|
||||||
|
INNER JOIN Service ON Service.days & :days = :days AND :date BETWEEN Service.start AND Service.`end`
|
||||||
|
INNER JOIN Trip ON Trip.serviceId == Service.id
|
||||||
|
LEFT JOIN ServiceException ON ServiceException.serviceId == Service.id AND ServiceException.date == :date
|
||||||
|
WHERE StopTime.tripId == Trip.id
|
||||||
|
AND StopTime.stopId IN (SELECT Stop.id FROM Stop WHERE Stop.parent == :stopId OR Stop.id == :stopId)
|
||||||
|
AND ServiceException.type IS NULL;
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
CREATE TABLE Trip (
|
||||||
|
id TEXT PRIMARY KEY NOT NULL,
|
||||||
|
routeId TEXT NOT NULL REFERENCES Route (id),
|
||||||
|
serviceId TEXT NOT NULL REFERENCES Service (id),
|
||||||
|
shapeId TEXT NOT NULL REFERENCES Shape (id),
|
||||||
|
tripHeadsign TEXT NOT NULL,
|
||||||
|
directionId TEXT NOT NULL,
|
||||||
|
blockId TEXT,
|
||||||
|
wheelchairAccessible INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_Trip_serviceId ON Trip (serviceId);
|
||||||
|
|
||||||
|
insert:
|
||||||
|
INSERT OR REPLACE INTO Trip VALUES ?;
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
package moe.lava.banksia.core.sqld
|
||||||
|
|
||||||
|
import app.cash.sqldelight.driver.native.NativeSqliteDriver
|
||||||
|
|
||||||
|
actual class DatabaseManager actual constructor() : org.koin.core.component.KoinComponent {
|
||||||
|
actual val database by lazy {
|
||||||
|
val driver = NativeSqliteDriver(BanksiaDatabase.Schema, "timetable.db")
|
||||||
|
BanksiaDatabase(driver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package moe.lava.banksia.core.sqld
|
||||||
|
|
||||||
|
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import moe.lava.banksia.core.util.error
|
||||||
|
import org.koin.core.component.KoinComponent
|
||||||
|
import java.io.File
|
||||||
|
import java.util.Properties
|
||||||
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
|
private const val DBNAME = "timetable"
|
||||||
|
|
||||||
|
actual class DatabaseManager actual constructor() : KoinComponent {
|
||||||
|
private var driver = connect()
|
||||||
|
actual val database get() = BanksiaDatabase(driver)
|
||||||
|
|
||||||
|
private fun connect(path: String = "./data/${DBNAME}.db") =
|
||||||
|
JdbcSqliteDriver("jdbc:sqlite:${path}", Properties(), BanksiaDatabase.Schema)
|
||||||
|
.apply { execute(null, "PRAGMA journal_mode = OFF;", 0) }
|
||||||
|
|
||||||
|
fun makeAlt() = run {
|
||||||
|
File("./data/${DBNAME}_alt.db").takeIf { it.exists() }?.delete()
|
||||||
|
val driver = connect("./data/${DBNAME}_alt.db")
|
||||||
|
BanksiaDatabase(driver) to { driver.close() }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun swap(scope: CoroutineScope = CoroutineScope(Dispatchers.IO)) {
|
||||||
|
val live = File("./data/${DBNAME}.db")
|
||||||
|
val alt = File("./data/${DBNAME}_alt.db")
|
||||||
|
val old = File("./data/${DBNAME}_old.db")
|
||||||
|
|
||||||
|
if (live.takeIf { it.exists() }?.renameTo(old) == false) {
|
||||||
|
error("DatabaseManager", "Failed to rename database from live to old (${live.absolutePath} -> ${old.absolutePath})")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (alt.takeIf { it.exists() }?.renameTo(live) == false) {
|
||||||
|
error("DatabaseManager", "Failed to rename database from alt to live, trying to undo.. (${alt.absolutePath} -> ${live.absolutePath})")
|
||||||
|
if (!live.renameTo(old)) {
|
||||||
|
error("DatabaseManager", "Failed to undo, critical failure, exiting..")
|
||||||
|
exitProcess(1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val oldDriver = driver
|
||||||
|
driver = connect()
|
||||||
|
|
||||||
|
scope.launch {
|
||||||
|
delay(5000)
|
||||||
|
if (old.takeIf { it.exists() }?.delete() == false) {
|
||||||
|
error("DatabaseManager", "Failed to unlink old database, stray files! (${old.absolutePath})")
|
||||||
|
}
|
||||||
|
oldDriver.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,6 +10,6 @@ data class Stop(
|
||||||
val pos: Point,
|
val pos: Point,
|
||||||
val parent: String?,
|
val parent: String?,
|
||||||
val hasWheelChairBoarding: Boolean,
|
val hasWheelChairBoarding: Boolean,
|
||||||
val level: String,
|
val level: String?,
|
||||||
val platformCode: String,
|
val platformCode: String?,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ data class Trip(
|
||||||
val id: String,
|
val id: String,
|
||||||
val routeId: String,
|
val routeId: String,
|
||||||
val service: Service,
|
val service: Service,
|
||||||
val shapeId: String?,
|
val shapeId: String,
|
||||||
val tripHeadsign: String,
|
val tripHeadsign: String,
|
||||||
val directionId: String,
|
val directionId: String,
|
||||||
val blockId: String,
|
val blockId: String?,
|
||||||
val wheelchairAccessible: String,
|
val wheelchairAccessible: Boolean,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,8 @@ material = "1.7.3"
|
||||||
material3 = "1.11.0-alpha04"
|
material3 = "1.11.0-alpha04"
|
||||||
okio = "3.17.0"
|
okio = "3.17.0"
|
||||||
playServicesLocation = "21.3.0"
|
playServicesLocation = "21.3.0"
|
||||||
sqlite = "2.6.2"
|
|
||||||
room = "2.8.4"
|
|
||||||
secretsGradlePlugin = "2.0.1"
|
secretsGradlePlugin = "2.0.1"
|
||||||
|
sqldelight = "2.3.2"
|
||||||
wire = "6.1.0"
|
wire = "6.1.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
|
|
@ -67,10 +66,10 @@ moko-geo = { module = "dev.icerock.moko:geo", version.ref = "geo" }
|
||||||
moko-geo-compose = { module = "dev.icerock.moko:geo-compose", version.ref = "geo" }
|
moko-geo-compose = { module = "dev.icerock.moko:geo-compose", version.ref = "geo" }
|
||||||
okio = { module = "com.squareup.okio:okio", version.ref = "okio" }
|
okio = { module = "com.squareup.okio:okio", version.ref = "okio" }
|
||||||
play-services-location = { module = "com.google.android.gms:play-services-location", version.ref = "playServicesLocation" }
|
play-services-location = { module = "com.google.android.gms:play-services-location", version.ref = "playServicesLocation" }
|
||||||
room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
|
|
||||||
room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
|
|
||||||
sqlite-bundled = { group = "androidx.sqlite", name = "sqlite-bundled", version.ref = "sqlite" }
|
|
||||||
secrets-gradle-plugin = { module = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin", version.ref = "secretsGradlePlugin" }
|
secrets-gradle-plugin = { module = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin", version.ref = "secretsGradlePlugin" }
|
||||||
|
sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
|
||||||
|
sqldelight-driver-jvm = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" }
|
||||||
|
sqldelight-driver-native = { module = "app.cash.sqldelight:native-driver", version.ref = "sqldelight" }
|
||||||
ui-backhandler = { module = "org.jetbrains.compose.ui:ui-backhandler", version.ref = "compose-multiplatform" }
|
ui-backhandler = { module = "org.jetbrains.compose.ui:ui-backhandler", version.ref = "compose-multiplatform" }
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
|
|
@ -83,6 +82,6 @@ kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref =
|
||||||
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
||||||
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
||||||
ktor = { id = "io.ktor.plugin", version.ref = "ktor" }
|
ktor = { id = "io.ktor.plugin", version.ref = "ktor" }
|
||||||
room = { id = "androidx.room", version.ref = "room" }
|
|
||||||
secretsGradle = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin" }
|
secretsGradle = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin" }
|
||||||
|
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }
|
||||||
wire = { id = "com.squareup.wire", version.ref = "wire" }
|
wire = { id = "com.squareup.wire", version.ref = "wire" }
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ kotlin {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core)
|
implementation(projects.core)
|
||||||
implementation(projects.core.room)
|
implementation(projects.core.sqld)
|
||||||
implementation(projects.server.gtfs)
|
implementation(projects.server.gtfs)
|
||||||
implementation(projects.server.gtfsRt)
|
implementation(projects.server.gtfsRt)
|
||||||
|
|
||||||
|
|
@ -36,8 +36,6 @@ dependencies {
|
||||||
implementation(libs.ktor.server.contentnegotiation)
|
implementation(libs.ktor.server.contentnegotiation)
|
||||||
implementation(libs.ktor.server.core)
|
implementation(libs.ktor.server.core)
|
||||||
implementation(libs.ktor.server.netty)
|
implementation(libs.ktor.server.netty)
|
||||||
implementation(libs.room.runtime)
|
|
||||||
implementation(libs.sqlite.bundled)
|
|
||||||
testImplementation(libs.ktor.server.tests)
|
testImplementation(libs.ktor.server.tests)
|
||||||
testImplementation(libs.kotlin.test.junit)
|
testImplementation(libs.kotlin.test.junit)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -175,8 +175,8 @@ class GtfsParser(
|
||||||
pos = Point(stop_lat, stop_lon),
|
pos = Point(stop_lat, stop_lon),
|
||||||
parent = parent_station.ifEmpty { null },
|
parent = parent_station.ifEmpty { null },
|
||||||
hasWheelChairBoarding = wheelchair_boarding == "1",
|
hasWheelChairBoarding = wheelchair_boarding == "1",
|
||||||
level = level_id,
|
level = level_id.ifEmpty { null },
|
||||||
platformCode = platform_code,
|
platformCode = platform_code.ifEmpty { null },
|
||||||
)
|
)
|
||||||
} }
|
} }
|
||||||
|
|
||||||
|
|
@ -210,7 +210,7 @@ class GtfsParser(
|
||||||
if (sunday == 1) add(DayOfWeek.SUNDAY)
|
if (sunday == 1) add(DayOfWeek.SUNDAY)
|
||||||
}
|
}
|
||||||
Service(
|
Service(
|
||||||
id = service_id,
|
id = "${fd.parentFile.name}_${service_id}",
|
||||||
days = days,
|
days = days,
|
||||||
start = LocalDate.parse(start_date, LocalDate.Formats.ISO_BASIC),
|
start = LocalDate.parse(start_date, LocalDate.Formats.ISO_BASIC),
|
||||||
end = LocalDate.parse(end_date, LocalDate.Formats.ISO_BASIC),
|
end = LocalDate.parse(end_date, LocalDate.Formats.ISO_BASIC),
|
||||||
|
|
@ -221,7 +221,7 @@ class GtfsParser(
|
||||||
fd.parseCsv<GtfsServiceException>()
|
fd.parseCsv<GtfsServiceException>()
|
||||||
.map { with(it) {
|
.map { with(it) {
|
||||||
ServiceException(
|
ServiceException(
|
||||||
serviceId = service_id,
|
serviceId = "${fd.parentFile.name}_${service_id}",
|
||||||
date = LocalDate.parse(date, LocalDate.Formats.ISO_BASIC),
|
date = LocalDate.parse(date, LocalDate.Formats.ISO_BASIC),
|
||||||
type = exception_type,
|
type = exception_type,
|
||||||
)
|
)
|
||||||
|
|
@ -233,12 +233,12 @@ class GtfsParser(
|
||||||
Trip(
|
Trip(
|
||||||
id = trip_id,
|
id = trip_id,
|
||||||
routeId = route_id,
|
routeId = route_id,
|
||||||
service = services[service_id]!!,
|
service = services["${fd.parentFile.name}_${service_id}"]!!,
|
||||||
shapeId = shape_id.ifEmpty { null },
|
shapeId = shape_id,
|
||||||
tripHeadsign = trip_headsign,
|
tripHeadsign = trip_headsign,
|
||||||
directionId = direction_id,
|
directionId = direction_id,
|
||||||
blockId = block_id,
|
blockId = block_id.ifEmpty { null },
|
||||||
wheelchairAccessible = wheelchair_accessible,
|
wheelchairAccessible = wheelchair_accessible == "1",
|
||||||
)
|
)
|
||||||
} }
|
} }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ import kotlinx.datetime.TimeZone
|
||||||
import kotlinx.datetime.todayIn
|
import kotlinx.datetime.todayIn
|
||||||
import moe.lava.banksia.core.Constants
|
import moe.lava.banksia.core.Constants
|
||||||
import moe.lava.banksia.core.model.atDate
|
import moe.lava.banksia.core.model.atDate
|
||||||
import moe.lava.banksia.core.room.dao.RouteDao
|
import moe.lava.banksia.core.sqld.RouteQueries
|
||||||
import moe.lava.banksia.core.room.dao.StopDao
|
import moe.lava.banksia.core.sqld.StopQueries
|
||||||
import moe.lava.banksia.core.room.dao.StopTimeDao
|
import moe.lava.banksia.core.sqld.StopTimeQueries
|
||||||
import moe.lava.banksia.core.room.dao.VersionMetadataDao
|
import moe.lava.banksia.core.sqld.mappers.asModel
|
||||||
import moe.lava.banksia.core.util.serialise
|
import moe.lava.banksia.core.util.serialise
|
||||||
import moe.lava.banksia.server.di.ServerModules
|
import moe.lava.banksia.server.di.ServerModules
|
||||||
import moe.lava.banksia.server.gtfsrt.GtfsrtService
|
import moe.lava.banksia.server.gtfsrt.GtfsrtService
|
||||||
|
|
@ -88,25 +88,9 @@ fun Application.module() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get("/metadata/{type?}") {
|
|
||||||
val dao = get<VersionMetadataDao>()
|
|
||||||
val type = call.parameters["type"]
|
|
||||||
if (type == null) {
|
|
||||||
call.respond(dao.getAll().map { it.asModel() })
|
|
||||||
return@get
|
|
||||||
}
|
|
||||||
|
|
||||||
val data = dao.get(type)?.asModel()
|
|
||||||
if (data == null) {
|
|
||||||
call.respond(HttpStatusCode.NotFound)
|
|
||||||
} else {
|
|
||||||
call.respond(data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get("/routes") {
|
get("/routes") {
|
||||||
val routes = withContext(context = Dispatchers.IO) {
|
val routes = withContext(context = Dispatchers.IO) {
|
||||||
get<RouteDao>().getAll()
|
get<RouteQueries>().getAll().executeAsList()
|
||||||
}
|
}
|
||||||
val res = routes.map { it.asModel() }
|
val res = routes.map { it.asModel() }
|
||||||
call.respond(res)
|
call.respond(res)
|
||||||
|
|
@ -114,16 +98,17 @@ fun Application.module() {
|
||||||
get("/routes/{route_id}") {
|
get("/routes/{route_id}") {
|
||||||
val routeId = call.parameters["route_id"]!!
|
val routeId = call.parameters["route_id"]!!
|
||||||
val route = withContext(context = Dispatchers.IO) {
|
val route = withContext(context = Dispatchers.IO) {
|
||||||
get<RouteDao>().get(routeId)
|
get<RouteQueries>().get(routeId).executeAsOneOrNull()
|
||||||
}
|
}
|
||||||
if (route != null)
|
if (route != null) {
|
||||||
call.respond(route.asModel())
|
call.respond(route.asModel())
|
||||||
else
|
} else {
|
||||||
call.respond(HttpStatusCode.NotFound)
|
call.respond(HttpStatusCode.NotFound)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
get("/stops") {
|
get("/stops") {
|
||||||
val routes = withContext(context = Dispatchers.IO) {
|
val routes = withContext(context = Dispatchers.IO) {
|
||||||
get<StopDao>().getAll()
|
get<StopQueries>().getAll().executeAsList()
|
||||||
}
|
}
|
||||||
val res = routes.map { it.asModel() }
|
val res = routes.map { it.asModel() }
|
||||||
call.respond(res)
|
call.respond(res)
|
||||||
|
|
@ -131,22 +116,24 @@ fun Application.module() {
|
||||||
get("/stops/{stop_id}") {
|
get("/stops/{stop_id}") {
|
||||||
val stopId = call.parameters["stop_id"]!!
|
val stopId = call.parameters["stop_id"]!!
|
||||||
val stop = withContext(context = Dispatchers.IO) {
|
val stop = withContext(context = Dispatchers.IO) {
|
||||||
get<StopDao>().get(stopId)
|
get<StopQueries>().get(stopId).executeAsOneOrNull()
|
||||||
}
|
}
|
||||||
if (stop != null)
|
if (stop != null) {
|
||||||
call.respond(stop.asModel())
|
call.respond(stop.asModel())
|
||||||
else
|
} else {
|
||||||
call.respond(HttpStatusCode.NotFound)
|
call.respond(HttpStatusCode.NotFound)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
get("/route_stops/{route_id}") {
|
get("/route_stops/{route_id}") {
|
||||||
val routeId = call.parameters["route_id"]!!
|
val routeId = call.parameters["route_id"]!!
|
||||||
val useParent = call.queryParameters["parent"] !in listOf("false", "0")
|
val useParent = call.queryParameters["parent"] !in listOf("false", "0")
|
||||||
val stops = withContext(Dispatchers.IO) {
|
val stops = withContext(Dispatchers.IO) {
|
||||||
val routeDao = get<RouteDao>()
|
val queries = get<StopQueries>()
|
||||||
if (useParent)
|
if (useParent) {
|
||||||
routeDao.stopsParent(routeId)
|
queries.getParentsByRoute(routeId).executeAsList()
|
||||||
else
|
} else {
|
||||||
routeDao.stops(routeId)
|
queries.getByRoute(routeId).executeAsList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
call.respond(stops.map { it.asModel() })
|
call.respond(stops.map { it.asModel() })
|
||||||
}
|
}
|
||||||
|
|
@ -156,12 +143,13 @@ fun Application.module() {
|
||||||
?.let { LocalDate.parse(it, LocalDate.Formats.ISO) }
|
?.let { LocalDate.parse(it, LocalDate.Formats.ISO) }
|
||||||
?: Clock.System.todayIn(TimeZone.currentSystemDefault())
|
?: Clock.System.todayIn(TimeZone.currentSystemDefault())
|
||||||
val times = withContext(context = Dispatchers.IO) {
|
val times = withContext(context = Dispatchers.IO) {
|
||||||
get<StopTimeDao>()
|
get<StopTimeQueries>()
|
||||||
.getForStopDated(
|
.getForStopDated(
|
||||||
|
listOf(date.dayOfWeek).serialise().toLong(),
|
||||||
|
date.toEpochDays(),
|
||||||
stopId,
|
stopId,
|
||||||
listOf(date.dayOfWeek).serialise(),
|
|
||||||
date.toEpochDays().toInt(),
|
|
||||||
)
|
)
|
||||||
|
.executeAsList()
|
||||||
.map { it.asModel().atDate(date) }
|
.map { it.asModel().atDate(date) }
|
||||||
.sortedBy { it.departureTime }
|
.sortedBy { it.departureTime }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
package moe.lava.banksia.server
|
package moe.lava.banksia.server
|
||||||
|
|
||||||
import moe.lava.banksia.core.room.Database
|
import moe.lava.banksia.core.sqld.BanksiaDatabase
|
||||||
import moe.lava.banksia.core.room.entity.StopEntity
|
|
||||||
import moe.lava.banksia.core.util.log
|
import moe.lava.banksia.core.util.log
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
|
import moe.lava.banksia.core.sqld.Stop as DbStop
|
||||||
|
|
||||||
class GtfsDataFixer(
|
class GtfsDataFixer(
|
||||||
private val database: Database,
|
private val database: BanksiaDatabase,
|
||||||
) {
|
) {
|
||||||
suspend fun addParentsToStops() {
|
fun addParentsToStops() {
|
||||||
val dao = database.stopDao
|
val queries = database.stopQueries
|
||||||
val stops = dao.getAllParentless()
|
val stops = queries.getAllParentless().executeAsList()
|
||||||
stops
|
stops
|
||||||
.groupBy { it.name.split("/")[0] }
|
.groupBy { it.name.split("/")[0] }
|
||||||
.filter { (_, stops) -> stops.size > 1 }
|
.filter { (_, stops) -> stops.size > 1 }
|
||||||
|
|
@ -19,19 +19,21 @@ class GtfsDataFixer(
|
||||||
val avgLng = stops.map { it.lng }.average()
|
val avgLng = stops.map { it.lng }.average()
|
||||||
val hash = name.sha256().substring(0, 7)
|
val hash = name.sha256().substring(0, 7)
|
||||||
val parentId = "bsia:df1:$hash"
|
val parentId = "bsia:df1:$hash"
|
||||||
val parent = StopEntity(
|
val parent = DbStop(
|
||||||
id = parentId,
|
id = parentId,
|
||||||
name = name,
|
name = name,
|
||||||
lat = avgLat,
|
lat = avgLat,
|
||||||
lng = avgLng,
|
lng = avgLng,
|
||||||
parent = null,
|
parent = null,
|
||||||
hasWheelChairBoarding = stops.all { it.hasWheelChairBoarding },
|
hasWheelChairBoarding = if (stops.all { it.hasWheelChairBoarding == 1L }) 1L else 0L,
|
||||||
level = "",
|
level = "",
|
||||||
platformCode = "",
|
platformCode = "",
|
||||||
)
|
)
|
||||||
log("datafixer", "inserting ${parentId} for ${stops.size} children")
|
log("datafixer", "inserting ${parentId} for ${stops.size} children")
|
||||||
dao.insertAll(parent)
|
queries.transaction {
|
||||||
dao.updateParents(stops.map { it.id }, parentId)
|
queries.insert(parent)
|
||||||
|
queries.updateParents(parentId, stops.map { it.id })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,12 @@ import moe.lava.banksia.core.model.Shape
|
||||||
import moe.lava.banksia.core.model.Stop
|
import moe.lava.banksia.core.model.Stop
|
||||||
import moe.lava.banksia.core.model.StopTime
|
import moe.lava.banksia.core.model.StopTime
|
||||||
import moe.lava.banksia.core.model.Trip
|
import moe.lava.banksia.core.model.Trip
|
||||||
import moe.lava.banksia.core.room.Database
|
import moe.lava.banksia.core.sqld.DatabaseManager
|
||||||
import moe.lava.banksia.core.room.DatabaseManager
|
import moe.lava.banksia.core.sqld.mappers.asDb
|
||||||
import moe.lava.banksia.core.room.entity.asEntity
|
|
||||||
import moe.lava.banksia.server.gtfs.GtfsData
|
import moe.lava.banksia.server.gtfs.GtfsData
|
||||||
import moe.lava.banksia.server.gtfs.GtfsParser
|
import moe.lava.banksia.server.gtfs.GtfsParser
|
||||||
import kotlin.time.Clock
|
import kotlin.time.Clock
|
||||||
|
import moe.lava.banksia.core.sqld.BanksiaDatabase as Database
|
||||||
|
|
||||||
class GtfsImporter(
|
class GtfsImporter(
|
||||||
private val parser: GtfsParser,
|
private val parser: GtfsParser,
|
||||||
|
|
@ -21,7 +21,7 @@ class GtfsImporter(
|
||||||
private val log: Logger,
|
private val log: Logger,
|
||||||
) {
|
) {
|
||||||
suspend fun import(url: String, date: Long = Clock.System.now().epochSeconds) {
|
suspend fun import(url: String, date: Long = Clock.System.now().epochSeconds) {
|
||||||
val database = dbm.makeAlt()
|
val (database, close) = dbm.makeAlt()
|
||||||
|
|
||||||
parser.update(url).collect { chunk ->
|
parser.update(url).collect { chunk ->
|
||||||
when (chunk) {
|
when (chunk) {
|
||||||
|
|
@ -35,48 +35,51 @@ class GtfsImporter(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
database.updateMetadata(date)
|
close()
|
||||||
database.close()
|
|
||||||
dbm.swap()
|
dbm.swap()
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun Database.updateMetadata(date: Long) {
|
private fun Database.addRoutes(routes: List<Route>) {
|
||||||
val dao = versionMetadataDao
|
|
||||||
log.info("updating metadata...")
|
|
||||||
dao.update(date, listOf("routes", "stops", "shapes", "trips", "stop_times"))
|
|
||||||
log.info("done")
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun Database.addRoutes(routes: List<Route>) {
|
|
||||||
val dao = routeDao
|
|
||||||
log.info("inserting routes...")
|
log.info("inserting routes...")
|
||||||
dao.insertOrReplaceAll(*routes.map { it.asEntity() }.toTypedArray())
|
routeQueries.transaction {
|
||||||
|
routes.forEach {
|
||||||
|
routeQueries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
log.info("done")
|
log.info("done")
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun Database.addServices(services: List<Service>) {
|
private fun Database.addServices(services: List<Service>) {
|
||||||
val dao = serviceDao
|
|
||||||
log.info("inserting services...")
|
log.info("inserting services...")
|
||||||
dao.insertOrReplaceAll(*services.map { it.asEntity() }.toTypedArray())
|
serviceQueries.transaction {
|
||||||
|
services.forEach {
|
||||||
|
serviceQueries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
log.info("done")
|
log.info("done")
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun Database.addServiceExceptions(exceptions: List<ServiceException>) {
|
private fun Database.addServiceExceptions(exceptions: List<ServiceException>) {
|
||||||
val dao = serviceExceptionDao
|
|
||||||
log.info("inserting exceptions...")
|
log.info("inserting exceptions...")
|
||||||
dao.insertOrReplaceAll(*exceptions.map { it.asEntity() }.toTypedArray())
|
serviceExceptionQueries.transaction {
|
||||||
|
exceptions.forEach {
|
||||||
|
serviceExceptionQueries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
log.info("done")
|
log.info("done")
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun Database.addShapes(shapes: List<Shape>) {
|
private fun Database.addShapes(shapes: List<Shape>) {
|
||||||
val dao = shapeDao
|
|
||||||
log.info("inserting shapes...")
|
log.info("inserting shapes...")
|
||||||
dao.insertOrReplaceAll(*shapes.map { it.asEntity() }.toTypedArray())
|
shapeQueries.transaction {
|
||||||
|
shapes.forEach {
|
||||||
|
shapeQueries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
log.info("done")
|
log.info("done")
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun Database.addStops(stops: List<Stop>) {
|
private fun Database.addStops(stops: List<Stop>) {
|
||||||
val dao = stopDao
|
|
||||||
log.info("inserting stops...")
|
log.info("inserting stops...")
|
||||||
stops
|
stops
|
||||||
.groupBy { it.id }
|
.groupBy { it.id }
|
||||||
|
|
@ -89,21 +92,32 @@ class GtfsImporter(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dao.insertOrReplaceAll(*stops.map { it.asEntity() }.toTypedArray())
|
|
||||||
|
stopQueries.transaction {
|
||||||
|
stops.forEach {
|
||||||
|
stopQueries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
log.info("done")
|
log.info("done")
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun Database.addStopTimes(stopTimes: List<StopTime>) {
|
private fun Database.addStopTimes(stopTimes: List<StopTime>) {
|
||||||
val dao = stopTimeDao
|
|
||||||
log.info("inserting ${stopTimes.size} stoptimes...")
|
log.info("inserting ${stopTimes.size} stoptimes...")
|
||||||
dao.insertOrReplaceAll(*stopTimes.map { it.asEntity() }.toTypedArray())
|
stopTimeQueries.transaction {
|
||||||
|
stopTimes.forEach {
|
||||||
|
stopTimeQueries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
log.info("done")
|
log.info("done")
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun Database.addTrips(trips: List<Trip>) {
|
private fun Database.addTrips(trips: List<Trip>) {
|
||||||
val dao = tripDao
|
|
||||||
log.info("inserting ${trips.size} trips...")
|
log.info("inserting ${trips.size} trips...")
|
||||||
dao.insertOrReplaceAll(*trips.map { it.asEntity() }.toTypedArray())
|
tripQueries.transaction {
|
||||||
|
trips.forEach {
|
||||||
|
tripQueries.insert(it.asDb())
|
||||||
|
}
|
||||||
|
}
|
||||||
log.info("done")
|
log.info("done")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package moe.lava.banksia.server.di
|
package moe.lava.banksia.server.di
|
||||||
|
|
||||||
import io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import moe.lava.banksia.core.room.roomDiModule
|
import moe.lava.banksia.core.sqld.sqldDiModule
|
||||||
import moe.lava.banksia.server.GtfsDataFixer
|
import moe.lava.banksia.server.GtfsDataFixer
|
||||||
import moe.lava.banksia.server.GtfsImporter
|
import moe.lava.banksia.server.GtfsImporter
|
||||||
import moe.lava.banksia.server.gtfs.GtfsParser
|
import moe.lava.banksia.server.gtfs.GtfsParser
|
||||||
|
|
@ -11,7 +11,7 @@ import org.koin.core.module.dsl.singleOf
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val ServerModules = module {
|
val ServerModules = module {
|
||||||
includes(roomDiModule)
|
includes(sqldDiModule)
|
||||||
|
|
||||||
single { HttpClient() }
|
single { HttpClient() }
|
||||||
singleOf(::GtfsParser)
|
singleOf(::GtfsParser)
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ include(":core")
|
||||||
include(":core:data")
|
include(":core:data")
|
||||||
include(":core:data:client")
|
include(":core:data:client")
|
||||||
include(":core:data:server")
|
include(":core:data:server")
|
||||||
include(":core:room")
|
include(":core:sqld")
|
||||||
include(":ui")
|
include(":ui")
|
||||||
include(":ui:maps")
|
include(":ui:maps")
|
||||||
include(":ui:shared")
|
include(":ui:shared")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue