Skip to content

Commit

Permalink
SQLite datetime column type change regression test
Browse files Browse the repository at this point in the history
  • Loading branch information
Tapac committed Aug 22, 2020
1 parent b833c5d commit 406082f
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 4 deletions.
Expand Up @@ -4,6 +4,7 @@ import org.jetbrains.exposed.dao.id.IntIdTable
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.jetbrains.exposed.sql.tests.currentDialectTest
import org.jetbrains.exposed.sql.tests.shared.assertEquals
import org.jetbrains.exposed.sql.vendors.MysqlDialect
Expand Down Expand Up @@ -40,6 +41,37 @@ open class JavaTimeBaseTest : DatabaseTestsBase() {
assertEquals(now.second, insertedSecond)
}
}

// Checks that old numeric datetime columns works fine with new text representation
@Test
fun testSQLiteDateTimeFieldRegression() {
val TestDate = object : IntIdTable("TestDate") {
val time = datetime("time").defaultExpression(CurrentDateTime())
}

withDb(TestDB.SQLITE) {
try {
exec("CREATE TABLE IF NOT EXISTS TestDate (id INTEGER PRIMARY KEY AUTOINCREMENT, \"time\" NUMERIC DEFAULT (CURRENT_TIMESTAMP) NOT NULL);")
TestDate.insert { }
val year = TestDate.time.year()
val month = TestDate.time.month()
val day = TestDate.time.day()
val hour = TestDate.time.hour()
val minute = TestDate.time.minute()

val result = TestDate.slice(year, month, day, hour, minute).selectAll().single()

val now = LocalDateTime.now()
assertEquals(now.year, result[year])
assertEquals(now.monthValue, result[month])
assertEquals(now.dayOfMonth, result[day])
assertEquals(now.hour, result[hour])
assertEquals(now.minute, result[minute])
} finally {
SchemaUtils.drop(TestDate)
}
}
}
}

fun <T:Temporal> assertEqualDateTime(d1: T?, d2: T?) {
Expand Down
Expand Up @@ -6,10 +6,7 @@ import org.jetbrains.exposed.dao.flushCache
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.jodatime.CurrentDateTime
import org.jetbrains.exposed.sql.jodatime.date
import org.jetbrains.exposed.sql.jodatime.dateLiteral
import org.jetbrains.exposed.sql.jodatime.datetime
import org.jetbrains.exposed.sql.jodatime.*
import org.jetbrains.exposed.sql.statements.BatchDataInconsistentException
import org.jetbrains.exposed.sql.statements.BatchInsertStatement
import org.jetbrains.exposed.sql.tests.TestDB
Expand Down Expand Up @@ -286,6 +283,37 @@ class JodaTimeDefaultsTest : JodaTimeBaseTest() {
assertEquals(0, TestDate.select { TestDate.time greater after }.count())
}
}

// Checks that old numeric datetime columns works fine with new text representation
@Test
fun testSQLiteDateTimeFieldRegression() {
val TestDate = object : IntIdTable("TestDate") {
val time = datetime("time").defaultExpression(CurrentDateTime())
}

withDb(TestDB.SQLITE) {
try {
exec("CREATE TABLE IF NOT EXISTS TestDate (id INTEGER PRIMARY KEY AUTOINCREMENT, \"time\" NUMERIC DEFAULT (CURRENT_TIMESTAMP) NOT NULL);")
TestDate.insert { }
val year = TestDate.time.year()
val month = TestDate.time.month()
val day = TestDate.time.day()
val hour = TestDate.time.hour()
val minute = TestDate.time.minute()

val result = TestDate.slice(year, month, day, hour, minute).selectAll().single()

val now = DateTime.now()
assertEquals(now.year, result[year])
assertEquals(now.monthOfYear, result[month])
assertEquals(now.dayOfMonth, result[day])
assertEquals(now.hourOfDay, result[hour])
assertEquals(now.minuteOfHour, result[minute])
} finally {
SchemaUtils.drop(TestDate)
}
}
}
}

fun Table.insertAndWait(duration: Long) {
Expand Down

0 comments on commit 406082f

Please sign in to comment.