* The native fulltext search now supports streaming CLOB data. * If the database URL ends with ;PAGE_STORE=TRUE and a database in the old format exists, it is automatically converted to the new page store format if possible. A backup of the database is created first. Automatic conversion is not supported if the database was not closed normally (if it contains uncommitted transactions). * Dropping the current user is now allowed if another admin user exists. * Values of type BINARY or BLOB could not be converted to the data type OTHER. * SHUTDOWN COMPACT now fully compacts the database. * New system properties h2.maxCompactCount and h2.maxCompactTime to allow changing the default behavior (at most 2 seconds compacting when closing the database). * New sorted insert optimization (see Performance / Database Performance Tuning). * Issue 116: The files h2*-sources.jar and h2*-javadoc.jar are now in the Maven repository. * Page store: opening a large database was slow if it was not closed before. * Page store: new write and read counters in the meta data table. Use SELECT * FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME IN( 'info.FILE_WRITE_TOTAL', 'info.FILE_WRITE', 'info.FILE_READ', 'info.CACHE_MAX_SIZE', 'info.CACHE_SIZE') * The SQL syntax is documented using (railroad) diagrams. The diagrams are HTML. * The documentation is no longer available in Japanese because the translation was too much out of sync. Please use the Google translation instead. * Certain queries were not sorted if subselect queries were involved * More bugs in the server-less multi-connection mode have been fixed: 90097 The database is read only, caches must be cleared on reconnect, etc.
* Page store: new databases can not be opened with older versions. * Page store: updating large rows (rows with more than 2000 bytes of data) could corrupt the database. * Page store: inserting very large rows failed with ArrayIndexOutOfBoundsException. * When using multi-threaded kernel mode, setting disabling locking (LOCK_MODE=0) will now throw an exception. At this time this combination will result in corruption when multiple threads try to update the same table. * The fulltext search methods and fields are now protected instead of private, to make the classes more easily extensible. * The Lucene fulltext search now also returns the score. * New function SCOPE_IDENTITY() to avoid problems when inserting rows in a trigger. * Statement.getGeneratedKeys() returned the wrong value if a trigger changed the identity value after inserting the row. * Improved error messages: identifiers and values are now quoted. * Improved error message when casting a value failed: the column name and type is included in the message. * Improved support for GAE for Java thanks to Vince Bonfanti.
* Clustering: there is now a way to detect which cluster instances are running. * ConvertTraceFile: the SQL statement statistics are better formatted (newline are removed). * The file lock thread is now stopped when the database is closed. * Issue 140: the Script tool now supports writing to a stream. * Issue 138: the trace output of Statement.execute(String, int) and executeUpdate was incorrect. * Page store: new databases can not be opened with older versions. * Page store: multi-column indexes didn't work if the cache was very small. * Page store: opening a database could theoretically result in an endless loop. * Page store: adding large indexed columns could get very slow. * Page store: after a duplicate key exception, an ArrayIndexOutOfBoundsException could be thrown (only for very large rows). * Page store: the recover tool sometimes generated a script file that contained duplicate data. * Page store: sometimes opening a read-only database failed. * Page store: opening a database sometimes failed if large rows where updated, or if a table was truncated before. * Page store: when using a very small page size (128 bytes or smaller), writing a large row could result in an endless recursion. This is only a theoretical problem, as the page size is 2 KB. * Page store: getting the min value from a descending index with NULL entries could return the wrong result. * Page store: improved auto-recovery after power failure. * The JDBC client did not detect that it was not talking to an H2 server. This could result in strange exceptions when trying to connect to another kind of server. * User defined functions can be created with source code. Example: CREATE ALIAS HI AS 'String hi() { return "Hello"; }' * Database file lock: the exception "lock file modified in the future" is longer thrown; instead, opening the file will be delayed by 2 seconds. * Inserting LOBs got slower each time the process was restarted. It could loop endlessly after about 1000 process restarts. * Issue 117: Multi-version concurrency: concurrent MERGE statements now work. * Improved read-only database detection.
* Lucene fulltext search: the Lucene field names now match the table column names, except if the column names start with _ (in which case another _ is prepended). Unfortunately this change means existing fulltext indexes need to be re-built. * The shell tool now has a very simple statement history. * The zip file system implementation now supports the '~' home directory prefix. Example database URL: jdbc:h2:zip:~/test.zip!/test * Right outer joins on tables that were already 'inner joined' was processed incorrectly. * Temporary files from LOB objects were not deleted early enough when using the server mode. * Trying to alter a temporary table threw a strange exception. It is still not possible to do that, but the exception message is better now. * When the system property h2.maxMemoryRowsDistinct was set, and using SELECT DISTINCT, the temporary table was not correctly dropped. This could cause problems in recovery when the process was killed. * Trigger that are called before a select statement are now supported. This allows to create tables that work like materialized views. * Non-row based triggers were called even if the action didn't match the declared action (INSERT triggers were also called when deleting rows). This has been changed. The MERGE statement calls both INSERT and DELETE triggers. * Statements with IN(..) conditions could produce the wrong result or a data conversion error (since version 1.2.120). Examples: index on id, name, condition: id=1 and name in('Hello', 'x'); index on id, query: select * from (select * from test) where id=1 and name in('Hello', 'World'). * The CompressTool was not multithreading safe. Because of this, the following database operations where also not multithreading safe (even when using different databases): the SCRIPT command (only when using compression), the COMPRESS function, and storing CLOB or BLOB data (only when compression is enabled). * The compression algorithm "LZF" is now about 33% faster than before when compressing small block (around 2 KB). It is much faster than Deflate, but the compression ratio is lower. Some of the optimizations are from Sam Van Oort, thanks a lot! * Compressing large blocks of data didn't work when using the "Deflate" compression algorithm. Compressing a lot of data could run out of heap memory. * The test cases don't access the file system directly, this simplifies GAE for Java testing. Thanks to Vince Bonfanti. * More bugs in the server-less multi-connection mode have been fixed. * When running against an old database, the SCRIPT statement could generate a SQL script that contained duplicate indexes (PRIMARY_KEY_E). * JdbcConnectionPool.getConnection() could throw a NullPointerException. * User defined functions: the source code is now available using SELECT SOURCE FROM INFORMATION_SCHEMA.FUNCTION_ALIASES. * User defined functions with source code didn't work after re-opening the database. * The newsfeeds are now Atom 1.0 standard compliant. * The database is now closed after an out of memory exception, because the database could get corrupt otherwise. * Better error message if both AUTO_SERVER and SERIALIZED parameters are set to TRUE. * Drop table did not delete lob files in old file store (not PAGE_STORE).
・Older versions of H2 (version 1.2.127 and older) could not connect to a new version (version 1.2.129 and newer). The connection blocked when trying to connect. Now the connection no longer blocks, instead a SQL exception is thrown.
・In versions 1.2.129 and 1.2.130, a database could not be opened sometimes after dropping tables or indexes, and then creating new indexes for existing tables. The exception contained the text "parent not found" (version 1.2.129) or "Table not found" (version 1.2.130).
・The implementation of a Java to C (source code level) converter has been started. The plan is: it should be possible to convert H2 (or a part of it) to C so that the database can be run without a JVM. This will be a long term project (it may take a year or so).
String port = "9999"; Server server = Server.createTcpServer("-tcpPort", port); server.start(); Server.shutdownTcpServer("tcp://localhost:" + port, password, false);
Version 1.4.194 (2017-03-10) Version 1.4.193 (2016-10-31) Version 1.4.192 Beta (2016-05-26) Version 1.4.191 Beta (2016-01-21) Version 1.4.190 Beta (2015-10-11)