From be5e15bfa0629c18505fdf151de34e72710c6871 Mon Sep 17 00:00:00 2001 From: Alessio Coser <> Date: Tue, 27 Jun 2023 23:35:32 +0200 Subject: [PATCH] test more edge-cases on empty values on update --- src/main/kotlin/jako/dsl/update/SetFields.kt | 8 ++++--- src/main/kotlin/jako/dsl/update/Update.kt | 4 ++-- src/test/kotlin/jako/dsl/update/UpdateTest.kt | 22 ++++++++++++++++--- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/jako/dsl/update/SetFields.kt b/src/main/kotlin/jako/dsl/update/SetFields.kt index a299a03..b4b3f49 100644 --- a/src/main/kotlin/jako/dsl/update/SetFields.kt +++ b/src/main/kotlin/jako/dsl/update/SetFields.kt @@ -11,7 +11,9 @@ internal class SetFields: StatementBlock { return this } - override fun toSQL(dialect: Dialect) = if (cols.isNotEmpty()) "SET " + cols.joinToString(", ") { it.toSQL(dialect)} else "" - override fun params() = cols.flatMap { it.params() } - override fun isPresent() = cols.any { it.isPresent() } + override fun toSQL(dialect: Dialect) = "SET " + presentCols().joinToString(", ") { it.toSQL(dialect)} + override fun params() = presentCols().flatMap { it.params() } + override fun isPresent() = presentCols().isNotEmpty() + + private fun presentCols() = cols.filter { it.isPresent() } } diff --git a/src/main/kotlin/jako/dsl/update/Update.kt b/src/main/kotlin/jako/dsl/update/Update.kt index 9bec0b6..8863a39 100644 --- a/src/main/kotlin/jako/dsl/update/Update.kt +++ b/src/main/kotlin/jako/dsl/update/Update.kt @@ -9,7 +9,7 @@ import java.sql.Date import java.time.LocalDate class Update: StatementBuilder() { - private var table: UpdateTable? = null + private var table: UpdateTable = UpdateTable("") private val fields: SetFields = SetFields() private var where: Where = NoWhere() @@ -37,7 +37,7 @@ class Update: StatementBuilder() { private fun fieldsOrThrow() = if(fields.isPresent()) fields else throw RuntimeException("Cannot generate update without values") - private fun updateTableOrThrow() = table ?: throw RuntimeException("Cannot generate update without table name") + private fun updateTableOrThrow() = if(table.isPresent()) table else throw RuntimeException("Cannot generate update without table name") companion object { fun table(name: String): Update { diff --git a/src/test/kotlin/jako/dsl/update/UpdateTest.kt b/src/test/kotlin/jako/dsl/update/UpdateTest.kt index c8c7e87..dc5159d 100644 --- a/src/test/kotlin/jako/dsl/update/UpdateTest.kt +++ b/src/test/kotlin/jako/dsl/update/UpdateTest.kt @@ -45,12 +45,28 @@ class UpdateTest { @Test fun `update with where statement `() { - val insert = Update() + val update = Update() .table("table") .set("column1", 0) .where("column1" GT 10) - assertEquals("""UPDATE "table" SET "column1" = ? WHERE "column1" > ?""", insert.toSQL(PSQL)) - assertEquals(listOf(0, 10), insert.params()) + assertEquals("""UPDATE "table" SET "column1" = ? WHERE "column1" > ?""", update.toSQL(PSQL)) + assertEquals(listOf(0, 10), update.params()) + } + + @Test + fun `update with empty table`() { + val message = assertThrows(RuntimeException::class.java) { + Update().table("").set("column1", 0).toSQL(PSQL) + }.message + + assertEquals(message, "Cannot generate update without table name") + } + + @Test + fun `update with empty values`() { + val update = Update().table("table").set("", 0).set("column1", 1) + + assertEquals("""UPDATE "table" SET "column1" = ?""", update.toSQL(PSQL)) } }