diff --git a/exposed-java-time/src/main/kotlin/org/jetbrains/exposed/sql/javatime/JavaDateFunctions.kt b/exposed-java-time/src/main/kotlin/org/jetbrains/exposed/sql/javatime/JavaDateFunctions.kt index 50b56bc16a..408c2d8190 100644 --- a/exposed-java-time/src/main/kotlin/org/jetbrains/exposed/sql/javatime/JavaDateFunctions.kt +++ b/exposed-java-time/src/main/kotlin/org/jetbrains/exposed/sql/javatime/JavaDateFunctions.kt @@ -19,13 +19,16 @@ class Time(val expr: Expression) : Function(JavaLoc override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { append("Time(", expr, ")") } } -class CurrentDateTime : Function(JavaLocalDateTimeColumnType.INSTANCE) { +object CurrentDateTime : Function(JavaLocalDateTimeColumnType.INSTANCE) { override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { +when { (currentDialect as? MysqlDialect)?.isFractionDateTimeSupported() == true -> "CURRENT_TIMESTAMP(6)" else -> "CURRENT_TIMESTAMP" } } + + @Deprecated("This class is now a singleton, no need for its constructor call; this method is provided for backward-compatibility only, and will be removed in future releases") + operator fun invoke() = this } class CurrentTimestamp : Expression() { 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 984c02a5fe..226b47f69b 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 @@ -27,7 +27,7 @@ class DefaultsTest : DatabaseTestsBase() { object TableWithDBDefault : IntIdTable() { var cIndex = 0 val field = varchar("field", 100) - val t1 = datetime("t1").defaultExpression(CurrentDateTime()) + val t1 = datetime("t1").defaultExpression(CurrentDateTime) val clientDefault = integer("clientDefault").clientDefault { cIndex++ } } @@ -144,7 +144,7 @@ class DefaultsTest : DatabaseTestsBase() { @Test fun testDefaults01() { - val currentDT = CurrentDateTime() + val currentDT = CurrentDateTime val nowExpression = object : Expression() { override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { +when (val dialect = currentDialectTest) { @@ -249,7 +249,7 @@ class DefaultsTest : DatabaseTestsBase() { val foo = object : IntIdTable("foo") { val name = text("name") - val defaultDateTime = datetime("defaultDateTime").defaultExpression(CurrentDateTime()) + val defaultDateTime = datetime("defaultDateTime").defaultExpression(CurrentDateTime) val defaultInt = integer("defaultInteger").defaultExpression(abs(-100)) } diff --git a/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/JavaTimeTests.kt b/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/JavaTimeTests.kt index 6631cf9ee8..d4bef97722 100644 --- a/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/JavaTimeTests.kt +++ b/exposed-java-time/src/test/kotlin/org/jetbrains/exposed/JavaTimeTests.kt @@ -45,7 +45,7 @@ open class JavaTimeBaseTest : DatabaseTestsBase() { @Test fun testSQLiteDateTimeFieldRegression() { val TestDate = object : IntIdTable("TestDate") { - val time = datetime("time").defaultExpression(CurrentDateTime()) + val time = datetime("time").defaultExpression(CurrentDateTime) } withDb(TestDB.SQLITE) { diff --git a/exposed-jodatime/src/main/kotlin/org/jetbrains/exposed/sql/jodatime/DateFunctions.kt b/exposed-jodatime/src/main/kotlin/org/jetbrains/exposed/sql/jodatime/DateFunctions.kt index d5b3fdd949..eec695b607 100644 --- a/exposed-jodatime/src/main/kotlin/org/jetbrains/exposed/sql/jodatime/DateFunctions.kt +++ b/exposed-jodatime/src/main/kotlin/org/jetbrains/exposed/sql/jodatime/DateFunctions.kt @@ -10,13 +10,16 @@ class Date(val expr: Expression) : Function(DateColu override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { append("DATE(", expr, ")") } } -class CurrentDateTime : Function(DateColumnType(false)) { +object CurrentDateTime : Function(DateColumnType(false)) { override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { +when { (currentDialect as? MysqlDialect)?.isFractionDateTimeSupported() == true -> "CURRENT_TIMESTAMP(6)" else -> "CURRENT_TIMESTAMP" } } + + @Deprecated("This class is now a singleton, no need for its constructor call; this method is provided for backward-compatibility only, and will be removed in future releases") + operator fun invoke() = this } class Year(val expr: Expression) : Function(IntegerColumnType()) { diff --git a/exposed-jodatime/src/test/kotlin/org/jetbrains/exposed/JodaTimeDefaultsTest.kt b/exposed-jodatime/src/test/kotlin/org/jetbrains/exposed/JodaTimeDefaultsTest.kt index 8f44cc5315..52126fd1a8 100644 --- a/exposed-jodatime/src/test/kotlin/org/jetbrains/exposed/JodaTimeDefaultsTest.kt +++ b/exposed-jodatime/src/test/kotlin/org/jetbrains/exposed/JodaTimeDefaultsTest.kt @@ -31,7 +31,7 @@ class JodaTimeDefaultsTest : JodaTimeBaseTest() { object TableWithDBDefault : IntIdTable() { var cIndex = 0 val field = varchar("field", 100) - val t1 = datetime("t1").defaultExpression(CurrentDateTime()) + val t1 = datetime("t1").defaultExpression(CurrentDateTime) val clientDefault = integer("clientDefault").clientDefault { cIndex++ } } @@ -137,7 +137,7 @@ class JodaTimeDefaultsTest : JodaTimeBaseTest() { @Test fun testDefaults01() { - val currentDT = CurrentDateTime() + val currentDT = CurrentDateTime val nowExpression = object : Expression() { override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { +when (val dialect = currentDialect) { @@ -218,7 +218,7 @@ class JodaTimeDefaultsTest : JodaTimeBaseTest() { val foo = object : IntIdTable("foo") { val name = text("name") - val defaultDateTime = datetime("defaultDateTime").defaultExpression(CurrentDateTime()) + val defaultDateTime = datetime("defaultDateTime").defaultExpression(CurrentDateTime) val defaultInt = integer("defaultInteger").defaultExpression(abs(-100)) } @@ -237,7 +237,7 @@ class JodaTimeDefaultsTest : JodaTimeBaseTest() { fun testDefaultExpressions02() { val foo = object : IntIdTable("foo") { val name = text("name") - val defaultDateTime = datetime("defaultDateTime").defaultExpression(CurrentDateTime()) + val defaultDateTime = datetime("defaultDateTime").defaultExpression(CurrentDateTime) } val nonDefaultDate = DateTime.parse("2000-01-01") @@ -266,7 +266,7 @@ class JodaTimeDefaultsTest : JodaTimeBaseTest() { @Test fun defaultCurrentDateTimeTest() { val TestDate = object : IntIdTable("TestDate") { - val time = datetime("time").defaultExpression(CurrentDateTime()) + val time = datetime("time").defaultExpression(CurrentDateTime) } withTables(TestDate) { @@ -297,7 +297,7 @@ class JodaTimeDefaultsTest : JodaTimeBaseTest() { @Test fun testSQLiteDateTimeFieldRegression() { val TestDate = object : IntIdTable("TestDate") { - val time = datetime("time").defaultExpression(CurrentDateTime()) + val time = datetime("time").defaultExpression(CurrentDateTime) } withDb(TestDB.SQLITE) { diff --git a/exposed-kotlin-datetime/src/main/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/KotlinDateFunctions.kt b/exposed-kotlin-datetime/src/main/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/KotlinDateFunctions.kt index ed7b7a08e4..da78768055 100644 --- a/exposed-kotlin-datetime/src/main/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/KotlinDateFunctions.kt +++ b/exposed-kotlin-datetime/src/main/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/KotlinDateFunctions.kt @@ -27,13 +27,16 @@ fun Date(expr: Expression): Function = DateInternal( // override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { append("Time(", expr, ")") } //} -class CurrentDateTime : Function(KotlinLocalDateTimeColumnType.INSTANCE) { +object CurrentDateTime : Function(KotlinLocalDateTimeColumnType.INSTANCE) { override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { +when { (currentDialect as? MysqlDialect)?.isFractionDateTimeSupported() == true -> "CURRENT_TIMESTAMP(6)" else -> "CURRENT_TIMESTAMP" } } + + @Deprecated("This class is now a singleton, no need for its constructor call; this method is provided for backward-compatibility only, and will be removed in future releases") + operator fun invoke() = this } class CurrentTimestamp : Expression() { diff --git a/exposed-kotlin-datetime/src/test/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/DefaultsTest.kt b/exposed-kotlin-datetime/src/test/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/DefaultsTest.kt index a55369eaaa..b78b21e9b3 100644 --- a/exposed-kotlin-datetime/src/test/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/DefaultsTest.kt +++ b/exposed-kotlin-datetime/src/test/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/DefaultsTest.kt @@ -37,7 +37,7 @@ class DefaultsTest : DatabaseTestsBase() { object TableWithDBDefault : IntIdTable() { var cIndex = 0 val field = varchar("field", 100) - val t1 = datetime("t1").defaultExpression(CurrentDateTime()) + val t1 = datetime("t1").defaultExpression(CurrentDateTime) val clientDefault = integer("clientDefault").clientDefault { cIndex++ } } @@ -154,7 +154,7 @@ class DefaultsTest : DatabaseTestsBase() { @Test fun testDefaults01() { - val currentDT = CurrentDateTime() + val currentDT = CurrentDateTime val nowExpression = object : Expression() { override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { +when (val dialect = currentDialectTest) { @@ -261,7 +261,7 @@ class DefaultsTest : DatabaseTestsBase() { val foo = object : IntIdTable("foo") { val name = text("name") - val defaultDateTime = datetime("defaultDateTime").defaultExpression(CurrentDateTime()) + val defaultDateTime = datetime("defaultDateTime").defaultExpression(CurrentDateTime) val defaultInt = integer("defaultInteger").defaultExpression(abs(-100)) } diff --git a/exposed-kotlin-datetime/src/test/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/KotlinTimeTests.kt b/exposed-kotlin-datetime/src/test/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/KotlinTimeTests.kt index 2fc43aab46..2efb51e88b 100644 --- a/exposed-kotlin-datetime/src/test/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/KotlinTimeTests.kt +++ b/exposed-kotlin-datetime/src/test/kotlin/org/jetbrains/exposed/sql/kotlin/datetime/KotlinTimeTests.kt @@ -46,7 +46,7 @@ open class KotlinTimeBaseTest : DatabaseTestsBase() { @Test fun testSQLiteDateTimeFieldRegression() { val TestDate = object : IntIdTable("TestDate") { - val time = datetime("time").defaultExpression(CurrentDateTime()) + val time = datetime("time").defaultExpression(CurrentDateTime) } withDb(TestDB.SQLITE) {