diff --git a/src/main/java/org/mtransit/commons/FeatureFlags.kt b/src/main/java/org/mtransit/commons/FeatureFlags.kt index fc5b498..62a3dc9 100644 --- a/src/main/java/org/mtransit/commons/FeatureFlags.kt +++ b/src/main/java/org/mtransit/commons/FeatureFlags.kt @@ -28,5 +28,8 @@ object FeatureFlags { // const val F_AVOID_DATA_CHANGED = false const val F_AVOID_DATA_CHANGED = true // WIP + const val F_EXPORT_SERVICE_ID_INTS = false + // const val F_EXPORT_SERVICE_ID_INTS = true // WIP + // @formatter:on } \ No newline at end of file diff --git a/src/main/java/org/mtransit/commons/GTFSCommons.kt b/src/main/java/org/mtransit/commons/GTFSCommons.kt index c6705e9..bbb7fdc 100644 --- a/src/main/java/org/mtransit/commons/GTFSCommons.kt +++ b/src/main/java/org/mtransit/commons/GTFSCommons.kt @@ -198,32 +198,67 @@ object GTFSCommons { // endregion Direction Stops + // region Service IDs + + const val T_SERVICE_IDS = "service_ids" + const val T_SERVICE_IDS_K_ID_INT = "service_id_int" + const val T_SERVICE_IDS_K_ID = "service_id" + + @JvmStatic + val T_SERVICE_IDS_SQL_CREATE = SQLCreateBuilder.getNew(T_SERVICE_IDS).apply { + appendColumn(T_SERVICE_IDS_K_ID_INT, SQLUtils.INT) // TODO INT_PK_AUTO? + appendColumn(T_SERVICE_IDS_K_ID, SQLUtils.TXT, unique = true) + }.build() + + @JvmStatic + val T_SERVICE_IDS_SQL_INSERT = SQLInsertBuilder.getNew(T_SERVICE_IDS).apply { + appendColumn(T_SERVICE_IDS_K_ID_INT) + appendColumn(T_SERVICE_IDS_K_ID) + }.build() + + @JvmStatic + val T_SERVICE_IDS_SQL_DROP = SQLUtils.getSQLDropIfExistsQuery(T_SERVICE_IDS) + + // endregion Service IDs + // region Service Dates const val T_SERVICE_DATES = "service_dates" const val T_SERVICE_DATES_K_SERVICE_ID = "service_id" + const val T_SERVICE_DATES_K_SERVICE_ID_INT = "service_id_int" const val T_SERVICE_DATES_K_DATE = "date" const val T_SERVICE_DATES_K_EXCEPTION_TYPE = "exception_type" + // https://gtfs.org/documentation/schedule/reference/#calendar_datestxt + const val EXCEPTION_TYPE_DEFAULT = 0 // default schedule // added by MT + const val EXCEPTION_TYPE_ADDED = 1 + const val EXCEPTION_TYPE_REMOVED = 2 + @JvmStatic val T_SERVICE_DATES_SQL_CREATE = SQLCreateBuilder.getNew(T_SERVICE_DATES).apply { - appendColumn(T_SERVICE_DATES_K_SERVICE_ID, SQLUtils.TXT) + if (FeatureFlags.F_EXPORT_SERVICE_ID_INTS) { + appendColumn(T_SERVICE_DATES_K_SERVICE_ID_INT, SQLUtils.INT) + } else { + appendColumn(T_SERVICE_DATES_K_SERVICE_ID, SQLUtils.TXT) + } appendColumn(T_SERVICE_DATES_K_DATE, SQLUtils.INT) appendColumn(T_SERVICE_DATES_K_EXCEPTION_TYPE, SQLUtils.INT) + if (FeatureFlags.F_EXPORT_SERVICE_ID_INTS) { + appendForeignKey(T_SERVICE_DATES_K_SERVICE_ID_INT, T_SERVICE_IDS, T_SERVICE_IDS_K_ID_INT) + } }.build() @JvmStatic val T_SERVICE_DATES_SQL_INSERT = SQLInsertBuilder.getNew(T_SERVICE_DATES).apply { - appendColumn(T_SERVICE_DATES_K_SERVICE_ID) + if (FeatureFlags.F_EXPORT_SERVICE_ID_INTS) { + appendColumn(T_SERVICE_DATES_K_SERVICE_ID_INT) + } else { + appendColumn(T_SERVICE_DATES_K_SERVICE_ID) + } appendColumn(T_SERVICE_DATES_K_DATE) appendColumn(T_SERVICE_DATES_K_EXCEPTION_TYPE) }.build() - // https://gtfs.org/documentation/schedule/reference/#calendar_datestxt - const val EXCEPTION_TYPE_DEFAULT = 0 // default schedule // added by MT - const val EXCEPTION_TYPE_ADDED = 1 - const val EXCEPTION_TYPE_REMOVED = 2 - @JvmStatic val T_SERVICE_DATES_SQL_DROP = SQLUtils.getSQLDropIfExistsQuery(T_SERVICE_DATES) diff --git a/src/main/java/org/mtransit/commons/sql/SQLCreateBuilder.kt b/src/main/java/org/mtransit/commons/sql/SQLCreateBuilder.kt index 2eb0f85..f48a853 100644 --- a/src/main/java/org/mtransit/commons/sql/SQLCreateBuilder.kt +++ b/src/main/java/org/mtransit/commons/sql/SQLCreateBuilder.kt @@ -14,11 +14,15 @@ class SQLCreateBuilder private constructor(table: String) { private var nbColumn = 0 - fun appendColumn(name: String, type: String): SQLCreateBuilder { + @JvmOverloads + fun appendColumn(name: String, type: String, unique: Boolean = false): SQLCreateBuilder { if (nbColumn > 0) { sqlCreateSb.append(SQLUtils.COLUMN_SEPARATOR) } sqlCreateSb.append(name).append(type) + if (unique) { + sqlCreateSb.append(SQLUtils.UNIQUE) + } nbColumn++ return this } diff --git a/src/main/java/org/mtransit/commons/sql/SQLUtils.kt b/src/main/java/org/mtransit/commons/sql/SQLUtils.kt index 91f15c0..33264fb 100644 --- a/src/main/java/org/mtransit/commons/sql/SQLUtils.kt +++ b/src/main/java/org/mtransit/commons/sql/SQLUtils.kt @@ -13,6 +13,7 @@ object SQLUtils { const val INT_PK_AUTO = "$INT_PK AUTOINCREMENT" const val TXT = " text" const val REAL = " real" + const val UNIQUE = " unique" const val STRING_DELIMITER = "'" const val STRING_DELIMITER_ESCAPED = '\''