Change Log

Next Version (unreleased)

  • Nothing yet

Version 2.3.232 (2024-08-11)

  • Issue #4005: Add optional version to RANDOM_UUID function and generator of version 7 in addition to existing version 4
  • Issue #3945: Column not found in correlated subquery, when referencing outer column from LEFT JOIN .. ON clause
  • Issue #4097: StackOverflowException when using multiple SELECT statements in one query (2.3.230)
  • Issue #3982: Potential issue when using ROUND
  • Issue #3894: Race condition causing stale data in query last result cache
  • Issue #4075: infinite loop in compact
  • Issue #4091: Wrong case with linked table to postgresql
  • Issue #4088: BadGrammarException when the same alias is used within two different CTEs
  • Issue #4079: [2.3.230] Regression in ORDER BY ... DESC on dates

Version 2.3.230 (2024-07-15)

  • Issue #4091: Wrong case with linked table to postgresql
  • Issue #2752: Fix for "double mark" error at database backup opening
  • Issue #4052: Allow 0 as a valid chunk id
  • Issue #4012: Fix "Chunk not found" database corruption by ensure proper prologue/epilogue for every SQL statement in JDBC ";" - separated list
  • Issue #3960: Fix NPE in page rewrite
  • Issue #3909: Reduce resource consumption of too aggressive disk space housekeeping
  • Issue #701: An available index is never used for ordering, when the requested order is DESC
  • Issue #4036: NULLS NOT DISTINCT constraint changed after column dropped
  • Issue #4033: Wrong array produced when using ARRAY_AGG() on UNNEST(ARRAY[CAST(? AS INT)]) expression in a PreparedStatement
  • Issue #3909: Maintenance taking too much resources since 2.2.222
  • Issue #4010: org.h2.jdbc.JdbcConnection.getTypeMap() returns null
  • PR #4007: Update pom.xml related to CVE-2024-1597
  • Issue #3907: MvStoreTool unable to Repair() or Rollback() [2.1.214]
  • RP #3997: Server-side batch execution for prepared statements
  • Issue #3106: Trailing commas in SELECT are accepted by the parser
  • PR #3992: Add IPv6 support to H2 Console
  • Issue #3966: Unable to insert null into a JSON column
  • Issue #3554: Regression in 2.1.214 when joining 2 recursive CTE containing bind values
  • PR #3989: Refactor CTE-related code and reduce recompilations
  • Issue #3987: Allow empty <with column list>
  • Issue #822: WITH clauses' column aliases are not maintained correctly when selecting from CTE from within a derived table
  • Issue #910: Common Table Expressions (CTE) inside WITH should have their own identifier scope
  • Issue #3981: Unexpected result when using trigonometric functions
  • Issue #3983: INVISIBLE columns should be ignored in INSERT statement without explicit column list
  • Issue #3960: NullPointerException when executing batch insert
  • Issue #3972: Constraints of local temporary tables aren't listed in INFORMATION_SCHEMA
  • PR #3973: Fix Tool.showUsage() for GUIConsole
  • Issue #3968: Add possibility to get index size on disk
  • Issue #3909: Maintenance taking too much resources since 2.2.222
  • Issue #3950: JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation
  • PR #3947: Compound index search fix
  • Issue #3940: Wrong estimation of a query execution cost with spatial index
  • Issue #3931: MVStoreTool -dump throws a NullPointerException or returns binary data
  • Issue #3910: Small error in the tutorial regarding full text search
  • PR #3915: Improving search by compound indexes
  • RP #3893: Fixed unit test is support en_GB locale
  • Issue #2834: MERGE INTO fails with an error "Timeout trying to lock table"
  • Issue #3883: Performance regression in 2.2.222
  • PR #3879: Require Java 11

Version 2.2.224 (2023-09-17)

  • Issue #3883 Performance regression in 2.2.222

Version 2.2.222 (2023-08-22)

  • Fixed race condition in MVStore causing database corruption "File corrupted in chunk ###"
  • PR #3873: ToC cache is effectively not used after the first shutdown
  • Issue #3868: INFORMATION_SCHEMA.SESSIONS.ISOLATION_LEVEL returns isolation level of the current session in all rows
  • PR #3865: Add possibility to enable virtual worker threads in TCP, Web, and PG servers on Java 21+
  • PR #3864: Improve performance of TCP client driver when it is used from virtual threads
  • Issue #2665: Parser shouldn't suggest compatibility syntax elements on parsing error
  • Issue #3089: GREATEST and LEAST aren't fully compliant with the SQL Standard
  • PR #3861: Improve SET EXCLUSIVE 2 and use stable time source for timeout exceptions
  • PR #3859: Fix conversion of PK columns to identity columns
  • Issue #3855: StackOverflowError when using TRACE_LEVEL_SYSTEM_OUT=4
  • PR #3854: Fix issues with newer JVMs
  • PR #3851: Remove lift configuration
  • PR #3847: Fix the NullPointerException caused by accessing 'user' after the session has been closed
  • PR #3846: Make DB_CLOSE_ON_EXIT safer
  • PR #3842: Adds support of quotedNulls in CSV handling

Version 2.2.220 (2023-07-04)

  • PR #3834: Increase database format version
  • PR #3833: Disallow plain webAdminPassword values to force usage of hashes
  • PR #3831: Add Oracle-style NOWAIT, WAIT n, and SKIP LOCKED to FOR UPDATE clause
  • PR #3830: Fix time zone of time/timestamp with time zone AT LOCAL
  • PR #3822 / Issue #2671: Add quantified comparison predicates with array
  • PR #3820: Add partial implementation of JSON simplified accessor
  • PR #3818: Add support of underscores in numeric literals
  • PR #3817: Add ANY_VALUE() aggregate function
  • PR #3814: Fix regression in comparisons with infinities and NaNs
  • Issue #3040: System objectIds are recycled twice when CTE queries are executed.
  • PR #3812: UNIQUE null treatment
  • PR #3811: BTRIM function, octal and binary literals and other changes
  • Issue #352: In comparison text values are converted to INT even when they should be converted to BIGINT
  • PR #3797: MSSQL mode: Discard table hints on plain UPDATE statements
  • PR #3791: Formatted cast of datetimes to/from character strings
  • Issue #3785: CSVRead: Fails to translate empty Numbers, when cells are quoted
  • Issue #3762: Comparison predicates with row values don't create index conditions
  • PR #3761: LAST_DAY function and other changes
  • Issue #3705: Oracle DATE type: milliseconds (second fractions) rounded in H2 but truncated in Oracle (fixed in SYSDATE only)
  • Issue #3642: AssertionError in mvstore.FileStore.serializeAndStore
  • Issue #3675: H2 2.x cannot read PostgreSQL-style sequence generator start with option without WITH keyword
  • Issue #3757: FORMATDATETIME function doesn't handle time with time zone properly
  • PR #3756: Limit the row list allocation based on the row count
  • PR #3753: Add missing NEWSEQUENTIALID function in MSSQLServer mode
  • Issue #3730: FILE_READ from JAR filesystem on classpath results in file of length 0
  • PR #3749: Fix min/max description for sequences
  • PR #3739: Fix count(*) for linked table to Oracle
  • Issue #3731: Division result exceeds numeric precision constraint
  • PR #3718: Add test coverage for JDK 17
  • Issue #3580: TestCrashAPI: NPE in ParserUtil.getTokenType() (called by Parser.readIfDataType1())
  • PR #3709: Update copyright years and fix building of documentation
  • Issue #3701: CLOBs can cause ClassCastExceptions
  • Issue #3698: MySQL mode show columns from table, if modificationMetaId changed between prepared and execute. Then error occurred.
  • PR #3699: Upgrade to the latest OSGi JDBC specification
  • Issue #3659: User-defined variable "sticky" if used in view with join
  • Issue #3693: Wrong result when intersecting unnested arrays
  • PR #3691: GitHub Workflows security hardening
  • PR #3688: Construct FormatTokenEnum.TOKENS during class initialization
  • Issue #3682: MVStoreException at accountForRemovedPage
  • Issue #3664: [2.1.214] NullPointerException in org.h2.command.query.Select.queryDistinct
  • PR #3650: fix version number in the archives html table
  • PR #3649: Basic implementation of materialized view
  • Issue #3646: org.h2.mvstore.MVStoreException: Chunk metadata too long
  • Issue #3645: The BITCOUNT function incorrectly counts BINARY/VARBINARY values of >=16 bytes.
  • Issue #3637: DB content massacred when opening a 2.1.214 DB with current master
  • Issue #3636: "This store is closed" after two-phase commit
  • PR #3639: Add random_uuid() alias to be compatible with postgres
  • Issue #3640: SOUNDEX function should not be case-sensitive
  • Issue #3633: Memory leak in case of in-memory database
  • PR #3629 Better separation between MVStore and FileStore
  • PR #3626: Improve memory estimation of CacheLongKeyLIRS and correct some passed memory sizes
  • Issue #3619: PostgreSQL mode: STRING_AGG with prepared statement parameter not working
  • Issue #3615: H2 Console connecting to Oracle DB will not show the list of tables
  • PR #3613: Fix infinite loop in Tokenizer when special whitespace character is used
  • Issue #3606: Support for GraalVMs native-image
  • Issue #3607: [MySQL] UNIX_TIMESTAMP should return NULL
  • Issue #3604: Improper FROM_1X implementation corrupts some BLOBs during migration
  • Issue #3597: Support array element assignments in UPDATE statements
  • Issue #3599: [2.1.214][MariaDB] DELETE query failure
  • Issue #3600: NPE in MVTable.lock(), version 2.1.214
  • Issue #3601: InvalidPathException when saving lock file
  • Issue #3583: lob cleaner issue
  • Issue #3585: Misuse ValueReal.DECIMAL_PRECISION when optimize typeinfo from DOUBLE to DECFLOAT
  • Issue #3575: Possible syntax mismatch for json_object in MySQL compatibility mode
  • PR #3577: Add support of TINYINT and DECFLOAT to TO_CHAR
  • Issue #3567: No AUTO_INCREMENT in DatabaseMetaData.getTypeInfo()
  • PR #3555: Add missing check for -webExternalNames flag
  • Issue #3543: PostgreSQL mode, update with "from", why "NULL not allowed" error?
  • PR #3542: Fix failed to delete a readonly file on Windows file systems

Version 2.1.214 (2022-06-13)

  • Issue #3538: In Postgres compatibility mode the NUMERIC type w/o scale should not default to 0
  • Issue #3534: Subquery has incorrect empty parameters since 2.1.210 that breaks sameResultAsLast()
  • Issue #3390: "ROW" cannot be set as a non keyword in 2.x
  • Issue #3448: With linked table to postgreSQL, case-sensitive column names not respected in where part
  • Issue #3434: JavaTableFunction is not closing underlying ResultSet when reading column list
  • Issue #3468: Invalid DB format exception (for 1.x DB in 2.x h2) should have a specific SQLException vendorCode
  • Issue #3528: Weird syntax error with HAVING clause in Oracle Mode
  • Issue #3307: Fix SHUTDOWN DEFRAG for encrypted databases
  • Issue #3515: Support for NEXTVAL property in DB2 mode
  • Issue #3444: Conversion 'text' to 'integer' doesn't work anymore
  • Issue #3493: org.h2.tools.DeleteDbFiles won't delete files under certain circumstances
  • Issue #3486: FilePathDisk.newDirectoryStream() may fail on remote drive on Windows due to AccessDeniedException in Path.toRealPath()
  • Issue #3484: LOB issue

Version 2.1.212 (2022-04-09)

  • Issue #3512: BITNOT(BIT_NAND_AGG(...) OVER ()) produces wrong result
  • Issue #3510: PreparedStatement execution with java.io.tmpdir pointing to a directory symlink results in FileAlreadyExistsException
  • PR #3504: Fix TypeInfo.getHigherGeometry() for types with and without SRID
  • PR #3481: Add support for standard interval literals with precision
  • Issue #3471: Possibility of corruption after SHUTDOWN DEFRAG
  • Issue #3473: DROP TABLE/INDEX causes memory leak
  • PR #3464 / Issue #3457: increase max length of VAR* types
  • PR #3460: fix bug in readStoreHeader()
  • PR #3458: Add performance tests for SQLite
  • Issue #1808: Occasional NPE in concurrent update of LOB
  • Issue #3439: Cannot use enum values in JSON without explicit casts
  • Issue #3426: Regression: BIT(1) is not accepted in MySQL compatibility mode
  • PR #3422: Allow combination of any geometry types with the same SRID
  • Issue #3414: H2 2.1.210: Query with Parameters throws NPE
  • Issue #3413: Parser can't parse REFERENCES … NOT NULL
  • Issue #3410: OOME with nested derived tables
  • Issue #3405: Enhance SCRIPT to support operations on STDOUT
  • Issue #3406 / PR #3407: FunctionMultiReturn.polar2CartesianArray result set iteration throws ClassCastException
  • Issue #3400: Regression: ORDER BY ROWNUM fails with General error: "Unexpected code path"
  • Issue #3387: SYSDATE behavior changed in 2.x
  • Issue #3394: SYSDATE Considered Identifier when used in inner select
  • Issue #3391: Hang on merge statement with data change delta table
  • PR #3384: Remove abandoned Java to C converter and fix some warnings from Sonatype Lift
  • PR #3382: Use secure parser in H2AuthConfigXml to avoid future reports

Version 2.1.210 (2022-01-17)

  • PR #3381: Add IDENTITY() and SCOPE_IDENTITY() to LEGACY mode
  • Issue #3376: Data cannot be read after insert of clob data > MAX_LENGTH_INPLACE_LOB with data change delta table
  • PR #3377: Add -webExternalNames setting and fix WebServer.getConnection()
  • PR #3367: Use faster checks of dimension systems of geometries
  • PR #3369: Added v2 changes in migration docs
  • Issue #3361: MemoryEstimator.estimateMemory() can return negative size
  • PR #3362: Use BufferedReader instead of BufferedInputStream to avoid Illegal seek exception
  • Issue #3353: Wrong rownum() scope for DML with change delta table
  • PR #3352: make Javadoc happier
  • Issue #3344: Changelog could link to github issue
  • Issue #3340: JDBC index type seems wrong
  • Issue #3336: FT_INIT error when mode=MySQL
  • Issue #3334: Regression with CREATE ALIAS - Parameter "#2" is not set
  • Issue #3321: Insert Primary Key after import CSV Data does not work
  • PR #3323: Tokenize SQL before parsing and preserve tokens for recompilation
  • PR #3320: Add Servlet 5-compatible servlet for H2 Console
  • Issue #918: Parser fails recognising set operations in correlated subqueries
  • Issue #2050: PostgreSQL with recursive fail with union in the final query
  • PR #3316: Update copyright years
  • PR #3315: Never put read locks into lockSharedSessions and other minor changes
  • Issue #492: H2 does not correctly parse <parenthesized joined table>
  • Issue #3311: Parser creates wrong join graph in some cases and uses wrong tables for column mapping
  • FORCE_JOIN_ORDER setting is removed
  • Issue #1983: Official build script is not compatible with Java 13
  • PR #3305: Add UNIQUE(VALUE) and remove some non-standard keywords
  • PR #3299: Remove useless StringBuilder.toString() call
  • PR #3298: Delete unused sqlTypes array

Version 2.0.206 (2022-01-04)

  • Issue #3322: Create linked table fails when the table contains a Geometry with a data type specified
  • Issue #3297: Unexpected GROUP BY results with indexed IGNORECASE column