Features:
suspendedTransactionfunction introduced to work withinsuspendfunctions. See wiki section for more details.- Custom functions support (#581). See wiki section for more details.
Bug Fixes:
- Duplicated columns in the parameter list of slice() caused unexpected value in ResultRow (#581)
Bug Fixes:
Features:
- Now it's possible to create Entities from aliased tables/queries. Corresponded
wrapRow/wrapRowsfunctions were added toEntityClass(#404) - Support for
regexpfunction (both case-sensitive/insensitive) was provided on every database which provided it concatfunction was introduced (#509)
Performance optimizations:
- Unnecessary string escaping in
registerArgumentswas removed when used prepared statements
Infrastructure:
- Mysql 8.0 tests added
- Oracle tests were reanimated
Deprecations:
InsertStatement.generatedKeyfield removed
Features:
likeoperator forColumn<EntityID<String>>(#117)
Bug Fixes:
- SQLServer dialect fails on loading
extraNameCharactersfrom DatabaseMetadata insertIgnorewith get id on result fails for MySQL (#574)- Oracle dialect improvements
Infrastructure:
- Run MySQL tests on MySQL 5.7+ with jdbc driver
8.0.16(#171) - Oracle tests reanimated on Oracle 18 XE
Bug Fixes:
- Fixed support for H2 1.4.198+ (CVE-2018-10054) (#530, #558)
- LazySizedCollection.limit() produce StackOverflowError exception (#569)
- Explicitly specify constraint name in create table statement (PR #570 from vetrovosk)
Kotlin updated to 1.3.31
Deprecation:
loggerfield removed from Transaction (#447)- Deprecated functions removed: wrapRow, createIndex, groupConcat (with boolean order param), join
- enumeration/enumerationByName with Class<*> param removed
Features:
Bug fixes:
- Only warn of schema/db mismatch if its the case. It isn't on left join. (PR #541 from spand)
- Warn full column name in "Column ... is marked as not null" message
- Escape collate in Text and Varchar columns (PR #554 from doyaaaaaken)
- Aliased tables had use their original names in ON part
Feature:
- Attempt to fetch not only autoincrement values but all returned from insert/batchInsert
- New method (
TransactionManger.closeAndUnregister) to close and unregister a database connection (PR #529 from Max Rumpf)
Bug fixes:
- [MySQL] Constraints fails when table names are in lower case (PR #539 from valepakh)
- [H2, SQLite] SchemaUtils.createMissingTablesAndColumns doesn't correctly check constraints (#535)
Bug fixes:
- Initialize client defaults only for target entity table columns (was broken in #0.13.4 with #526
Infrastructure:
- Finished moving to Gradle Kotlin DSL. Many thanks to Thanks for PR goes to Vladislav Tankov (@tanvd).
Deprecation:
InsertStatement.generatedKeyis forbidden to use now in favour toresultValuesandinsertAndGetId
Features:
- InsertStatement.get function was split into get and getOrNull to simplify get use. Thanks for PR goes to Johannes Jensen (@spand)
Bug fixes:
- clientDefault is called multiple times gives incorrect value (#526)
- Fix composite PK bugs (Thanks Aidar Samerkhanov (@Darych) for PR): incorrect evaluation of last column index in PK and missed column description DDL in ALTER TABLE for non H2 databases.
- forUpdate value was ignored in warmUp* functions when was applied to mapLazy/cached references
- Join on two tables with more than one foreign key constraint fails even with additionalConstraint (#522)
Bug fixes:
- Unable to create index on column that also has a foreign key with
createMissingTablesAndColumns, fix for MySQL (#498) - Use memberProperties instead of declaredMemberProperties in with/preloadRelations.
Bug fixes:
- Wrong values returned from warmUp* functions which leads to N + 1
Features:
Bug fixes:
- Unable to create index on column that also has a foreign key with
createMissingTablesAndColumns(#498) - Using createMissingTablesAndColumns() generates a spurious WARN message in log files (#480)
- Unexpected value of type Int: 26 of org.jetbrains.exposed.dao.EntityID (#501)
- More proper handling of forUpdate/notForUpdate/orderBy on LazySizedCollection
- Problems on comparing binary types (bit from MySQL) (#491)
Kotlin updated to 1.3.21
Features:
- DAO: It's possible to call
orderByonSizedIterableto sort entities (#476) - DSL/DAO: Self join many-to-many relationships (#106). See wiki page for example.
- DSL: Allow to apply groupConcat on expressions (#486). Thanks for PR goes to Edvinas Danevičius (@Edvinas01).
- Log every SQLException thrown inside inTopLevelTransaction with warn instead of info level
- SQLServer dialect will now use
uniqueidentifierfor UUID columns - Compound operations introduced:
compoundAnd/compoundOr(#469) Op.TRUE/Op.FALSEexpressions added- OR operator was optimized to use less braces
- Oracle: Speedup extracting tableColumns metadata
Bug fixes:
- Impossible to set default value with nullable column (#474)
- UUID value not read correctly (#473)
No key generatedexception thrown when trying to insert row to IdTable usinginsertAndGetIdwith explicit id and then make search by returned id (#432)
Deprecations:
- orderBy with boolean sort parameters was deprecated
Features:
- MariaDB support
- Suspending
transactionfunctions (#418) - DAO: It's possible to specify forUpdate state in warmup* functions
Bug fixes:
- Fixed condition when IllegalStateException should be thrown on LazySizedCollection forUpdate/notForUpdate
inTopLevelTransactionacceptsDatabaseinstead ofTransactionManager(#448)- LIMIT is not supported in DELETE SQLite message (#455)
- Limit propagate is same entity (#439)
- forIds/forEntityIds wont return partially cached values
- Accessing enum field in
Entitycreated usingEntityClass.newcausesClassCastException(#464) NoClassDefFoundErrorwhen creating table on Android (#461)exec(String)throwsSQLException: ResultSet already requested(#414)- SQLite autoincrement table is not created correctly (#328)
Deprecations:
- Deprecate InsertStatement.generatedKey (#424)
- Using of
Transactions.loggeris prohibited SchemaUtils.createIndexwith columns and isUnique parameters is prohibitedgroupConcatwith boolean sortOrder is replaced with similarSortOrderversionjoinis replaced withinnerJoin- enumeration/enumerationByName with java
Classreplaced with kotlinKClass
- Kotlin #1.3.0
- Fixed bug that call for createMissingTablesAndColumns could lead to exception while trying to add an index which already exists in db (MySQL only problem)
Features:
- Support entity references by non-ID column (#282)
- groupConcat function reworked and supported on all databases (except SQLite)
- Now it's possible to create cyclic depended tables in single SchemaUtils.createTable() call. Relates to Defer Foreign references during creation (#384)
- Introduced SchemaUtils.checkCycle() function to check tables for cyclic references
- MOD (%) operator support (#391)
- Set RepetitionAttempts in TransactionManager (to set globally) (#393)
- Fail with KNPE on not null columns with null
- Throw exception when trying to change onUpdate state for loaded LazySizedCollection
- Database.dialect field is now public
Bug fixes:
- BatchUpdateStatement results in IllegalStateException: Table.columnName is already initialized (#386)
- BatchUpdateStatement expects set(..) calls in alphabetical order and fails when given more than 2 batches (#388)
- autoIncrement carries to referencing column (#385)
- Query fails when same column/expression provided in slice multiple times
- columnConstraints() returns wrong map with keys in wrong order (target instead of referee)
- Try to expand Query in ExposedSQLException even if it wasn't able to use current transaction.
- Autoinc column does not necessarily need to be the first column in the table (#398)
- "No transaction in context" when using SpringTransactionManager (#365, #407)
- uuid values are not properly escaped in subquery (#415)
- Foreign Key Constraints being recreated (#394)
Features:
- Added
DOUBLEcolumn type (#358). Thanks go to Jonathan Shore (@tr8dr). Entity.refresh()introduced to update its state from database (see kdoc)- All statements classes become open to allowing inheritance (#350)
wherepart made optional inUPDATEstatement (#115)andWherefunction introduced to help in constructing complex queries (#375). See "Conditional where" section on Wiki.
Bug fixes:
- Varchar column doesn't validate length / Validate length only before execute update (#300)
- sqlState doesn't available on
ExposedSQLException(#331) - [SQLite]
ClassCastExceptionwhen reading from VARCHAR column (#369) - Use ::class instead of ::class.java for enumerations (#370)
Previous functions
enumeration/enumerationByNamewere deprecated with quick fix to new ones. Both functions will be removed on next releases. - Multiple join produce "DSL SYNTAX ERROR" (#366)
- Entities flush to a database after a
DROPtable (#112) - Entity id is not generated properly when using
clientDefaulton related column (#313) ClassCastExpectionwhen using alias on a expressions (#379)- [MySQL] Entity ids were not generated properly with
rewriteBatchedStatementsflag is on. - [Oracle]
LONGtype replaced withCLOBfor text columns (#382)
Features:
- ON UPDATE reference constraint added
- All dialects made public and open for extensibility
Transaction.addLogger()function introduced as replacement tologger.addLogger()approach- Strings will be validated against column max length before inserting to database (#300)
- Overriding the fetch size for a Query (#327)
Bug fixes:
- Extended sql exception logging available only in debug mode
- [PostgreSQL] Table with
customEnumerationcolumn doesn't work with Entity/DAO API (#340) - Table with composite key created only with specific prop order (#343)
- allTableNames in VendorDialect returns only from current database (#339)
- "ORA-00972: identifier is too long" on creating table with long name
Features:
- Floating point columns
- Check constraint functionallity (kudos to @SackCastellon)
- Possibility to provide custom names for contraints and indexes (thanks to @mduesterhoeft)
- Added support to delete with limit and offset (thanks @Mon_chi for initial PR)
- Full SQL will be now logged on any SQLException (#288 [Suggestion] Log the SQL query when an exception is thrown)
- Postgres support for ignore + replace
- H2 support for INSERT IGNORE for new H2 version
- Statement interceptors now allow triggering on before commit and rollback
- Database ENUM types supported (read more here)
Bug fixes: