roadmap.html 33.3 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">
<!--
Thomas Mueller's avatar
Thomas Mueller committed
3
Copyright 2004-2009 H2 Group. Multiple-Licensed under the H2 License, Version 1.0,
4 5
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
New (feature) requests will usually be added at the very end of the list. The priority is increased for important and popular requests.
21 22
Of course, patches are always welcome, but are not always applied as is.
See also <a href="build.html#providing_patches">Providing Patches</a>.
23
</p>
24

Thomas Mueller's avatar
Thomas Mueller committed
25 26 27 28
<h2>Version 1.2</h2>
<ul><li>Enable system property h2.optimizeInList by default
</li></ul>

29 30
<h2>Priority 1</h2>
<ul>
31
<li>Bugfixes
32
</li><li>Page store: new storage mechanism
33
</li><li>[Requires page store] Support large updates (use the transaction log for rollback).
34
</li><li>[Requires page store] Shutdown compact
35
</li><li>More tests with MULTI_THREADED=1
36
</li><li>RECOVER=1 should automatically recover, =2 should run the recovery tool if required
37
</li><li>Optimization: result set caching (like MySQL)
38
</li><li>Server side cursors
39 40 41 42
</li></ul>

<h2>Priority 2</h2>
<ul>
43
<li>Improve test code coverage
44
</li><li>Issue 116: Maven: deploy / upload h2..-sources.jar and javadocs as well.
45
</li><li>Procedural language / script language (Java, Javascript)
46
</li><li>Fulltext search: support streaming CLOB data.
47
</li><li>Enable warning for 'Local variable declaration hides another field or variable'.
48
</li><li>Test multi-threaded in-memory db access
Thomas Mueller's avatar
Thomas Mueller committed
49
</li><li>MVCC: select for update should only lock the selected rows.
Thomas Mueller's avatar
Thomas Mueller committed
50
</li><li>Option to shutdown all the running servers (on the same VM).
Thomas Mueller's avatar
Thomas Mueller committed
51
</li><li>[Requires page store] Index organized tables CREATE TABLE...(...) ORGANIZATION INDEX
52
</li><li>[Requires page store] 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)
53
</li><li>Full outer joins
54
</li><li>Implement INSTEAD OF trigger (for views, tables, metadata tables).
55
</li><li>Support triggers for INFORMATION_SCHEMA tables (to better support PostgreSQL catalog: rebuild after creating new tables)
56
</li><li>Use triggers for metadata tables; use for PostgreSQL catalog
57
</li><li>Test very large databases and LOBs (up to 256 GB)
Thomas Mueller's avatar
Thomas Mueller committed
58
</li><li>Support hints for the optimizer (which index to use, enforce the join order).
59 60
</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.
Thomas Mueller's avatar
Thomas Mueller committed
61
</li><li>Support mixed clustering mode (one embedded, others in server mode)
62
</li><li>Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE
63 64 65
</li><li>Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
</li><li>Groovy Stored Procedures (http://groovy.codehaus.org/Groovy+SQL)
</li><li>Add a migration guide (list differences between databases)
66
</li><li>Migrate database tool (also from other database engines)
67 68
</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
69
</li><li>Rebuild index functionality to shrink index size and improve performance
70 71
</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)
72
</li><li>Support nested outer joins (see todo.txt).
73 74 75
</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)
76
</li><li>Test with Spatial DB in a box / JTS: http://www.opengeospatial.org/standards/sfs - OpenGIS Implementation Specification
77
</li><li>Write more tests and documentation for MVCC (Multi Version Concurrency Control)
78
</li><li>Find a tool to view large text file (larger than 100 MB), with find, page up and down (like less), truncate before / after
79 80 81 82 83
</li><li>Implement, test, document XAConnection and so on
</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
84
</li><li>Make DDL (Data Definition) operations transactional
85
</li><li>RANK() and DENSE_RANK(), Partition using OVER()
86
</li><li>Suggestion: include Jetty as Servlet Container (like LAMP)
87
</li><li>Trace shipping to server
88
</li><li>Version check: docs / web console (using Javascript), and maybe in the library (using TCP/IP)
89 90 91 92
</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)
93
</li><li>Support alter table add column if table has views defined
94
</li><li>Eclipse plugin
95
</li><li>Asynchronous queries to support publish/subscribe: SELECT ... FOR READ WAIT [maxMillisToWait]
96 97
</li><li>Fulltext search Lucene: analyzer configuration.
</li><li>Fulltext search (native): reader / tokenizer / filter.
98
</li><li>Linked schema using CSV files: one schema for a directory of files; support indexes for CSV files
99 100 101 102 103 104 105 106
</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?)
Thomas Mueller's avatar
Thomas Mueller committed
107
</li><li>Copy database: tool with config GUI and batch mode, extensible (example: compare)
108
</li><li>Document, implement tool for long running transactions using user-defined compensation statements.
109 110
</li><li>Support SET TABLE DUAL READONLY
</li><li>GCJ: what is the state now?
Thomas Mueller's avatar
Thomas Mueller committed
111 112
</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
113
</li><li>ROW_NUMBER() OVER([ORDER BY columnName])
114
</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)
Thomas Mueller's avatar
Thomas Mueller committed
115
</li><li>Compatibility: in MySQL, HSQLDB, /0.0 is NULL; in PostgreSQL, Derby: division by zero
116 117 118 119 120
</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
Thomas Mueller's avatar
Thomas Mueller committed
121 122
</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.
123
</li><li>Use Janino to convert Java to C++
124 125 126
</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
127
</li><li>SQL Server 2005, Oracle: support COUNT(*) OVER(). See http://www.orafusion.com/art_anlytc.htm
128 129 130 131 132 133 134 135 136 137 138 139 140
</li><li>SQL 2003 (http://www.wiscorp.com/sql_2003_standard.zip)
</li><li>Version column (number/sequence and timestamp based)
</li><li>Optimize getGeneratedKey: send last identity after each execute (server).
</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>LIKE: improved version for larger texts (currently using naive search)
</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>Support custom Collators
</li><li>Document ROWNUM usage for reports: SELECT ROWNUM, * FROM (subquery)
Thomas Mueller's avatar
Thomas Mueller committed
141 142
</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
143 144
</li><li>Optimizer: use an index for IS NULL and IS NOT NULL (including linked tables).
    ID IS NOT NULL could be converted to ID &gt;= Integer.MIN_VALUE.
145 146 147
</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)
Thomas Mueller's avatar
Thomas Mueller committed
148 149
</li><li>Console: improve editing data (Tab, Shift-Tab, Enter, Up, Down, Shift+Del?)
</li><li>Console: autocomplete Ctrl+Space inserts template
150 151 152 153 154 155 156 157 158
</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>Partial indexing (see PostgreSQL)
159
</li><li>The build should fail if the test fails
160
</li><li>Add GUI to build a custom version (embedded, fulltext,...) using build flags
161 162 163 164
</li><li>http://rubyforge.org/projects/hypersonic/
</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)
165
</li><li>Count on a column that can not be null could be optimized to COUNT(*)
166 167 168
</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
Thomas Mueller's avatar
Thomas Mueller committed
169
</li><li>Performance: update in-place
170 171 172 173 174 175 176 177 178 179 180 181 182 183
</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>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.
184
</li><li>Native fulltext search: min word length; store word positions
185
</li><li>[Requires page store] Store dates in local time zone (portability of database files)
186
</li><li>Recursive Queries (see details)
187 188 189 190 191 192 193 194 195 196 197 198 199
</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>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)
200
</li><li>Feature matrix like in <a href="http://www.inetsoftware.de/products/jdbc/mssql/features/default.asp">i-net software</a>.
201 202 203 204 205 206
</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
207
</li><li>Compression in the result set (repeating values in the same column) over TCP/IP
208 209 210 211
</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
212
</li><li>Pluggable ThreadPool, (AvalonDB / deebee / Paul Hammant)
213 214
</li><li>Release locks (shared or exclusive) on demand
</li><li>Support OUTER UNION
215
</li><li>Support parameterized views (similar to CSVREAD, but using just SQL for the definition)
216 217 218 219 220 221 222
</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 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
Thomas Mueller's avatar
Thomas Mueller committed
223
</li><li>Optimizations: faster hash function for strings, byte arrays
224 225 226 227
</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
228
</li><li>In the MySQL and PostgreSQL mode, use lower case identifiers by default (DatabaseMetaData.storesLowerCaseIdentifiers = true)
229 230 231 232 233 234 235 236 237 238 239
</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)
</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
Thomas Mueller's avatar
Thomas Mueller committed
240
</li><li>Support JMX: create an MBean for each database and server (support JConsole).
241 242 243
    See http://thedevcloud.blogspot.com/2008/10/displaying-hsql-database-manager-in.html
    http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ManagementFactory.html#getPlatformMBeanServer()
    http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html
