Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add ALL and ANY operators accepting array, subquery, or table parameters #1886

Merged
merged 12 commits into from
Jan 3, 2024

Conversation

ShreckYe
Copy link
Contributor

ALL and ANY are 2 SQL operators to perform a comparison between a single column value and a range of other values.

According to java - PreparedStatement IN clause alternatives? - Stack Overflow, using = ANY(?) and PreparedStatement.setArray if supported can be more efficient than using IN (inList in Exposed) when passing lists of different sizes because a single cached prepared statement can be reused. This is the major motive of this PR.

Since according to references online they are called operators not functions, and CustomOperator in Exposed has 2 operands, I am not sure whether it is better to extend Op or CustomFunction, and so I have implemented both and they are both tested to work. Please help remove the less appropriate one if this PR is accepted.

@e5l e5l requested a review from bog-walk December 6, 2023 12:15
@e5l
Copy link
Member

e5l commented Dec 6, 2023

@bog-walk, could you please check?

@e5l
Copy link
Member

e5l commented Dec 6, 2023

Hey @ShreckYe, thanks for the PR. Could you please run apiDump task and commit the changes?

@bog-walk bog-walk self-assigned this Dec 6, 2023
Copy link
Member

@bog-walk bog-walk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @ShreckYe and thanks for working on this PR. These operators will be a great addition to the API, so I've requested some changes to ensure that this implementation is extensible enough to be adapted later.

Using these operators with an array argument is very niched to PostgreSQL, and the standard way of using ANY|ALL is with a subquery on the right hand side (supported by all except SQLite). This will be the expectation and natural progression if these operators are supported.
MySQL also has a very niched use case, accepting a table on the right hand side. We need to be able to add that functionality if users ask for it, especially if we're adding the PostgreSQL array.

The most ideal way to keep your functionality and future use cases possible would be to implement the feature in a way similar to SubQueryOp, but this would mean creating a class and a function for every single comparison operator that can precede ANY|ALL and the DSL would become more verbose.

I think your way of incorporating the existing comparison operators reads better, so I would suggest extending Op and creating a sealed class that allows us to build on it later. I've included this class and how to use it in my comments below.

Comment on lines +988 to +991
object UntypedAndUnsizedArrayColumnType : ColumnType() {
override fun sqlType(): String =
currentDialect.dataTypeProvider.untypedAndUnsizedArrayType()
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I appreciate the need for this and for the scope of this PR it's ok. It does have some problems, for example:

