diff --git a/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/statements/UpdateBuilder.kt b/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/statements/UpdateBuilder.kt index 3e21b4d611..8a1e34b2a3 100644 --- a/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/statements/UpdateBuilder.kt +++ b/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/statements/UpdateBuilder.kt @@ -37,6 +37,13 @@ abstract class UpdateBuilder(type: StatementType, targets: List) : values[column] = value } + /** + * Sets column value to null. + * This method is helpful for "optional references" since compiler can't decide between + * "null as T?" and "null as EntityID?". + */ + fun setNull(column: Column) = set(column, null as T?) + open operator fun set(column: Column, value: Expression) = update(column, value) open operator fun set(column: CompositeColumn, value: S) { diff --git a/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/dml/InsertTests.kt b/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/dml/InsertTests.kt index ddbb6515be..192aaa6fac 100644 --- a/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/dml/InsertTests.kt +++ b/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/dml/InsertTests.kt @@ -265,6 +265,10 @@ class InsertTests : DatabaseTestsBase() { tbl.verifyInsert(null) { it[nullableInt] = LiteralOp(nullableInt.columnType, null) } + + tbl.verifyInsert(null) { + it.setNull(nullableInt) + } } } diff --git a/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/entities/EntityTests.kt b/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/entities/EntityTests.kt index 24a7580aa6..ec017d456f 100644 --- a/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/entities/EntityTests.kt +++ b/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/entities/EntityTests.kt @@ -225,6 +225,9 @@ class EntityTests : DatabaseTestsBase() { // it[EntityTestsData.XTable.y1] = null it[y1] = null as EntityID? } + EntityTestsData.XTable.insert { + it.setNull(y1) + } } }