244
</li><li>Index usage for REGEXP LIKE.
245
</li><li>Compatibility: add a role DBA (like ADMIN).
246 247
</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.
Thomas Mueller's avatar
Thomas Mueller committed
248
</li><li>Access rights: finer grained access control (grant access for specific functions)
249
</li><li>Support N'text'
250
</li><li>Pure SQL triggers (example: update parent table if the child table is changed).
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
</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>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>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)
Thomas Mueller's avatar
Thomas Mueller committed
267
</li><li>DISTINCT: support large result sets by sorting on all columns (additionally) and then removing duplicates.
268
</li><li>File system that writes to two file systems (replicating file system)
269 270 271 272 273 274 275
</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>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
Thomas Mueller's avatar
Thomas Mueller committed
276
</li><li>FTP Server: implement SFTP / FTPS
277 278 279
</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)
280
</li><li>Command line option for the H2 Console and TCP configuration (which .h2.server.properties and .h2.keystore to use)
281
</li><li>Support a schema name for Java functions
282
</li><li>Remember the user defined data type (domain) of a column
283
</li><li>Support Jackcess (MS Access databases)
284 285 286 287 288 289 290 291 292 293 294 295 296 297 298
</li><li>Built-in methods to write large objects (BLOB and CLOB): FILE_WRITE('test.txt', 'Hello World')
</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>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>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
</li><li>Improve LOB in directories performance
</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>Translation: use ${.} in help.csv
</li><li>Translated .pdf
299 300
</li><li>Cluster: hot deploy (adding a node at runtime)
</li><li>MySQL compatibility: update test1 t1, test2 t2 set t1.id = t2.id where t1.id = t2.id;
301 302 303 304 305 306 307 308
</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)
309
</li><li>Support NOCACHE table option (Oracle)
310
</li><li>Support table partitioning.
311
</li><li>Index usage for UPDATE ... WHERE .. IN (SELECT...)
312
</li><li>Add regular javadocs (using the default doclet, but another css) to the homepage.
313
</li><li>The database should be kept open for a longer time when using the server mode.
314
</li><li>Javadocs: for each tool, add a copy &amp; paste sample in the class level.
315
</li><li>Javadocs: add @author tags.
316
</li><li>Fluent API for tools: Server.createTcpServer().setPort(9081).setPassword(password).start();
317
</li><li>MySQL compatibility: real SQL statement for DESCRIBE TEST
318
</li><li>Use a default delay of 1 second before closing a database.
319 320 321 322
</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).
323
</li><li>Support other array types (String[], double[]) in PreparedStatement.setObject(int, Object);
Thomas Mueller's avatar
Thomas Mueller committed
324
</li><li>MVCC should not be memory bound (uncommitted data is kept in memory in the delta index; maybe using a regular b-tree index solves the problem).
325
</li><li>Oracle compatibility: support NLS_DATE_FORMAT.
326
</li><li>Support flashback queries as in Oracle.
327
</li><li>Import / Export of fixed with text files.
328
</li><li>Support OUT parameters in user-defined procedures.
329 330 331
</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.
332
</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).
333
</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
334 335
</li><li>Linked tables: make hidden columns available (Oracle: rowid and ora_rowscn columns).
</li><li>Support merge join.
336
</li><li>H2 Console: in-place autocomplete.
337
</li><li>Oracle: support DECODE method (convert to CASE WHEN).
338 339
</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.
Thomas Mueller's avatar
Thomas Mueller committed
340
</li><li>Cluster: add feature to make sure cluster nodes can not get out of sync (for example by stopping one process).
341
</li><li>H2 Console: support configuration option for fixed width (monospace) font.
342 343
</li><li>Native fulltext search: support analyzers (specially for Chinese, Japanese).
</li><li>Automatically compact databases from time to time (as a background process).
344
</li><li>Support SCOPE_IDENTITY().
345 346
</li><li>Support GRANT SELECT, UPDATE ON *.
</li><li>Test Eclipse DTP.
347
</li><li>H2 Console: autocomplete: keep the previous setting
348
</li><li>MySQL, MS SQL Server compatibility: support case sensitive (mixed case) identifiers without quotes.
349
</li><li>executeBatch: option to stop at the first failed statement.
350 351
</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).
Thomas Mueller's avatar
Thomas Mueller committed
352 353
</li><li>Server mode: improve performance for batch updates.
</li><li>Applets: support read-only databases in a zip file (accessed as a resource).
354 355 356 357
</li><li>Long running queries / errors / trace system table.
</li><li>H2 Console should support JaQu directly.
</li><li>H2 Console: support single file upload and directory download (optional).
</li><li>Document FTL_SEARCH, FTL_SEARCH_DATA.
358
</li><li>Sequences: CURRVAL should be session specific. Compatibility with PostgreSQL.
359
</li><li>Support DatabaseMetaData.insertsAreDetected: updatable result sets should detect inserts.
360
</li><li>Auto-server: add option to define the IP address range or list.
361 362
</li><li>Index creation only using deterministic functions.
</li><li>Use http://recaptcha.net somehow to secure the Google Group.
363 364
</li><li>Support DELETE with TOP or LIMIT. See also: http://dev.mysql.com/doc/refman/5.1/de/delete.html
</li><li>Change the default for NULL || 'x' to return NULL
Thomas Mueller's avatar
Thomas Mueller committed
365 366
</li><li>ANALYZE: use a bloom filter for each indexed column to estimate count of distinct values.
</li><li>ANALYZE: for unique indexes that allow null, count the number of null.
367
</li><li>AUTO_SERVER: support changing IP addresses (disable a network while the database is open).
368
</li><li>Avoid using java.util.Calendar internally because it's slow, complicated, and seems to be buggy.
369
</li><li>Support TRUNCATE .. CASCADE like PostgreSQL.
370
</li><li>Support opening a database that is in the classpath, maybe using a new file system.
371 372
</li><li>Fulltext search: lazy result generation using SimpleRowSource.
</li><li>Support transformation to join for user defined functions, as for IN(SELECT...).
Thomas Mueller's avatar
Thomas Mueller committed
373
</li><li>Fulltext search: support alternative syntax: WHERE FTL_CONTAINS(name, 'hello').
374 375
</li><li>MySQL compatibility: support REPLACE, see http://dev.mysql.com/doc/refman/5.1/de/replace.html
</li><li>MySQL compatibility: support INSERT INTO table SET column1 = value1, column2 = value2
Thomas Mueller's avatar
Thomas Mueller committed
376
</li><li>Docs: add a one line description for each functions and SQL statements at the top (in the link section).
377
</li><li>Javadoc search: weight for titles should be higher ('random' should list Functions as the best match).
378 379 380
</li><li>Replace information_schema tables with regular tables that are automatically re-built when needed. Use indexes.
</li><li>Support a special trigger on all tables.
</li><li>Delete temporary files or objects using finalize.
381 382
</li><li>Oracle compatibility: support calling 0-parameters functions without parenthesis. Make constants obsolete.
</li><li>MySQL, HSQLDB compatibility: support where 'a'=1 (not supported by Derby, PostgreSQL)
383
</li><li>Allow calling function with no parameters without parenthesis. See http://code.google.com/p/h2database/issues/detail?id=50
384 385 386
</li><li>CSV: currently # is a line comment and can start at any field. Make it optional.
</li><li>Add database creation date and time to the database.
</li><li>Support ASSERTIONS.
387
</li><li>Support multi-threaded kernel with multi-version concurrency.
388
</li><li>MySQL compatibility: support comparing 1='a'
389 390
</li><li>Support PostgreSQL lock modes: http://www.postgresql.org/docs/8.3/static/explicit-locking.html
</li><li>PostgreSQL compatibility: test DbVisualizer and Squirrel SQL using a new PostgreSQL JDBC driver.
391
</li><li>RunScript should be able to read from system in (or quite mode for Shell).
392
</li><li>Natural join: support select x from dual natural join dual.
393
</li><li>Natural join: somehow support this: select a.x, b.x, x from dual a natural join dual b
394
</li><li>MySQL compatibility: for auto_increment columns, convert 0 to next value (as when inserting NULL).
395
</li><li>Functions: support hashcode(value); cryptographic and fast
396
</li><li>Serialized file lock: support long running queries.
397 398 399 400 401
</li><li>Network: use 127.0.0.1 if other addresses don't work.
</li><li>Select for update in mvcc mode: only lock the selected records.
</li><li>Support reading JCR data: one table per node type; query table; cache option
</li><li>OSGi: create a sample application, test, document.
</li><li>help.csv: use complete examples for functions; run as test case.
402
</li><li>Re-implement PooledConnection; use a lightweight connection object.
403 404 405
</li><li>Doclet: convert tests in javadocs to a java class.
</li><li>Doclet: format fields like methods, but support sorting by name and value.
</li><li>Doclet: shrink the html files.
406 407 408
</li><li>Finer granularity for SLF4J trace - See http://code.google.com/p/h2database/issues/detail?id=62
</li><li>MySQL compatibility: support REPLACE - See http://code.google.com/p/h2database/issues/detail?id=73
</li><li>MySQL compatibility: support SET NAMES 'latin1' - See also http://code.google.com/p/h2database/issues/detail?id=56
409
</li><li>MySQL compatibility: DELETE .. FROM .. USING - See http://dev.mysql.com/doc/refman/5.0/en/delete.html
410 411
</li><li>Allow to scan index backwards starting with a value (to better support ORDER BY DESC).
</li><li>Java Service Wrapper: try http://yajsw.sourceforge.net/
Thomas Mueller's avatar
Thomas Mueller committed
412
</li><li>Batch parameter for INSERT, UPDATE, and DELETE, and commit after each batch. See also MySQL DELETE.
413
</li><li>MySQL compatibility: support ALTER TABLE .. MODIFY COLUMN.
414 415 416 417 418
</li><li>Use a lazy and auto-close input stream (open resource when reading, close on eof).
</li><li>PostgreSQL compatibility: generate_series.
</li><li>Connection pool: 'reset session' command (delete temp tables, rollback, autocommit true).
</li><li>Improve SQL documentation, see http://www.w3schools.com/sql/
</li><li>MySQL compatibility: DatabaseMetaData.stores*() methods should return the same values. Test with SquirrelSQL.
419
</li><li>MS SQL Server compatibility: support DATEPART syntax.
420
</li><li>Oracle compatibility: support CREATE OR REPLACE VIEW syntax.
421 422
</li><li>Sybase/DB2/Oracle compatibility: support out parameters in stored procedures - See http://code.google.com/p/h2database/issues/detail?id=83
</li><li>Support INTERVAL data type (see Oracle and others).
423
</li><li>Combine Server and Console tool (only keep Server).
424
</li><li>Store the Lucene index in the database itself.
425 426 427
</li><li>Oracle compatibility: support DECODE(x, ...).
</li><li>Console: Start Browser: if ip number changed, try localhost instead.
</li><li>MVCC: compare concurrent update behavior with PostgreSQL and Oracle.
428
</li><li>HSQLDB compatibility: CREATE FUNCTION (maybe using a Function interface).
429
</li><li>HSQLDB compatibility: support CALL "java.lang.Math.sqrt"(2.0)
430
</li><li>Support comma as the decimal separator in the CSV tool.
431
</li><li>Compatibility: Support jdbc:default:connection using ThreadLocal (part of SQLJ)
Thomas Mueller's avatar
Thomas Mueller committed
432 433
</li><li>Compatibility: Java functions with SQLJ Part1 http://www.acm.org/sigmod/record/issues/9912/standards.pdf.gz
</li><li>Compatibility: Java functions with SQL/PSM (Persistent Stored Modules) - need to find the documentation.
434
</li><li>CACHE_SIZE: automatically use a fraction of Runtime.maxMemory - maybe automatically the second level cache.
435 436 437 438
</li><li>Support date/time/timestamp as documented in http://en.wikipedia.org/wiki/ISO_8601
</li><li>PostgreSQL compatibility: when in PG mode, treat BYTEA data like PG.
</li><li>Support standard MERGE statement: http://en.wikipedia.org/wiki/Merge_%28SQL%29
</li><li>MySQL compatibility: REPLACE http://dev.mysql.com/doc/refman/6.0/en/replace.html
439 440 441
</li><li>Support =ANY(array) as in PostgreSQL.
</li><li>IBM DB2 compatibility: support PREVIOUS VALUE FOR sequence.
</li><li>MySQL compatibility: alter table add index i(c), add constraint c foreign key(c) references t(c);
442
</li><li>Compatibility: use different LIKE ESCAPE characters depending on the mode (disable for Derby, HSQLDB, DB2, Oracle, MSSQLServer).
443
</li><li>Functions to calculate the memory and disk space usage of a row or value.
444
</li><li>Oracle compatibility: support CREATE SYNONYM table FOR schema.table.
445
</li><li>Optimize A=? OR B=? to UNION if the cost is lower.
446 447
</li><li>More secure default configuration if remote access is enabled.
</li><li>Optimization for EXISTS: convert to inner join if possible.
448 449 450
</li><li>Improve database file locking (maybe use native file locking). The current approach seems to be problematic
    if the file system is on a remote share (see Google Group 'Lock file modification time is in the future').
</li><li>Document internal features such as BELONGS_TO_TABLE, NULL_TO_DEFAULT, SEQUENCE.
451
</li><li>Issue 107: Prefer using the ORDER BY index if LIMIT is used.
452 453 454 455
</li></ul>

<h2>Not Planned</h2>
<ul>
456
<li>HSQLDB (did) support this: select id i from test where i&lt;0 (other databases don't). Supporting it may break compatibility.
457 458 459
</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>

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