  • If a logger is enabled, the array object value is not processed in the output string, which isn't helpful to users wanting to see the values.
  • It won't work with edge cases like if a user wants to check if a datetime column value is in an array of LocalDateTimes.

But we need to flesh out the ArrayColumnType more thoroughly anyway, so I can work on these problems after this PR is merged.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't remove this because the implemented Ops still depend on it. As you commented this will be fleshed out, so to not keep these new definitions in the PR, one way I can think of is to replace its usage with a temporary inlined anonymous ColumnType with its sqlType being the empty string or just "ARRAY" and the tests still pass.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds like a good temporary option to me.

Copy link
Contributor Author

@ShreckYe ShreckYe Dec 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, so shall I remove it and adopt this approach in the next commit?

Comment on lines 733 to 734
/** Returns the specified [value] as an array query parameter. */
fun <T> arrayParam(value: Array<T>): Expression<Array<T>> = QueryParameter(value, UntypedAndUnsizedArrayColumnType)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove this as it isn't necessary for the Op implementation. An arrayParam() will be introduced to the API when the ArrayColumnType is fully supported for storing arrays.

Comment on lines 101 to 105
/** Returns this array of data wrapped in the `ALL` operator. */
fun <T> Array<T>.allOp(): Op<T> = AllAnyOp("ALL", this)

/** Returns this array of data wrapped in the `ANY` operator. The name is explicitly distinguished from [Array.any]. */
fun <T> Array<T>.anyOp(): Op<T> = AllAnyOp("ANY", this)
Copy link
Member

@bog-walk bog-walk Dec 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having these be extension functions makes it difficult to extend the functionality to, for example, a subquery. It also doesn't read like a natural SQL query: WHERE { Users.id eq arrayOf(1, 2).anyOp() }.

Please replace them with anyFrom which takes an array argument, that way we can make an override for subqueries and both will read well:

fun <T> anyFrom(array: Array<T>): AnyFromArrayOp<T> = AnyFromArrayOp(array)
fun <T> allFrom(array: Array<T>): AllFromArrayOp<T> = AllFromArrayOp(array)

// use
WHERE { Users.id eq anyFrom(arrayOf(1, 2)) }
WHERE { Users.id eq anyFrom(Users.selectAll()) }

Also, please place the functions in the subsection titled "// Array Comparisons".

Comment on lines 115 to 118
/** Checks if this expression is equal to any element from [array].
* This is a more efficient alternative to [ISqlExpressionBuilder.inList] on PostgreSQL and H2. */
infix fun <T> ExpressionWithColumnType<T>.eqAny(array: Array<T>): Op<Boolean> =
this eq array.anyOp() // TODO or `array.anyFunction()`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary once the functions above are switched to take an argument instead of the more verbose extension function.

Comment on lines 7 to 9
class AllAnyOp<T>(val opName: String, val array: Array<T>) : Op<T>() {

override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My suggestion would be to replace this with a sealed class, something like this:

sealed class AnyOrAllFromBaseOp<T>(
    val isAny: Boolean,
    val subSearch: Any
) : Op<T>() {
    override fun toQueryBuilder(queryBuilder: QueryBuilder): Unit = queryBuilder {
        if (isAny) {
            +"ANY ("
        } else {
            +"ALL ("
        }
        when (subSearch) {
            is Array<*> -> registerArgument(UntypedAndUnsizedArrayColumnType, subSearch)
        }
        +")"
    }
}

class AnyFromArrayOp<T>(array: Array<T>) : AnyOrAllFromBaseOp<T>(isAny = true, subSearch = array)

class AllFromArrayOp<T>(array: Array<T>) : AnyOrAllFromBaseOp<T>(isAny = false, subSearch = array)

With that, we'd be able to easily go in an extend support to subqueries, etc. by just adding a branch to the when block and some more subclasses.

Copy link
Contributor Author

@ShreckYe ShreckYe Dec 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I refactored opName into isAny as you suggested but there might still be other row and array comparison operators, for example SOME though it's only an alias of ANY. (see PostgreSQL docs and MySQL docs) If it's necessary to leave room for them (though I haven't find many cases supporting this), this class can be renamed to RowAndArrayComparisonOp as how PostgreSQL calls them and the old opName approach can be adopted.

Also I added a SubSearch type parameter instead of using Any for better type safety and implemented registerArgument in subclasses for better extensibility from my point of view. If this is unnecessary I can change them to what you suggested.

Comment on lines 130 to 133
/** Data type for arrays with no specified size or element type, used only as types of [QueryParameter]s for PostgreSQL and H2.
* An array with no element type cannot be used for storing arrays in a column in either PostgreSQL or H2. */
abstract fun untypedAndUnsizedArrayType(): String

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's go by the majority here, since only 2 dialects are implemented. Please swap this with the following and remove all exceptions from unsupported dialect files:

open fun untypedAndUnsizedArrayType(): String =
        throw UnsupportedByDialectException("This vendor does not support array data type", currentDialect)

@@ -211,6 +213,55 @@ class SelectTests : DatabaseTestsBase() {
}
}

val testDBsSupportingArrays =
listOf(TestDB.POSTGRESQL, TestDB.POSTGRESQLNG, TestDB.H2, TestDB.H2_MYSQL, TestDB.H2_MARIADB, TestDB.H2_PSQL, TestDB.H2_ORACLE, TestDB.H2_SQLSERVER)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TestDB.allH2TestDB is available to replace listing all H2 modes.

Comment on lines 221 to 229
fun testEqAny(eqOp: Column<String>.() -> Op<Boolean>) {
withDb(testDBsSupportingArrays) {
withCitiesAndUsers { _, users, _ ->
val r = users.select { users.id.eqOp() }.orderBy(users.name).toList()

assertEquals(2, r.size)
assertEquals("Alex", r[0][users.name])
assertEquals("Andrey", r[1][users.name])
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I appreciate that this helps reduce redundancy, especially since you implemented the feature using both Op and Function. After refactoring, please use this (or whatever code you're testing) directly in each unit test instead. That way it will be more clear what the DSL we're testing actually looks like when used.

The tests that would be great to see are:

  1. eq anyFrom
  2. One other comparison op: the example below is good -> greaterEq anyFrom
  3. neq anyFrom
  4. eq anyFrom(emptyArray())

Major changes:
1. support the `ALL` and `ANY` operators taking subquery arguments and table arguments, and the `IN` operator taking table arguments
1. remove some no longer needed code, simplify code, and rename some functions
1. add related tests
1. run `apiDump`

The operators (`IN`, `ANY`, and `ALL`) with table arguments are only supported by PostgreSQL and H2. MySQL claims supporting this but it does not work with the JDBC driver as tested. Those with subquery arguments are not supported by SQLite.
@ShreckYe
Copy link
Contributor Author

@bog-walk thank you for your comments. I have modified the sources as you suggested and requested. For some of them I still have some questions which I leave in their respective reply comments.

Comment on lines 98 to 99
/** Returns this subquery wrapped in the `ANY` operator. This function is not supported by the SQLite dialect. */
fun <T> anyFrom(subQuery: Query): Op<T> = AllAnyFromSubQueryOp(true, subQuery)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ANY and ALL operators with subquery arguments are not supported by SQLite as is also commented in the commit message. Actually ANY and ALL are not keywords of SQLite at all according to this SO question.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ShreckYe I forgot to mention something. Please take AbstractQuery<*> as the argument so we don't restrict it to just Query. It should be possible to use a SetOperation for example as a subquery in the SQL.

Comment on lines 104 to 105
/** Returns this table wrapped in the `ANY` operator. This function is only supported by PostgreSQL and H2 dialects. */
fun <T> anyFrom(table: Table): Op<T> = AllAnyFromTableOp(true, table)
Copy link
Contributor Author

@ShreckYe ShreckYe Dec 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interestingly, The operators with table arguments are supported by PostgreSQL and H2 as tested though they haven't clearly documented about this, but the tests fail on MySQL who claims supporting it. I think it's probably because it's not supported by its JDBC connector. I verified by copying the SQL statement to an online MySQL executor and it works.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, there is currently an issue with the mysql8 docker setup in our tests, so the test failing is a false negative.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, so shall I allow the tests to run on MySQL related dialects and just let them fail, or skip the tests as how they are now?

Copy link
Member

@bog-walk bog-walk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ShreckYe Thanks for all the work so far, it's looking great. I've left some comments and requested a few small edits.

Also, please address the detekt edit requested in the failed action.

Comment on lines +988 to +991
object UntypedAndUnsizedArrayColumnType : ColumnType() {
override fun sqlType(): String =
currentDialect.dataTypeProvider.untypedAndUnsizedArrayType()
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds like a good temporary option to me.

Comment on lines 104 to 105
/** Returns this table wrapped in the `ANY` operator. This function is only supported by PostgreSQL and H2 dialects. */
fun <T> anyFrom(table: Table): Op<T> = AllAnyFromTableOp(true, table)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, there is currently an issue with the mysql8 docker setup in our tests, so the test failing is a false negative.

Comment on lines 116 to 126
// TODO Currently these functions delegate to `anyFrom`. Should the actual `SOME` SQL operator be supported?

/** An alias for [anyFrom]. */
fun <T> someFrom(subQuery: Query): Op<T> = anyFrom(subQuery)

/** An alias for [anyFrom]. */
fun <T> someFrom(array: Array<T>): Op<T> = anyFrom(array)

/** An alias for [anyFrom]. */
fun <T> someFrom(table: Table): Op<T> = anyFrom(table)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ShreckYe There's already quite a bit in this PR. Please remove these aliases and then SOME can be introduced in another PR once this one is finalized. It won't take much tweaking with the current setup.

Comment on lines 671 to 672
/** Checks if this expression is equal to any element from the column of [table] with only a single column. This function is only supported by PostgreSQL and H2 dialects. */
infix fun <T> ExpressionWithColumnType<T>.notInTable(table: Table): InTableOp = InTableOp(this, table, false)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A "not" is probably missing from the KDocs here.

@ShreckYe
Copy link
Contributor Author

@ShreckYe Thanks for all the work so far, it's looking great. I've left some comments and requested a few small edits.

Also, please address the detekt edit requested in the failed action.

Sorry I don't know how to fix the detekt failure. I don't see a blank line at the the location it mentions and my detekt plugin keeps crashing. I downloaded the detekt command line client and ran auto correction but nothing changed. Please help me check if it persists.

@ShreckYe
Copy link
Contributor Author

ShreckYe commented Dec 19, 2023

OK I got the plugin to work on another computer and ran "AutoCorrect by detekt Rules" which removes Line 236 of the mentioned file.

@bog-walk bog-walk changed the title feat: Add the ALL and ANY operators accepting array parameters with an added untyped and unsized array type for PostgreSQL and H2 feat: Add ALL and ANY operators accepting array, subquery, or table parameters Jan 2, 2024
@bog-walk bog-walk requested a review from e5l January 2, 2024 22:55
@e5l e5l merged commit 98df06d into JetBrains:main Jan 3, 2024
2 checks passed
@e5l
Copy link
Member

e5l commented Jan 3, 2024

Hey @ShreckYe, thanks for the PR!
LGTM. Merged

DonRobo referenced this pull request in DonRobo/home-former Jul 25, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[org.jetbrains.exposed:exposed-jdbc](https://github.com/JetBrains/Exposed)
| `0.41.1` -> `0.52.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.exposed:exposed-jdbc/0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.exposed:exposed-jdbc/0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.exposed:exposed-jdbc/0.41.1/0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.exposed:exposed-jdbc/0.41.1/0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains.exposed:exposed-core](https://github.com/JetBrains/Exposed)
| `0.41.1` -> `0.52.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.exposed:exposed-core/0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.exposed:exposed-core/0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.exposed:exposed-core/0.41.1/0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.exposed:exposed-core/0.41.1/0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>JetBrains/Exposed
(org.jetbrains.exposed:exposed-jdbc)</summary>

###
[`v0.52.0`](https://github.com/JetBrains/Exposed/blob/HEAD/CHANGELOG.md#0520)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.51.1...0.52.0)

Features:

- feat: EXPOSED-334 Support MERGE statement by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2047](https://github.com/JetBrains/Exposed/pull/2047)
- feat: EXPOSED-368 Ordering on References by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2083](https://github.com/JetBrains/Exposed/pull/2083)
- Feat: EXPOSED-396 Supports fetchBatchedResults with sorting order by
[@&#8203;roharon](https://github.com/roharon) in
[https://github.com/JetBrains/Exposed/pull/2102](https://github.com/JetBrains/Exposed/pull/2102)
- feat: Add OffsetDateTime extension functions by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2118](https://github.com/JetBrains/Exposed/pull/2118)
- feat: EXPOSED-295 Support subqueries with preceding LATERAL by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2095](https://github.com/JetBrains/Exposed/pull/2095)
- feat: EXPOSED-336 Support Where clause with batchUpsert by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2120](https://github.com/JetBrains/Exposed/pull/2120)
- feat: EXPOSED-416 Support adding special database-specific column
definitions by [@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2125](https://github.com/JetBrains/Exposed/pull/2125)

Bug fixes:

- fix: EXPOSED-389 Coalesce operator returning nullable value by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2107](https://github.com/JetBrains/Exposed/pull/2107)
- fix: EXPOSED-390 ASC_NULLS_LAST and DESC_NULLS_FIRST for MySQL string
columns by [@&#8203;zly2006](https://github.com/zly2006) in
[https://github.com/JetBrains/Exposed/pull/2091](https://github.com/JetBrains/Exposed/pull/2091)
- fix: EXPOSED-402 ClassCastException when eager loading with
uuid().references() by [@&#8203;bog-walk](https://github.com/bog-walk)
in
[https://github.com/JetBrains/Exposed/pull/2112](https://github.com/JetBrains/Exposed/pull/2112)
- fix(DoubleColumnType): correctly handle precision when casting Float
to DoubleColumnType for a `real` column by
[@&#8203;jackgisel-RL](https://github.com/jackgisel-RL) in
[https://github.com/JetBrains/Exposed/pull/2115](https://github.com/JetBrains/Exposed/pull/2115)
- fix: EXPOSED-277 statementsRequiredToActualizeScheme does not check s…
by [@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2096](https://github.com/JetBrains/Exposed/pull/2096)
- fix: EXPOSED-411 ClassCastException when `uuid().references()` is used
with `referrersOn` by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2127](https://github.com/JetBrains/Exposed/pull/2127)
- fix: EXPOSED-412 Remove all the usage of isOldMySql function in tests
by [@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2126](https://github.com/JetBrains/Exposed/pull/2126)
- fix: EXPOSED-405 SQLite bugs: Table with custom ID behaves weirdly in
DAO and batchInsert by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2119](https://github.com/JetBrains/Exposed/pull/2119)
- fix: EXPOSED-393 H2 upsert with JSON column creates invalid data by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2104](https://github.com/JetBrains/Exposed/pull/2104)
- fix: EXPOSED-400 ClassCastException when using `fetchBatchedResults`
by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2113](https://github.com/JetBrains/Exposed/pull/2113)
- EXPOSED-398 Gradle task testH2\_v1 runs tests on version 2.2.224 by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2110](https://github.com/JetBrains/Exposed/pull/2110)
- test: EXPOSED-191 Flaky Oracle test on TC build by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2098](https://github.com/JetBrains/Exposed/pull/2098)

Infrastructure:

-   Spring Boot 3.3.1
-   io.github.hakky54:logcaptor 2.9.3
-   Spring Framework 6.1.10
-   org.junit:junit-bom 5.10.2
- chore: Fix TC Docker `version` is obsolete by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2111](https://github.com/JetBrains/Exposed/pull/2111)
- test: EXPOSED-249 Add MySQL8 to tests for AllAnyFromBaseOp feature by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2123](https://github.com/JetBrains/Exposed/pull/2123)
- chore: Add migration module and move `generateMigrationScript`
function to it by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2128](https://github.com/JetBrains/Exposed/pull/2128)
- Add workflow to build documentation website by
[@&#8203;e5l](https://github.com/e5l) in
[https://github.com/JetBrains/Exposed/pull/2134](https://github.com/JetBrains/Exposed/pull/2134)

###
[`v0.51.1`](https://github.com/JetBrains/Exposed/blob/HEAD/CHANGELOG.md#0511)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.51.0...0.51.1)

Bug fixes:

- fix: EXPOSED-389 Coalesce operator returning nullable value by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2107](https://github.com/JetBrains/Exposed/pull/2107)

###
[`v0.51.0`](https://github.com/JetBrains/Exposed/blob/HEAD/CHANGELOG.md#0510)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.50.1...0.51.0)

Infrastructure:

-   Spring Boot 3.3.0
-   Kotlin Coroutines 1.8.1
-   Spring Framework 6.1.8
-   SQLite driver 3.46.0.0
-   Kotlinx Datetime JVM 0.6.0

Breaking changes:

- build!: EXPOSED-315 Use the slimmer `spring-boot-starter-jdbc` instead
of `spring-boot-starter-data-jdbc` by
[@&#8203;bystam](https://github.com/bystam)

[https://github.com/JetBrains/Exposed/pull/2055](https://github.com/JetBrains/Exposed/pull/2055)2055
- fix!: EXPOSED-360 Storing ULong.MAX_VALUE in ulong column not working
by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2068](https://github.com/JetBrains/Exposed/pull/2068)
- More details at [Breaking
changes](https://jetbrains.github.io/Exposed/breaking-changes.html#0-51-0)

Features:

- feat: Add support for variable-length binary columns in H2 by
[@&#8203;rnett](https://github.com/rnett) in
[https://github.com/JetBrains/Exposed/pull/2100](https://github.com/JetBrains/Exposed/pull/2100)

Bug fixes:

- fix: EXPOSED-353 dateLiteral does not work on OracleDB 12c or 19c by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2057](https://github.com/JetBrains/Exposed/pull/2057)
- fix: EXPOSED-382 ClassCastException when uuid().references() is used
with EntityID column by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2079](https://github.com/JetBrains/Exposed/pull/2079)
- fix: EXPOSED-384 CurrentTimestamp cannot be used with
OffsetDateTimeColumnType by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2081](https://github.com/JetBrains/Exposed/pull/2081)
- EXPOSED-372 UpsertStatement.resultedValues contains incorrect value by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2075](https://github.com/JetBrains/Exposed/pull/2075)
- EXPOSED-365 Unable to insert values into `Array` column by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2072](https://github.com/JetBrains/Exposed/pull/2072)
- EXPOSED-376 batchUpsert does not return database values on conflict by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2082](https://github.com/JetBrains/Exposed/pull/2082)
- EXPOSED-387 Exposed Join.lastQueryAlias not working correctly by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2085](https://github.com/JetBrains/Exposed/pull/2085)
- fix: Crash in aliased OpBoolean by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2094](https://github.com/JetBrains/Exposed/pull/2094)
- fix: EXPOSED-395 ClassCastException with EntityId column operations by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2103](https://github.com/JetBrains/Exposed/pull/2103)
- fix: EXPOSED-391 Cannot map columns to different types anymore by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2099](https://github.com/JetBrains/Exposed/pull/2099)

Docs:

- docs: fix typos in foreignKey documentation by
[@&#8203;plplmax](https://github.com/plplmax) in
[https://github.com/JetBrains/Exposed/pull/2077](https://github.com/JetBrains/Exposed/pull/2077)
- docs: Specify a URL for clicks on the header logo by
[@&#8203;vnikolova](https://github.com/vnikolova) in
[https://github.com/JetBrains/Exposed/pull/2080](https://github.com/JetBrains/Exposed/pull/2080)

###
[`v0.50.1`](https://github.com/JetBrains/Exposed/blob/HEAD/CHANGELOG.md#0501)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.50.0...0.50.1)

Bug fixes:

- fix: EXPOSED-366 inList with EntityID column causes type mismatch
error by [@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2070](https://github.com/JetBrains/Exposed/pull/2070)
- fix: EXPOSED-371 Fix incorrect table reference passed to EntityID
instance when using value-based utility functions by
[@&#8203;dzikoysk](https://github.com/dzikoysk) in
[https://github.com/JetBrains/Exposed/pull/2074](https://github.com/JetBrains/Exposed/pull/2074)

Docs:

- update: update Exposed logo by
[@&#8203;koshachy](https://github.com/koshachy) in
[https://github.com/JetBrains/Exposed/pull/2071](https://github.com/JetBrains/Exposed/pull/2071)

###
[`v0.50.0`](https://github.com/JetBrains/Exposed/blob/HEAD/CHANGELOG.md#0500)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.49.0...0.50.0)

Infrastructure:

-   Spring Framework 6.1.6

Breaking changes:

- fix!: EXPOSED-317 repetitionAttempts property is misleading by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2042](https://github.com/JetBrains/Exposed/pull/2042)
- refactor!: Column type safety by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2027](https://github.com/JetBrains/Exposed/pull/2027)
- More details at [Breaking
changes](https://jetbrains.github.io/Exposed/breaking-changes.html#0-50-0)

Deprecations:

- deprecate: Raise deprecation levels of API elements by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2038](https://github.com/JetBrains/Exposed/pull/2038)
- deprecate: EXPOSED-354 Database.connectPool() with
ConnectionPoolDataSource by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2059](https://github.com/JetBrains/Exposed/pull/2059)

Features:

- feat: EXPOSED-327 Support GraalVM native images with Spring Boot by
[@&#8203;joshlong](https://github.com/joshlong) and
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2039](https://github.com/JetBrains/Exposed/pull/2039).
Many thanks to [joshlong](https://github.com/joshlong) for the
support.
- feat: EXPOSED-296 Add ability to check if a Sequence exists in a
database by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2045](https://github.com/JetBrains/Exposed/pull/2045)
- feat: EXPOSED-355 Support INSERT...RETURNING statement by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2060](https://github.com/JetBrains/Exposed/pull/2060)
- feat: EXPOSED-357 Support DELETE...RETURNING statement by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2061](https://github.com/JetBrains/Exposed/pull/2061)
- feat: EXPOSED-356 Support UPDATE...RETURNING statement by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2062](https://github.com/JetBrains/Exposed/pull/2062)

Bug fixes:

- fix(jdbc): existingIndices() misses indexes from tables with a schema
by [@&#8203;jackgisel-RL](https://github.com/jackgisel-RL) in
[https://github.com/JetBrains/Exposed/pull/2033](https://github.com/JetBrains/Exposed/pull/2033)
- fix: EXPOSED-259 supportsSubqueryUnions is too strict for PostgreSQL
12+ by [@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2037](https://github.com/JetBrains/Exposed/pull/2037)
- fix: EXPOSED-339 Oracle alias for blob does not work by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2048](https://github.com/JetBrains/Exposed/pull/2048)
- fix: EXPOSED-340 Syntax error using upsert with MySQL8 below 8.0.19 by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2049](https://github.com/JetBrains/Exposed/pull/2049)
- fix: EXPOSED-349 "defaultValueFun" is lost from Column in Alias by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2058](https://github.com/JetBrains/Exposed/pull/2058)
- fix: Error when updating different entities mapped to the same table
by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/2065](https://github.com/JetBrains/Exposed/pull/2065)
- fix: EXPOSED-350 keepLoadedReferencesOutOfTransaction causes duplicate
query when true by [@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2064](https://github.com/JetBrains/Exposed/pull/2064)

Docs:

- Move wiki to github pages documentation by
[@&#8203;e5l](https://github.com/e5l) in
[https://github.com/JetBrains/Exposed/pull/2034](https://github.com/JetBrains/Exposed/pull/2034)
- docs: EXPOSED-313 JSON columns support libraries other than
kotlinx.serialization by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2041](https://github.com/JetBrains/Exposed/pull/2041)
- docs: Update Contributing documentation with code style details by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2051](https://github.com/JetBrains/Exposed/pull/2051)
- docs: EXPOSED-319 H2 customEnumeration example throws by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/2056](https://github.com/JetBrains/Exposed/pull/2056)

Tests:

- Move BLOB tests to own source files by
[@&#8203;obabichevjb](https://github.com/obabichevjb) in
[https://github.com/JetBrains/Exposed/pull/2053](https://github.com/JetBrains/Exposed/pull/2053)

###
[`v0.49.0`](https://github.com/JetBrains/Exposed/releases/tag/0.49.0)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.48.0...0.49.0)

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0490)

##### New Contributors

- [@&#8203;breun](https://github.com/breun) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/2031](https://github.com/JetBrains/Exposed/pull/2031)

###
[`v0.48.0`](https://github.com/JetBrains/Exposed/releases/tag/0.48.0)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.47.0...0.48.0)

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0480)

#### New Contributors:

- [@&#8203;elektro-wolle](https://github.com/elektro-wolle) made their
first contribution in
[https://github.com/JetBrains/Exposed/pull/1822](https://github.com/JetBrains/Exposed/pull/1822)

###
[`v0.47.0`](https://github.com/JetBrains/Exposed/releases/tag/0.47.0)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.46.0...0.47.0)

##### What's Changed

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0470)

##### New Contributors

- [@&#8203;ShreckYe](https://github.com/ShreckYe) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1886](https://github.com/JetBrains/Exposed/pull/1886)
- [@&#8203;esperar](https://github.com/esperar) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1877](https://github.com/JetBrains/Exposed/pull/1877)
- [@&#8203;reidbuzby](https://github.com/reidbuzby) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1773](https://github.com/JetBrains/Exposed/pull/1773)
- [@&#8203;yeogai](https://github.com/yeogai) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1692](https://github.com/JetBrains/Exposed/pull/1692)
- [@&#8203;timeking](https://github.com/timeking) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1746](https://github.com/JetBrains/Exposed/pull/1746)
- [@&#8203;winkey728](https://github.com/winkey728) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1975](https://github.com/JetBrains/Exposed/pull/1975)

###
[`v0.46.0`](https://github.com/JetBrains/Exposed/releases/tag/0.46.0)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.45.0...0.46.0)

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0460)

#### New Contributors:

- [@&#8203;pank-su](https://github.com/pank-su) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1887](https://github.com/JetBrains/Exposed/pull/1887)

###
[`v0.45.0`](https://github.com/JetBrains/Exposed/releases/tag/0.45.0)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.44.1...0.45.0)

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0450)

###
[`v0.44.1`](https://github.com/JetBrains/Exposed/releases/tag/0.44.1)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.44.0...0.44.1)

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0441)

##### New Contributors

- [@&#8203;adambrangenberg](https://github.com/adambrangenberg) made
their first contribution in
[https://github.com/JetBrains/Exposed/pull/1858](https://github.com/JetBrains/Exposed/pull/1858)

###
[`v0.44.0`](https://github.com/JetBrains/Exposed/releases/tag/0.44.0)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.43.0...0.44.0)

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0440)

#### New Contributors:

- [@&#8203;ymotchi](https://github.com/ymotchi) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1847](https://github.com/JetBrains/Exposed/pull/1847)
- [@&#8203;Hakky54](https://github.com/Hakky54) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1852](https://github.com/JetBrains/Exposed/pull/1852)
- [@&#8203;rbraeunlich](https://github.com/rbraeunlich) made their
first contribution in
[https://github.com/JetBrains/Exposed/pull/1645](https://github.com/JetBrains/Exposed/pull/1645)

###
[`v0.43.0`](https://github.com/JetBrains/Exposed/releases/tag/0.43.0)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.42.1...0.43.0)

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0430)

###
[`v0.42.1`](https://github.com/JetBrains/Exposed/releases/tag/0.42.1)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.42.0...0.42.1)

[Change
log](https://github.com/JetBrains/Exposed/blob/main/docs/ChangeLog.md#0421)

###
[`v0.42.0`](https://github.com/JetBrains/Exposed/releases/tag/0.42.0)

[Compare
Source](https://github.com/JetBrains/Exposed/compare/0.41.1...0.42.0)

#### What's Changed

- Fix an error when updating an entity with a foreign key id (issue 880)
by [@&#8203;forketyfork](https://github.com/forketyfork) in
[https://github.com/JetBrains/Exposed/pull/1668](https://github.com/JetBrains/Exposed/pull/1668)
- Open Sauced -> Exposed by [@&#8203;K0zka](https://github.com/K0zka)
in
[https://github.com/JetBrains/Exposed/pull/1660](https://github.com/JetBrains/Exposed/pull/1660)
- Show length instead of value for exceeded column length by
[@&#8203;simboel](https://github.com/simboel) in
[https://github.com/JetBrains/Exposed/pull/1667](https://github.com/JetBrains/Exposed/pull/1667)
- Document configuration when using Spring starter by
[@&#8203;Kantis](https://github.com/Kantis) in
[https://github.com/JetBrains/Exposed/pull/1654](https://github.com/JetBrains/Exposed/pull/1654)
- EXPOSED-15 Fix running mysql tests on M1 by
[@&#8203;e5l](https://github.com/e5l) in
[https://github.com/JetBrains/Exposed/pull/1719](https://github.com/JetBrains/Exposed/pull/1719)
- Fix grammar in error message by
[@&#8203;micheljung](https://github.com/micheljung) in
[https://github.com/JetBrains/Exposed/pull/1717](https://github.com/JetBrains/Exposed/pull/1717)
- Fix: PostgreSQLDialect.modifyColumn is not able to drop default values
by [@&#8203;michael-markl](https://github.com/michael-markl) in
[https://github.com/JetBrains/Exposed/pull/1716](https://github.com/JetBrains/Exposed/pull/1716)
- Fix UInt value out of bounds by
[@&#8203;keta1](https://github.com/keta1) in
[https://github.com/JetBrains/Exposed/pull/1709](https://github.com/JetBrains/Exposed/pull/1709)
- fix: EXPOSED-16 Failed tests in KotlinTimeTests by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1724](https://github.com/JetBrains/Exposed/pull/1724)
- EXPOSED-21 Primary key constraint not created by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1728](https://github.com/JetBrains/Exposed/pull/1728)
- EXPOSED-19 Max timestamp in SQLite not working by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1725](https://github.com/JetBrains/Exposed/pull/1725)
- docs: Add contribution guide by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1729](https://github.com/JetBrains/Exposed/pull/1729)
- fix: EXPOSED-27 Id is not in record set by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1731](https://github.com/JetBrains/Exposed/pull/1731)
- fix: EXPOSED-28 Update with join fails on H2 in MySql mode by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1732](https://github.com/JetBrains/Exposed/pull/1732)
- fix: EXPOSED-29 Cannot set nullable composite column in
InsertStatement by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1733](https://github.com/JetBrains/Exposed/pull/1733)
- fix: EXPOSED-23 H2 unsupported indexing behavior by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1734](https://github.com/JetBrains/Exposed/pull/1734)
- fix: EXPOSED-31 Landing Readme links and demo code by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1736](https://github.com/JetBrains/Exposed/pull/1736)
- Add CHARINDEX function for sqlserver by
[@&#8203;eukleshnin](https://github.com/eukleshnin) in
[https://github.com/JetBrains/Exposed/pull/1675](https://github.com/JetBrains/Exposed/pull/1675)
- feat: EXPOSED-32 Support string function CHAR_LENGTH by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1737](https://github.com/JetBrains/Exposed/pull/1737)
- feat: EXPOSED-37 Support null-safe equality comparison by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1739](https://github.com/JetBrains/Exposed/pull/1739)
- Remove unnecessary parentheses for functions by
[@&#8203;Maxr1998](https://github.com/Maxr1998) in
[https://github.com/JetBrains/Exposed/pull/1642](https://github.com/JetBrains/Exposed/pull/1642)
- fix: EXPOSED-36 LocalDate comparison in SQLite by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1741](https://github.com/JetBrains/Exposed/pull/1741)
- fix: EXPOSED-42 Can't create BLOB column with default value by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1740](https://github.com/JetBrains/Exposed/pull/1740)
- feat: EXPOSED-45 Support single statement UPSERT by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1743](https://github.com/JetBrains/Exposed/pull/1743)
- fix: EXPOSED-49 Replace statement defined as upsert statement by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1747](https://github.com/JetBrains/Exposed/pull/1747)
- Note breaking change in 0.40.1 by
[@&#8203;timmc](https://github.com/timmc) in
[https://github.com/JetBrains/Exposed/pull/1723](https://github.com/JetBrains/Exposed/pull/1723)
- fix: EXPOSED-48 Incorrect statistics aggregate functions by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1745](https://github.com/JetBrains/Exposed/pull/1745)
- feat: EXPOSED-52 Support batch UPSERT by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1749](https://github.com/JetBrains/Exposed/pull/1749)
- Sum batch results for inserts by
[@&#8203;johnzeringue](https://github.com/johnzeringue) in
[https://github.com/JetBrains/Exposed/pull/1641](https://github.com/JetBrains/Exposed/pull/1641)
- docs: EXPOSED-55 Change TC build status badge links by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1750](https://github.com/JetBrains/Exposed/pull/1750)
- task: EXPOSED-58 Revisit detekt.yml and fix existing issues by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1752](https://github.com/JetBrains/Exposed/pull/1752)
- Add samples folder by [@&#8203;e5l](https://github.com/e5l) in
[https://github.com/JetBrains/Exposed/pull/1753](https://github.com/JetBrains/Exposed/pull/1753)
- fix: EXPOSED-57 BatchInsertStatement can't be used with MySQL upsert
by [@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1754](https://github.com/JetBrains/Exposed/pull/1754)
- feat: EXPOSED-47 Add support for SET DEFAULT reference option by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1744](https://github.com/JetBrains/Exposed/pull/1744)
- docs: Correct broken links after README was moved by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1758](https://github.com/JetBrains/Exposed/pull/1758)
- Add API tracking by [@&#8203;e5l](https://github.com/e5l) in
[https://github.com/JetBrains/Exposed/pull/1756](https://github.com/JetBrains/Exposed/pull/1756)
- control whether arguments should be inlined or passed in. by
[@&#8203;lure](https://github.com/lure) in
[https://github.com/JetBrains/Exposed/pull/1621](https://github.com/JetBrains/Exposed/pull/1621)
- build: Perform apiDump to fix failed merge build by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1760](https://github.com/JetBrains/Exposed/pull/1760)
- fix: EXPOSED-64 Fix Detekt SpreadOperator warnings by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1759](https://github.com/JetBrains/Exposed/pull/1759)
- feat: Add partial index support (Postgres only) by
[@&#8203;lure](https://github.com/lure) in
[https://github.com/JetBrains/Exposed/pull/1748](https://github.com/JetBrains/Exposed/pull/1748)
- add afterStatementPrepared method to StatementInterceptor by
[@&#8203;lure](https://github.com/lure) in
[https://github.com/JetBrains/Exposed/pull/1622](https://github.com/JetBrains/Exposed/pull/1622)
- Bump org.jetbrains.kotlin.jvm from 1.7.21 to 1.8.22 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/JetBrains/Exposed/pull/1755](https://github.com/JetBrains/Exposed/pull/1755)
- Create Documetation Website by [@&#8203;e5l](https://github.com/e5l)
in
[https://github.com/JetBrains/Exposed/pull/1757](https://github.com/JetBrains/Exposed/pull/1757)
- feat: EXPOSED-60 Support json/json(b) column types by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1762](https://github.com/JetBrains/Exposed/pull/1762)
- feat: EXPOSED-66 Extend partial index to SQLServer and SQLite by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1763](https://github.com/JetBrains/Exposed/pull/1763)
- \[EXPOSED-46] Add a possibility to set a delay for the repetition
attempts by [@&#8203;mgrati](https://github.com/mgrati) in
[https://github.com/JetBrains/Exposed/pull/1742](https://github.com/JetBrains/Exposed/pull/1742)
- chore: Set up Maven publishing by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1761](https://github.com/JetBrains/Exposed/pull/1761)
- feat: EXPOSED-69 Extend json support to H2, Oracle (text) and DAO by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1766](https://github.com/JetBrains/Exposed/pull/1766)
- feat: EXPOSED-68 Add more json/json(b) column functions by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1770](https://github.com/JetBrains/Exposed/pull/1770)
- chore: remove detekt ClassNaming issues by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1769](https://github.com/JetBrains/Exposed/pull/1769)
- deprecate: EXPOSED-84 Raise deprecation levels of API elements by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1771](https://github.com/JetBrains/Exposed/pull/1771)
- chore: Fix more detekt issues by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1772](https://github.com/JetBrains/Exposed/pull/1772)
- docs: add a point in CONTRIBUTING.md regarding API check by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1776](https://github.com/JetBrains/Exposed/pull/1776)
- chore: add detekt IntelliJ plugin configuration to detekt.xml by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1775](https://github.com/JetBrains/Exposed/pull/1775)
- test: Add json/jsonb array tests by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1778](https://github.com/JetBrains/Exposed/pull/1778)
- test: Add jsonb datetime tests by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1780](https://github.com/JetBrains/Exposed/pull/1780)
- QueryBuilder.registerArguments - avoid potentially expensive
valueToString call unless we need to sort values by
[@&#8203;zhurs](https://github.com/zhurs) in
[https://github.com/JetBrains/Exposed/pull/1779](https://github.com/JetBrains/Exposed/pull/1779)
- [#&#8203;623](https://github.com/JetBrains/Exposed/issues/623) Add
support of window functions in Exposed DSL by
[@&#8203;Legohuman](https://github.com/Legohuman) in
[https://github.com/JetBrains/Exposed/pull/1651](https://github.com/JetBrains/Exposed/pull/1651)
- fix: EXPOSED-50 customEnumeration reference column error by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1785](https://github.com/JetBrains/Exposed/pull/1785)
- feat: EXPOSED-89 Support functions in Create Index by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1788](https://github.com/JetBrains/Exposed/pull/1788)
- fix: EXPOSED-91 NPE in existingIndices() with function index by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1791](https://github.com/JetBrains/Exposed/pull/1791)
- chore: Add blobParam function. by
[@&#8203;spand](https://github.com/spand) in
[https://github.com/JetBrains/Exposed/pull/1672](https://github.com/JetBrains/Exposed/pull/1672)
- build(deps): bump org.jetbrains.kotlin.jvm from 1.8.22 to 1.9.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/JetBrains/Exposed/pull/1784](https://github.com/JetBrains/Exposed/pull/1784)
- fix: SQLServerException: The port number -1 is not valid. by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1789](https://github.com/JetBrains/Exposed/pull/1789)
- build: run apiDump by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1792](https://github.com/JetBrains/Exposed/pull/1792)
- fix: EXPOSED-80 Set repetition policy for suspended transactions by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1774](https://github.com/JetBrains/Exposed/pull/1774)
- chore: Modify max_line_length value in .editorconfig to match that of
detekt.yml by [@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1790](https://github.com/JetBrains/Exposed/pull/1790)
- build(deps): bump org.jetbrains.kotlin.plugin.serialization from
1.8.22 to 1.9.0 by [@&#8203;dependabot](https://github.com/dependabot)
in
[https://github.com/JetBrains/Exposed/pull/1783](https://github.com/JetBrains/Exposed/pull/1783)
- refactor: EXPOSED-88 Remove kotlinx-serialization dep from
exposed-core by [@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1793](https://github.com/JetBrains/Exposed/pull/1793)
- chore: Integrate detekt with GitHub Actions by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1765](https://github.com/JetBrains/Exposed/pull/1765)
- chore: Remove more detekt issues (part 4) by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1794](https://github.com/JetBrains/Exposed/pull/1794)
- fix: Exclude deleted and renamed files from detekt GitHub Action by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1795](https://github.com/JetBrains/Exposed/pull/1795)
- fix: EXPOSED-97 Unsigned column types truncate MySQL values by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1796](https://github.com/JetBrains/Exposed/pull/1796)
- feat: Add spring mutli container support by
[@&#8203;FullOfOrange](https://github.com/FullOfOrange) in
[https://github.com/JetBrains/Exposed/pull/1781](https://github.com/JetBrains/Exposed/pull/1781)
- docs: Reorganize structure and rewrite some pages by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1764](https://github.com/JetBrains/Exposed/pull/1764)
- fix: EXPOSED-98: Add instructions to log-in to see and log issues by
[@&#8203;jasonjmcghee](https://github.com/jasonjmcghee) in
[https://github.com/JetBrains/Exposed/pull/1798](https://github.com/JetBrains/Exposed/pull/1798)
- test: Add test coverage for column transforms by
[@&#8203;oharaandrew314](https://github.com/oharaandrew314) in
[https://github.com/JetBrains/Exposed/pull/1687](https://github.com/JetBrains/Exposed/pull/1687)
- fix: EXPOSED-83 createMissingTablesAndColumns not detecting missing PK
by [@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1797](https://github.com/JetBrains/Exposed/pull/1797)
- test: Fix failing exposed-tests in SQL Server by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1801](https://github.com/JetBrains/Exposed/pull/1801)
- fix: EXPOSED-54 CaseWhen.Else returns narrow Expression<R> by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1800](https://github.com/JetBrains/Exposed/pull/1800)
- chore: Release 0.42.0 by [@&#8203;joc-a](https://github.com/joc-a)
in
[https://github.com/JetBrains/Exposed/pull/1804](https://github.com/JetBrains/Exposed/pull/1804)
- feat: EXPOSED-43 Add support for timestamp with time zone by
[@&#8203;joc-a](https://github.com/joc-a) in
[https://github.com/JetBrains/Exposed/pull/1787](https://github.com/JetBrains/Exposed/pull/1787)
- fix: EXPOSED-99 SchemaUtils incorrectly compares datetime defaults by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1802](https://github.com/JetBrains/Exposed/pull/1802)
- test: Fix failing exposed-tests in Oracle by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1803](https://github.com/JetBrains/Exposed/pull/1803)
- fix: EXPOSED-82 Inaccurate UShort column type mapping by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1799](https://github.com/JetBrains/Exposed/pull/1799)
- test: Fix failing datetime tests in MariaDB by
[@&#8203;bog-walk](https://github.com/bog-walk) in
[https://github.com/JetBrains/Exposed/pull/1805](https://github.com/JetBrains/Exposed/pull/1805)

#### New Contributors

- [@&#8203;forketyfork](https://github.com/forketyfork) made their
first contribution in
[https://github.com/JetBrains/Exposed/pull/1668](https://github.com/JetBrains/Exposed/pull/1668)
- [@&#8203;K0zka](https://github.com/K0zka) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1660](https://github.com/JetBrains/Exposed/pull/1660)
- [@&#8203;simboel](https://github.com/simboel) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1667](https://github.com/JetBrains/Exposed/pull/1667)
- [@&#8203;Kantis](https://github.com/Kantis) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1654](https://github.com/JetBrains/Exposed/pull/1654)
- [@&#8203;e5l](https://github.com/e5l) made their first contribution
in
[https://github.com/JetBrains/Exposed/pull/1719](https://github.com/JetBrains/Exposed/pull/1719)
- [@&#8203;micheljung](https://github.com/micheljung) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1717](https://github.com/JetBrains/Exposed/pull/1717)
- [@&#8203;michael-markl](https://github.com/michael-markl) made their
first contribution in
[https://github.com/JetBrains/Exposed/pull/1716](https://github.com/JetBrains/Exposed/pull/1716)
- [@&#8203;keta1](https://github.com/keta1) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1709](https://github.com/JetBrains/Exposed/pull/1709)
- [@&#8203;bog-walk](https://github.com/bog-walk) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1728](https://github.com/JetBrains/Exposed/pull/1728)
- [@&#8203;eukleshnin](https://github.com/eukleshnin) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1675](https://github.com/JetBrains/Exposed/pull/1675)
- [@&#8203;timmc](https://github.com/timmc) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1723](https://github.com/JetBrains/Exposed/pull/1723)
- [@&#8203;johnzeringue](https://github.com/johnzeringue) made their
first contribution in
[https://github.com/JetBrains/Exposed/pull/1641](https://github.com/JetBrains/Exposed/pull/1641)
- [@&#8203;mgrati](https://github.com/mgrati) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1742](https://github.com/JetBrains/Exposed/pull/1742)
- [@&#8203;zhurs](https://github.com/zhurs) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1779](https://github.com/JetBrains/Exposed/pull/1779)
- [@&#8203;Legohuman](https://github.com/Legohuman) made their first
contribution in
[https://github.com/JetBrains/Exposed/pull/1651](https://github.com/JetBrains/Exposed/pull/1651)
- [@&#8203;FullOfOrange](https://github.com/FullOfOrange) made their
first contribution in
[https://github.com/JetBrains/Exposed/pull/1781](https://github.com/JetBrains/Exposed/pull/1781)
- [@&#8203;jasonjmcghee](https://github.com/jasonjmcghee) made their
first contribution in
[https://github.com/JetBrains/Exposed/pull/1798](https://github.com/JetBrains/Exposed/pull/1798)
- [@&#8203;oharaandrew314](https://github.com/oharaandrew314) made
their first contribution in
[https://github.com/JetBrains/Exposed/pull/1687](https://github.com/JetBrains/Exposed/pull/1687)

**Full Changelog**:
JetBrains/Exposed@0.41.1...0.42.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/DonRobo/home-former).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants