roadmap.html 28.0 KB
Newer Older
1 2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
3 4 5
Copyright 2004-2008 H2 Group. Multiple-Licensed under the H2 License, Version 1.0,,
and under the Eclipse Public License, Version 1.0
(http://h2database.com/html/license.html).
6 7 8 9 10 11
Initial Developer: H2 Group
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Roadmap
</title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
12
<!-- [search] { -->
13 14 15
<script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv">
16
<!-- } -->
17 18

<h1>Roadmap</h1>
19
<p>
20 21
New (feature) requests will usually be added at the very end of the list. The priority is increased for important and popular requests.
Of course, patches are always welcome, but are not always applied as is. Patches should include test cases and documentation.
22
</p>
23 24 25

<h2>In Version 1.1</h2>
<ul>
26
<li>Add version number. Install directory: h2-1.1, jar file: h2-1.1.100.jar. Micro version: use build number, staring with 1.1.100
27 28 29 30 31 32 33 34 35
</li><li>Automatic upgrade if there is a file format change
</li><li>Change Constants.DEFAULT_MAX_MEMORY_UNDO to 10000 (and change the docs). Test.
</li><li>Enable and document optimizations, LOB files in directories
</li><li>Special methods for DataPage.writeByte / writeShort and so on
</li><li>Change the default for NULL || 'x' to NULL
</li></ul>

<h2>Priority 1</h2>
<ul>
36
<li>Bugfixes
37
</li><li>Row level locking
38
</li><li>Write more tests and documentation for MVCC (Multi Version Concurrency Control)
39 40 41 42 43 44 45 46 47 48 49
</li><li>RECOVER=1 should automatically recover, =2 should run the recovery tool if required
</li><li>More tests with MULTI_THREADED=1
</li><li>Test with Spatial DB in a box / JTS (http://docs.codehaus.org/display/GEOS/SpatialDBBox)
</li><li>Optimization: result set caching (like MySQL)
</li><li>Server side cursors
</li><li>Migrate database tool (also from other database engines)
</li><li>Shutdown compact
</li></ul>

<h2>Priority 2</h2>
<ul>
50 51 52
<li>Improve test code coverage
</li><li>More fuzz tests
</li><li>Test multi-threaded in-memory db access
53
</li><li>Procedural language / script language (Javascript)
Thomas Mueller's avatar
Thomas Mueller committed
54
</li><li>Option to shutdown all the running servers (on the same VM).
55
</li><li>Support OSGi: http://oscar-osgi.sourceforge.net, http://incubator.apache.org/felix/index.html
56 57
</li><li>Optimize ID=? OR ID=?: convert to IN(...)
</li><li>Optimize .. OR .. to UNION if the cost is lower
58
</li><li>Index organized tables CREATE TABLE...(...) ORGANIZATION INDEX (store in data file) (probably file format changes are required for rowId)
59
</li><li>H2 Console: new option 'Open a browser when starting the H2 Console'.
60
</li><li>Better space re-use in the files after deleting data: shrink the data file without closing the database (if the end of the file is empty)
61
</li><li>Support large updates (use the transaction log to undo).
62
</li><li>Auto-reconnect on lost connection to server (even if the server was re-started) except if autocommit was off and there was pending transaction.
Thomas Mueller's avatar
Thomas Mueller committed
63
</li><li>Full outer joins
64
</li><li>Support trigger on the tables information_schema.tables and ...columns
65
</li><li>Test very large databases and LOBs (up to 256 GB)
Thomas Mueller's avatar
Thomas Mueller committed
66
</li><li>Support hints for the optimizer (which index to use, enforce the join order).
67 68
</li><li>Change LOB mechanism (less files, keep index of lob files, point to files and row, delete unused files earlier, maybe bundle files into a tar file)
</li><li>Clustering: recovery needs to becomes fully automatic. Global write lock feature.
69
</li><li>Option for Java functions: constant/isDeterministic/readonly/pure (always return the same value) to allow early evaluation when all parameters are constant
Thomas Mueller's avatar
Thomas Mueller committed
70
</li><li>Support mixed clustering mode (one embedded, the other server mode)
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
</li><li>Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
</li><li>Groovy Stored Procedures (http://groovy.codehaus.org/Groovy+SQL)
</li><li>System table / function: cache usage
</li><li>Add a migration guide (list differences between databases)
</li><li>Optimization: automatic index creation suggestion using the trace file?
</li><li>Compression performance: don't allocate buffers, compress / expand in to out buffer
</li><li>Start / stop server with database URL
</li><li>Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE
</li><li>Rebuild index functionality (other than delete the index file)
</li><li>Don't use deleteOnExit (bug 4513817: File.deleteOnExit consumes memory)
</li><li>Console: add accesskey to most important commands (A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA)
</li><li>Feature: a setting to delete the the log or not (for backup)
</li><li>Test with Sun ASPE1_4; JEE Sun AS PE1.4
</li><li>Test performance again with SQL Server, Oracle, DB2
</li><li>Test with dbmonster (http://dbmonster.kernelpanic.pl/)
</li><li>Test with dbcopy (http://dbcopyplugin.sourceforge.net)
Thomas Mueller's avatar
Thomas Mueller committed
87
</li><li>Find a tool to view large text file >100 MB, with find, page up and down (like less), truncate before / after
88
</li><li>Implement, test, document XAConnection and so on
89
</li><li>Web site: get rid of frame set
90 91 92 93
</li><li>Pluggable data type (for compression, validation, conversion, encryption)
</li><li>CHECK: find out what makes CHECK=TRUE slow, move to CHECK2
</li><li>Improve recovery: improve code for log recovery problems (less try/catch)
</li><li>Index usage for (ID, NAME)=(1, 'Hi'); document
94
</li><li>Suggestion: include Jetty as Servlet Container (like LAMP)
95 96
</li><li>Trace shipping to server
</li><li>Performance / server mode: use UDP optionally?
97
</li><li>Version check: docs / web console (using Javascript), and maybe in the library (using TCP/IP)
98 99 100 101 102
</li><li>Web server classloader: override findResource / getResourceFrom
</li><li>Cost for embedded temporary view is calculated wrong, if result is constant
</li><li>Comparison: pluggable sort order: natural sort
</li><li>Count index range query (count(*) where id between 10 and 20)
</li><li>Eclipse plugin
103
</li><li>Asynchronous queries to support publish/subscribe: SELECT ... FOR READ WAIT [maxMillisToWait]
104 105 106 107 108 109 110 111 112
</li><li>iReport to support H2
</li><li>Implement missing JDBC API (CallableStatement,...)
</li><li>Compression of the cache
</li><li>Include SMPT (mail) server (at least client) (alert on cluster failure, low disk space,...)
</li><li>Drop with restrict (currently cascade is the default)
</li><li>JSON parser and functions
</li><li>Automatic collection of statistics (auto ANALYZE)
</li><li>Server: client ping from time to time (to avoid timeout - is timeout a problem?)
</li><li>Copy database: Tool with config GUI and batch mode, extensible (example: compare)
113
</li><li>Document, implement tool for long running transactions using user-defined compensation statements
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
</li><li>Support SET TABLE DUAL READONLY
</li><li>Linked schema using CSV files: one schema for a directory of files; support indexes for CSV files
</li><li>Don't write stack traces for common exceptions like duplicate key to the log by default
</li><li>GCJ: what is the state now?
</li><li>Use Janino to convert Java to C++
</li><li>Reduce disk space usage (Derby uses less disk space?)
</li><li>Events for: Database Startup, Connections, Login attempts, Disconnections, Prepare (after parsing), Web Server (see http://docs.openlinksw.com/virtuoso/fn_dbev_startup.html)
</li><li>Optimization: Log compression
</li><li>Support standard INFORMATION_SCHEMA tables, as defined in http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt; specially KEY_COLUMN_USAGE (http://dev.mysql.com/doc/refman/5.0/en/information-schema.html, http://www.xcdsql.org/Misc/INFORMATION_SCHEMA%20With%20Rolenames.gif)
</li><li>Compatibility: in MySQL, HSQLDB, /0.0 is NULL; in PostgreSQL, Derby: Division by zero
</li><li>Functional tables should accept parameters from other tables (see FunctionMultiReturn) SELECT * FROM TEST T, P2C(T.A, T.R)
</li><li>Custom class loader to reload functions on demand
</li><li>Test http://mysql-je.sourceforge.net/
</li><li>Close all files when closing the database (including LOB files that are open on the client side)
</li><li>EXE file: maybe use http://jsmooth.sourceforge.net
</li><li>Performance: Automatically build in-memory indexes if the whole table is in memory
</li><li>H2 Console: The webclient could support more features like phpMyAdmin.
</li><li>The HELP information schema can be directly exposed in the Console
</li><li>Maybe use the 0x1234 notation for binary fields, see MS SQL Server
</li><li>Support Oracle CONNECT BY in some way: http://www.adp-gmbh.ch/ora/sql/connect_by.html, http://philip.greenspun.com/sql/trees.html
Thomas Mueller's avatar
Thomas Mueller committed
134
</li><li>SQL Server 2005, Oracle: Support COUNT(*) OVER(). See http://www.orafusion.com/art_anlytc.htm 
135
</li><li>RANK() and DENSE_RANK(), Partition using OVER()
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
</li><li>SQL 2003 (http://www.wiscorp.com/sql_2003_standard.zip)
</li><li>http://www.jpackage.org
</li><li>Version column (number/sequence and timestamp based)
</li><li>Optimize getGeneratedKey: send last identity after each execute (server).
</li><li>Date: default date is '1970-01-01' (is it 1900-01-01 in the standard / other databases?)
</li><li>Test and document UPDATE TEST SET (ID, NAME) = (SELECT ID*10, NAME || '!' FROM TEST T WHERE T.ID=TEST.ID);
</li><li>Max memory rows / max undo log size: use block count / row size not row count
</li><li>Support 123L syntax as in Java; example: SELECT (2000000000*2)
</li><li>Implement point-in-time recovery
</li><li>Include the version name in the jar file name
</li><li>LIKE: improved version for larger texts (currently using naive search)
</li><li>The Script tool should work with other databases as well
</li><li>Automatically convert to the next 'higher' data type whenever there is an overflow.
</li><li>Throw an exception when the application calls getInt on a Long (optional)
</li><li>Default date format for input and output (local date constants)
</li><li>ValueInt.convertToString and so on (remove Value.convertTo)
</li><li>Support custom Collators
</li><li>Document ROWNUM usage for reports: SELECT ROWNUM, * FROM (subquery)
</li><li>Clustering: Reads should be randomly distributed or to a designated database on RAM
</li><li>Clustering: When a database is back alive, automatically synchronize with the master
</li><li>Standalone tool to get relevant system properties and add it to the trace output.
</li><li>Support 'call proc(1=value)' (PostgreSQL, Oracle)
</li><li>JAMon (proxy jdbc driver)
</li><li>Console: Improve editing data (Tab, Shift-Tab, Enter, Up, Down, Shift+Del?)
</li><li>Console: Autocomplete Ctrl+Space inserts template
</li><li>Simplify translation ('Donate a translation')
</li><li>Option to encrypt .trace.db file
</li><li>Write Behind Cache on SATA leads to data corruption See also http://sr5tech.com/write_back_cache_experiments.htm and http://www.jasonbrome.com/blog/archives/2004/04/03/writecache_enabled.html
</li><li>Functions with unknown return or parameter data types: serialize / deserialize
</li><li>Test if idle TCP connections are closed, and how to disable that
</li><li>Try using a factory for Row, Value[] (faster?), http://javolution.org/, alternative ObjectArray / IntArray
</li><li>Auto-Update feature for database, .jar file
</li><li>ResultSet SimpleResultSet.readFromURL(String url): id varchar, state varchar, released timestamp
</li><li>ROW_NUMBER (not the same as ROWNUM)
</li><li>Partial indexing (see PostgreSQL)
171
</li><li>The build should fail if the test fails
172
</li><li>Add GUI to build a custom version (embedded, fulltext,...) using build flags
173 174 175 176 177 178 179 180 181
</li><li>http://rubyforge.org/projects/hypersonic/
</li><li>DbVisualizer profile for H2
</li><li>Add comparator (x === y) : (x = y or (x is null and y is null))
</li><li>Try to create trace file even for read only databases
</li><li>Add a sample application that runs the H2 unit test and writes the result to a file (so it can be included in the user app)
</li><li>Count on a column that can not be null would be optimized to COUNT(*)
</li><li>Table order: ALTER TABLE TEST ORDER BY NAME DESC (MySQL compatibility)
</li><li>Backup tool should work with other databases as well
</li><li>Console: -ifExists doesn't work for the console. Add a flag to disable other dbs
182
</li><li>Improved fulltext search (supports LOBs, reader / tokenizer / filter).
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
</li><li>Performance: Update in-place
</li><li>Check if 'FSUTIL behavior set disablelastaccess 1' improves the performance (fsutil behavior query disablelastaccess)
</li><li>Java static code analysis: http://pmd.sourceforge.net/
</li><li>Java static code analysis: http://www.eclipse.org/tptp/
</li><li>Compatibility for CREATE SCHEMA AUTHORIZATION
</li><li>Implement Clob / Blob truncate and the remaining functionality
</li><li>Maybe close LOBs after closing connection
</li><li>Tree join functionality
</li><li>Support alter table add column if table has views defined
</li><li>Add multiple columns at the same time with ALTER TABLE .. ADD .. ADD ..
</li><li>Add H2 to Gem (Ruby install system)
</li><li>API for functions / user tables
</li><li>Order conditions inside AND / OR to optimize the performance
</li><li>Support linked JCR tables
</li><li>Make sure H2 is supported by Execute Query: http://executequery.org/
</li><li>Read InputStream when executing, as late as possible (maybe only embedded mode). Problem with re-execute.
199
</li><li>Fulltext search: min word length; store word positions
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
</li><li>FTP Server: Implement a client to send / receive files to server (dir, get, put)
</li><li>FTP Server: Implement SFTP / FTPS
</li><li>Add an option to the SCRIPT command to generate only portable / standard SQL
</li><li>Test Dezign for Databases (http://www.datanamic.com)
</li><li>Fast library for parsing / formatting: http://javolution.org/
</li><li>Updatable Views (simple cases first)
</li><li>Improve create index performance
</li><li>Support ARRAY data type
</li><li>Implement more JDBC 4.0 features
</li><li>Support TRANSFORM / PIVOT as in MS Access
</li><li>SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)
</li><li>Support updatable views with join on primary keys (to extend a table)
</li><li>Public interface for functions (not public static)
</li><li>Autocomplete: if I type the name of a table that does not exist (should say: syntax not supported)
</li><li>Document FTP server, including -ftpTask option to execute / kill remote processes
</li><li>Eliminate undo log records if stored on disk (just one pointer per block, not per record)
216
</li><li>Feature matrix like in <a href="http://www.inetsoftware.de/products/jdbc/mssql/features/default.asp">i-net software</a>.
217 218 219 220 221 222 223 224 225 226 227
</li><li>Updatable result set on table without primary key or unique index
</li><li>Use LinkedList instead of ArrayList where applicable
</li><li>Support % operator (modulo)
</li><li>Support 1+'2'=3, '1'+'2'='12' (MS SQL Server compatibility)
</li><li>Support nested transactions
</li><li>Add a benchmark for big databases, and one for many users
</li><li>Compression in the result set (repeating values in the same column)
</li><li>Support curtimestamp (like curtime, curdate)
</li><li>Support ANALYZE {TABLE|INDEX} tableName COMPUTE|ESTIMATE|DELETE STATISTICS ptnOption options
</li><li>Support Sequoia (Continuent.org)
</li><li>Dynamic length numbers / special methods for DataPage.writeByte / writeShort / Ronni Nielsen
228
</li><li>Pluggable ThreadPool, (AvalonDB / deebee / Paul Hammant)
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
</li><li>Recursive Queries (see details)
</li><li>Release locks (shared or exclusive) on demand
</li><li>Support OUTER UNION
</li><li>Support Parameterized Views (similar to CSVREAD, but using just SQL for the definition)
</li><li>A way (JDBC driver) to map an URL (jdbc:h2map:c1) to a connection object
</li><li>Option for SCRIPT to only process one or a set of tables, and append to a file
</li><li>Support using a unique index for IS NULL (including linked tables)
</li><li>Support linked tables to the current database
</li><li>Support dynamic linked schema (automatically adding/updating/removing tables)
</li><li>Compatibility with Derby: VALUES(1), (2); SELECT * FROM (VALUES (1), (2)) AS myTable(c1)
</li><li>Compatibility: # is the start of a single line comment (MySQL) but date quote (Access). Mode specific
</li><li>Run benchmarks with JDK 1.5, JDK 1.6, java -server
</li><li>Optimizations: Faster hash function for strings, byte arrays, big decimal
</li><li>DatabaseEventListener: callback for all operations (including expected time, RUNSCRIPT) and cancel functionality
</li><li>H2 Console / large result sets: use 'streaming' instead of building the page in-memory
</li><li>Benchmark: add a graph to show how databases scale (performance/database size)
</li><li>Implement a SQLData interface to map your data over to a custom object
</li><li>Make DDL (Data Definition) operations transactional
</li><li>Allow execution time prepare for SELECT * FROM CSVREAD(?, 'columnNameString')
</li><li>Support multiple directories (on different hard drives) for the same database
</li><li>Server protocol: use challenge response authentication, but client sends hash(user+password) encrypted with response
</li><li>Support EXEC[UTE] (doesn't return a result set, compatible to MS SQL Server)
</li><li>Support native XML data type
</li><li>Support triggers with a string property or option: SpringTrigger, OSGITrigger
</li><li>Clustering: adding a node should be very fast and without interrupting clients (very short lock)
</li><li>Support materialized views (using triggers)
255
</li><li>Store dates in local time zone (portability of database files)
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
</li><li>Ability to resize the cache array when resizing the cache
</li><li>Time based cache writing (one second after writing the log)
</li><li>Check state of H2 driver for DDLUtils: https://issues.apache.org/jira/browse/DDLUTILS-185
</li><li>Index usage for REGEXP LIKE.
</li><li>Add a role DBA (like ADMIN).
</li><li>Better support multiple processors for in-memory databases.
</li><li>Access rights: remember the owner of an object. COMMENT: allow owner of object to change it.
</li><li>Implement INSTEAD OF trigger.
</li><li>Access rights: Finer grained access control (grant access for specific functions)
</li><li>Support N'text'
</li><li>Support SCOPE_IDENTITY() to avoid problems when inserting rows in a trigger
</li><li>Set a connection read only (Connection.setReadOnly)
</li><li>In MySQL mode, for AUTO_INCREMENT columns, don't set the primary key
</li><li>Use JDK 1.4 file locking to create the lock file (but not yet by default); writing a system property to detect concurrent access from the same VM (different classloaders).
</li><li>Support compatibility for jdbc:hsqldb:res:
</li><li>In the MySQL and PostgreSQL, use lower case identifiers by default (DatabaseMetaData.storesLowerCaseIdentifiers = true)
</li><li>Provide a simple, lightweight O/R mapping tool
</li><li>Provide an Java SQL builder with standard and H2 syntax
</li><li>Trace: write OS, file system, JVM,... when opening the database
</li><li>Support indexes for views (probably requires materialized views)
</li><li>Document SET SEARCH_PATH, BEGIN, EXECUTE, parameters
</li><li>Browser: use Desktop.isDesktopSupported and browse when using JDK 1.6
</li><li>Server: use one listener (detect if the request comes from an PG or TCP client)
</li><li>Store dates as 'local'. Existing files use GMT. Use escape syntax for compatibility.
</li><li>Support data type INTERVAL
</li><li>NATURAL JOIN: MySQL and PostgreSQL don't repeat columns when using SELECT * ...
</li><li>Optimize SELECT MIN(ID), MAX(ID), COUNT(*) FROM TEST WHERE ID BETWEEN 100 AND 200
</li><li>Support Oracle functions: TRUNC, NVL2, TO_CHAR, TO_DATE, TO_NUMBER
</li><li>Sequence: PostgreSQL compatibility (rename, create) (http://www.postgresql.org/docs/8.2/static/sql-altersequence.html)
</li><li>DISTINCT: Support large result sets by sorting on all columns (additionally) and then removing duplicates.
286
</li><li>File system that writes to two file systems (replicating file system)
287 288 289 290 291 292 293 294 295 296 297 298
</li><li>File system with a background writer thread; test if this is faster
</li><li>FTP access to a database (.csv for a table, a directory for a schema, a file for a lob, a script.sql file).
</li><li>LIMIT and OFFSET for GROUP_CONCAT
</li><li>Support triggers for INFORMATION_SCHEMA tables (to better support PostgreSQL catalog: rebuild after creating new tables)
</li><li>Better document the source code
</li><li>Support select * from dual a left join dual b on b.x=(select max(x) from dual)
</li><li>Optimization: don't lock when the database is read-only
</li><li>Integrate spatial functions from http://geosysin.iict.ch/irstv-trac/wiki/H2spatial/Download
</li><li>Support COSH, SINH, and TANH functions
</li><li>Native search: support "phrase search", wildcard search (* and ?), case-insensitive search, boolean operators, and grouping
</li><li>Improve documentation of access rights
</li><li>Support ENUM data type (see MySQL, PostgreSQL, MS SQL Server, maybe others)
299
</li><li>Command line option for the H2 Console and TCP configuration (which .h2.server.properties and .h2.keystore to use)
300 301 302
</li><li>Support a schema name for Java functions
</li><li>Remember the domain of a column
</li><li>Support Jackcess (MS Access databases)
303 304 305 306 307 308 309 310 311 312 313 314
</li><li>Built-in methods to write large objects (BLOB and CLOB): FILE_WRITE('test.txt', 'Hello World')
</li><li>Change package name in version 2.0: org.h2database
</li><li>MVCC: support transactionally consistent backups using SCRIPT
</li><li>Improve time to open large databases (see mail 'init time for distributed setup')
</li><li>Use ARRAY for fulltext search return value, at least internally in the native implementation (and as an option for the user)
</li><li>Move Maven 2 repository from hsql.sf.net to h2database.sf.net
</li><li>Java 1.5 tool: JdbcUtils.closeSilently(s1, s2,...)
</li><li>Javadoc: document design patterns used
</li><li>Triggers for metadata tables; use for PostgreSQL catalog
</li><li>Does the FTP server has problems with multithreading?
</li><li>Write an article about SQLInjection (h2\src\docsrc\html\images\SQLInjection.txt)
</li><li>Convert SQL-injection-2.txt to html document, include SQLInjection.java sample
315
</li><li>Send SQL Injection solution proposal to MySQL, Derby, HSQLDB,...
316
</li><li>Improve LOB in directories performance
Thomas Mueller's avatar
Thomas Mueller committed
317
</li><li>Optimize OR conditions: convert them to IN(...) if possible.
318 319 320 321 322 323 324 325 326 327
</li><li>Web site design: http://www.igniterealtime.org/projects/openfire/index.jsp
</li><li>HSQLDB compatibility: Openfire server uses: CREATE SCHEMA PUBLIC AUTHORIZATION DBA;
    CREATE USER SA PASSWORD ""; GRANT DBA TO SA; SET SCHEMA PUBLIC
</li><li>Web site: Rename Performance to Comparison [/Compatibility],
    move Comparison to Other Database Engines to Comparison,
    move Products that Work with H2 to Comparison,
    move Performance Tuning to Advanced Topics
</li><li>Translation: use ${.} in help.csv
</li><li>Translated .pdf
</li><li>Cluster: hot deploy (adding a node on runtime)
328
</li><li>Test with PostgreSQL Version 8.2
329 330 331 332 333 334 335 336 337 338
</li><li>Website: Don't use frames.
</li><li>Try again with Lobo browser (pure Java)
</li><li>Recovery tool: bad blocks should be converted to INSERT INTO SYSTEM_ERRORS(...), and things should go into the .trace.db file
</li><li>RECOVER=2 to backup the database, run recovery, open the database
</li><li>Recovery should work with encrypted databases
</li><li>Corruption: new error code, add help
</li><li>Space reuse: after init, scan all storages and free those that don't belong to a live database object
</li><li>SysProperties: change everything to H2_...
</li><li>Use FilterIn / FilterOut putStream?
</li><li>Access rights: add missing features (users should be 'owner' of objects; missing rights for sequences; dropping objects)
339
</li><li>Support NOCACHE table option (Oracle)
340
</li><li>Index usage for UPDATE ... WHERE .. IN (SELECT...)
341
</li><li>Add regular javadocs (using the default doclet, but another css) to the homepage.
342
</li><li>The database should be kept open for a longer time when using the server mode.
343
</li><li>Javadocs: for each tool, add a copy &amp; paste sample in the class level.
344
</li><li>Javadocs: add @author tags.
345
</li><li>Fluent API for tools: Server.createTcpServer().setPort(9081).setPassword(password).start();
346
</li><li>MySQL compatibility: real SQL statements for SHOW TABLES, DESCRIBE TEST (then remove from Shell)
347
</li><li>Use a default delay of 1 second before closing a database.
348 349 350 351 352
</li><li>Maven: upload source code and javadocs as well.
</li><li>Write (log) to system table before adding to internal data structures.
</li><li>Support very large deletes and updates.
</li><li>Doclet (javadocs): constructors are not listed.
</li><li>Support direct lookup for MIN and MAX when using WHERE (see todo.txt / Direct Lookup).
353
</li><li>Support other array types (String[], double[]) in PreparedStatement.setObject(int, Object); 
354 355
</li><li>MVCC should not be memory bound (uncommitted data is kept in memory in the delta index; maybe using a regular btree index solves the problem).
</li><li>Support CREATE TEMPORARY LINKED TABLE.
356
</li><li>MySQL compatibility: SELECT @variable := x FROM SYSTEM_RANGE(1, 50);
357
</li><li>Oracle compatibility: support NLS_DATE_FORMAT.
358
</li><li>Support flashback queries as in Oracle.
359
</li><li>Import / Export of fixed with text files.
360
</li><li>Support for OUT parameters in user-defined procedures.
361 362 363
</li><li>Support getGeneratedKeys to return multiple rows when used with batch updates. 
    This is supported by MySQL, but not Derby. Both PostgreSQL and HSQLDB don't support getGeneratedKeys. 
    Also support it when using INSERT ... SELECT. 
364
</li><li>HSQLDB compatibility: automatic data type for SUM if value is the value is too big (by default use the same type as the data).
365
</li><li>Improve the optimizer to select the right index for special cases: where id between 2 and 4 and booleanColumn
Thomas Mueller's avatar
Thomas Mueller committed
366
</li><li>Enable warning for 'Local variable declaration hides another field or variable'.
Thomas Mueller's avatar
Thomas Mueller committed
367 368
</li><li>Linked tables: make hidden columns available (Oracle: rowid and ora_rowscn columns).
</li><li>Support merge join.
Thomas Mueller's avatar
Thomas Mueller committed
369
</li><li>H2 Console: in-place autocomplete (need to merge query and result frame, use div). 
370
</li><li>MySQL compatibility: update test1 t1, test2 t2 set t1.id = t2.id where t1.id = t2.id;
371
</li><li>Oracle: support DECODE method (convert to CASE WHEN).
372 373 374
</li><li>Support large databases: split LOB (BLOB, CLOB) to multiple directories / disks (similar to tablespaces).
</li><li>Support to assign a primary key index a user defined name.
</li><li>Cluster: Add feature to make sure cluster nodes can not get out of sync (for example by stopping one process).
375
</li><li>H2 Console: support configuration option for fixed width (monospace) font.
376 377
</li><li>Native fulltext search: support analyzers (specially for Chinese, Japanese).
</li><li>Automatically compact databases from time to time (as a background process).
378 379
</li><li>Support GRANT SELECT, UPDATE ON *.
</li><li>Test Eclipse DTP.
380
</li><li>Support JMX: Create an MBean for each database and server (support JConsole).
381 382
</li><li>H2 Console: autocomplete: keep the previous setting
</li><li>executeBatch: option to stop at the first failed statement.
383 384
</li><li>Implement OLAP features as described here: http://www.devx.com/getHelpOn/10MinuteSolution/16573/0/page/5
</li><li>Support Oracle ROWID (unique identifier for each row).
385
</li><li>Server mode: Improve performance for batch updates.
386
</li><li>Applets: Support read-only databases in a zip file (accessed as a resource).
387 388 389 390 391 392
</li><li>Long running queries / errors / trace system table.
</li><li>H2 Console should support JaQu directly.
</li><li>Option to copy the old version of each changed page once after a checkpoint.
</li><li>H2 Console: support single file upload and directory download (optional).
</li><li>Document FTL_SEARCH, FTL_SEARCH_DATA.
</li><li>Support DatabaseMetaData.insertsAreDetected: updatable result sets should detect inserts.
393
</li><li>Auto-server: add option to define the IP address range or list.
394
</li><li>Open a read-only database but don't share it with other connections. jdbc:h2:~/test;PRIVATE=TRUE
395 396 397 398 399 400 401 402
</li></ul>

<h2>Not Planned</h2>
<ul>
<li>HSQLDB (did) support this: select id i from test where i>0 (other databases don't). Supporting it may break compatibility.
</li><li>String.intern (so that Strings can be compared with ==) will not be used because some VMs have problems when used extensively.
</li></ul>

403 404
<!-- [close] { --></div></td></tr></table><!-- } --><!-- analytics --></body></html>