diff --git a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseUtil.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseUtil.kt index 52fd989e..d850400a 100644 --- a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseUtil.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/DatabaseUtil.kt @@ -1,5 +1,9 @@ package no.iktdev.mediaprocessing.shared.database +import org.jetbrains.exposed.sql.Column +import org.jetbrains.exposed.sql.Op +import org.jetbrains.exposed.sql.SqlExpressionBuilder.like +import org.jetbrains.exposed.sql.or import org.jetbrains.exposed.sql.transactions.transaction fun withTransaction( @@ -21,3 +25,9 @@ fun withTransaction( Result.failure(e) } } + + +fun Column.likeAny(values: List): Op = + values + .map { this like "%$it%" } + .reduce(Op::or) diff --git a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt index 9e77e6a0..5df84d4a 100644 --- a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/EventStore.kt @@ -7,12 +7,11 @@ import no.iktdev.eventi.stores.EventStore import no.iktdev.mediaprocessing.shared.common.UtcNow import no.iktdev.mediaprocessing.shared.common.dto.EventQuery import no.iktdev.mediaprocessing.shared.common.dto.Paginated +import no.iktdev.mediaprocessing.shared.database.likeAny import no.iktdev.mediaprocessing.shared.database.queries.pagedQuery import no.iktdev.mediaprocessing.shared.database.tables.EventsTable import no.iktdev.mediaprocessing.shared.database.withTransaction -import org.jetbrains.exposed.sql.Op import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.or import org.jetbrains.exposed.sql.selectAll import java.time.Instant import java.util.* @@ -40,13 +39,7 @@ object EventStore: EventStore { } query.key?.let { keys -> - if (keys.isNotEmpty()) { - where { - keys - .map { key -> EventsTable.event like "%$key%" } - .reduce(Op::or) - } - } + where { EventsTable.event.likeAny(keys)} } query.from?.let { from -> diff --git a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt index 7623d734..62e00648 100644 --- a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/stores/TaskStore.kt @@ -8,10 +8,14 @@ import no.iktdev.eventi.stores.TaskStore import no.iktdev.mediaprocessing.shared.common.UtcNow import no.iktdev.mediaprocessing.shared.common.dto.Paginated import no.iktdev.mediaprocessing.shared.common.dto.TaskQuery +import no.iktdev.mediaprocessing.shared.database.likeAny import no.iktdev.mediaprocessing.shared.database.queries.pagedQuery import no.iktdev.mediaprocessing.shared.database.tables.TasksTable import no.iktdev.mediaprocessing.shared.database.withTransaction -import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.and +import org.jetbrains.exposed.sql.insert +import org.jetbrains.exposed.sql.selectAll +import org.jetbrains.exposed.sql.update import java.time.Duration import java.util.* @@ -34,13 +38,7 @@ object TaskStore: TaskStore { where { TasksTable.status inList enums } } query.key?.let { keys -> - if (keys.isNotEmpty()) { - where { - keys - .map { key -> TasksTable.task like "%$key%" } - .reduce(Op::or) - } - } + where { TasksTable.task.likeAny(keys) } } query.claimed?.let { where { TasksTable.claimed eq it } } diff --git a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/EventsTable.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/EventsTable.kt index ec48aec2..58d69680 100644 --- a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/EventsTable.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/EventsTable.kt @@ -10,7 +10,7 @@ object EventsTable: IntIdTable(name = "EVENTS") { val referenceId: Column = varchar("REFERENCE_ID", 36) val eventId: Column = varchar("EVENT_ID", 36) val event: Column = varchar("EVENT",100) - val data = registerColumn("data", LongTextColumnType()) + val data = registerColumn("DATA", LongTextColumnType()) val persistedAt = timestamp("PERSISTED_AT") .clientDefault { UtcNow() } diff --git a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/TasksTable.kt b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/TasksTable.kt index c01ca27b..ad29d860 100644 --- a/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/TasksTable.kt +++ b/shared/database/src/main/kotlin/no/iktdev/mediaprocessing/shared/database/tables/TasksTable.kt @@ -13,7 +13,7 @@ object TasksTable: IntIdTable(name = "TASKS") { val taskId: Column = varchar("TASK_ID", 36) val task: Column = varchar("TASK",100) val status: Column = enumerationByName("STATUS", 50, TaskStatus::class).default(TaskStatus.Pending) - val data = registerColumn("data", LongTextColumnType()) + val data = registerColumn("DATA", LongTextColumnType()) val claimed: Column = bool("CLAIMED").default(false) val claimedBy: Column = varchar("CLAIMED_BY",100).nullable() val consumed: Column = bool("CONSUMED").default(false) diff --git a/shared/database/src/main/resources/flyway/V1__create_events_table.sql b/shared/database/src/main/resources/flyway/V1__create_events_table.sql index c9e376f3..131eb9cd 100644 --- a/shared/database/src/main/resources/flyway/V1__create_events_table.sql +++ b/shared/database/src/main/resources/flyway/V1__create_events_table.sql @@ -4,7 +4,7 @@ CREATE TABLE EVENTS REFERENCE_ID CHAR(36) NOT NULL, EVENT_ID CHAR(36) NOT NULL, EVENT VARCHAR(100) NOT NULL, -DATA LONGTEXT NOT NULL, + DATA LONGTEXT NOT NULL, PERSISTED_AT TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (ID),