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: EXPOSED-368 Ordering on References #2083

Merged
merged 4 commits into from
Jun 3, 2024

Conversation

obabichevjb
Copy link
Collaborator

PR add the possibility to add sorting for one-to-many references. Usage looks like:

class User(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<User>(Users)
    ...
    val ratings by UserRating referrersOn UserRatings.user orderBy UserRatings.value
    ...
}

Open questions that I haven't yet resolved:

  1. It's not possible to create several references with different orders. For example, something like this would not work:
class User(id: EntityID<Int>) : IntEntity(id) {
   companion object : IntEntityClass<User>(Users)
   ...
   val ratingsByValue by UserRating referrersOn UserRatings.user orderBy UserRatings.value
   val ratingsById by UserRating referrersOn UserRatings.user orderBy UserRatings.id
   ...
}

The reason is the caching of referencing rules inside EntityClass::refDefinitions. Every time we try to add a reference to the same column, the cached one is returned.
Solution options:

  • let it be as it is. We may assume that user should not create references with different orders. But at the current moment there is no error handling, and if a user actually tries to add several references in different order, they will get unexpected behaviour (actually, the first created reference would be used every time)
  • extend cache with order and save inside cache not only per column, but also per sorting configuration. For me, it looks like a better solution if we need that caching.
  • do we need that caching? I mean, what is the purpose of this caching? Can a user now intentionally create two references to another entity and expect that it would be the same reference?
  1. There are 2 classes Referrers and OptionalReferrers, but to me one of them (for instance OptionalReference) looks redundant. They do the same thing and have only a small difference in field reference (in one case it has type Column<REF> in another Column<REF?>, but since REF is generic, it can be specified one level above. It will look like:
// Before
infix fun <TargetID : Comparable<TargetID>, Target : Entity<TargetID>, REF : Comparable<REF>> EntityClass<TargetID, Target>.optionalReferrersOn(
    column: Column<REF?>
) =
    registerRefRule(column) { OptionalReferrers<ID, Entity<ID>, TargetID, Target, REF>(column, this, true) }

// After
infix fun <TargetID : Comparable<TargetID>, Target : Entity<TargetID>, REF : Comparable<REF>> EntityClass<TargetID, Target>.optionalReferrersOn(
column: Column<REF?>
) =
registerRefRule(column) { Referrers<ID, Entity<ID>, TargetID, Target, REF?>(column, this, true) }

After that OptionalReferrers can be removed. The only reason to keep it I see is the semantic (previous variant is better readable from user perspective).

For now I created BaseReferrers to place common logic inside one class, but I can join all of these 3 classes (Referrers, OptionalReferrers, BaseReferrers) into one Referrers.

@obabichevjb obabichevjb requested review from e5l and bog-walk May 14, 2024 13:59
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.

via() (the InnerTableLink reference) also returns a SizedIterable that should be possible to order in the same way. Could this be added at the same time?

Comment on lines 118 to 119

abstract class BaseReferrers<ParentID : Comparable<ParentID>, in Parent : Entity<ParentID>, ChildID : Comparable<ChildID>, out Child : Entity<ChildID>, REF>(
Copy link
Member

Choose a reason for hiding this comment

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

Will this switch cause any issue for the other reference classes that delegate to OptionalReferrers?

Also, is the plan to deprecate OptionalReferrers and then drop this new class after in favor of Referrers alone? If so, would it be better to just have duplicate code in the 2 existing classes, that way we'd only have to deprecate one class. Without having to introduce a new temporary class into the API.
Unless the plan is to push that second PR before this one is released, so BaseReferrers doesn't actually enter the API.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

It was actually open question what is better to do, and the variant to mark OptionalReferrers as deprecated looks good to me.

In order to avoid one more class in API it's not a problem to inherit OptionalReferrers from Referrers (but the last one should be open). Pushed such a variant, but we can discuss it again.

@joc-a joc-a changed the title EXPOSED-368 Ordering on References feat: EXPOSED-368 Ordering on References May 22, 2024
…t for changed orderBy, add orderBy to InnerTableLink (`via()`)
@obabichevjb
Copy link
Collaborator Author

via() (the InnerTableLink reference) also returns a SizedIterable that should be possible to order in the same way. Could this be added at the same time?

Added ordering to InnerTableLink also. I tried to unify it somehow to make less duplication, but can not say I found a good variant without inheritance. I like the variant via delegation but in this case it's not easy to return this from the orderBy methods, so if you have any thoughts about how to unify the same part with orderBy methods I'd be glad to know about it.

@obabichevjb obabichevjb requested a review from bog-walk May 22, 2024 14:07
@e5l e5l requested a review from joc-a May 28, 2024 07:30
@obabichevjb obabichevjb requested a review from e5l May 28, 2024 08:58
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.

Looks good, just a typo in one of the KDocs.

@obabichevjb obabichevjb merged commit 313b9a9 into main Jun 3, 2024
5 checks passed
@obabichevjb obabichevjb deleted the obabichev/exposed-368-ordering-on-reference branch June 3, 2024 09:02
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.

Ordering on References Is it possible to create ordered relationships with the DAO?
3 participants