From 30b81432a8e98f4cc0169257c1f09be9cd3d0210 Mon Sep 17 00:00:00 2001 From: "Andrey.Tarashevskiy" Date: Sun, 18 Apr 2021 18:25:38 +0300 Subject: [PATCH] Allow the SQL Server default keyword as default value for a column (#1207) / Move test to a separate file --- .../org/jetbrains/exposed/DefaultsTest.kt | 49 --------------- .../sqlserver/SQLServerDefaultsTest.kt | 60 +++++++++++++++++++ 2 files changed, 60 insertions(+), 49 deletions(-) create mode 100644 exposed-java-time/src/test/kotlin/org/jetbrains/exposed/sqlserver/SQLServerDefaultsTest.kt diff --git a/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/DefaultsTest.kt b/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/DefaultsTest.kt index f67fdae3a2..ffd0d2451b 100644 --- a/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/DefaultsTest.kt +++ b/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/DefaultsTest.kt @@ -1,14 +1,10 @@ package org.jetbrains.exposed -import org.hamcrest.CoreMatchers.`is` -import org.hamcrest.CoreMatchers.notNullValue -import org.hamcrest.MatcherAssert.assertThat import org.jetbrains.exposed.dao.IntEntity import org.jetbrains.exposed.dao.IntEntityClass import org.jetbrains.exposed.dao.flushCache import org.jetbrains.exposed.dao.id.EntityID import org.jetbrains.exposed.dao.id.IntIdTable -import org.jetbrains.exposed.dao.id.UUIDTable import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.`java-time`.* import org.jetbrains.exposed.sql.statements.BatchDataInconsistentException @@ -303,49 +299,4 @@ class DefaultsTest : DatabaseTestsBase() { assertEquals(1, count) } } - - @Test - fun testDefaultExpressionsForTemporalTable() { - - fun databaseGeneratedTimestamp() = object : ExpressionWithColumnType() { - override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { +"DEFAULT" } - override val columnType: IColumnType = JavaLocalDateTimeColumnType() - } - - val temporalTable = object : UUIDTable("TemporalTable") { - val name = text("name") - val sysStart = datetime("sysStart").defaultExpression(databaseGeneratedTimestamp()) - val sysEnd = datetime("sysEnd").defaultExpression(databaseGeneratedTimestamp()) - } - - withDb(TestDB.SQLSERVER) { - try { - exec( - """ - CREATE TABLE TemporalTable - ( - id uniqueidentifier PRIMARY KEY, - "name" VARCHAR(100) NOT NULL, - sysStart DATETIME2 GENERATED ALWAYS AS ROW START, - sysEnd DATETIME2 GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME ([sysStart], [sysEnd]) - ) - """.trimIndent() - ) - - val names = listOf("name") - val batchInsert: List = - temporalTable.batchInsert(names, shouldReturnGeneratedValues = true) { name -> - this[temporalTable.name] = "name" - } - val id = batchInsert.first()[temporalTable.id] - val result = temporalTable.select { temporalTable.id eq id }.single() - assertThat(result[temporalTable.name], `is`("name")) - assertThat(result[temporalTable.sysStart], notNullValue()) - assertThat(result[temporalTable.sysEnd], notNullValue()) - } finally { - SchemaUtils.drop(temporalTable) - } - } - } } diff --git a/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/sqlserver/SQLServerDefaultsTest.kt b/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/sqlserver/SQLServerDefaultsTest.kt new file mode 100644 index 0000000000..92bb5b926e --- /dev/null +++ b/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/sqlserver/SQLServerDefaultsTest.kt @@ -0,0 +1,60 @@ +package org.jetbrains.exposed.sqlserver + +import org.hamcrest.CoreMatchers.`is` +import org.hamcrest.CoreMatchers.notNullValue +import org.hamcrest.MatcherAssert.assertThat +import org.jetbrains.exposed.dao.id.UUIDTable +import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.`java-time`.* +import org.jetbrains.exposed.sql.tests.DatabaseTestsBase +import org.jetbrains.exposed.sql.tests.TestDB +import org.junit.Test +import java.time.* + +class SQLServerDefaultsTest : DatabaseTestsBase() { + + @Test + fun testDefaultExpressionsForTemporalTable() { + + fun databaseGeneratedTimestamp() = object : ExpressionWithColumnType() { + override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { +"DEFAULT" } + override val columnType: IColumnType = JavaLocalDateTimeColumnType() + } + + val temporalTable = object : UUIDTable("TemporalTable") { + val name = text("name") + val sysStart = datetime("sysStart").defaultExpression(databaseGeneratedTimestamp()) + val sysEnd = datetime("sysEnd").defaultExpression(databaseGeneratedTimestamp()) + } + + withDb(TestDB.SQLSERVER) { + try { + exec( + """ + CREATE TABLE TemporalTable + ( + id uniqueidentifier PRIMARY KEY, + "name" VARCHAR(100) NOT NULL, + sysStart DATETIME2 GENERATED ALWAYS AS ROW START, + sysEnd DATETIME2 GENERATED ALWAYS AS ROW END, + PERIOD FOR SYSTEM_TIME ([sysStart], [sysEnd]) + ) + """.trimIndent() + ) + + val names = listOf("name") + val batchInsert: List = + temporalTable.batchInsert(names, shouldReturnGeneratedValues = true) { name -> + this[temporalTable.name] = "name" + } + val id = batchInsert.first()[temporalTable.id] + val result = temporalTable.select { temporalTable.id eq id }.single() + assertThat(result[temporalTable.name], `is`("name")) + assertThat(result[temporalTable.sysStart], notNullValue()) + assertThat(result[temporalTable.sysEnd], notNullValue()) + } finally { + SchemaUtils.drop(temporalTable) + } + } + } +}