提交 f5339ed9 authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 4715ebcd
......@@ -1892,7 +1892,7 @@ Subversion Source Repository
Google Code
@download_1011_p
For details about changes, see the <a href="history.html">Change Log</a> .
For details about changes, see the <a href="changelog.html">Change Log</a> .
@faq_1000_h1
Frequently Asked Questions
......@@ -5966,22 +5966,22 @@ Priority 1
Write more tests and documentation for MVCC (Multi Version Concurrency Control)
@roadmap_1016_li
RECOVER=1 should automatically recover, =2 should run the recovery tool if required
Row level locking
@roadmap_1017_li
More tests with MULTI_THREADED=1
RECOVER=1 should automatically recover, =2 should run the recovery tool if required
@roadmap_1018_li
Test with Spatial DB in a box / JTS (http://docs.codehaus.org/display/GEOS/SpatialDBBox)
More tests with MULTI_THREADED=1
@roadmap_1019_li
Optimization: result set caching (like MySQL)
Test with Spatial DB in a box / JTS (http://docs.codehaus.org/display/GEOS/SpatialDBBox)
@roadmap_1020_li
Server side cursors
Optimization: result set caching (like MySQL)
@roadmap_1021_li
Row level locking
Server side cursors
@roadmap_1022_li
Long running queries / errors / trace system table
......@@ -5992,1087 +5992,1069 @@ Migrate database tool (also from other database engines)
@roadmap_1024_li
Shutdown compact
@roadmap_1025_li
Document server mode, embedded mode, web app mode, dual mode (server+embedded)
@roadmap_1025_h2
Priority 2
@roadmap_1026_li
Updatable result sets: DatabaseMetaData.ownUpdatesAreVisible = true (for insert, delete, update) Simple solution: automatically calls 'refresh' when the result was changed. Compare with other databases.
Automatic mode: jdbc:h2:auto: (embedded mode if possible, if not use server mode). Keep the server running until all have disconnected.
@roadmap_1027_h2
Priority 2
@roadmap_1027_li
Support OSGi: http://oscar-osgi.sourceforge.net, http://incubator.apache.org/felix/index.html
@roadmap_1028_li
Automatic mode: jdbc:h2:auto: (embedded mode if possible, if not use server mode). Keep the server running until all have disconnected.
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)
@roadmap_1029_li
Support OSGi: http://oscar-osgi.sourceforge.net, http://incubator.apache.org/felix/index.html
Pluggable tracing system
@roadmap_1030_li
Better space re-use in the files after deleting data (shrink the files)
Full outer joins
@roadmap_1031_li
Shrink the data file without closing the database (if the end of the file is empty)
Procedural language / script language (Javascript)
@roadmap_1032_li
ParameterMetaData should return correct data type where possible (INSERT, UPDATE; supported by PostgreSQL, Derby, HSQLDB)
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)
@roadmap_1033_li
Pluggable tracing system
Clustering: recovery needs to becomes fully automatic. Global write lock feature.
@roadmap_1034_li
Full outer joins
Option for Java functions: constant/isDeterministic to allow early evaluation when all parameters are constant
@roadmap_1035_li
Procedural language / script language (Javascript)
Support function overloading as in Java (multiple functions with the same name, but different parameter count or data types)
@roadmap_1036_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)
Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
@roadmap_1037_li
Clustering: recovery needs to becomes fully automatic. Global write lock feature.
Groovy Stored Procedures (http://groovy.codehaus.org/Groovy+SQL)
@roadmap_1038_li
Option for Java functions: constant/isDeterministic to allow early evaluation when all parameters are constant
System table / function: cache usage
@roadmap_1039_li
Support function overloading as in Java (multiple functions with the same name, but different parameter count or data types)
Add a migration guide (list differences between databases)
@roadmap_1040_li
Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
Optimization: automatic index creation suggestion using the trace file?
@roadmap_1041_li
Groovy Stored Procedures (http://groovy.codehaus.org/Groovy+SQL)
Compression performance: don't allocate buffers, compress / expand in to out buffer
@roadmap_1042_li
System table / function: cache usage
Connection pool manager
@roadmap_1043_li
Add a migration guide (list differences between databases)
Implement Statement.cancel for server connections
@roadmap_1044_li
Optimization: automatic index creation suggestion using the trace file?
Start / stop server with database URL
@roadmap_1045_li
Compression performance: don't allocate buffers, compress / expand in to out buffer
Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE
@roadmap_1046_li
Connection pool manager
Rebuild index functionality (other than delete the index file)
@roadmap_1047_li
Implement Statement.cancel for server connections
Don't use deleteOnExit (bug 4513817: File.deleteOnExit consumes memory)
@roadmap_1048_li
Start / stop server with database URL
Console: add accesskey to most important commands (A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA)
@roadmap_1049_li
Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE
Feature: a setting to delete the the log or not (for backup)
@roadmap_1050_li
Rebuild index functionality (other than delete the index file)
Test with Sun ASPE1_4; JEE Sun AS PE1.4
@roadmap_1051_li
Don't use deleteOnExit (bug 4513817: File.deleteOnExit consumes memory)
Test performance again with SQL Server, Oracle, DB2
@roadmap_1052_li
Console: add accesskey to most important commands (A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA)
Test with dbmonster (http://dbmonster.kernelpanic.pl/)
@roadmap_1053_li
Feature: a setting to delete the the log or not (for backup)
Test with dbcopy (http://dbcopyplugin.sourceforge.net)
@roadmap_1054_li
Test with Sun ASPE1_4; JEE Sun AS PE1.4
Find a tool to view a text file >100 MB, with find, page up and down (like less)
@roadmap_1055_li
Test performance again with SQL Server, Oracle, DB2
Implement, test, document XAConnection and so on
@roadmap_1056_li
Test with dbmonster (http://dbmonster.kernelpanic.pl/)
Web site: meta keywords, description, get rid of frame set
@roadmap_1057_li
Test with dbcopy (http://dbcopyplugin.sourceforge.net)
Pluggable data type (for compression, validation, conversion, encryption)
@roadmap_1058_li
Find a tool to view a text file >100 MB, with find, page up and down (like less)
CHECK: find out what makes CHECK=TRUE slow, move to CHECK2
@roadmap_1059_li
Implement, test, document XAConnection and so on
Improve recovery: improve code for log recovery problems (less try/catch)
@roadmap_1060_li
Web site: meta keywords, description, get rid of frame set
Log linear hash index changes, fast open / close
@roadmap_1061_li
Pluggable data type (for compression, validation, conversion, encryption)
Index usage for (ID, NAME)=(1, 'Hi'); document
@roadmap_1062_li
CHECK: find out what makes CHECK=TRUE slow, move to CHECK2
Suggestion: include jetty as Servlet Container (like LAMP)
@roadmap_1063_li
Improve recovery: improve code for log recovery problems (less try/catch)
Trace shipping to server
@roadmap_1064_li
Log linear hash index changes, fast open / close
Performance / server mode: use UDP optionally?
@roadmap_1065_li
Index usage for (ID, NAME)=(1, 'Hi'); document
Version check: docs / web console (using javascript), and maybe in the library (using TCP/IP)
@roadmap_1066_li
Suggestion: include jetty as Servlet Container (like LAMP)
Web server classloader: override findResource / getResourceFrom
@roadmap_1067_li
Trace shipping to server
Cost for embedded temporary view is calculated wrong, if result is constant
@roadmap_1068_li
Performance / server mode: use UDP optionally?
Comparison: pluggable sort order: natural sort
@roadmap_1069_li
Version check: docs / web console (using javascript), and maybe in the library (using TCP/IP)
Count index range query (count(*) where id between 10 and 20)
@roadmap_1070_li
Web server classloader: override findResource / getResourceFrom
Eclipse plugin
@roadmap_1071_li
Cost for embedded temporary view is calculated wrong, if result is constant
Asynchronous queries to support publish/subscribe: SELECT ... FOR READ WAIT [maxMillisToWait]
@roadmap_1072_li
Comparison: pluggable sort order: natural sort
iReport to support H2
@roadmap_1073_li
Count index range query (count(*) where id between 10 and 20)
Implement missing JDBC API (CallableStatement,...)
@roadmap_1074_li
Eclipse plugin
Compression of the cache
@roadmap_1075_li
iReport to support H2
Run H2 Console inside servlet (pass-through servlet of fix the JSP / app)
@roadmap_1076_li
Implement missing JDBC API (CallableStatement,...)
Include SMPT (mail) server (at least client) (alert on cluster failure, low disk space,...)
@roadmap_1077_li
Compression of the cache
Drop with restrict (currently cascade is the default)
@roadmap_1078_li
Run H2 Console inside servlet (pass-through servlet of fix the JSP / app)
JSON parser and functions
@roadmap_1079_li
Include SMPT (mail) server (at least client) (alert on cluster failure, low disk space,...)
Automatic collection of statistics (auto ANALYZE)
@roadmap_1080_li
Drop with restrict (currently cascade is the default)
Server: client ping from time to time (to avoid timeout - is timeout a problem?)
@roadmap_1081_li
JSON parser and functions
Copy database: Tool with config GUI and batch mode, extensible (example: compare)
@roadmap_1082_li
Automatic collection of statistics (auto ANALYZE)
Document, implement tool for long running transactions using user-defined compensation statements
@roadmap_1083_li
Server: client ping from time to time (to avoid timeout - is timeout a problem?)
Support SET TABLE DUAL READONLY
@roadmap_1084_li
Copy database: Tool with config GUI and batch mode, extensible (example: compare)
Linked schema using CSV files: one schema for a directory of files; support indexes for CSV files
@roadmap_1085_li
Document, implement tool for long running transactions using user-defined compensation statements
Don't write stack traces for common exceptions like duplicate key to the log by default
@roadmap_1086_li
Support SET TABLE DUAL READONLY
Setting for MAX_QUERY_TIME (default no limit?)
@roadmap_1087_li
Linked schema using CSV files: one schema for a directory of files; support indexes for CSV files
GCJ: what is the state now?
@roadmap_1088_li
Don't write stack traces for common exceptions like duplicate key to the log by default
Use Janino to convert Java to C++
@roadmap_1089_li
Setting for MAX_QUERY_TIME (default no limit?)
Reduce disk space usage (Derby uses less disk space?)
@roadmap_1090_li
GCJ: what is the state now?
Events for: Database Startup, Connections, Login attempts, Disconnections, Prepare (after parsing), Web Server (see http://docs.openlinksw.com/virtuoso/fn_dbev_startup.html)
@roadmap_1091_li
Use Janino to convert Java to C++
Optimization: Log compression
@roadmap_1092_li
Reduce disk space usage (Derby uses less disk space?)
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)
@roadmap_1093_li
Events for: Database Startup, Connections, Login attempts, Disconnections, Prepare (after parsing), Web Server (see http://docs.openlinksw.com/virtuoso/fn_dbev_startup.html)
Compatibility: in MySQL, HSQLDB, /0.0 is NULL; in PostgreSQL, Derby: Division by zero
@roadmap_1094_li
Optimization: Log compression
Functional tables should accept parameters from other tables (see FunctionMultiReturn) SELECT * FROM TEST T, P2C(T.A, T.R)
@roadmap_1095_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)
Custom class loader to reload functions on demand
@roadmap_1096_li
Compatibility: in MySQL, HSQLDB, /0.0 is NULL; in PostgreSQL, Derby: Division by zero
Test http://mysql-je.sourceforge.net/
@roadmap_1097_li
Functional tables should accept parameters from other tables (see FunctionMultiReturn) SELECT * FROM TEST T, P2C(T.A, T.R)
Close all files when closing the database (including LOB files that are open on the client side)
@roadmap_1098_li
Custom class loader to reload functions on demand
Test Connection Pool http://jakarta.apache.org/commons/dbcp
@roadmap_1099_li
Test http://mysql-je.sourceforge.net/
Profiler option or profiling tool to find long running and often repeated queries (using DatabaseEventListener API)
@roadmap_1100_li
Close all files when closing the database (including LOB files that are open on the client side)
Allow custom settings (@PATH for RUNSCRIPT for example)
@roadmap_1101_li
Test Connection Pool http://jakarta.apache.org/commons/dbcp
EXE file: maybe use http://jsmooth.sourceforge.net
@roadmap_1102_li
Profiler option or profiling tool to find long running and often repeated queries (using DatabaseEventListener API)
Automatically delete the index file if opening it fails
@roadmap_1103_li
Allow custom settings (@PATH for RUNSCRIPT for example)
Performance: Automatically build in-memory indexes if the whole table is in memory
@roadmap_1104_li
EXE file: maybe use http://jsmooth.sourceforge.net
H2 Console: The webclient could support more features like phpMyAdmin.
@roadmap_1105_li
SELECT ... FOR READ WAIT [maxMillisToWait]
The HELP information schema can be directly exposed in the Console
@roadmap_1106_li
Automatically delete the index file if opening it fails
Maybe use the 0x1234 notation for binary fields, see MS SQL Server
@roadmap_1107_li
Performance: Automatically build in-memory indexes if the whole table is in memory
Support Oracle CONNECT BY in some way: http://www.adp-gmbh.ch/ora/sql/connect_by.html, http://philip.greenspun.com/sql/trees.html
@roadmap_1108_li
H2 Console: The webclient could support more features like phpMyAdmin.
SQL 2003 (http://www.wiscorp.com/sql_2003_standard.zip)
@roadmap_1109_li
The HELP information schema can be directly exposed in the Console
http://www.jpackage.org
@roadmap_1110_li
Maybe use the 0x1234 notation for binary fields, see MS SQL Server
Version column (number/sequence and timestamp based)
@roadmap_1111_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
Optimize getGeneratedKey: send last identity after each execute (server).
@roadmap_1112_li
SQL 2003 (http://www.wiscorp.com/sql_2003_standard.zip)
Date: default date is '1970-01-01' (is it 1900-01-01 in the standard / other databases?)
@roadmap_1113_li
http://www.jpackage.org
Test and document UPDATE TEST SET (ID, NAME) = (SELECT ID*10, NAME || '!' FROM TEST T WHERE T.ID=TEST.ID);
@roadmap_1114_li
Version column (number/sequence and timestamp based)
Max memory rows / max undo log size: use block count / row size not row count
@roadmap_1115_li
Optimize getGeneratedKey: send last identity after each execute (server).
Index summary is only written if log=2; maybe write it also when log=1 and everything is fine (and no in doubt transactions)
@roadmap_1116_li
Date: default date is '1970-01-01' (is it 1900-01-01 in the standard / other databases?)
Support 123L syntax as in Java; example: SELECT (2000000000*2)
@roadmap_1117_li
Test and document UPDATE TEST SET (ID, NAME) = (SELECT ID*10, NAME || '!' FROM TEST T WHERE T.ID=TEST.ID);
Implement point-in-time recovery
@roadmap_1118_li
Max memory rows / max undo log size: use block count / row size not row count
Memory database: add a feature to keep named database open until 'shutdown'
@roadmap_1119_li
Index summary is only written if log=2; maybe write it also when log=1 and everything is fine (and no in doubt transactions)
Use the directory of the first script as the default directory for any scripts run inside that script
@roadmap_1120_li
Support 123L syntax as in Java; example: SELECT (2000000000*2)
Include the version name in the jar file name
@roadmap_1121_li
Implement point-in-time recovery
Optimize ID=? OR ID=?: convert to IN(...)
@roadmap_1122_li
Memory database: add a feature to keep named database open until 'shutdown'
LIKE: improved version for larger texts (currently using naive search)
@roadmap_1123_li
Use the directory of the first script as the default directory for any scripts run inside that script
Auto-reconnect on lost connection to server (even if the server was re-started) except if autocommit was off and there was pending transaction
@roadmap_1124_li
Include the version name in the jar file name
The Script tool should work with other databases as well
@roadmap_1125_li
Optimize ID=? OR ID=?: convert to IN(...)
Automatically convert to the next 'higher' data type whenever there is an overflow.
@roadmap_1126_li
LIKE: improved version for larger texts (currently using naive search)
Throw an exception when the application calls getInt on a Long (optional)
@roadmap_1127_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
Default date format for input and output (local date constants)
@roadmap_1128_li
The Script tool should work with other databases as well
Cache collation keys for performance
@roadmap_1129_li
Automatically convert to the next 'higher' data type whenever there is an overflow.
ValueInt.convertToString and so on (remove Value.convertTo)
@roadmap_1130_li
Throw an exception when the application calls getInt on a Long (optional)
Support custom Collators
@roadmap_1131_li
Default date format for input and output (local date constants)
Document ROWNUM usage for reports: SELECT ROWNUM, * FROM (subquery)
@roadmap_1132_li
Cache collation keys for performance
Clustering: Reads should be randomly distributed or to a designated database on RAM
@roadmap_1133_li
ValueInt.convertToString and so on (remove Value.convertTo)
Clustering: When a database is back alive, automatically synchronize with the master
@roadmap_1134_li
Support custom Collators
Standalone tool to get relevant system properties and add it to the trace output.
@roadmap_1135_li
Document ROWNUM usage for reports: SELECT ROWNUM, * FROM (subquery)
Support mixed clustering mode (one embedded, the other server mode)
@roadmap_1136_li
Clustering: Reads should be randomly distributed or to a designated database on RAM
Support 'call proc(1=value)' (PostgreSQL, Oracle)
@roadmap_1137_li
Clustering: When a database is back alive, automatically synchronize with the master
HSQLDB compatibility: "INSERT INTO TEST(name) VALUES(?); SELECT IDENTITY()"
@roadmap_1138_li
Standalone tool to get relevant system properties and add it to the trace output.
Shutdown lock (shutdown can only start if there are no logins pending, and logins are delayed until shutdown ends)
@roadmap_1139_li
Support mixed clustering mode (one embedded, the other server mode)
Automatically delete the index file if opening it fails
@roadmap_1140_li
Support 'call proc(1=value)' (PostgreSQL, Oracle)
DbAdapters http://incubator.apache.org/cayenne/
@roadmap_1141_li
HSQLDB compatibility: "INSERT INTO TEST(name) VALUES(?); SELECT IDENTITY()"
JAMon (proxy jdbc driver)
@roadmap_1142_li
Shutdown lock (shutdown can only start if there are no logins pending, and logins are delayed until shutdown ends)
Console: Allow setting Null value; Alternative display format two column (for copy and paste as well)
@roadmap_1143_li
Automatically delete the index file if opening it fails
Console: Improve editing data (Tab, Shift-Tab, Enter, Up, Down, Shift+Del?)
@roadmap_1144_li
DbAdapters http://incubator.apache.org/cayenne/
Console: Autocomplete Ctrl+Space inserts template
@roadmap_1145_li
JAMon (proxy jdbc driver)
Google Code http://code.google.com/p/h2database/issues/list#
@roadmap_1146_li
Console: Allow setting Null value; Alternative display format two column (for copy and paste as well)
Simplify translation ('Donate a translation')
@roadmap_1147_li
Console: Improve editing data (Tab, Shift-Tab, Enter, Up, Down, Shift+Del?)
Option to encrypt .trace.db file
@roadmap_1148_li
Console: Autocomplete Ctrl+Space inserts template
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
@roadmap_1149_li
Google Code http://code.google.com/p/h2database/issues/list#
Functions with unknown return or parameter data types: serialize / deserialize
@roadmap_1150_li
Simplify translation ('Donate a translation')
Test if idle TCP connections are closed, and how to disable that
@roadmap_1151_li
Option to encrypt .trace.db file
Try using a factory for Row, Value[] (faster?), http://javolution.org/, alternative ObjectArray / IntArray
@roadmap_1152_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
Auto-Update feature for database, .jar file
@roadmap_1153_li
Functions with unknown return or parameter data types: serialize / deserialize
ResultSet SimpleResultSet.readFromURL(String url): id varchar, state varchar, released timestamp
@roadmap_1154_li
Test if idle TCP connections are closed, and how to disable that
RANK() and DENSE_RANK(), Partition using OVER()
@roadmap_1155_li
Try using a factory for Row, Value[] (faster?), http://javolution.org/, alternative ObjectArray / IntArray
ROW_NUMBER (not the same as ROWNUM)
@roadmap_1156_li
Auto-Update feature for database, .jar file
Partial indexing (see PostgreSQL)
@roadmap_1157_li
ResultSet SimpleResultSet.readFromURL(String url): id varchar, state varchar, released timestamp
BUILD should fail if ant test fails
@roadmap_1158_li
RANK() and DENSE_RANK(), Partition using OVER()
http://rubyforge.org/projects/hypersonic/
@roadmap_1159_li
ROW_NUMBER (not the same as ROWNUM)
DbVisualizer profile for H2
@roadmap_1160_li
Partial indexing (see PostgreSQL)
Add comparator (x === y) : (x = y or (x is null and y is null))
@roadmap_1161_li
BUILD should fail if ant test fails
Try to create trace file even for read only databases
@roadmap_1162_li
http://rubyforge.org/projects/hypersonic/
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)
@roadmap_1163_li
DbVisualizer profile for H2
Count on a column that can not be null would be optimized to COUNT(*)
@roadmap_1164_li
Add comparator (x === y) : (x = y or (x is null and y is null))
Table order: ALTER TABLE TEST ORDER BY NAME DESC (MySQL compatibility)
@roadmap_1165_li
Try to create trace file even for read only databases
Backup tool should work with other databases as well
@roadmap_1166_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)
Console: -ifExists doesn't work for the console. Add a flag to disable other dbs
@roadmap_1167_li
Count on a column that can not be null would be optimized to COUNT(*)
Maybe use Fowler Noll Vo hash function
@roadmap_1168_li
Table order: ALTER TABLE TEST ORDER BY NAME DESC (MySQL compatibility)
Improved full text search (supports LOBs, reader / tokenizer / filter).
@roadmap_1169_li
Backup tool should work with other databases as well
Performance: Update in-place
@roadmap_1170_li
Console: -ifExists doesn't work for the console. Add a flag to disable other dbs
Check if 'FSUTIL behavior set disablelastaccess 1' improves the performance (fsutil behavior query disablelastaccess)
@roadmap_1171_li
Maybe use Fowler Noll Vo hash function
Java static code analysis: http://pmd.sourceforge.net/
@roadmap_1172_li
Improved full text search (supports LOBs, reader / tokenizer / filter).
Java static code analysis: http://www.eclipse.org/tptp/
@roadmap_1173_li
Performance: Update in-place
Compatibility for CREATE SCHEMA AUTHORIZATION
@roadmap_1174_li
Check if 'FSUTIL behavior set disablelastaccess 1' improves the performance (fsutil behavior query disablelastaccess)
Implement Clob / Blob truncate and the remaining functionality
@roadmap_1175_li
Java static code analysis: http://pmd.sourceforge.net/
Maybe close LOBs after closing connection
@roadmap_1176_li
Java static code analysis: http://www.eclipse.org/tptp/
Tree join functionality
@roadmap_1177_li
Compatibility for CREATE SCHEMA AUTHORIZATION
Support alter table add column if table has views defined
@roadmap_1178_li
Implement Clob / Blob truncate and the remaining functionality
Add multiple columns at the same time with ALTER TABLE .. ADD .. ADD ..
@roadmap_1179_li
Maybe close LOBs after closing connection
Support trigger on the tables information_schema.tables and ...columns
@roadmap_1180_li
Tree join functionality
Add H2 to Gem (Ruby install system)
@roadmap_1181_li
Support alter table add column if table has views defined
API for functions / user tables
@roadmap_1182_li
Add multiple columns at the same time with ALTER TABLE .. ADD .. ADD ..
Order conditions inside AND / OR to optimize the performance
@roadmap_1183_li
Support trigger on the tables information_schema.tables and ...columns
Support linked JCR tables
@roadmap_1184_li
Add H2 to Gem (Ruby install system)
Make sure H2 is supported by Execute Query: http://executequery.org/
@roadmap_1185_li
API for functions / user tables
Read InputStream when executing, as late as possible (maybe only embedded mode). Problem with re-execute.
@roadmap_1186_li
Order conditions inside AND / OR to optimize the performance
Full text search: min word length; store word positions
@roadmap_1187_li
Support linked JCR tables
FTP Server: Implement a client to send / receive files to server (dir, get, put)
@roadmap_1188_li
Make sure H2 is supported by Execute Query: http://executequery.org/
FTP Server: Implement SFTP / FTPS
@roadmap_1189_li
Read InputStream when executing, as late as possible (maybe only embedded mode). Problem with re-execute.
Add an option to the SCRIPT command to generate only portable / standard SQL
@roadmap_1190_li
Full text search: min word length; store word positions
Test Dezign for Databases (http://www.datanamic.com)
@roadmap_1191_li
FTP Server: Implement a client to send / receive files to server (dir, get, put)
Fast library for parsing / formatting: http://javolution.org/
@roadmap_1192_li
FTP Server: Implement SFTP / FTPS
Updatable Views (simple cases first)
@roadmap_1193_li
Add an option to the SCRIPT command to generate only portable / standard SQL
Improve create index performance
@roadmap_1194_li
Test Dezign for Databases (http://www.datanamic.com)
Support ARRAY data type
@roadmap_1195_li
Fast library for parsing / formatting: http://javolution.org/
Implement more JDBC 4.0 features
@roadmap_1196_li
Updatable Views (simple cases first)
H2 Console: implement a servlet to allow simple web app integration
@roadmap_1197_li
Improve create index performance
Support TRANSFORM / PIVOT as in MS Access
@roadmap_1198_li
Support ARRAY data type
SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)
@roadmap_1199_li
Implement more JDBC 4.0 features
Support updatable views with join on primary keys (to extend a table)
@roadmap_1200_li
H2 Console: implement a servlet to allow simple web app integration
Public interface for functions (not public static)
@roadmap_1201_li
Support TRANSFORM / PIVOT as in MS Access
Autocomplete: if I type the name of a table that does not exist (should say: syntax not supported)
@roadmap_1202_li
SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)
Autocomplete: schema support: "Other Grammar","Table Expression","{[schemaName.]tableName | (select)} [[AS] newTableAlias]
@roadmap_1203_li
Support updatable views with join on primary keys (to extend a table)
Functions: options readonly, deterministic (pure, always return the same value)
@roadmap_1204_li
Public interface for functions (not public static)
Document FTP server, including -ftpTask option to execute / kill remote processes
@roadmap_1205_li
Autocomplete: if I type the name of a table that does not exist (should say: syntax not supported)
Eliminate undo log records if stored on disk (just one pointer per block, not per record)
@roadmap_1206_li
Autocomplete: schema support: "Other Grammar","Table Expression","{[schemaName.]tableName | (select)} [[AS] newTableAlias]
Feature matrix like in <a href="http://www.inetsoftware.de/products/jdbc/mssql/features/default.asp">i-net software</a> .
@roadmap_1207_li
Functions: options readonly, deterministic (pure, always return the same value)
Updatable result set on table without primary key or unique index
@roadmap_1208_li
Document FTP server, including -ftpTask option to execute / kill remote processes
Use LinkedList instead of ArrayList where applicable
@roadmap_1209_li
Add jdbcx to the javadocs
Optimization: (A=B AND B=C) > (A=B AND B=C AND A=C)
@roadmap_1210_li
Delay reading the row if data is not required
Support % operator (modulo)
@roadmap_1211_li
Eliminate undo log records if stored on disk (just one pointer per block, not per record)
Large subqueries: close them when the main query is closed, not earlier (so result can be reused)
@roadmap_1212_li
Feature matrix like in <a href="http://www.inetsoftware.de/products/jdbc/mssql/features/default.asp">i-net software</a> .
Support 1+'2'=3, '1'+'2'='12' (MS SQL Server compatibility)
@roadmap_1213_li
Updatable result set on table without primary key or unique index
Support nested transactions
@roadmap_1214_li
Use LinkedList instead of ArrayList where applicable
Add a benchmark for big databases, and one for many users
@roadmap_1215_li
Optimization: (A=B AND B=C) > (A=B AND B=C AND A=C)
Compression in the result set (repeating values in the same column)
@roadmap_1216_li
Support % operator (modulo)
Improve command line consistency (+/- options, or true false options)
@roadmap_1217_li
Large subqueries: close them when the main query is closed, not earlier (so result can be reused)
Allow to use the catalog name in statements: [[catalog.]schema.]object
@roadmap_1218_li
Support 1+'2'=3, '1'+'2'='12' (MS SQL Server compatibility)
Support curtimestamp (like curtime, curdate)
@roadmap_1219_li
Support nested transactions
Support ANALYZE {TABLE|INDEX} tableName COMPUTE|ESTIMATE|DELETE STATISTICS ptnOption options
@roadmap_1220_li
Add a benchmark for big databases, and one for many users
Support Sequoia (Continuent.org)
@roadmap_1221_li
Compression in the result set (repeating values in the same column)
Dynamic length numbers / special methods for DataPage.writeByte / writeShort / Ronni Nielsen
@roadmap_1222_li
Improve command line consistency (+/- options, or true false options)
Pluggable ThreadPool, (AvalonDB / deebee / Paul Hammant)
@roadmap_1223_li
Allow to use the catalog name in statements: [[catalog.]schema.]object
Recursive Queries (see details)
@roadmap_1224_li
Support curtimestamp (like curtime, curdate)
Use index on boolean flag (see details)
@roadmap_1225_li
Support ANALYZE {TABLE|INDEX} tableName COMPUTE|ESTIMATE|DELETE STATISTICS ptnOption options
Add build for embedded database only
@roadmap_1226_li
Support Sequoia (Continuent.org)
Release locks (shared or exclusive) on demand
@roadmap_1227_li
Dynamic length numbers / special methods for DataPage.writeByte / writeShort / Ronni Nielsen
Support catalog names
@roadmap_1228_li
Pluggable ThreadPool, (AvalonDB / deebee / Paul Hammant)
Add object id to metadata tables
@roadmap_1229_li
Recursive Queries (see details)
Support OUTER UNION
@roadmap_1230_li
Use index on boolean flag (see details)
Support Parameterized Views (similar to CSVREAD, but using just SQL for the definition)
@roadmap_1231_li
Add build for embedded database only
Implement a command line SQL utility similar to HenPlus: http://henplus.sourceforge.net
@roadmap_1232_li
Release locks (shared or exclusive) on demand
A way (JDBC driver) to map an URL (jdbc:h2map:c1) to a connection object
@roadmap_1233_li
Support catalog names
Build script for the embedded functionality only (h2embedded.jar)
@roadmap_1234_li
Add object id to metadata tables
Option for SCRIPT to only process one or a set of tables, and append to a file
@roadmap_1235_li
Support OUTER UNION
Support using a unique index for IS NULL (including linked tables)
@roadmap_1236_li
Support Parameterized Views (similar to CSVREAD, but using just SQL for the definition)
Support linked tables to the current database
@roadmap_1237_li
Implement a command line SQL utility similar to HenPlus: http://henplus.sourceforge.net
Support dynamic linked schema (automatically adding/updating/removing tables)
@roadmap_1238_li
A way (JDBC driver) to map an URL (jdbc:h2map:c1) to a connection object
Compatibility with Derby: VALUES(1), (2); SELECT * FROM (VALUES (1), (2)) AS myTable(c1)
@roadmap_1239_li
Build script for the embedded functionality only (h2embedded.jar)
Compatibility: # is the start of a single line comment (MySQL) but date quote (Access). Mode specific
@roadmap_1240_li
Option for SCRIPT to only process one or a set of tables, and append to a file
Run benchmarks with JDK 1.5, JDK 1.6, java -server
@roadmap_1241_li
Support using a unique index for IS NULL (including linked tables)
Optimizations: Faster hash function for strings, byte arrays, big decimal
@roadmap_1242_li
Support linked tables to the current database
DatabaseEventListener: callback for all operations (including expected time, RUNSCRIPT) and cancel functionality
@roadmap_1243_li
Support dynamic linked schema (automatically adding/updating/removing tables)
H2 Console / large result sets: use 'streaming' instead of building the page in-memory
@roadmap_1244_li
Compatibility with Derby: VALUES(1), (2); SELECT * FROM (VALUES (1), (2)) AS myTable(c1)
Benchmark: add a graph to show how databases scale (performance/database size)
@roadmap_1245_li
Compatibility: # is the start of a single line comment (MySQL) but date quote (Access). Mode specific
Implement a SQLData interface to map your data over to a custom object
@roadmap_1246_li
Run benchmarks with JDK 1.5, JDK 1.6, java -server
Extend H2 Console to run tools (show command line as well)
@roadmap_1247_li
Optimizations: Faster hash function for strings, byte arrays, big decimal
Make DDL (Data Definition) operations transactional
@roadmap_1248_li
DatabaseEventListener: callback for all operations (including expected time, RUNSCRIPT) and cancel functionality
Allow execution time prepare for SELECT * FROM CSVREAD(?, 'columnNameString')
@roadmap_1249_li
H2 Console / large result sets: use 'streaming' instead of building the page in-memory
Support multiple directories (on different hard drives) for the same database
@roadmap_1250_li
Benchmark: add a graph to show how databases scale (performance/database size)
Server protocol: use challenge response authentication, but client sends hash(user+password) encrypted with response
@roadmap_1251_li
Implement a SQLData interface to map your data over to a custom object
Support EXEC[UTE] (doesn't return a result set, compatible to MS SQL Server)
@roadmap_1252_li
Extend H2 Console to run tools (show command line as well)
GROUP BY and DISTINCT: support large groups (buffer to disk), do not keep large sets in memory
@roadmap_1253_li
Make DDL (Data Definition) operations transactional
Support native XML data type
@roadmap_1254_li
Allow execution time prepare for SELECT * FROM CSVREAD(?, 'columnNameString')
Support triggers with a string property or option: SpringTrigger, OSGITrigger
@roadmap_1255_li
Support multiple directories (on different hard drives) for the same database
Clustering: adding a node should be very fast and without interrupting clients (very short lock)
@roadmap_1256_li
Server protocol: use challenge response authentication, but client sends hash(user+password) encrypted with response
Support materialized views (using triggers)
@roadmap_1257_li
Support EXEC[UTE] (doesn't return a result set, compatible to MS SQL Server)
Store dates in local time zone (portability of database files)
@roadmap_1258_li
GROUP BY and DISTINCT: support large groups (buffer to disk), do not keep large sets in memory
Ability to resize the cache array when resizing the cache
@roadmap_1259_li
Support native XML data type
Automatic conversion from WHERE X>10 AND X>20 to X>20
@roadmap_1260_li
Support triggers with a string property or option: SpringTrigger, OSGITrigger
Time based cache writing (one second after writing the log)
@roadmap_1261_li
Clustering: adding a node should be very fast and without interrupting clients (very short lock)
Check state of H2 driver for DDLUtils: https://issues.apache.org/jira/browse/DDLUTILS-185
@roadmap_1262_li
Support materialized views (using triggers)
Index usage for REGEXP LIKE.
@roadmap_1263_li
Store dates in local time zone (portability of database files)
Add a role DBA (like ADMIN).
@roadmap_1264_li
Ability to resize the cache array when resizing the cache
Better support multiple processors for in-memory databases.
@roadmap_1265_li
Automatic conversion from WHERE X>10 AND X>20 to X>20
Access rights: remember the owner of an object. COMMENT: allow owner of object to change it.
@roadmap_1266_li
Time based cache writing (one second after writing the log)
Implement INSTEAD OF trigger.
@roadmap_1267_li
Check state of H2 driver for DDLUtils: https://issues.apache.org/jira/browse/DDLUTILS-185
Access rights: Finer grained access control (grant access for specific functions)
@roadmap_1268_li
Index usage for REGEXP LIKE.
Support N'text'
@roadmap_1269_li
Add a role DBA (like ADMIN).
Support SCOPE_IDENTITY() to avoid problems when inserting rows in a trigger
@roadmap_1270_li
Better support multiple processors for in-memory databases.
Set a connection read only (Connection.setReadOnly)
@roadmap_1271_li
Access rights: remember the owner of an object. COMMENT: allow owner of object to change it.
In MySQL mode, for AUTO_INCREMENT columns, don't set the primary key
@roadmap_1272_li
Implement INSTEAD OF trigger.
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).
@roadmap_1273_li
Access rights: Finer grained access control (grant access for specific functions)
Read-only sessions (Connection.setReadOnly)
@roadmap_1274_li
Support N'text'
Support compatibility for jdbc:hsqldb:res:
@roadmap_1275_li
Support SCOPE_IDENTITY() to avoid problems when inserting rows in a trigger
In the MySQL and PostgreSQL, use lower case identifiers by default (DatabaseMetaData.storesLowerCaseIdentifiers = true)
@roadmap_1276_li
Support DESCRIBE like MySQL or Oracle (DESC|DESCRIBE {[schema.]object[@connect_identifier]})
Provide a simple, lightweight O/R mapping tool
@roadmap_1277_li
Set a connection read only (Connection.setReadOnly)
Provide an Java SQL builder with standard and H2 syntax
@roadmap_1278_li
In MySQL mode, for AUTO_INCREMENT columns, don't set the primary key
Trace: write OS, file system, JVM,... when opening the database
@roadmap_1279_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).
Trace: write dangerous operations (set log 0,...) in every case (including when opening the database)
@roadmap_1280_li
Read-only sessions (Connection.setReadOnly)
Support indexes for views (probably requires materialized views)
@roadmap_1281_li
Support compatibility for jdbc:hsqldb:res:
Linked tables that point to the same database should share the connection
@roadmap_1282_li
In the MySQL and PostgreSQL, use lower case identifiers by default (DatabaseMetaData.storesLowerCaseIdentifiers = true)
Document SET SEARCH_PATH, BEGIN, EXECUTE, parameters
@roadmap_1283_li
Provide a simple, lightweight O/R mapping tool
Complete Javadocs for ErrorCode messages and add to docs
@roadmap_1284_li
Provide an Java SQL builder with standard and H2 syntax
Browser: use Desktop.isDesktopSupported and browse when using JDK 1.6
@roadmap_1285_li
Trace: write OS, file system, JVM,... when opening the database
Document org.h2.samples.MixedMode
@roadmap_1286_li
Trace: write dangerous operations (set log 0,...) in every case (including when opening the database)
Server: use one listener (detect if the request comes from an PG or TCP client)
@roadmap_1287_li
Support indexes for views (probably requires materialized views)
Store dates as 'local'. Existing files use GMT. Use escape syntax for compatibility.
@roadmap_1288_li
Linked tables that point to the same database should share the connection
Support data type INTERVAL
@roadmap_1289_li
Document SET SEARCH_PATH, BEGIN, EXECUTE, parameters
NATURAL JOIN: MySQL and PostgreSQL don't repeat columns when using SELECT * ...
@roadmap_1290_li
Complete Javadocs for ErrorCode messages and add to docs
Optimize SELECT MIN(ID), MAX(ID), COUNT(*) FROM TEST WHERE ID BETWEEN 100 AND 200
@roadmap_1291_li
Browser: use Desktop.isDesktopSupported and browse when using JDK 1.6
Support Oracle functions: TRUNC, NVL2, TO_CHAR, TO_DATE, TO_NUMBER
@roadmap_1292_li
Document org.h2.samples.MixedMode
Support setQueryTimeout (using System.currentTimeMillis in a loop; not using a thread)
@roadmap_1293_li
Server: use one listener (detect if the request comes from an PG or TCP client)
Sequence: PostgreSQL compatibility (rename, create) (http://www.postgresql.org/docs/8.2/static/sql-altersequence.html)
@roadmap_1294_li
Store dates as 'local'. Existing files use GMT. Use escape syntax for compatibility.
DISTINCT: Support large result sets by sorting on all columns (additionally) and then removing duplicates.
@roadmap_1295_li
Support data type INTERVAL
Add replicating file system
@roadmap_1296_li
NATURAL JOIN: MySQL and PostgreSQL don't repeat columns when using SELECT * ...
File system that writes to two file systems (for replication)
@roadmap_1297_li
Optimize SELECT MIN(ID), MAX(ID), COUNT(*) FROM TEST WHERE ID BETWEEN 100 AND 200
File system with a background writer thread; test if this is faster
@roadmap_1298_li
Support Oracle functions: TRUNC, NVL2, TO_CHAR, TO_DATE, TO_NUMBER
FTP access to a database (.csv for a table, a directory for a schema, a file for a lob, a script.sql file).
@roadmap_1299_li
Support setQueryTimeout (using System.currentTimeMillis in a loop; not using a thread)
LIMIT and OFFSET for GROUP_CONCAT
@roadmap_1300_li
Sequence: PostgreSQL compatibility (rename, create) (http://www.postgresql.org/docs/8.2/static/sql-altersequence.html)
Support triggers for INFORMATION_SCHEMA tables (to better support PostgreSQL catalog: rebuild after creating new tables)
@roadmap_1301_li
DISTINCT: Support large result sets by sorting on all columns (additionally) and then removing duplicates.
Better document the source code
@roadmap_1302_li
Add replicating file system
Support select * from dual a left join dual b on b.x=(select max(x) from dual)
@roadmap_1303_li
File system that writes to two file systems (for replication)
Optimization: don't lock when the database is read-only
@roadmap_1304_li
File system with a background writer thread; test if this is faster
Integrate spatial functions from http://geosysin.iict.ch/irstv-trac/wiki/H2spatial/Download
@roadmap_1305_li
FTP access to a database (.csv for a table, a directory for a schema, a file for a lob, a script.sql file).
Support COSH, SINH, and TANH functions
@roadmap_1306_li
LIMIT and OFFSET for GROUP_CONCAT
Native search: support "phrase search", wildcard search (* and ?), case-insensitive search, boolean operators, and grouping
@roadmap_1307_li
Support triggers for INFORMATION_SCHEMA tables (to better support PostgreSQL catalog: rebuild after creating new tables)
Improve documentation of access rights
@roadmap_1308_li
Better document the source code
Support ENUM data type (see MySQL, PostgreSQL, MS SQL Server, maybe others)
@roadmap_1309_li
Support select * from dual a left join dual b on b.x=(select max(x) from dual)
Command line option for the H2 Console and TCP configuration (.h2.server.properties and .h2.keystore)
@roadmap_1310_li
Optimization: don't lock when the database is read-only
Automatically switch the source code to the right platform before compiling
@roadmap_1311_li
Integrate spatial functions from http://geosysin.iict.ch/irstv-trac/wiki/H2spatial/Download
Support a schema name for Java functions
@roadmap_1312_li
Support COSH, SINH, and TANH functions
Remember the domain of a column
@roadmap_1313_li
Native search: support "phrase search", wildcard search (* and ?), case-insensitive search, boolean operators, and grouping
Support Jackcess (MS Access databases)
@roadmap_1314_li
Improve documentation of access rights
Optimize truncate and drop table (currently all pages are overwritten)
@roadmap_1315_li
Support ENUM data type (see MySQL, PostgreSQL, MS SQL Server, maybe others)
Built-in methods to write large objects (BLOB and CLOB): FILE_WRITE('test.txt', 'Hello World')
@roadmap_1316_li
Command line option for the H2 Console and TCP configuration (.h2.server.properties and .h2.keystore)
Change package name in version 2.0: org.h2database
@roadmap_1317_li
Automatically switch the source code to the right platform before compiling
MVCC: support transactionally consistent backups using SCRIPT
@roadmap_1318_li
Support a schema name for Java functions
Improve time to open large databases (see mail 'init time for distributed setup')
@roadmap_1319_li
Remember the domain of a column
Use ARRAY for fulltext search return value, at least internally in the native implementation (and as an option for the user)
@roadmap_1320_li
Support Jackcess (MS Access databases)
Move Maven 2 repository from hsql.sf.net to h2database.sf.net
@roadmap_1321_li
Optimize truncate and drop table (currently all pages are overwritten)
Java 1.5 tool: JdbcUtils.closeSilently(s1, s2,...)
@roadmap_1322_li
Built-in methods to write large objects (BLOB and CLOB): FILE_WRITE('test.txt', 'Hello World')
Document how to use IKVM
@roadmap_1323_li
Change package name in version 2.0: org.h2database
Javadoc: document design patterns used
@roadmap_1324_li
MVCC: support transactionally consistent backups using SCRIPT
Update Wikipedia
@roadmap_1325_li
Improve time to open large databases (see mail 'init time for distributed setup')
Try https://hudson.dev.java.net/
@roadmap_1326_li
Use ARRAY for fulltext search return value, at least internally in the native implementation (and as an option for the user)
Don't create @~ of not translated
@roadmap_1327_li
Move Maven 2 repository from hsql.sf.net to h2database.sf.net
Triggers for metadata tables; use for PostgreSQL catalog
@roadmap_1328_li
Java 1.5 tool: JdbcUtils.closeSilently(s1, s2,...)
Does the FTP server has problems with multithreading?
@roadmap_1329_li
Document how to use IKVM
Write an article about SQLInjection (h2\src\docsrc\html\images\SQLInjection.txt)
@roadmap_1330_li
Javadoc: document design patterns used
Convert SQL-injection-2.txt to html document, include SQLInjection.java sample
@roadmap_1331_li
Update Wikipedia
Send SQL Injection solution proposal to PostgreSQL, MySQL, Derby, HSQLDB,...
@roadmap_1332_li
Try https://hudson.dev.java.net/
Improve LOB in directories performance
@roadmap_1333_li
Don't create @~ of not translated
Web site design: http://www.igniterealtime.org/projects/openfire/index.jsp
@roadmap_1334_li
Triggers for metadata tables; use for PostgreSQL catalog
HSQLDB compatibility: Openfire server uses: CREATE SCHEMA PUBLIC AUTHORIZATION DBA; CREATE USER SA PASSWORD ""; GRANT DBA TO SA; SET SCHEMA PUBLIC
@roadmap_1335_li
Does the FTP server has problems with multithreading?
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
@roadmap_1336_li
Write an article about SQLInjection (h2\src\docsrc\html\images\SQLInjection.txt)
Translation: use ${.} in help.csv
@roadmap_1337_li
Convert SQL-injection-2.txt to html document, include SQLInjection.java sample
Translated .pdf
@roadmap_1338_li
Send SQL Injection solution proposal to PostgreSQL, MySQL, Derby, HSQLDB,...
Cluster: hot deploy (adding a node on runtime)
@roadmap_1339_li
Improve LOB in directories performance
Test with PostgreSQL Version 8.2
@roadmap_1340_li
Web site design: http://www.igniterealtime.org/projects/openfire/index.jsp
Submit again to http://www.docjar.com/
@roadmap_1341_li
HSQLDB compatibility: Openfire server uses: CREATE SCHEMA PUBLIC AUTHORIZATION DBA; CREATE USER SA PASSWORD ""; GRANT DBA TO SA; SET SCHEMA PUBLIC
Website: Don't use frames.
@roadmap_1342_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
Try again with Lobo browser (pure Java)
@roadmap_1343_li
Translation: use ${.} in help.csv
Recovery tool: bad blocks should be converted to INSERT INTO SYSTEM_ERRORS(...), and things should go into the .trace.db file
@roadmap_1344_li
Translated .pdf
RECOVER=2 to backup the database, run recovery, open the database
@roadmap_1345_li
Cluster: hot deploy (adding a node on runtime)
Recovery should work with encrypted databases
@roadmap_1346_li
Test with PostgreSQL Version 8.2
Integrate tools in H2 Console
@roadmap_1347_li
Submit again to http://www.docjar.com/
Corruption: new error code, add help
@roadmap_1348_li
Website: Don't use frames.
Space reuse: after init, scan all storages and free those that don't belong to a live database object
@roadmap_1349_li
Try again with Lobo browser (pure Java)
SysProperties: change everything to H2_...
@roadmap_1350_li
Recovery tool: bad blocks should be converted to INSERT INTO SYSTEM_ERRORS(...), and things should go into the .trace.db file
Use FilterIn / FilterOut putStream?
@roadmap_1351_li
RECOVER=2 to backup the database, run recovery, open the database
Access rights: add missing features (users should be 'owner' of objects; missing rights for sequences; dropping objects)
@roadmap_1352_li
Recovery should work with encrypted databases
Support NOCACHE table option (Oracle)
@roadmap_1353_li
Integrate tools in H2 Console
Use ant 'get' to download dependencies
@roadmap_1354_li
Corruption: new error code, add help
Index usage for UPDATE ... WHERE .. IN (SELECT...)
@roadmap_1355_li
Space reuse: after init, scan all storages and free those that don't belong to a live database object
The RunScript tool should support interactive mode (reading from system in). Password using a second thread.
@roadmap_1356_li
SysProperties: change everything to H2_...
Add regular javadocs to the homepage.
@roadmap_1357_li
Use FilterIn / FilterOut putStream?
The database should be kept open for a longer time when using the server mode.
@roadmap_1358_li
Access rights: add missing features (users should be 'owner' of objects; missing rights for sequences; dropping objects)
Javadocs: for each tool, add a copy &amp; paste sample in the class level.
@roadmap_1359_li
Support NOCACHE table option (Oracle)
Add google site search to web page.
@roadmap_1360_li
Use ant 'get' to download dependencies
Javadocs: add @author tags.
@roadmap_1361_li
Index usage for UPDATE ... WHERE .. IN (SELECT...)
SET LOG_SYSTEM {NATIVE|LOG4J|COMMONS|DRIVER_MANAGER}
@roadmap_1362_li
The RunScript tool should support interactive mode (reading from system in). Password using a second thread.
Fluent API for tools: Server.createTcpServer().setPort(9081).setPassword(password).start();
@roadmap_1363_li
Add regular javadocs to the homepage.
MySQL compatibility: real SQL statements for SHOW TABLES, DESCRIBE TEST (then remove from Shell)
@roadmap_1364_li
The database should be kept open for a longer time when using the server mode.
Use a default delay of 1 second before closing a database.
@roadmap_1365_li
Javadocs: for each tool, add a copy &amp; paste sample in the class level.
Maven: upload source code and javadocs as well.
@roadmap_1366_li
Add google site search to web page.
Write (log) to system table before adding to internal data structures.
@roadmap_1367_li
Javadocs: add @author tags.
Support very large deletes and updates.
@roadmap_1368_li
SET LOG_SYSTEM {NATIVE|LOG4J|COMMONS|DRIVER_MANAGER}
Doclet (javadocs): constructors are not listed.
@roadmap_1369_li
Fluent API for tools: Server.createTcpServer().setPort(9081).setPassword(password).start();
Support direct lookup for MIN and MAX when using WHERE (see todo.txt / Direct Lookup).
@roadmap_1370_li
MySQL compatibility: SHOW TABLES, DESCRIBE TEST (then remove from Shell)
Support other array types (String[], double[]) in PreparedStatement.setObject(int, Object);
@roadmap_1371_li
Use a default delay of 1 second before closing a database.
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).
@roadmap_1372_li
Maven: upload source code and javadocs as well.
Support CREATE TEMPORARY LINKED TABLE.
@roadmap_1373_li
Write (log) to system table before adding to internal data structures.
MySQL compatibility: SELECT @variable := x FROM SYSTEM_RANGE(1, 50);
@roadmap_1374_li
Support very large deletes and updates.
Oracle compatibility: support NLS_DATE_FORMAT.
@roadmap_1375_li
Doclet (javadocs): constructors are not listed.
Support flashback queries as in Oracle.
@roadmap_1376_li
Support direct lookup for MIN and MAX when using WHERE (see todo.txt / Direct Lookup).
@roadmap_1377_li
Support other array types (String[], double[]) in PreparedStatement.setObject(int, Object);
Import / Export of fixed with text files.
@roadmap_1378_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).
@roadmap_1379_li
Support CREATE TEMPORARY LINKED TABLE.
@roadmap_1380_li
MySQL compatibility: SELECT @variable := x FROM SYSTEM_RANGE(1, 50);
@roadmap_1381_li
Oracle compatibility: support NLS_DATE_FORMAT.
@roadmap_1382_li
Support flashback queries as in Oracle.
@roadmap_1383_h2
@roadmap_1377_h2
Not Planned
@roadmap_1384_li
@roadmap_1378_li
HSQLDB (did) support this: select id i from test where i>0 (other databases don't). Supporting it may break compatibility.
@roadmap_1385_li
@roadmap_1379_li
String.intern (so that Strings can be compared with ==) will not be used because some VMs have problems when used extensively.
@search_1000_b
......
......@@ -1894,7 +1894,7 @@ Platform-Independent Zip
Google Code
@download_1011_p
変更についての詳細は、<a href="history.html">変更ログ</a> をご覧下さい。
#For details about changes, see the <a href="changelog.html">Change Log</a> .
@faq_1000_h1
F A Q
......@@ -5974,22 +5974,22 @@ SQLコマンドがコマンドエリアに表示されます。
#Write more tests and documentation for MVCC (Multi Version Concurrency Control)
@roadmap_1016_li
#RECOVER=1 should automatically recover, =2 should run the recovery tool if required
#Row level locking
@roadmap_1017_li
#More tests with MULTI_THREADED=1
#RECOVER=1 should automatically recover, =2 should run the recovery tool if required
@roadmap_1018_li
#Test with Spatial DB in a box / JTS (http://docs.codehaus.org/display/GEOS/SpatialDBBox)
#More tests with MULTI_THREADED=1
@roadmap_1019_li
#Optimization: result set caching (like MySQL)
#Test with Spatial DB in a box / JTS (http://docs.codehaus.org/display/GEOS/SpatialDBBox)
@roadmap_1020_li
#Server side cursors
#Optimization: result set caching (like MySQL)
@roadmap_1021_li
#Row level locking
#Server side cursors
@roadmap_1022_li
#Long running queries / errors / trace system table
......@@ -6000,1087 +6000,1069 @@ SQLコマンドがコマンドエリアに表示されます。
@roadmap_1024_li
#Shutdown compact
@roadmap_1025_li
#Document server mode, embedded mode, web app mode, dual mode (server+embedded)
@roadmap_1025_h2
#Priority 2
@roadmap_1026_li
#Updatable result sets: DatabaseMetaData.ownUpdatesAreVisible = true (for insert, delete, update) Simple solution: automatically calls 'refresh' when the result was changed. Compare with other databases.
#Automatic mode: jdbc:h2:auto: (embedded mode if possible, if not use server mode). Keep the server running until all have disconnected.
@roadmap_1027_h2
#Priority 2
@roadmap_1027_li
#Support OSGi: http://oscar-osgi.sourceforge.net, http://incubator.apache.org/felix/index.html
@roadmap_1028_li
#Automatic mode: jdbc:h2:auto: (embedded mode if possible, if not use server mode). Keep the server running until all have disconnected.
#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)
@roadmap_1029_li
#Support OSGi: http://oscar-osgi.sourceforge.net, http://incubator.apache.org/felix/index.html
#Pluggable tracing system
@roadmap_1030_li
#Better space re-use in the files after deleting data (shrink the files)
#Full outer joins
@roadmap_1031_li
#Shrink the data file without closing the database (if the end of the file is empty)
#Procedural language / script language (Javascript)
@roadmap_1032_li
#ParameterMetaData should return correct data type where possible (INSERT, UPDATE; supported by PostgreSQL, Derby, HSQLDB)
#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)
@roadmap_1033_li
#Pluggable tracing system
#Clustering: recovery needs to becomes fully automatic. Global write lock feature.
@roadmap_1034_li
#Full outer joins
#Option for Java functions: constant/isDeterministic to allow early evaluation when all parameters are constant
@roadmap_1035_li
#Procedural language / script language (Javascript)
#Support function overloading as in Java (multiple functions with the same name, but different parameter count or data types)
@roadmap_1036_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)
#Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
@roadmap_1037_li
#Clustering: recovery needs to becomes fully automatic. Global write lock feature.
#Groovy Stored Procedures (http://groovy.codehaus.org/Groovy+SQL)
@roadmap_1038_li
#Option for Java functions: constant/isDeterministic to allow early evaluation when all parameters are constant
#System table / function: cache usage
@roadmap_1039_li
#Support function overloading as in Java (multiple functions with the same name, but different parameter count or data types)
#Add a migration guide (list differences between databases)
@roadmap_1040_li
#Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
#Optimization: automatic index creation suggestion using the trace file?
@roadmap_1041_li
#Groovy Stored Procedures (http://groovy.codehaus.org/Groovy+SQL)
#Compression performance: don't allocate buffers, compress / expand in to out buffer
@roadmap_1042_li
#System table / function: cache usage
#Connection pool manager
@roadmap_1043_li
#Add a migration guide (list differences between databases)
#Implement Statement.cancel for server connections
@roadmap_1044_li
#Optimization: automatic index creation suggestion using the trace file?
#Start / stop server with database URL
@roadmap_1045_li
#Compression performance: don't allocate buffers, compress / expand in to out buffer
#Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE
@roadmap_1046_li
#Connection pool manager
#Rebuild index functionality (other than delete the index file)
@roadmap_1047_li
#Implement Statement.cancel for server connections
#Don't use deleteOnExit (bug 4513817: File.deleteOnExit consumes memory)
@roadmap_1048_li
#Start / stop server with database URL
#Console: add accesskey to most important commands (A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA)
@roadmap_1049_li
#Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE
#Feature: a setting to delete the the log or not (for backup)
@roadmap_1050_li
#Rebuild index functionality (other than delete the index file)
#Test with Sun ASPE1_4; JEE Sun AS PE1.4
@roadmap_1051_li
#Don't use deleteOnExit (bug 4513817: File.deleteOnExit consumes memory)
#Test performance again with SQL Server, Oracle, DB2
@roadmap_1052_li
#Console: add accesskey to most important commands (A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA)
#Test with dbmonster (http://dbmonster.kernelpanic.pl/)
@roadmap_1053_li
#Feature: a setting to delete the the log or not (for backup)
#Test with dbcopy (http://dbcopyplugin.sourceforge.net)
@roadmap_1054_li
#Test with Sun ASPE1_4; JEE Sun AS PE1.4
#Find a tool to view a text file >100 MB, with find, page up and down (like less)
@roadmap_1055_li
#Test performance again with SQL Server, Oracle, DB2
#Implement, test, document XAConnection and so on
@roadmap_1056_li
#Test with dbmonster (http://dbmonster.kernelpanic.pl/)
#Web site: meta keywords, description, get rid of frame set
@roadmap_1057_li
#Test with dbcopy (http://dbcopyplugin.sourceforge.net)
#Pluggable data type (for compression, validation, conversion, encryption)
@roadmap_1058_li
#Find a tool to view a text file >100 MB, with find, page up and down (like less)
#CHECK: find out what makes CHECK=TRUE slow, move to CHECK2
@roadmap_1059_li
#Implement, test, document XAConnection and so on
#Improve recovery: improve code for log recovery problems (less try/catch)
@roadmap_1060_li
#Web site: meta keywords, description, get rid of frame set
#Log linear hash index changes, fast open / close
@roadmap_1061_li
#Pluggable data type (for compression, validation, conversion, encryption)
#Index usage for (ID, NAME)=(1, 'Hi'); document
@roadmap_1062_li
#CHECK: find out what makes CHECK=TRUE slow, move to CHECK2
#Suggestion: include jetty as Servlet Container (like LAMP)
@roadmap_1063_li
#Improve recovery: improve code for log recovery problems (less try/catch)
#Trace shipping to server
@roadmap_1064_li
#Log linear hash index changes, fast open / close
#Performance / server mode: use UDP optionally?
@roadmap_1065_li
#Index usage for (ID, NAME)=(1, 'Hi'); document
#Version check: docs / web console (using javascript), and maybe in the library (using TCP/IP)
@roadmap_1066_li
#Suggestion: include jetty as Servlet Container (like LAMP)
#Web server classloader: override findResource / getResourceFrom
@roadmap_1067_li
#Trace shipping to server
#Cost for embedded temporary view is calculated wrong, if result is constant
@roadmap_1068_li
#Performance / server mode: use UDP optionally?
#Comparison: pluggable sort order: natural sort
@roadmap_1069_li
#Version check: docs / web console (using javascript), and maybe in the library (using TCP/IP)
#Count index range query (count(*) where id between 10 and 20)
@roadmap_1070_li
#Web server classloader: override findResource / getResourceFrom
#Eclipse plugin
@roadmap_1071_li
#Cost for embedded temporary view is calculated wrong, if result is constant
#Asynchronous queries to support publish/subscribe: SELECT ... FOR READ WAIT [maxMillisToWait]
@roadmap_1072_li
#Comparison: pluggable sort order: natural sort
@roadmap_1073_li
#Count index range query (count(*) where id between 10 and 20)
@roadmap_1074_li
#Eclipse plugin
@roadmap_1075_li
#iReport to support H2
@roadmap_1076_li
@roadmap_1073_li
#Implement missing JDBC API (CallableStatement,...)
@roadmap_1077_li
@roadmap_1074_li
#Compression of the cache
@roadmap_1078_li
@roadmap_1075_li
#Run H2 Console inside servlet (pass-through servlet of fix the JSP / app)
@roadmap_1079_li
@roadmap_1076_li
#Include SMPT (mail) server (at least client) (alert on cluster failure, low disk space,...)
@roadmap_1080_li
@roadmap_1077_li
#Drop with restrict (currently cascade is the default)
@roadmap_1081_li
@roadmap_1078_li
#JSON parser and functions
@roadmap_1082_li
@roadmap_1079_li
#Automatic collection of statistics (auto ANALYZE)
@roadmap_1083_li
@roadmap_1080_li
#Server: client ping from time to time (to avoid timeout - is timeout a problem?)
@roadmap_1084_li
@roadmap_1081_li
#Copy database: Tool with config GUI and batch mode, extensible (example: compare)
@roadmap_1085_li
@roadmap_1082_li
#Document, implement tool for long running transactions using user-defined compensation statements
@roadmap_1086_li
@roadmap_1083_li
#Support SET TABLE DUAL READONLY
@roadmap_1087_li
@roadmap_1084_li
#Linked schema using CSV files: one schema for a directory of files; support indexes for CSV files
@roadmap_1088_li
@roadmap_1085_li
#Don't write stack traces for common exceptions like duplicate key to the log by default
@roadmap_1089_li
@roadmap_1086_li
#Setting for MAX_QUERY_TIME (default no limit?)
@roadmap_1090_li
@roadmap_1087_li
#GCJ: what is the state now?
@roadmap_1091_li
@roadmap_1088_li
#Use Janino to convert Java to C++
@roadmap_1092_li
@roadmap_1089_li
#Reduce disk space usage (Derby uses less disk space?)
@roadmap_1093_li
@roadmap_1090_li
#Events for: Database Startup, Connections, Login attempts, Disconnections, Prepare (after parsing), Web Server (see http://docs.openlinksw.com/virtuoso/fn_dbev_startup.html)
@roadmap_1094_li
@roadmap_1091_li
#Optimization: Log compression
@roadmap_1095_li
@roadmap_1092_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)
@roadmap_1096_li
@roadmap_1093_li
#Compatibility: in MySQL, HSQLDB, /0.0 is NULL; in PostgreSQL, Derby: Division by zero
@roadmap_1097_li
@roadmap_1094_li
#Functional tables should accept parameters from other tables (see FunctionMultiReturn) SELECT * FROM TEST T, P2C(T.A, T.R)
@roadmap_1098_li
@roadmap_1095_li
#Custom class loader to reload functions on demand
@roadmap_1099_li
@roadmap_1096_li
#Test http://mysql-je.sourceforge.net/
@roadmap_1100_li
@roadmap_1097_li
#Close all files when closing the database (including LOB files that are open on the client side)
@roadmap_1101_li
@roadmap_1098_li
#Test Connection Pool http://jakarta.apache.org/commons/dbcp
@roadmap_1102_li
@roadmap_1099_li
#Profiler option or profiling tool to find long running and often repeated queries (using DatabaseEventListener API)
@roadmap_1103_li
@roadmap_1100_li
#Allow custom settings (@PATH for RUNSCRIPT for example)
@roadmap_1104_li
@roadmap_1101_li
#EXE file: maybe use http://jsmooth.sourceforge.net
@roadmap_1105_li
#SELECT ... FOR READ WAIT [maxMillisToWait]
@roadmap_1106_li
@roadmap_1102_li
#Automatically delete the index file if opening it fails
@roadmap_1107_li
@roadmap_1103_li
#Performance: Automatically build in-memory indexes if the whole table is in memory
@roadmap_1108_li
@roadmap_1104_li
#H2 Console: The webclient could support more features like phpMyAdmin.
@roadmap_1109_li
@roadmap_1105_li
#The HELP information schema can be directly exposed in the Console
@roadmap_1110_li
@roadmap_1106_li
#Maybe use the 0x1234 notation for binary fields, see MS SQL Server
@roadmap_1111_li
@roadmap_1107_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
@roadmap_1112_li
@roadmap_1108_li
#SQL 2003 (http://www.wiscorp.com/sql_2003_standard.zip)
@roadmap_1113_li
@roadmap_1109_li
#http://www.jpackage.org
@roadmap_1114_li
@roadmap_1110_li
#Version column (number/sequence and timestamp based)
@roadmap_1115_li
@roadmap_1111_li
#Optimize getGeneratedKey: send last identity after each execute (server).
@roadmap_1116_li
@roadmap_1112_li
#Date: default date is '1970-01-01' (is it 1900-01-01 in the standard / other databases?)
@roadmap_1117_li
@roadmap_1113_li
#Test and document UPDATE TEST SET (ID, NAME) = (SELECT ID*10, NAME || '!' FROM TEST T WHERE T.ID=TEST.ID);
@roadmap_1118_li
@roadmap_1114_li
#Max memory rows / max undo log size: use block count / row size not row count
@roadmap_1119_li
@roadmap_1115_li
#Index summary is only written if log=2; maybe write it also when log=1 and everything is fine (and no in doubt transactions)
@roadmap_1120_li
@roadmap_1116_li
#Support 123L syntax as in Java; example: SELECT (2000000000*2)
@roadmap_1121_li
@roadmap_1117_li
#Implement point-in-time recovery
@roadmap_1122_li
@roadmap_1118_li
#Memory database: add a feature to keep named database open until 'shutdown'
@roadmap_1123_li
@roadmap_1119_li
#Use the directory of the first script as the default directory for any scripts run inside that script
@roadmap_1124_li
@roadmap_1120_li
#Include the version name in the jar file name
@roadmap_1125_li
@roadmap_1121_li
#Optimize ID=? OR ID=?: convert to IN(...)
@roadmap_1126_li
@roadmap_1122_li
#LIKE: improved version for larger texts (currently using naive search)
@roadmap_1127_li
@roadmap_1123_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
@roadmap_1128_li
@roadmap_1124_li
#The Script tool should work with other databases as well
@roadmap_1129_li
@roadmap_1125_li
#Automatically convert to the next 'higher' data type whenever there is an overflow.
@roadmap_1130_li
@roadmap_1126_li
#Throw an exception when the application calls getInt on a Long (optional)
@roadmap_1131_li
@roadmap_1127_li
#Default date format for input and output (local date constants)
@roadmap_1132_li
@roadmap_1128_li
#Cache collation keys for performance
@roadmap_1133_li
@roadmap_1129_li
#ValueInt.convertToString and so on (remove Value.convertTo)
@roadmap_1134_li
@roadmap_1130_li
#Support custom Collators
@roadmap_1135_li
@roadmap_1131_li
#Document ROWNUM usage for reports: SELECT ROWNUM, * FROM (subquery)
@roadmap_1136_li
@roadmap_1132_li
#Clustering: Reads should be randomly distributed or to a designated database on RAM
@roadmap_1137_li
@roadmap_1133_li
#Clustering: When a database is back alive, automatically synchronize with the master
@roadmap_1138_li
@roadmap_1134_li
#Standalone tool to get relevant system properties and add it to the trace output.
@roadmap_1139_li
@roadmap_1135_li
#Support mixed clustering mode (one embedded, the other server mode)
@roadmap_1140_li
@roadmap_1136_li
#Support 'call proc(1=value)' (PostgreSQL, Oracle)
@roadmap_1141_li
@roadmap_1137_li
#HSQLDB compatibility: "INSERT INTO TEST(name) VALUES(?); SELECT IDENTITY()"
@roadmap_1142_li
@roadmap_1138_li
#Shutdown lock (shutdown can only start if there are no logins pending, and logins are delayed until shutdown ends)
@roadmap_1143_li
@roadmap_1139_li
#Automatically delete the index file if opening it fails
@roadmap_1144_li
@roadmap_1140_li
#DbAdapters http://incubator.apache.org/cayenne/
@roadmap_1145_li
@roadmap_1141_li
#JAMon (proxy jdbc driver)
@roadmap_1146_li
@roadmap_1142_li
#Console: Allow setting Null value; Alternative display format two column (for copy and paste as well)
@roadmap_1147_li
@roadmap_1143_li
#Console: Improve editing data (Tab, Shift-Tab, Enter, Up, Down, Shift+Del?)
@roadmap_1148_li
@roadmap_1144_li
#Console: Autocomplete Ctrl+Space inserts template
@roadmap_1149_li
@roadmap_1145_li
#Google Code http://code.google.com/p/h2database/issues/list#
@roadmap_1150_li
@roadmap_1146_li
#Simplify translation ('Donate a translation')
@roadmap_1151_li
@roadmap_1147_li
#Option to encrypt .trace.db file
@roadmap_1152_li
@roadmap_1148_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
@roadmap_1153_li
@roadmap_1149_li
#Functions with unknown return or parameter data types: serialize / deserialize
@roadmap_1154_li
@roadmap_1150_li
#Test if idle TCP connections are closed, and how to disable that
@roadmap_1155_li
@roadmap_1151_li
#Try using a factory for Row, Value[] (faster?), http://javolution.org/, alternative ObjectArray / IntArray
@roadmap_1156_li
@roadmap_1152_li
#Auto-Update feature for database, .jar file
@roadmap_1157_li
@roadmap_1153_li
#ResultSet SimpleResultSet.readFromURL(String url): id varchar, state varchar, released timestamp
@roadmap_1158_li
@roadmap_1154_li
#RANK() and DENSE_RANK(), Partition using OVER()
@roadmap_1159_li
@roadmap_1155_li
#ROW_NUMBER (not the same as ROWNUM)
@roadmap_1160_li
@roadmap_1156_li
#Partial indexing (see PostgreSQL)
@roadmap_1161_li
@roadmap_1157_li
#BUILD should fail if ant test fails
@roadmap_1162_li
@roadmap_1158_li
#http://rubyforge.org/projects/hypersonic/
@roadmap_1163_li
@roadmap_1159_li
#DbVisualizer profile for H2
@roadmap_1164_li
@roadmap_1160_li
#Add comparator (x === y) : (x = y or (x is null and y is null))
@roadmap_1165_li
@roadmap_1161_li
#Try to create trace file even for read only databases
@roadmap_1166_li
@roadmap_1162_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)
@roadmap_1167_li
@roadmap_1163_li
#Count on a column that can not be null would be optimized to COUNT(*)
@roadmap_1168_li
@roadmap_1164_li
#Table order: ALTER TABLE TEST ORDER BY NAME DESC (MySQL compatibility)
@roadmap_1169_li
@roadmap_1165_li
#Backup tool should work with other databases as well
@roadmap_1170_li
@roadmap_1166_li
#Console: -ifExists doesn't work for the console. Add a flag to disable other dbs
@roadmap_1171_li
@roadmap_1167_li
#Maybe use Fowler Noll Vo hash function
@roadmap_1172_li
@roadmap_1168_li
#Improved full text search (supports LOBs, reader / tokenizer / filter).
@roadmap_1173_li
@roadmap_1169_li
#Performance: Update in-place
@roadmap_1174_li
@roadmap_1170_li
#Check if 'FSUTIL behavior set disablelastaccess 1' improves the performance (fsutil behavior query disablelastaccess)
@roadmap_1175_li
@roadmap_1171_li
#Java static code analysis: http://pmd.sourceforge.net/
@roadmap_1176_li
@roadmap_1172_li
#Java static code analysis: http://www.eclipse.org/tptp/
@roadmap_1177_li
@roadmap_1173_li
#Compatibility for CREATE SCHEMA AUTHORIZATION
@roadmap_1178_li
@roadmap_1174_li
#Implement Clob / Blob truncate and the remaining functionality
@roadmap_1179_li
@roadmap_1175_li
#Maybe close LOBs after closing connection
@roadmap_1180_li
@roadmap_1176_li
#Tree join functionality
@roadmap_1181_li
@roadmap_1177_li
#Support alter table add column if table has views defined
@roadmap_1182_li
@roadmap_1178_li
#Add multiple columns at the same time with ALTER TABLE .. ADD .. ADD ..
@roadmap_1183_li
@roadmap_1179_li
#Support trigger on the tables information_schema.tables and ...columns
@roadmap_1184_li
@roadmap_1180_li
#Add H2 to Gem (Ruby install system)
@roadmap_1185_li
@roadmap_1181_li
#API for functions / user tables
@roadmap_1186_li
@roadmap_1182_li
#Order conditions inside AND / OR to optimize the performance
@roadmap_1187_li
@roadmap_1183_li
#Support linked JCR tables
@roadmap_1188_li
@roadmap_1184_li
#Make sure H2 is supported by Execute Query: http://executequery.org/
@roadmap_1189_li
@roadmap_1185_li
#Read InputStream when executing, as late as possible (maybe only embedded mode). Problem with re-execute.
@roadmap_1190_li
@roadmap_1186_li
#Full text search: min word length; store word positions
@roadmap_1191_li
@roadmap_1187_li
#FTP Server: Implement a client to send / receive files to server (dir, get, put)
@roadmap_1192_li
@roadmap_1188_li
#FTP Server: Implement SFTP / FTPS
@roadmap_1193_li
@roadmap_1189_li
#Add an option to the SCRIPT command to generate only portable / standard SQL
@roadmap_1194_li
@roadmap_1190_li
#Test Dezign for Databases (http://www.datanamic.com)
@roadmap_1195_li
@roadmap_1191_li
#Fast library for parsing / formatting: http://javolution.org/
@roadmap_1196_li
@roadmap_1192_li
#Updatable Views (simple cases first)
@roadmap_1197_li
@roadmap_1193_li
#Improve create index performance
@roadmap_1198_li
@roadmap_1194_li
#Support ARRAY data type
@roadmap_1199_li
@roadmap_1195_li
#Implement more JDBC 4.0 features
@roadmap_1200_li
@roadmap_1196_li
#H2 Console: implement a servlet to allow simple web app integration
@roadmap_1201_li
@roadmap_1197_li
#Support TRANSFORM / PIVOT as in MS Access
@roadmap_1202_li
@roadmap_1198_li
#SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)
@roadmap_1203_li
@roadmap_1199_li
#Support updatable views with join on primary keys (to extend a table)
@roadmap_1204_li
@roadmap_1200_li
#Public interface for functions (not public static)
@roadmap_1205_li
@roadmap_1201_li
#Autocomplete: if I type the name of a table that does not exist (should say: syntax not supported)
@roadmap_1206_li
@roadmap_1202_li
#Autocomplete: schema support: "Other Grammar","Table Expression","{[schemaName.]tableName | (select)} [[AS] newTableAlias]
@roadmap_1207_li
@roadmap_1203_li
#Functions: options readonly, deterministic (pure, always return the same value)
@roadmap_1208_li
@roadmap_1204_li
#Document FTP server, including -ftpTask option to execute / kill remote processes
@roadmap_1209_li
#Add jdbcx to the javadocs
@roadmap_1210_li
#Delay reading the row if data is not required
@roadmap_1211_li
@roadmap_1205_li
#Eliminate undo log records if stored on disk (just one pointer per block, not per record)
@roadmap_1212_li
@roadmap_1206_li
#Feature matrix like in <a href="http://www.inetsoftware.de/products/jdbc/mssql/features/default.asp">i-net software</a> .
@roadmap_1213_li
@roadmap_1207_li
#Updatable result set on table without primary key or unique index
@roadmap_1214_li
@roadmap_1208_li
#Use LinkedList instead of ArrayList where applicable
@roadmap_1215_li
@roadmap_1209_li
#Optimization: (A=B AND B=C) > (A=B AND B=C AND A=C)
@roadmap_1216_li
@roadmap_1210_li
#Support % operator (modulo)
@roadmap_1217_li
@roadmap_1211_li
#Large subqueries: close them when the main query is closed, not earlier (so result can be reused)
@roadmap_1218_li
@roadmap_1212_li
#Support 1+'2'=3, '1'+'2'='12' (MS SQL Server compatibility)
@roadmap_1219_li
@roadmap_1213_li
#Support nested transactions
@roadmap_1220_li
@roadmap_1214_li
#Add a benchmark for big databases, and one for many users
@roadmap_1221_li
@roadmap_1215_li
#Compression in the result set (repeating values in the same column)
@roadmap_1222_li
@roadmap_1216_li
#Improve command line consistency (+/- options, or true false options)
@roadmap_1223_li
@roadmap_1217_li
#Allow to use the catalog name in statements: [[catalog.]schema.]object
@roadmap_1224_li
@roadmap_1218_li
#Support curtimestamp (like curtime, curdate)
@roadmap_1225_li
@roadmap_1219_li
#Support ANALYZE {TABLE|INDEX} tableName COMPUTE|ESTIMATE|DELETE STATISTICS ptnOption options
@roadmap_1226_li
@roadmap_1220_li
#Support Sequoia (Continuent.org)
@roadmap_1227_li
@roadmap_1221_li
#Dynamic length numbers / special methods for DataPage.writeByte / writeShort / Ronni Nielsen
@roadmap_1228_li
@roadmap_1222_li
#Pluggable ThreadPool, (AvalonDB / deebee / Paul Hammant)
@roadmap_1229_li
@roadmap_1223_li
#Recursive Queries (see details)
@roadmap_1230_li
@roadmap_1224_li
#Use index on boolean flag (see details)
@roadmap_1231_li
@roadmap_1225_li
#Add build for embedded database only
@roadmap_1232_li
@roadmap_1226_li
#Release locks (shared or exclusive) on demand
@roadmap_1233_li
@roadmap_1227_li
#Support catalog names
@roadmap_1234_li
@roadmap_1228_li
#Add object id to metadata tables
@roadmap_1235_li
@roadmap_1229_li
#Support OUTER UNION
@roadmap_1236_li
@roadmap_1230_li
#Support Parameterized Views (similar to CSVREAD, but using just SQL for the definition)
@roadmap_1237_li
@roadmap_1231_li
#Implement a command line SQL utility similar to HenPlus: http://henplus.sourceforge.net
@roadmap_1238_li
@roadmap_1232_li
#A way (JDBC driver) to map an URL (jdbc:h2map:c1) to a connection object
@roadmap_1239_li
@roadmap_1233_li
#Build script for the embedded functionality only (h2embedded.jar)
@roadmap_1240_li
@roadmap_1234_li
#Option for SCRIPT to only process one or a set of tables, and append to a file
@roadmap_1241_li
@roadmap_1235_li
#Support using a unique index for IS NULL (including linked tables)
@roadmap_1242_li
@roadmap_1236_li
#Support linked tables to the current database
@roadmap_1243_li
@roadmap_1237_li
#Support dynamic linked schema (automatically adding/updating/removing tables)
@roadmap_1244_li
@roadmap_1238_li
#Compatibility with Derby: VALUES(1), (2); SELECT * FROM (VALUES (1), (2)) AS myTable(c1)
@roadmap_1245_li
@roadmap_1239_li
#Compatibility: # is the start of a single line comment (MySQL) but date quote (Access). Mode specific
@roadmap_1246_li
@roadmap_1240_li
#Run benchmarks with JDK 1.5, JDK 1.6, java -server
@roadmap_1247_li
@roadmap_1241_li
#Optimizations: Faster hash function for strings, byte arrays, big decimal
@roadmap_1248_li
@roadmap_1242_li
#DatabaseEventListener: callback for all operations (including expected time, RUNSCRIPT) and cancel functionality
@roadmap_1249_li
@roadmap_1243_li
#H2 Console / large result sets: use 'streaming' instead of building the page in-memory
@roadmap_1250_li
@roadmap_1244_li
#Benchmark: add a graph to show how databases scale (performance/database size)
@roadmap_1251_li
@roadmap_1245_li
#Implement a SQLData interface to map your data over to a custom object
@roadmap_1252_li
@roadmap_1246_li
#Extend H2 Console to run tools (show command line as well)
@roadmap_1253_li
@roadmap_1247_li
#Make DDL (Data Definition) operations transactional
@roadmap_1254_li
@roadmap_1248_li
#Allow execution time prepare for SELECT * FROM CSVREAD(?, 'columnNameString')
@roadmap_1255_li
@roadmap_1249_li
#Support multiple directories (on different hard drives) for the same database
@roadmap_1256_li
@roadmap_1250_li
#Server protocol: use challenge response authentication, but client sends hash(user+password) encrypted with response
@roadmap_1257_li
@roadmap_1251_li
#Support EXEC[UTE] (doesn't return a result set, compatible to MS SQL Server)
@roadmap_1258_li
@roadmap_1252_li
#GROUP BY and DISTINCT: support large groups (buffer to disk), do not keep large sets in memory
@roadmap_1259_li
@roadmap_1253_li
#Support native XML data type
@roadmap_1260_li
@roadmap_1254_li
#Support triggers with a string property or option: SpringTrigger, OSGITrigger
@roadmap_1261_li
@roadmap_1255_li
#Clustering: adding a node should be very fast and without interrupting clients (very short lock)
@roadmap_1262_li
@roadmap_1256_li
#Support materialized views (using triggers)
@roadmap_1263_li
@roadmap_1257_li
#Store dates in local time zone (portability of database files)
@roadmap_1264_li
@roadmap_1258_li
#Ability to resize the cache array when resizing the cache
@roadmap_1265_li
@roadmap_1259_li
#Automatic conversion from WHERE X>10 AND X>20 to X>20
@roadmap_1266_li
@roadmap_1260_li
#Time based cache writing (one second after writing the log)
@roadmap_1267_li
@roadmap_1261_li
#Check state of H2 driver for DDLUtils: https://issues.apache.org/jira/browse/DDLUTILS-185
@roadmap_1268_li
@roadmap_1262_li
#Index usage for REGEXP LIKE.
@roadmap_1269_li
@roadmap_1263_li
#Add a role DBA (like ADMIN).
@roadmap_1270_li
@roadmap_1264_li
#Better support multiple processors for in-memory databases.
@roadmap_1271_li
@roadmap_1265_li
#Access rights: remember the owner of an object. COMMENT: allow owner of object to change it.
@roadmap_1272_li
@roadmap_1266_li
#Implement INSTEAD OF trigger.
@roadmap_1273_li
@roadmap_1267_li
#Access rights: Finer grained access control (grant access for specific functions)
@roadmap_1274_li
@roadmap_1268_li
#Support N'text'
@roadmap_1275_li
@roadmap_1269_li
#Support SCOPE_IDENTITY() to avoid problems when inserting rows in a trigger
@roadmap_1276_li
#Support DESCRIBE like MySQL or Oracle (DESC|DESCRIBE {[schema.]object[@connect_identifier]})
@roadmap_1277_li
@roadmap_1270_li
#Set a connection read only (Connection.setReadOnly)
@roadmap_1278_li
@roadmap_1271_li
#In MySQL mode, for AUTO_INCREMENT columns, don't set the primary key
@roadmap_1279_li
@roadmap_1272_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).
@roadmap_1280_li
@roadmap_1273_li
#Read-only sessions (Connection.setReadOnly)
@roadmap_1281_li
@roadmap_1274_li
#Support compatibility for jdbc:hsqldb:res:
@roadmap_1282_li
@roadmap_1275_li
#In the MySQL and PostgreSQL, use lower case identifiers by default (DatabaseMetaData.storesLowerCaseIdentifiers = true)
@roadmap_1283_li
@roadmap_1276_li
#Provide a simple, lightweight O/R mapping tool
@roadmap_1284_li
@roadmap_1277_li
#Provide an Java SQL builder with standard and H2 syntax
@roadmap_1285_li
@roadmap_1278_li
#Trace: write OS, file system, JVM,... when opening the database
@roadmap_1286_li
@roadmap_1279_li
#Trace: write dangerous operations (set log 0,...) in every case (including when opening the database)
@roadmap_1287_li
@roadmap_1280_li
#Support indexes for views (probably requires materialized views)
@roadmap_1288_li
@roadmap_1281_li
#Linked tables that point to the same database should share the connection
@roadmap_1289_li
@roadmap_1282_li
#Document SET SEARCH_PATH, BEGIN, EXECUTE, parameters
@roadmap_1290_li
@roadmap_1283_li
#Complete Javadocs for ErrorCode messages and add to docs
@roadmap_1291_li
@roadmap_1284_li
#Browser: use Desktop.isDesktopSupported and browse when using JDK 1.6
@roadmap_1292_li
@roadmap_1285_li
#Document org.h2.samples.MixedMode
@roadmap_1293_li
@roadmap_1286_li
#Server: use one listener (detect if the request comes from an PG or TCP client)
@roadmap_1294_li
@roadmap_1287_li
#Store dates as 'local'. Existing files use GMT. Use escape syntax for compatibility.
@roadmap_1295_li
@roadmap_1288_li
#Support data type INTERVAL
@roadmap_1296_li
@roadmap_1289_li
#NATURAL JOIN: MySQL and PostgreSQL don't repeat columns when using SELECT * ...
@roadmap_1297_li
@roadmap_1290_li
#Optimize SELECT MIN(ID), MAX(ID), COUNT(*) FROM TEST WHERE ID BETWEEN 100 AND 200
@roadmap_1298_li
@roadmap_1291_li
#Support Oracle functions: TRUNC, NVL2, TO_CHAR, TO_DATE, TO_NUMBER
@roadmap_1299_li
@roadmap_1292_li
#Support setQueryTimeout (using System.currentTimeMillis in a loop; not using a thread)
@roadmap_1300_li
@roadmap_1293_li
#Sequence: PostgreSQL compatibility (rename, create) (http://www.postgresql.org/docs/8.2/static/sql-altersequence.html)
@roadmap_1301_li
@roadmap_1294_li
#DISTINCT: Support large result sets by sorting on all columns (additionally) and then removing duplicates.
@roadmap_1302_li
@roadmap_1295_li
#Add replicating file system
@roadmap_1303_li
@roadmap_1296_li
#File system that writes to two file systems (for replication)
@roadmap_1304_li
@roadmap_1297_li
#File system with a background writer thread; test if this is faster
@roadmap_1305_li
@roadmap_1298_li
#FTP access to a database (.csv for a table, a directory for a schema, a file for a lob, a script.sql file).
@roadmap_1306_li
@roadmap_1299_li
#LIMIT and OFFSET for GROUP_CONCAT
@roadmap_1307_li
@roadmap_1300_li
#Support triggers for INFORMATION_SCHEMA tables (to better support PostgreSQL catalog: rebuild after creating new tables)
@roadmap_1308_li
@roadmap_1301_li
#Better document the source code
@roadmap_1309_li
@roadmap_1302_li
#Support select * from dual a left join dual b on b.x=(select max(x) from dual)
@roadmap_1310_li
@roadmap_1303_li
#Optimization: don't lock when the database is read-only
@roadmap_1311_li
@roadmap_1304_li
#Integrate spatial functions from http://geosysin.iict.ch/irstv-trac/wiki/H2spatial/Download
@roadmap_1312_li
@roadmap_1305_li
#Support COSH, SINH, and TANH functions
@roadmap_1313_li
@roadmap_1306_li
#Native search: support "phrase search", wildcard search (* and ?), case-insensitive search, boolean operators, and grouping
@roadmap_1314_li
@roadmap_1307_li
#Improve documentation of access rights
@roadmap_1315_li
@roadmap_1308_li
#Support ENUM data type (see MySQL, PostgreSQL, MS SQL Server, maybe others)
@roadmap_1316_li
@roadmap_1309_li
#Command line option for the H2 Console and TCP configuration (.h2.server.properties and .h2.keystore)
@roadmap_1317_li
@roadmap_1310_li
#Automatically switch the source code to the right platform before compiling
@roadmap_1318_li
@roadmap_1311_li
#Support a schema name for Java functions
@roadmap_1319_li
@roadmap_1312_li
#Remember the domain of a column
@roadmap_1320_li
@roadmap_1313_li
#Support Jackcess (MS Access databases)
@roadmap_1321_li
@roadmap_1314_li
#Optimize truncate and drop table (currently all pages are overwritten)
@roadmap_1322_li
@roadmap_1315_li
#Built-in methods to write large objects (BLOB and CLOB): FILE_WRITE('test.txt', 'Hello World')
@roadmap_1323_li
@roadmap_1316_li
#Change package name in version 2.0: org.h2database
@roadmap_1324_li
@roadmap_1317_li
#MVCC: support transactionally consistent backups using SCRIPT
@roadmap_1325_li
@roadmap_1318_li
#Improve time to open large databases (see mail 'init time for distributed setup')
@roadmap_1326_li
@roadmap_1319_li
#Use ARRAY for fulltext search return value, at least internally in the native implementation (and as an option for the user)
@roadmap_1327_li
@roadmap_1320_li
#Move Maven 2 repository from hsql.sf.net to h2database.sf.net
@roadmap_1328_li
@roadmap_1321_li
#Java 1.5 tool: JdbcUtils.closeSilently(s1, s2,...)
@roadmap_1329_li
@roadmap_1322_li
#Document how to use IKVM
@roadmap_1330_li
@roadmap_1323_li
#Javadoc: document design patterns used
@roadmap_1331_li
@roadmap_1324_li
#Update Wikipedia
@roadmap_1332_li
@roadmap_1325_li
#Try https://hudson.dev.java.net/
@roadmap_1333_li
@roadmap_1326_li
#Don't create @~ of not translated
@roadmap_1334_li
@roadmap_1327_li
#Triggers for metadata tables; use for PostgreSQL catalog
@roadmap_1335_li
@roadmap_1328_li
#Does the FTP server has problems with multithreading?
@roadmap_1336_li
@roadmap_1329_li
#Write an article about SQLInjection (h2\src\docsrc\html\images\SQLInjection.txt)
@roadmap_1337_li
@roadmap_1330_li
#Convert SQL-injection-2.txt to html document, include SQLInjection.java sample
@roadmap_1338_li
@roadmap_1331_li
#Send SQL Injection solution proposal to PostgreSQL, MySQL, Derby, HSQLDB,...
@roadmap_1339_li
@roadmap_1332_li
#Improve LOB in directories performance
@roadmap_1340_li
@roadmap_1333_li
#Web site design: http://www.igniterealtime.org/projects/openfire/index.jsp
@roadmap_1341_li
@roadmap_1334_li
#HSQLDB compatibility: Openfire server uses: CREATE SCHEMA PUBLIC AUTHORIZATION DBA; CREATE USER SA PASSWORD ""; GRANT DBA TO SA; SET SCHEMA PUBLIC
@roadmap_1342_li
@roadmap_1335_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
@roadmap_1343_li
@roadmap_1336_li
#Translation: use ${.} in help.csv
@roadmap_1344_li
@roadmap_1337_li
#Translated .pdf
@roadmap_1345_li
@roadmap_1338_li
#Cluster: hot deploy (adding a node on runtime)
@roadmap_1346_li
@roadmap_1339_li
#Test with PostgreSQL Version 8.2
@roadmap_1347_li
@roadmap_1340_li
#Submit again to http://www.docjar.com/
@roadmap_1348_li
@roadmap_1341_li
#Website: Don't use frames.
@roadmap_1349_li
@roadmap_1342_li
#Try again with Lobo browser (pure Java)
@roadmap_1350_li
@roadmap_1343_li
#Recovery tool: bad blocks should be converted to INSERT INTO SYSTEM_ERRORS(...), and things should go into the .trace.db file
@roadmap_1351_li
@roadmap_1344_li
#RECOVER=2 to backup the database, run recovery, open the database
@roadmap_1352_li
@roadmap_1345_li
#Recovery should work with encrypted databases
@roadmap_1353_li
@roadmap_1346_li
#Integrate tools in H2 Console
@roadmap_1354_li
@roadmap_1347_li
#Corruption: new error code, add help
@roadmap_1355_li
@roadmap_1348_li
#Space reuse: after init, scan all storages and free those that don't belong to a live database object
@roadmap_1356_li
@roadmap_1349_li
#SysProperties: change everything to H2_...
@roadmap_1357_li
@roadmap_1350_li
#Use FilterIn / FilterOut putStream?
@roadmap_1358_li
@roadmap_1351_li
#Access rights: add missing features (users should be 'owner' of objects; missing rights for sequences; dropping objects)
@roadmap_1359_li
@roadmap_1352_li
#Support NOCACHE table option (Oracle)
@roadmap_1360_li
@roadmap_1353_li
#Use ant 'get' to download dependencies
@roadmap_1361_li
@roadmap_1354_li
#Index usage for UPDATE ... WHERE .. IN (SELECT...)
@roadmap_1362_li
@roadmap_1355_li
#The RunScript tool should support interactive mode (reading from system in). Password using a second thread.
@roadmap_1363_li
@roadmap_1356_li
#Add regular javadocs to the homepage.
@roadmap_1364_li
@roadmap_1357_li
#The database should be kept open for a longer time when using the server mode.
@roadmap_1365_li
@roadmap_1358_li
#Javadocs: for each tool, add a copy &amp; paste sample in the class level.
@roadmap_1366_li
@roadmap_1359_li
#Add google site search to web page.
@roadmap_1367_li
@roadmap_1360_li
#Javadocs: add @author tags.
@roadmap_1368_li
@roadmap_1361_li
#SET LOG_SYSTEM {NATIVE|LOG4J|COMMONS|DRIVER_MANAGER}
@roadmap_1369_li
@roadmap_1362_li
#Fluent API for tools: Server.createTcpServer().setPort(9081).setPassword(password).start();
@roadmap_1370_li
#MySQL compatibility: SHOW TABLES, DESCRIBE TEST (then remove from Shell)
@roadmap_1363_li
#MySQL compatibility: real SQL statements for SHOW TABLES, DESCRIBE TEST (then remove from Shell)
@roadmap_1371_li
@roadmap_1364_li
#Use a default delay of 1 second before closing a database.
@roadmap_1372_li
@roadmap_1365_li
#Maven: upload source code and javadocs as well.
@roadmap_1373_li
@roadmap_1366_li
#Write (log) to system table before adding to internal data structures.
@roadmap_1374_li
@roadmap_1367_li
#Support very large deletes and updates.
@roadmap_1375_li
@roadmap_1368_li
#Doclet (javadocs): constructors are not listed.
@roadmap_1376_li
@roadmap_1369_li
#Support direct lookup for MIN and MAX when using WHERE (see todo.txt / Direct Lookup).
@roadmap_1377_li
@roadmap_1370_li
#Support other array types (String[], double[]) in PreparedStatement.setObject(int, Object);
@roadmap_1378_li
@roadmap_1371_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).
@roadmap_1379_li
@roadmap_1372_li
#Support CREATE TEMPORARY LINKED TABLE.
@roadmap_1380_li
@roadmap_1373_li
#MySQL compatibility: SELECT @variable := x FROM SYSTEM_RANGE(1, 50);
@roadmap_1381_li
@roadmap_1374_li
#Oracle compatibility: support NLS_DATE_FORMAT.
@roadmap_1382_li
@roadmap_1375_li
#Support flashback queries as in Oracle.
@roadmap_1383_h2
@roadmap_1376_li
#Import / Export of fixed with text files.
@roadmap_1377_h2
#Not Planned
@roadmap_1384_li
@roadmap_1378_li
#HSQLDB (did) support this: select id i from test where i>0 (other databases don't). Supporting it may break compatibility.
@roadmap_1385_li
@roadmap_1379_li
#String.intern (so that Strings can be compared with ==) will not be used because some VMs have problems when used extensively.
@search_1000_b
......@@ -7880,3 +7862,30 @@ Javaアプリケーション内からインデックスを呼び出すことも
@~changelog_1261_li
#The version number is now major.minor.micro where micro is the build number. Not all version are public, so there may be gaps in the micro. The minor changes when there is a file format change.
@~roadmap_1025_li
#Document server mode, embedded mode, web app mode, dual mode (server+embedded)
@~roadmap_1027_h2
#Priority 2
@~roadmap_1377_li
#Support other array types (String[], double[]) in PreparedStatement.setObject(int, Object);
@~roadmap_1380_li
#MySQL compatibility: SELECT @variable := x FROM SYSTEM_RANGE(1, 50);
@~roadmap_1381_li
#Oracle compatibility: support NLS_DATE_FORMAT.
@~roadmap_1382_li
#Support flashback queries as in Oracle.
@~roadmap_1383_h2
#Not Planned
@~roadmap_1384_li
#HSQLDB (did) support this: select id i from test where i>0 (other databases don't). Supporting it may break compatibility.
@~roadmap_1385_li
#String.intern (so that Strings can be compared with ==) will not be used because some VMs have problems when used extensively.
......@@ -629,7 +629,7 @@ download_1007_h3=Download Mirror and Older Versions
download_1008_a=Platform-Independent Zip
download_1009_h3=Subversion Source Repository
download_1010_a=Google Code
download_1011_p=For details about changes, see the <a href\="history.html">Change Log</a> .
download_1011_p=For details about changes, see the <a href\="changelog.html">Change Log</a> .
faq_1000_h1=Frequently Asked Questions
faq_1001_a=Are there Known Bugs? When is the Next Release?
faq_1002_a=Is this Database Engine Open Source?
......@@ -1987,376 +1987,370 @@ roadmap_1012_li=Index organized tables CREATE TABLE...(...) ORGANIZATION INDEX (
roadmap_1013_li=Change the default for NULL || 'x' to NULL
roadmap_1014_h2=Priority 1
roadmap_1015_li=Write more tests and documentation for MVCC (Multi Version Concurrency Control)
roadmap_1016_li=RECOVER\=1 should automatically recover, \=2 should run the recovery tool if required
roadmap_1017_li=More tests with MULTI_THREADED\=1
roadmap_1018_li=Test with Spatial DB in a box / JTS (http\://docs.codehaus.org/display/GEOS/SpatialDBBox)
roadmap_1019_li=Optimization\: result set caching (like MySQL)
roadmap_1020_li=Server side cursors
roadmap_1021_li=Row level locking
roadmap_1016_li=Row level locking
roadmap_1017_li=RECOVER\=1 should automatically recover, \=2 should run the recovery tool if required
roadmap_1018_li=More tests with MULTI_THREADED\=1
roadmap_1019_li=Test with Spatial DB in a box / JTS (http\://docs.codehaus.org/display/GEOS/SpatialDBBox)
roadmap_1020_li=Optimization\: result set caching (like MySQL)
roadmap_1021_li=Server side cursors
roadmap_1022_li=Long running queries / errors / trace system table
roadmap_1023_li=Migrate database tool (also from other database engines)
roadmap_1024_li=Shutdown compact
roadmap_1025_li=Document server mode, embedded mode, web app mode, dual mode (server+embedded)
roadmap_1026_li=Updatable result sets\: DatabaseMetaData.ownUpdatesAreVisible \= true (for insert, delete, update) Simple solution\: automatically calls 'refresh' when the result was changed. Compare with other databases.
roadmap_1027_h2=Priority 2
roadmap_1028_li=Automatic mode\: jdbc\:h2\:auto\: (embedded mode if possible, if not use server mode). Keep the server running until all have disconnected.
roadmap_1029_li=Support OSGi\: http\://oscar-osgi.sourceforge.net, http\://incubator.apache.org/felix/index.html
roadmap_1030_li=Better space re-use in the files after deleting data (shrink the files)
roadmap_1031_li=Shrink the data file without closing the database (if the end of the file is empty)
roadmap_1032_li=ParameterMetaData should return correct data type where possible (INSERT, UPDATE; supported by PostgreSQL, Derby, HSQLDB)
roadmap_1033_li=Pluggable tracing system
roadmap_1034_li=Full outer joins
roadmap_1035_li=Procedural language / script language (Javascript)
roadmap_1036_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)
roadmap_1037_li=Clustering\: recovery needs to becomes fully automatic. Global write lock feature.
roadmap_1038_li=Option for Java functions\: constant/isDeterministic to allow early evaluation when all parameters are constant
roadmap_1039_li=Support function overloading as in Java (multiple functions with the same name, but different parameter count or data types)
roadmap_1040_li=Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
roadmap_1041_li=Groovy Stored Procedures (http\://groovy.codehaus.org/Groovy+SQL)
roadmap_1042_li=System table / function\: cache usage
roadmap_1043_li=Add a migration guide (list differences between databases)
roadmap_1044_li=Optimization\: automatic index creation suggestion using the trace file?
roadmap_1045_li=Compression performance\: don't allocate buffers, compress / expand in to out buffer
roadmap_1046_li=Connection pool manager
roadmap_1047_li=Implement Statement.cancel for server connections
roadmap_1048_li=Start / stop server with database URL
roadmap_1049_li=Sequence\: add features [NO] MINVALUE, MAXVALUE, CYCLE
roadmap_1050_li=Rebuild index functionality (other than delete the index file)
roadmap_1051_li=Don't use deleteOnExit (bug 4513817\: File.deleteOnExit consumes memory)
roadmap_1052_li=Console\: add accesskey to most important commands (A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA)
roadmap_1053_li=Feature\: a setting to delete the the log or not (for backup)
roadmap_1054_li=Test with Sun ASPE1_4; JEE Sun AS PE1.4
roadmap_1055_li=Test performance again with SQL Server, Oracle, DB2
roadmap_1056_li=Test with dbmonster (http\://dbmonster.kernelpanic.pl/)
roadmap_1057_li=Test with dbcopy (http\://dbcopyplugin.sourceforge.net)
roadmap_1058_li=Find a tool to view a text file >100 MB, with find, page up and down (like less)
roadmap_1059_li=Implement, test, document XAConnection and so on
roadmap_1060_li=Web site\: meta keywords, description, get rid of frame set
roadmap_1061_li=Pluggable data type (for compression, validation, conversion, encryption)
roadmap_1062_li=CHECK\: find out what makes CHECK\=TRUE slow, move to CHECK2
roadmap_1063_li=Improve recovery\: improve code for log recovery problems (less try/catch)
roadmap_1064_li=Log linear hash index changes, fast open / close
roadmap_1065_li=Index usage for (ID, NAME)\=(1, 'Hi'); document
roadmap_1066_li=Suggestion\: include jetty as Servlet Container (like LAMP)
roadmap_1067_li=Trace shipping to server
roadmap_1068_li=Performance / server mode\: use UDP optionally?
roadmap_1069_li=Version check\: docs / web console (using javascript), and maybe in the library (using TCP/IP)
roadmap_1070_li=Web server classloader\: override findResource / getResourceFrom
roadmap_1071_li=Cost for embedded temporary view is calculated wrong, if result is constant
roadmap_1072_li=Comparison\: pluggable sort order\: natural sort
roadmap_1073_li=Count index range query (count(*) where id between 10 and 20)
roadmap_1074_li=Eclipse plugin
roadmap_1075_li=iReport to support H2
roadmap_1076_li=Implement missing JDBC API (CallableStatement,...)
roadmap_1077_li=Compression of the cache
roadmap_1078_li=Run H2 Console inside servlet (pass-through servlet of fix the JSP / app)
roadmap_1079_li=Include SMPT (mail) server (at least client) (alert on cluster failure, low disk space,...)
roadmap_1080_li=Drop with restrict (currently cascade is the default)
roadmap_1081_li=JSON parser and functions
roadmap_1082_li=Automatic collection of statistics (auto ANALYZE)
roadmap_1083_li=Server\: client ping from time to time (to avoid timeout - is timeout a problem?)
roadmap_1084_li=Copy database\: Tool with config GUI and batch mode, extensible (example\: compare)
roadmap_1085_li=Document, implement tool for long running transactions using user-defined compensation statements
roadmap_1086_li=Support SET TABLE DUAL READONLY
roadmap_1087_li=Linked schema using CSV files\: one schema for a directory of files; support indexes for CSV files
roadmap_1088_li=Don't write stack traces for common exceptions like duplicate key to the log by default
roadmap_1089_li=Setting for MAX_QUERY_TIME (default no limit?)
roadmap_1090_li=GCJ\: what is the state now?
roadmap_1091_li=Use Janino to convert Java to C++
roadmap_1092_li=Reduce disk space usage (Derby uses less disk space?)
roadmap_1093_li=Events for\: Database Startup, Connections, Login attempts, Disconnections, Prepare (after parsing), Web Server (see http\://docs.openlinksw.com/virtuoso/fn_dbev_startup.html)
roadmap_1094_li=Optimization\: Log compression
roadmap_1095_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)
roadmap_1096_li=Compatibility\: in MySQL, HSQLDB, /0.0 is NULL; in PostgreSQL, Derby\: Division by zero
roadmap_1097_li=Functional tables should accept parameters from other tables (see FunctionMultiReturn) SELECT * FROM TEST T, P2C(T.A, T.R)
roadmap_1098_li=Custom class loader to reload functions on demand
roadmap_1099_li=Test http\://mysql-je.sourceforge.net/
roadmap_1100_li=Close all files when closing the database (including LOB files that are open on the client side)
roadmap_1101_li=Test Connection Pool http\://jakarta.apache.org/commons/dbcp
roadmap_1102_li=Profiler option or profiling tool to find long running and often repeated queries (using DatabaseEventListener API)
roadmap_1103_li=Allow custom settings (@PATH for RUNSCRIPT for example)
roadmap_1104_li=EXE file\: maybe use http\://jsmooth.sourceforge.net
roadmap_1105_li=SELECT ... FOR READ WAIT [maxMillisToWait]
roadmap_1106_li=Automatically delete the index file if opening it fails
roadmap_1107_li=Performance\: Automatically build in-memory indexes if the whole table is in memory
roadmap_1108_li=H2 Console\: The webclient could support more features like phpMyAdmin.
roadmap_1109_li=The HELP information schema can be directly exposed in the Console
roadmap_1110_li=Maybe use the 0x1234 notation for binary fields, see MS SQL Server
roadmap_1111_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
roadmap_1112_li=SQL 2003 (http\://www.wiscorp.com/sql_2003_standard.zip)
roadmap_1113_li=http\://www.jpackage.org
roadmap_1114_li=Version column (number/sequence and timestamp based)
roadmap_1115_li=Optimize getGeneratedKey\: send last identity after each execute (server).
roadmap_1116_li=Date\: default date is '1970-01-01' (is it 1900-01-01 in the standard / other databases?)
roadmap_1117_li=Test and document UPDATE TEST SET (ID, NAME) \= (SELECT ID*10, NAME || '\!' FROM TEST T WHERE T.ID\=TEST.ID);
roadmap_1118_li=Max memory rows / max undo log size\: use block count / row size not row count
roadmap_1119_li=Index summary is only written if log\=2; maybe write it also when log\=1 and everything is fine (and no in doubt transactions)
roadmap_1120_li=Support 123L syntax as in Java; example\: SELECT (2000000000*2)
roadmap_1121_li=Implement point-in-time recovery
roadmap_1122_li=Memory database\: add a feature to keep named database open until 'shutdown'
roadmap_1123_li=Use the directory of the first script as the default directory for any scripts run inside that script
roadmap_1124_li=Include the version name in the jar file name
roadmap_1125_li=Optimize ID\=? OR ID\=?\: convert to IN(...)
roadmap_1126_li=LIKE\: improved version for larger texts (currently using naive search)
roadmap_1127_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
roadmap_1128_li=The Script tool should work with other databases as well
roadmap_1129_li=Automatically convert to the next 'higher' data type whenever there is an overflow.
roadmap_1130_li=Throw an exception when the application calls getInt on a Long (optional)
roadmap_1131_li=Default date format for input and output (local date constants)
roadmap_1132_li=Cache collation keys for performance
roadmap_1133_li=ValueInt.convertToString and so on (remove Value.convertTo)
roadmap_1134_li=Support custom Collators
roadmap_1135_li=Document ROWNUM usage for reports\: SELECT ROWNUM, * FROM (subquery)
roadmap_1136_li=Clustering\: Reads should be randomly distributed or to a designated database on RAM
roadmap_1137_li=Clustering\: When a database is back alive, automatically synchronize with the master
roadmap_1138_li=Standalone tool to get relevant system properties and add it to the trace output.
roadmap_1139_li=Support mixed clustering mode (one embedded, the other server mode)
roadmap_1140_li=Support 'call proc(1\=value)' (PostgreSQL, Oracle)
roadmap_1141_li=HSQLDB compatibility\: "INSERT INTO TEST(name) VALUES(?); SELECT IDENTITY()"
roadmap_1142_li=Shutdown lock (shutdown can only start if there are no logins pending, and logins are delayed until shutdown ends)
roadmap_1143_li=Automatically delete the index file if opening it fails
roadmap_1144_li=DbAdapters http\://incubator.apache.org/cayenne/
roadmap_1145_li=JAMon (proxy jdbc driver)
roadmap_1146_li=Console\: Allow setting Null value; Alternative display format two column (for copy and paste as well)
roadmap_1147_li=Console\: Improve editing data (Tab, Shift-Tab, Enter, Up, Down, Shift+Del?)
roadmap_1148_li=Console\: Autocomplete Ctrl+Space inserts template
roadmap_1149_li=Google Code http\://code.google.com/p/h2database/issues/list\#
roadmap_1150_li=Simplify translation ('Donate a translation')
roadmap_1151_li=Option to encrypt .trace.db file
roadmap_1152_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
roadmap_1153_li=Functions with unknown return or parameter data types\: serialize / deserialize
roadmap_1154_li=Test if idle TCP connections are closed, and how to disable that
roadmap_1155_li=Try using a factory for Row, Value[] (faster?), http\://javolution.org/, alternative ObjectArray / IntArray
roadmap_1156_li=Auto-Update feature for database, .jar file
roadmap_1157_li=ResultSet SimpleResultSet.readFromURL(String url)\: id varchar, state varchar, released timestamp
roadmap_1158_li=RANK() and DENSE_RANK(), Partition using OVER()
roadmap_1159_li=ROW_NUMBER (not the same as ROWNUM)
roadmap_1160_li=Partial indexing (see PostgreSQL)
roadmap_1161_li=BUILD should fail if ant test fails
roadmap_1162_li=http\://rubyforge.org/projects/hypersonic/
roadmap_1163_li=DbVisualizer profile for H2
roadmap_1164_li=Add comparator (x \=\=\= y) \: (x \= y or (x is null and y is null))
roadmap_1165_li=Try to create trace file even for read only databases
roadmap_1166_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)
roadmap_1167_li=Count on a column that can not be null would be optimized to COUNT(*)
roadmap_1168_li=Table order\: ALTER TABLE TEST ORDER BY NAME DESC (MySQL compatibility)
roadmap_1169_li=Backup tool should work with other databases as well
roadmap_1170_li=Console\: -ifExists doesn't work for the console. Add a flag to disable other dbs
roadmap_1171_li=Maybe use Fowler Noll Vo hash function
roadmap_1172_li=Improved full text search (supports LOBs, reader / tokenizer / filter).
roadmap_1173_li=Performance\: Update in-place
roadmap_1174_li=Check if 'FSUTIL behavior set disablelastaccess 1' improves the performance (fsutil behavior query disablelastaccess)
roadmap_1175_li=Java static code analysis\: http\://pmd.sourceforge.net/
roadmap_1176_li=Java static code analysis\: http\://www.eclipse.org/tptp/
roadmap_1177_li=Compatibility for CREATE SCHEMA AUTHORIZATION
roadmap_1178_li=Implement Clob / Blob truncate and the remaining functionality
roadmap_1179_li=Maybe close LOBs after closing connection
roadmap_1180_li=Tree join functionality
roadmap_1181_li=Support alter table add column if table has views defined
roadmap_1182_li=Add multiple columns at the same time with ALTER TABLE .. ADD .. ADD ..
roadmap_1183_li=Support trigger on the tables information_schema.tables and ...columns
roadmap_1184_li=Add H2 to Gem (Ruby install system)
roadmap_1185_li=API for functions / user tables
roadmap_1186_li=Order conditions inside AND / OR to optimize the performance
roadmap_1187_li=Support linked JCR tables
roadmap_1188_li=Make sure H2 is supported by Execute Query\: http\://executequery.org/
roadmap_1189_li=Read InputStream when executing, as late as possible (maybe only embedded mode). Problem with re-execute.
roadmap_1190_li=Full text search\: min word length; store word positions
roadmap_1191_li=FTP Server\: Implement a client to send / receive files to server (dir, get, put)
roadmap_1192_li=FTP Server\: Implement SFTP / FTPS
roadmap_1193_li=Add an option to the SCRIPT command to generate only portable / standard SQL
roadmap_1194_li=Test Dezign for Databases (http\://www.datanamic.com)
roadmap_1195_li=Fast library for parsing / formatting\: http\://javolution.org/
roadmap_1196_li=Updatable Views (simple cases first)
roadmap_1197_li=Improve create index performance
roadmap_1198_li=Support ARRAY data type
roadmap_1199_li=Implement more JDBC 4.0 features
roadmap_1200_li=H2 Console\: implement a servlet to allow simple web app integration
roadmap_1201_li=Support TRANSFORM / PIVOT as in MS Access
roadmap_1202_li=SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)
roadmap_1203_li=Support updatable views with join on primary keys (to extend a table)
roadmap_1204_li=Public interface for functions (not public static)
roadmap_1205_li=Autocomplete\: if I type the name of a table that does not exist (should say\: syntax not supported)
roadmap_1206_li=Autocomplete\: schema support\: "Other Grammar","Table Expression","{[schemaName.]tableName | (select)} [[AS] newTableAlias]
roadmap_1207_li=Functions\: options readonly, deterministic (pure, always return the same value)
roadmap_1208_li=Document FTP server, including -ftpTask option to execute / kill remote processes
roadmap_1209_li=Add jdbcx to the javadocs
roadmap_1210_li=Delay reading the row if data is not required
roadmap_1211_li=Eliminate undo log records if stored on disk (just one pointer per block, not per record)
roadmap_1212_li=Feature matrix like in <a href\="http\://www.inetsoftware.de/products/jdbc/mssql/features/default.asp">i-net software</a> .
roadmap_1213_li=Updatable result set on table without primary key or unique index
roadmap_1214_li=Use LinkedList instead of ArrayList where applicable
roadmap_1215_li=Optimization\: (A\=B AND B\=C) > (A\=B AND B\=C AND A\=C)
roadmap_1216_li=Support % operator (modulo)
roadmap_1217_li=Large subqueries\: close them when the main query is closed, not earlier (so result can be reused)
roadmap_1218_li=Support 1+'2'\=3, '1'+'2'\='12' (MS SQL Server compatibility)
roadmap_1219_li=Support nested transactions
roadmap_1220_li=Add a benchmark for big databases, and one for many users
roadmap_1221_li=Compression in the result set (repeating values in the same column)
roadmap_1222_li=Improve command line consistency (+/- options, or true false options)
roadmap_1223_li=Allow to use the catalog name in statements\: [[catalog.]schema.]object
roadmap_1224_li=Support curtimestamp (like curtime, curdate)
roadmap_1225_li=Support ANALYZE {TABLE|INDEX} tableName COMPUTE|ESTIMATE|DELETE STATISTICS ptnOption options
roadmap_1226_li=Support Sequoia (Continuent.org)
roadmap_1227_li=Dynamic length numbers / special methods for DataPage.writeByte / writeShort / Ronni Nielsen
roadmap_1228_li=Pluggable ThreadPool, (AvalonDB / deebee / Paul Hammant)
roadmap_1229_li=Recursive Queries (see details)
roadmap_1230_li=Use index on boolean flag (see details)
roadmap_1231_li=Add build for embedded database only
roadmap_1232_li=Release locks (shared or exclusive) on demand
roadmap_1233_li=Support catalog names
roadmap_1234_li=Add object id to metadata tables
roadmap_1235_li=Support OUTER UNION
roadmap_1236_li=Support Parameterized Views (similar to CSVREAD, but using just SQL for the definition)
roadmap_1237_li=Implement a command line SQL utility similar to HenPlus\: http\://henplus.sourceforge.net
roadmap_1238_li=A way (JDBC driver) to map an URL (jdbc\:h2map\:c1) to a connection object
roadmap_1239_li=Build script for the embedded functionality only (h2embedded.jar)
roadmap_1240_li=Option for SCRIPT to only process one or a set of tables, and append to a file
roadmap_1241_li=Support using a unique index for IS NULL (including linked tables)
roadmap_1242_li=Support linked tables to the current database
roadmap_1243_li=Support dynamic linked schema (automatically adding/updating/removing tables)
roadmap_1244_li=Compatibility with Derby\: VALUES(1), (2); SELECT * FROM (VALUES (1), (2)) AS myTable(c1)
roadmap_1245_li=Compatibility\: \# is the start of a single line comment (MySQL) but date quote (Access). Mode specific
roadmap_1246_li=Run benchmarks with JDK 1.5, JDK 1.6, java -server
roadmap_1247_li=Optimizations\: Faster hash function for strings, byte arrays, big decimal
roadmap_1248_li=DatabaseEventListener\: callback for all operations (including expected time, RUNSCRIPT) and cancel functionality
roadmap_1249_li=H2 Console / large result sets\: use 'streaming' instead of building the page in-memory
roadmap_1250_li=Benchmark\: add a graph to show how databases scale (performance/database size)
roadmap_1251_li=Implement a SQLData interface to map your data over to a custom object
roadmap_1252_li=Extend H2 Console to run tools (show command line as well)
roadmap_1253_li=Make DDL (Data Definition) operations transactional
roadmap_1254_li=Allow execution time prepare for SELECT * FROM CSVREAD(?, 'columnNameString')
roadmap_1255_li=Support multiple directories (on different hard drives) for the same database
roadmap_1256_li=Server protocol\: use challenge response authentication, but client sends hash(user+password) encrypted with response
roadmap_1257_li=Support EXEC[UTE] (doesn't return a result set, compatible to MS SQL Server)
roadmap_1258_li=GROUP BY and DISTINCT\: support large groups (buffer to disk), do not keep large sets in memory
roadmap_1259_li=Support native XML data type
roadmap_1260_li=Support triggers with a string property or option\: SpringTrigger, OSGITrigger
roadmap_1261_li=Clustering\: adding a node should be very fast and without interrupting clients (very short lock)
roadmap_1262_li=Support materialized views (using triggers)
roadmap_1263_li=Store dates in local time zone (portability of database files)
roadmap_1264_li=Ability to resize the cache array when resizing the cache
roadmap_1265_li=Automatic conversion from WHERE X>10 AND X>20 to X>20
roadmap_1266_li=Time based cache writing (one second after writing the log)
roadmap_1267_li=Check state of H2 driver for DDLUtils\: https\://issues.apache.org/jira/browse/DDLUTILS-185
roadmap_1268_li=Index usage for REGEXP LIKE.
roadmap_1269_li=Add a role DBA (like ADMIN).
roadmap_1270_li=Better support multiple processors for in-memory databases.
roadmap_1271_li=Access rights\: remember the owner of an object. COMMENT\: allow owner of object to change it.
roadmap_1272_li=Implement INSTEAD OF trigger.
roadmap_1273_li=Access rights\: Finer grained access control (grant access for specific functions)
roadmap_1274_li=Support N'text'
roadmap_1275_li=Support SCOPE_IDENTITY() to avoid problems when inserting rows in a trigger
roadmap_1276_li=Support DESCRIBE like MySQL or Oracle (DESC|DESCRIBE {[schema.]object[@connect_identifier]})
roadmap_1277_li=Set a connection read only (Connection.setReadOnly)
roadmap_1278_li=In MySQL mode, for AUTO_INCREMENT columns, don't set the primary key
roadmap_1279_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).
roadmap_1280_li=Read-only sessions (Connection.setReadOnly)
roadmap_1281_li=Support compatibility for jdbc\:hsqldb\:res\:
roadmap_1282_li=In the MySQL and PostgreSQL, use lower case identifiers by default (DatabaseMetaData.storesLowerCaseIdentifiers \= true)
roadmap_1283_li=Provide a simple, lightweight O/R mapping tool
roadmap_1284_li=Provide an Java SQL builder with standard and H2 syntax
roadmap_1285_li=Trace\: write OS, file system, JVM,... when opening the database
roadmap_1286_li=Trace\: write dangerous operations (set log 0,...) in every case (including when opening the database)
roadmap_1287_li=Support indexes for views (probably requires materialized views)
roadmap_1288_li=Linked tables that point to the same database should share the connection
roadmap_1289_li=Document SET SEARCH_PATH, BEGIN, EXECUTE, parameters
roadmap_1290_li=Complete Javadocs for ErrorCode messages and add to docs
roadmap_1291_li=Browser\: use Desktop.isDesktopSupported and browse when using JDK 1.6
roadmap_1292_li=Document org.h2.samples.MixedMode
roadmap_1293_li=Server\: use one listener (detect if the request comes from an PG or TCP client)
roadmap_1294_li=Store dates as 'local'. Existing files use GMT. Use escape syntax for compatibility.
roadmap_1295_li=Support data type INTERVAL
roadmap_1296_li=NATURAL JOIN\: MySQL and PostgreSQL don't repeat columns when using SELECT * ...
roadmap_1297_li=Optimize SELECT MIN(ID), MAX(ID), COUNT(*) FROM TEST WHERE ID BETWEEN 100 AND 200
roadmap_1298_li=Support Oracle functions\: TRUNC, NVL2, TO_CHAR, TO_DATE, TO_NUMBER
roadmap_1299_li=Support setQueryTimeout (using System.currentTimeMillis in a loop; not using a thread)
roadmap_1300_li=Sequence\: PostgreSQL compatibility (rename, create) (http\://www.postgresql.org/docs/8.2/static/sql-altersequence.html)
roadmap_1301_li=DISTINCT\: Support large result sets by sorting on all columns (additionally) and then removing duplicates.
roadmap_1302_li=Add replicating file system
roadmap_1303_li=File system that writes to two file systems (for replication)
roadmap_1304_li=File system with a background writer thread; test if this is faster
roadmap_1305_li=FTP access to a database (.csv for a table, a directory for a schema, a file for a lob, a script.sql file).
roadmap_1306_li=LIMIT and OFFSET for GROUP_CONCAT
roadmap_1307_li=Support triggers for INFORMATION_SCHEMA tables (to better support PostgreSQL catalog\: rebuild after creating new tables)
roadmap_1308_li=Better document the source code
roadmap_1309_li=Support select * from dual a left join dual b on b.x\=(select max(x) from dual)
roadmap_1310_li=Optimization\: don't lock when the database is read-only
roadmap_1311_li=Integrate spatial functions from http\://geosysin.iict.ch/irstv-trac/wiki/H2spatial/Download
roadmap_1312_li=Support COSH, SINH, and TANH functions
roadmap_1313_li=Native search\: support "phrase search", wildcard search (* and ?), case-insensitive search, boolean operators, and grouping
roadmap_1314_li=Improve documentation of access rights
roadmap_1315_li=Support ENUM data type (see MySQL, PostgreSQL, MS SQL Server, maybe others)
roadmap_1316_li=Command line option for the H2 Console and TCP configuration (.h2.server.properties and .h2.keystore)
roadmap_1317_li=Automatically switch the source code to the right platform before compiling
roadmap_1318_li=Support a schema name for Java functions
roadmap_1319_li=Remember the domain of a column
roadmap_1320_li=Support Jackcess (MS Access databases)
roadmap_1321_li=Optimize truncate and drop table (currently all pages are overwritten)
roadmap_1322_li=Built-in methods to write large objects (BLOB and CLOB)\: FILE_WRITE('test.txt', 'Hello World')
roadmap_1323_li=Change package name in version 2.0\: org.h2database
roadmap_1324_li=MVCC\: support transactionally consistent backups using SCRIPT
roadmap_1325_li=Improve time to open large databases (see mail 'init time for distributed setup')
roadmap_1326_li=Use ARRAY for fulltext search return value, at least internally in the native implementation (and as an option for the user)
roadmap_1327_li=Move Maven 2 repository from hsql.sf.net to h2database.sf.net
roadmap_1328_li=Java 1.5 tool\: JdbcUtils.closeSilently(s1, s2,...)
roadmap_1329_li=Document how to use IKVM
roadmap_1330_li=Javadoc\: document design patterns used
roadmap_1331_li=Update Wikipedia
roadmap_1332_li=Try https\://hudson.dev.java.net/
roadmap_1333_li=Don't create @~ of not translated
roadmap_1334_li=Triggers for metadata tables; use for PostgreSQL catalog
roadmap_1335_li=Does the FTP server has problems with multithreading?
roadmap_1336_li=Write an article about SQLInjection (h2\\src\\docsrc\\html\\images\\SQLInjection.txt)
roadmap_1337_li=Convert SQL-injection-2.txt to html document, include SQLInjection.java sample
roadmap_1338_li=Send SQL Injection solution proposal to PostgreSQL, MySQL, Derby, HSQLDB,...
roadmap_1339_li=Improve LOB in directories performance
roadmap_1340_li=Web site design\: http\://www.igniterealtime.org/projects/openfire/index.jsp
roadmap_1341_li=HSQLDB compatibility\: Openfire server uses\: CREATE SCHEMA PUBLIC AUTHORIZATION DBA; CREATE USER SA PASSWORD ""; GRANT DBA TO SA; SET SCHEMA PUBLIC
roadmap_1342_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
roadmap_1343_li=Translation\: use ${.} in help.csv
roadmap_1344_li=Translated .pdf
roadmap_1345_li=Cluster\: hot deploy (adding a node on runtime)
roadmap_1346_li=Test with PostgreSQL Version 8.2
roadmap_1347_li=Submit again to http\://www.docjar.com/
roadmap_1348_li=Website\: Don't use frames.
roadmap_1349_li=Try again with Lobo browser (pure Java)
roadmap_1350_li=Recovery tool\: bad blocks should be converted to INSERT INTO SYSTEM_ERRORS(...), and things should go into the .trace.db file
roadmap_1351_li=RECOVER\=2 to backup the database, run recovery, open the database
roadmap_1352_li=Recovery should work with encrypted databases
roadmap_1353_li=Integrate tools in H2 Console
roadmap_1354_li=Corruption\: new error code, add help
roadmap_1355_li=Space reuse\: after init, scan all storages and free those that don't belong to a live database object
roadmap_1356_li=SysProperties\: change everything to H2_...
roadmap_1357_li=Use FilterIn / FilterOut putStream?
roadmap_1358_li=Access rights\: add missing features (users should be 'owner' of objects; missing rights for sequences; dropping objects)
roadmap_1359_li=Support NOCACHE table option (Oracle)
roadmap_1360_li=Use ant 'get' to download dependencies
roadmap_1361_li=Index usage for UPDATE ... WHERE .. IN (SELECT...)
roadmap_1362_li=The RunScript tool should support interactive mode (reading from system in). Password using a second thread.
roadmap_1363_li=Add regular javadocs to the homepage.
roadmap_1364_li=The database should be kept open for a longer time when using the server mode.
roadmap_1365_li=Javadocs\: for each tool, add a copy &amp; paste sample in the class level.
roadmap_1366_li=Add google site search to web page.
roadmap_1367_li=Javadocs\: add @author tags.
roadmap_1368_li=SET LOG_SYSTEM {NATIVE|LOG4J|COMMONS|DRIVER_MANAGER}
roadmap_1369_li=Fluent API for tools\: Server.createTcpServer().setPort(9081).setPassword(password).start();
roadmap_1370_li=MySQL compatibility\: SHOW TABLES, DESCRIBE TEST (then remove from Shell)
roadmap_1371_li=Use a default delay of 1 second before closing a database.
roadmap_1372_li=Maven\: upload source code and javadocs as well.
roadmap_1373_li=Write (log) to system table before adding to internal data structures.
roadmap_1374_li=Support very large deletes and updates.
roadmap_1375_li=Doclet (javadocs)\: constructors are not listed.
roadmap_1376_li=Support direct lookup for MIN and MAX when using WHERE (see todo.txt / Direct Lookup).
roadmap_1377_li=Support other array types (String[], double[]) in PreparedStatement.setObject(int, Object);
roadmap_1378_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).
roadmap_1379_li=Support CREATE TEMPORARY LINKED TABLE.
roadmap_1380_li=MySQL compatibility\: SELECT @variable \:\= x FROM SYSTEM_RANGE(1, 50);
roadmap_1381_li=Oracle compatibility\: support NLS_DATE_FORMAT.
roadmap_1382_li=Support flashback queries as in Oracle.
roadmap_1383_h2=Not Planned
roadmap_1384_li=HSQLDB (did) support this\: select id i from test where i>0 (other databases don't). Supporting it may break compatibility.
roadmap_1385_li=String.intern (so that Strings can be compared with \=\=) will not be used because some VMs have problems when used extensively.
roadmap_1025_h2=Priority 2
roadmap_1026_li=Automatic mode\: jdbc\:h2\:auto\: (embedded mode if possible, if not use server mode). Keep the server running until all have disconnected.
roadmap_1027_li=Support OSGi\: http\://oscar-osgi.sourceforge.net, http\://incubator.apache.org/felix/index.html
roadmap_1028_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)
roadmap_1029_li=Pluggable tracing system
roadmap_1030_li=Full outer joins
roadmap_1031_li=Procedural language / script language (Javascript)
roadmap_1032_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)
roadmap_1033_li=Clustering\: recovery needs to becomes fully automatic. Global write lock feature.
roadmap_1034_li=Option for Java functions\: constant/isDeterministic to allow early evaluation when all parameters are constant
roadmap_1035_li=Support function overloading as in Java (multiple functions with the same name, but different parameter count or data types)
roadmap_1036_li=Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
roadmap_1037_li=Groovy Stored Procedures (http\://groovy.codehaus.org/Groovy+SQL)
roadmap_1038_li=System table / function\: cache usage
roadmap_1039_li=Add a migration guide (list differences between databases)
roadmap_1040_li=Optimization\: automatic index creation suggestion using the trace file?
roadmap_1041_li=Compression performance\: don't allocate buffers, compress / expand in to out buffer
roadmap_1042_li=Connection pool manager
roadmap_1043_li=Implement Statement.cancel for server connections
roadmap_1044_li=Start / stop server with database URL
roadmap_1045_li=Sequence\: add features [NO] MINVALUE, MAXVALUE, CYCLE
roadmap_1046_li=Rebuild index functionality (other than delete the index file)
roadmap_1047_li=Don't use deleteOnExit (bug 4513817\: File.deleteOnExit consumes memory)
roadmap_1048_li=Console\: add accesskey to most important commands (A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA)
roadmap_1049_li=Feature\: a setting to delete the the log or not (for backup)
roadmap_1050_li=Test with Sun ASPE1_4; JEE Sun AS PE1.4
roadmap_1051_li=Test performance again with SQL Server, Oracle, DB2
roadmap_1052_li=Test with dbmonster (http\://dbmonster.kernelpanic.pl/)
roadmap_1053_li=Test with dbcopy (http\://dbcopyplugin.sourceforge.net)
roadmap_1054_li=Find a tool to view a text file >100 MB, with find, page up and down (like less)
roadmap_1055_li=Implement, test, document XAConnection and so on
roadmap_1056_li=Web site\: meta keywords, description, get rid of frame set
roadmap_1057_li=Pluggable data type (for compression, validation, conversion, encryption)
roadmap_1058_li=CHECK\: find out what makes CHECK\=TRUE slow, move to CHECK2
roadmap_1059_li=Improve recovery\: improve code for log recovery problems (less try/catch)
roadmap_1060_li=Log linear hash index changes, fast open / close
roadmap_1061_li=Index usage for (ID, NAME)\=(1, 'Hi'); document
roadmap_1062_li=Suggestion\: include jetty as Servlet Container (like LAMP)
roadmap_1063_li=Trace shipping to server
roadmap_1064_li=Performance / server mode\: use UDP optionally?
roadmap_1065_li=Version check\: docs / web console (using javascript), and maybe in the library (using TCP/IP)
roadmap_1066_li=Web server classloader\: override findResource / getResourceFrom
roadmap_1067_li=Cost for embedded temporary view is calculated wrong, if result is constant
roadmap_1068_li=Comparison\: pluggable sort order\: natural sort
roadmap_1069_li=Count index range query (count(*) where id between 10 and 20)
roadmap_1070_li=Eclipse plugin
roadmap_1071_li=Asynchronous queries to support publish/subscribe\: SELECT ... FOR READ WAIT [maxMillisToWait]
roadmap_1072_li=iReport to support H2
roadmap_1073_li=Implement missing JDBC API (CallableStatement,...)
roadmap_1074_li=Compression of the cache
roadmap_1075_li=Run H2 Console inside servlet (pass-through servlet of fix the JSP / app)
roadmap_1076_li=Include SMPT (mail) server (at least client) (alert on cluster failure, low disk space,...)
roadmap_1077_li=Drop with restrict (currently cascade is the default)
roadmap_1078_li=JSON parser and functions
roadmap_1079_li=Automatic collection of statistics (auto ANALYZE)
roadmap_1080_li=Server\: client ping from time to time (to avoid timeout - is timeout a problem?)
roadmap_1081_li=Copy database\: Tool with config GUI and batch mode, extensible (example\: compare)
roadmap_1082_li=Document, implement tool for long running transactions using user-defined compensation statements
roadmap_1083_li=Support SET TABLE DUAL READONLY
roadmap_1084_li=Linked schema using CSV files\: one schema for a directory of files; support indexes for CSV files
roadmap_1085_li=Don't write stack traces for common exceptions like duplicate key to the log by default
roadmap_1086_li=Setting for MAX_QUERY_TIME (default no limit?)
roadmap_1087_li=GCJ\: what is the state now?
roadmap_1088_li=Use Janino to convert Java to C++
roadmap_1089_li=Reduce disk space usage (Derby uses less disk space?)
roadmap_1090_li=Events for\: Database Startup, Connections, Login attempts, Disconnections, Prepare (after parsing), Web Server (see http\://docs.openlinksw.com/virtuoso/fn_dbev_startup.html)
roadmap_1091_li=Optimization\: Log compression
roadmap_1092_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)
roadmap_1093_li=Compatibility\: in MySQL, HSQLDB, /0.0 is NULL; in PostgreSQL, Derby\: Division by zero
roadmap_1094_li=Functional tables should accept parameters from other tables (see FunctionMultiReturn) SELECT * FROM TEST T, P2C(T.A, T.R)
roadmap_1095_li=Custom class loader to reload functions on demand
roadmap_1096_li=Test http\://mysql-je.sourceforge.net/
roadmap_1097_li=Close all files when closing the database (including LOB files that are open on the client side)
roadmap_1098_li=Test Connection Pool http\://jakarta.apache.org/commons/dbcp
roadmap_1099_li=Profiler option or profiling tool to find long running and often repeated queries (using DatabaseEventListener API)
roadmap_1100_li=Allow custom settings (@PATH for RUNSCRIPT for example)
roadmap_1101_li=EXE file\: maybe use http\://jsmooth.sourceforge.net
roadmap_1102_li=Automatically delete the index file if opening it fails
roadmap_1103_li=Performance\: Automatically build in-memory indexes if the whole table is in memory
roadmap_1104_li=H2 Console\: The webclient could support more features like phpMyAdmin.
roadmap_1105_li=The HELP information schema can be directly exposed in the Console
roadmap_1106_li=Maybe use the 0x1234 notation for binary fields, see MS SQL Server
roadmap_1107_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
roadmap_1108_li=SQL 2003 (http\://www.wiscorp.com/sql_2003_standard.zip)
roadmap_1109_li=http\://www.jpackage.org
roadmap_1110_li=Version column (number/sequence and timestamp based)
roadmap_1111_li=Optimize getGeneratedKey\: send last identity after each execute (server).
roadmap_1112_li=Date\: default date is '1970-01-01' (is it 1900-01-01 in the standard / other databases?)
roadmap_1113_li=Test and document UPDATE TEST SET (ID, NAME) \= (SELECT ID*10, NAME || '\!' FROM TEST T WHERE T.ID\=TEST.ID);
roadmap_1114_li=Max memory rows / max undo log size\: use block count / row size not row count
roadmap_1115_li=Index summary is only written if log\=2; maybe write it also when log\=1 and everything is fine (and no in doubt transactions)
roadmap_1116_li=Support 123L syntax as in Java; example\: SELECT (2000000000*2)
roadmap_1117_li=Implement point-in-time recovery
roadmap_1118_li=Memory database\: add a feature to keep named database open until 'shutdown'
roadmap_1119_li=Use the directory of the first script as the default directory for any scripts run inside that script
roadmap_1120_li=Include the version name in the jar file name
roadmap_1121_li=Optimize ID\=? OR ID\=?\: convert to IN(...)
roadmap_1122_li=LIKE\: improved version for larger texts (currently using naive search)
roadmap_1123_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
roadmap_1124_li=The Script tool should work with other databases as well
roadmap_1125_li=Automatically convert to the next 'higher' data type whenever there is an overflow.
roadmap_1126_li=Throw an exception when the application calls getInt on a Long (optional)
roadmap_1127_li=Default date format for input and output (local date constants)
roadmap_1128_li=Cache collation keys for performance
roadmap_1129_li=ValueInt.convertToString and so on (remove Value.convertTo)
roadmap_1130_li=Support custom Collators
roadmap_1131_li=Document ROWNUM usage for reports\: SELECT ROWNUM, * FROM (subquery)
roadmap_1132_li=Clustering\: Reads should be randomly distributed or to a designated database on RAM
roadmap_1133_li=Clustering\: When a database is back alive, automatically synchronize with the master
roadmap_1134_li=Standalone tool to get relevant system properties and add it to the trace output.
roadmap_1135_li=Support mixed clustering mode (one embedded, the other server mode)
roadmap_1136_li=Support 'call proc(1\=value)' (PostgreSQL, Oracle)
roadmap_1137_li=HSQLDB compatibility\: "INSERT INTO TEST(name) VALUES(?); SELECT IDENTITY()"
roadmap_1138_li=Shutdown lock (shutdown can only start if there are no logins pending, and logins are delayed until shutdown ends)
roadmap_1139_li=Automatically delete the index file if opening it fails
roadmap_1140_li=DbAdapters http\://incubator.apache.org/cayenne/
roadmap_1141_li=JAMon (proxy jdbc driver)
roadmap_1142_li=Console\: Allow setting Null value; Alternative display format two column (for copy and paste as well)
roadmap_1143_li=Console\: Improve editing data (Tab, Shift-Tab, Enter, Up, Down, Shift+Del?)
roadmap_1144_li=Console\: Autocomplete Ctrl+Space inserts template
roadmap_1145_li=Google Code http\://code.google.com/p/h2database/issues/list\#
roadmap_1146_li=Simplify translation ('Donate a translation')
roadmap_1147_li=Option to encrypt .trace.db file
roadmap_1148_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
roadmap_1149_li=Functions with unknown return or parameter data types\: serialize / deserialize
roadmap_1150_li=Test if idle TCP connections are closed, and how to disable that
roadmap_1151_li=Try using a factory for Row, Value[] (faster?), http\://javolution.org/, alternative ObjectArray / IntArray
roadmap_1152_li=Auto-Update feature for database, .jar file
roadmap_1153_li=ResultSet SimpleResultSet.readFromURL(String url)\: id varchar, state varchar, released timestamp
roadmap_1154_li=RANK() and DENSE_RANK(), Partition using OVER()
roadmap_1155_li=ROW_NUMBER (not the same as ROWNUM)
roadmap_1156_li=Partial indexing (see PostgreSQL)
roadmap_1157_li=BUILD should fail if ant test fails
roadmap_1158_li=http\://rubyforge.org/projects/hypersonic/
roadmap_1159_li=DbVisualizer profile for H2
roadmap_1160_li=Add comparator (x \=\=\= y) \: (x \= y or (x is null and y is null))
roadmap_1161_li=Try to create trace file even for read only databases
roadmap_1162_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)
roadmap_1163_li=Count on a column that can not be null would be optimized to COUNT(*)
roadmap_1164_li=Table order\: ALTER TABLE TEST ORDER BY NAME DESC (MySQL compatibility)
roadmap_1165_li=Backup tool should work with other databases as well
roadmap_1166_li=Console\: -ifExists doesn't work for the console. Add a flag to disable other dbs
roadmap_1167_li=Maybe use Fowler Noll Vo hash function
roadmap_1168_li=Improved full text search (supports LOBs, reader / tokenizer / filter).
roadmap_1169_li=Performance\: Update in-place
roadmap_1170_li=Check if 'FSUTIL behavior set disablelastaccess 1' improves the performance (fsutil behavior query disablelastaccess)
roadmap_1171_li=Java static code analysis\: http\://pmd.sourceforge.net/
roadmap_1172_li=Java static code analysis\: http\://www.eclipse.org/tptp/
roadmap_1173_li=Compatibility for CREATE SCHEMA AUTHORIZATION
roadmap_1174_li=Implement Clob / Blob truncate and the remaining functionality
roadmap_1175_li=Maybe close LOBs after closing connection
roadmap_1176_li=Tree join functionality
roadmap_1177_li=Support alter table add column if table has views defined
roadmap_1178_li=Add multiple columns at the same time with ALTER TABLE .. ADD .. ADD ..
roadmap_1179_li=Support trigger on the tables information_schema.tables and ...columns
roadmap_1180_li=Add H2 to Gem (Ruby install system)
roadmap_1181_li=API for functions / user tables
roadmap_1182_li=Order conditions inside AND / OR to optimize the performance
roadmap_1183_li=Support linked JCR tables
roadmap_1184_li=Make sure H2 is supported by Execute Query\: http\://executequery.org/
roadmap_1185_li=Read InputStream when executing, as late as possible (maybe only embedded mode). Problem with re-execute.
roadmap_1186_li=Full text search\: min word length; store word positions
roadmap_1187_li=FTP Server\: Implement a client to send / receive files to server (dir, get, put)
roadmap_1188_li=FTP Server\: Implement SFTP / FTPS
roadmap_1189_li=Add an option to the SCRIPT command to generate only portable / standard SQL
roadmap_1190_li=Test Dezign for Databases (http\://www.datanamic.com)
roadmap_1191_li=Fast library for parsing / formatting\: http\://javolution.org/
roadmap_1192_li=Updatable Views (simple cases first)
roadmap_1193_li=Improve create index performance
roadmap_1194_li=Support ARRAY data type
roadmap_1195_li=Implement more JDBC 4.0 features
roadmap_1196_li=H2 Console\: implement a servlet to allow simple web app integration
roadmap_1197_li=Support TRANSFORM / PIVOT as in MS Access
roadmap_1198_li=SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)
roadmap_1199_li=Support updatable views with join on primary keys (to extend a table)
roadmap_1200_li=Public interface for functions (not public static)
roadmap_1201_li=Autocomplete\: if I type the name of a table that does not exist (should say\: syntax not supported)
roadmap_1202_li=Autocomplete\: schema support\: "Other Grammar","Table Expression","{[schemaName.]tableName | (select)} [[AS] newTableAlias]
roadmap_1203_li=Functions\: options readonly, deterministic (pure, always return the same value)
roadmap_1204_li=Document FTP server, including -ftpTask option to execute / kill remote processes
roadmap_1205_li=Eliminate undo log records if stored on disk (just one pointer per block, not per record)
roadmap_1206_li=Feature matrix like in <a href\="http\://www.inetsoftware.de/products/jdbc/mssql/features/default.asp">i-net software</a> .
roadmap_1207_li=Updatable result set on table without primary key or unique index
roadmap_1208_li=Use LinkedList instead of ArrayList where applicable
roadmap_1209_li=Optimization\: (A\=B AND B\=C) > (A\=B AND B\=C AND A\=C)
roadmap_1210_li=Support % operator (modulo)
roadmap_1211_li=Large subqueries\: close them when the main query is closed, not earlier (so result can be reused)
roadmap_1212_li=Support 1+'2'\=3, '1'+'2'\='12' (MS SQL Server compatibility)
roadmap_1213_li=Support nested transactions
roadmap_1214_li=Add a benchmark for big databases, and one for many users
roadmap_1215_li=Compression in the result set (repeating values in the same column)
roadmap_1216_li=Improve command line consistency (+/- options, or true false options)
roadmap_1217_li=Allow to use the catalog name in statements\: [[catalog.]schema.]object
roadmap_1218_li=Support curtimestamp (like curtime, curdate)
roadmap_1219_li=Support ANALYZE {TABLE|INDEX} tableName COMPUTE|ESTIMATE|DELETE STATISTICS ptnOption options
roadmap_1220_li=Support Sequoia (Continuent.org)
roadmap_1221_li=Dynamic length numbers / special methods for DataPage.writeByte / writeShort / Ronni Nielsen
roadmap_1222_li=Pluggable ThreadPool, (AvalonDB / deebee / Paul Hammant)
roadmap_1223_li=Recursive Queries (see details)
roadmap_1224_li=Use index on boolean flag (see details)
roadmap_1225_li=Add build for embedded database only
roadmap_1226_li=Release locks (shared or exclusive) on demand
roadmap_1227_li=Support catalog names
roadmap_1228_li=Add object id to metadata tables
roadmap_1229_li=Support OUTER UNION
roadmap_1230_li=Support Parameterized Views (similar to CSVREAD, but using just SQL for the definition)
roadmap_1231_li=Implement a command line SQL utility similar to HenPlus\: http\://henplus.sourceforge.net
roadmap_1232_li=A way (JDBC driver) to map an URL (jdbc\:h2map\:c1) to a connection object
roadmap_1233_li=Build script for the embedded functionality only (h2embedded.jar)
roadmap_1234_li=Option for SCRIPT to only process one or a set of tables, and append to a file
roadmap_1235_li=Support using a unique index for IS NULL (including linked tables)
roadmap_1236_li=Support linked tables to the current database
roadmap_1237_li=Support dynamic linked schema (automatically adding/updating/removing tables)
roadmap_1238_li=Compatibility with Derby\: VALUES(1), (2); SELECT * FROM (VALUES (1), (2)) AS myTable(c1)
roadmap_1239_li=Compatibility\: \# is the start of a single line comment (MySQL) but date quote (Access). Mode specific
roadmap_1240_li=Run benchmarks with JDK 1.5, JDK 1.6, java -server
roadmap_1241_li=Optimizations\: Faster hash function for strings, byte arrays, big decimal
roadmap_1242_li=DatabaseEventListener\: callback for all operations (including expected time, RUNSCRIPT) and cancel functionality
roadmap_1243_li=H2 Console / large result sets\: use 'streaming' instead of building the page in-memory
roadmap_1244_li=Benchmark\: add a graph to show how databases scale (performance/database size)
roadmap_1245_li=Implement a SQLData interface to map your data over to a custom object
roadmap_1246_li=Extend H2 Console to run tools (show command line as well)
roadmap_1247_li=Make DDL (Data Definition) operations transactional
roadmap_1248_li=Allow execution time prepare for SELECT * FROM CSVREAD(?, 'columnNameString')
roadmap_1249_li=Support multiple directories (on different hard drives) for the same database
roadmap_1250_li=Server protocol\: use challenge response authentication, but client sends hash(user+password) encrypted with response
roadmap_1251_li=Support EXEC[UTE] (doesn't return a result set, compatible to MS SQL Server)
roadmap_1252_li=GROUP BY and DISTINCT\: support large groups (buffer to disk), do not keep large sets in memory
roadmap_1253_li=Support native XML data type
roadmap_1254_li=Support triggers with a string property or option\: SpringTrigger, OSGITrigger
roadmap_1255_li=Clustering\: adding a node should be very fast and without interrupting clients (very short lock)
roadmap_1256_li=Support materialized views (using triggers)
roadmap_1257_li=Store dates in local time zone (portability of database files)
roadmap_1258_li=Ability to resize the cache array when resizing the cache
roadmap_1259_li=Automatic conversion from WHERE X>10 AND X>20 to X>20
roadmap_1260_li=Time based cache writing (one second after writing the log)
roadmap_1261_li=Check state of H2 driver for DDLUtils\: https\://issues.apache.org/jira/browse/DDLUTILS-185
roadmap_1262_li=Index usage for REGEXP LIKE.
roadmap_1263_li=Add a role DBA (like ADMIN).
roadmap_1264_li=Better support multiple processors for in-memory databases.
roadmap_1265_li=Access rights\: remember the owner of an object. COMMENT\: allow owner of object to change it.
roadmap_1266_li=Implement INSTEAD OF trigger.
roadmap_1267_li=Access rights\: Finer grained access control (grant access for specific functions)
roadmap_1268_li=Support N'text'
roadmap_1269_li=Support SCOPE_IDENTITY() to avoid problems when inserting rows in a trigger
roadmap_1270_li=Set a connection read only (Connection.setReadOnly)
roadmap_1271_li=In MySQL mode, for AUTO_INCREMENT columns, don't set the primary key
roadmap_1272_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).
roadmap_1273_li=Read-only sessions (Connection.setReadOnly)
roadmap_1274_li=Support compatibility for jdbc\:hsqldb\:res\:
roadmap_1275_li=In the MySQL and PostgreSQL, use lower case identifiers by default (DatabaseMetaData.storesLowerCaseIdentifiers \= true)
roadmap_1276_li=Provide a simple, lightweight O/R mapping tool
roadmap_1277_li=Provide an Java SQL builder with standard and H2 syntax
roadmap_1278_li=Trace\: write OS, file system, JVM,... when opening the database
roadmap_1279_li=Trace\: write dangerous operations (set log 0,...) in every case (including when opening the database)
roadmap_1280_li=Support indexes for views (probably requires materialized views)
roadmap_1281_li=Linked tables that point to the same database should share the connection
roadmap_1282_li=Document SET SEARCH_PATH, BEGIN, EXECUTE, parameters
roadmap_1283_li=Complete Javadocs for ErrorCode messages and add to docs
roadmap_1284_li=Browser\: use Desktop.isDesktopSupported and browse when using JDK 1.6
roadmap_1285_li=Document org.h2.samples.MixedMode
roadmap_1286_li=Server\: use one listener (detect if the request comes from an PG or TCP client)
roadmap_1287_li=Store dates as 'local'. Existing files use GMT. Use escape syntax for compatibility.
roadmap_1288_li=Support data type INTERVAL
roadmap_1289_li=NATURAL JOIN\: MySQL and PostgreSQL don't repeat columns when using SELECT * ...
roadmap_1290_li=Optimize SELECT MIN(ID), MAX(ID), COUNT(*) FROM TEST WHERE ID BETWEEN 100 AND 200
roadmap_1291_li=Support Oracle functions\: TRUNC, NVL2, TO_CHAR, TO_DATE, TO_NUMBER
roadmap_1292_li=Support setQueryTimeout (using System.currentTimeMillis in a loop; not using a thread)
roadmap_1293_li=Sequence\: PostgreSQL compatibility (rename, create) (http\://www.postgresql.org/docs/8.2/static/sql-altersequence.html)
roadmap_1294_li=DISTINCT\: Support large result sets by sorting on all columns (additionally) and then removing duplicates.
roadmap_1295_li=Add replicating file system
roadmap_1296_li=File system that writes to two file systems (for replication)
roadmap_1297_li=File system with a background writer thread; test if this is faster
roadmap_1298_li=FTP access to a database (.csv for a table, a directory for a schema, a file for a lob, a script.sql file).
roadmap_1299_li=LIMIT and OFFSET for GROUP_CONCAT
roadmap_1300_li=Support triggers for INFORMATION_SCHEMA tables (to better support PostgreSQL catalog\: rebuild after creating new tables)
roadmap_1301_li=Better document the source code
roadmap_1302_li=Support select * from dual a left join dual b on b.x\=(select max(x) from dual)
roadmap_1303_li=Optimization\: don't lock when the database is read-only
roadmap_1304_li=Integrate spatial functions from http\://geosysin.iict.ch/irstv-trac/wiki/H2spatial/Download
roadmap_1305_li=Support COSH, SINH, and TANH functions
roadmap_1306_li=Native search\: support "phrase search", wildcard search (* and ?), case-insensitive search, boolean operators, and grouping
roadmap_1307_li=Improve documentation of access rights
roadmap_1308_li=Support ENUM data type (see MySQL, PostgreSQL, MS SQL Server, maybe others)
roadmap_1309_li=Command line option for the H2 Console and TCP configuration (.h2.server.properties and .h2.keystore)
roadmap_1310_li=Automatically switch the source code to the right platform before compiling
roadmap_1311_li=Support a schema name for Java functions
roadmap_1312_li=Remember the domain of a column
roadmap_1313_li=Support Jackcess (MS Access databases)
roadmap_1314_li=Optimize truncate and drop table (currently all pages are overwritten)
roadmap_1315_li=Built-in methods to write large objects (BLOB and CLOB)\: FILE_WRITE('test.txt', 'Hello World')
roadmap_1316_li=Change package name in version 2.0\: org.h2database
roadmap_1317_li=MVCC\: support transactionally consistent backups using SCRIPT
roadmap_1318_li=Improve time to open large databases (see mail 'init time for distributed setup')
roadmap_1319_li=Use ARRAY for fulltext search return value, at least internally in the native implementation (and as an option for the user)
roadmap_1320_li=Move Maven 2 repository from hsql.sf.net to h2database.sf.net
roadmap_1321_li=Java 1.5 tool\: JdbcUtils.closeSilently(s1, s2,...)
roadmap_1322_li=Document how to use IKVM
roadmap_1323_li=Javadoc\: document design patterns used
roadmap_1324_li=Update Wikipedia
roadmap_1325_li=Try https\://hudson.dev.java.net/
roadmap_1326_li=Don't create @~ of not translated
roadmap_1327_li=Triggers for metadata tables; use for PostgreSQL catalog
roadmap_1328_li=Does the FTP server has problems with multithreading?
roadmap_1329_li=Write an article about SQLInjection (h2\\src\\docsrc\\html\\images\\SQLInjection.txt)
roadmap_1330_li=Convert SQL-injection-2.txt to html document, include SQLInjection.java sample
roadmap_1331_li=Send SQL Injection solution proposal to PostgreSQL, MySQL, Derby, HSQLDB,...
roadmap_1332_li=Improve LOB in directories performance
roadmap_1333_li=Web site design\: http\://www.igniterealtime.org/projects/openfire/index.jsp
roadmap_1334_li=HSQLDB compatibility\: Openfire server uses\: CREATE SCHEMA PUBLIC AUTHORIZATION DBA; CREATE USER SA PASSWORD ""; GRANT DBA TO SA; SET SCHEMA PUBLIC
roadmap_1335_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
roadmap_1336_li=Translation\: use ${.} in help.csv
roadmap_1337_li=Translated .pdf
roadmap_1338_li=Cluster\: hot deploy (adding a node on runtime)
roadmap_1339_li=Test with PostgreSQL Version 8.2
roadmap_1340_li=Submit again to http\://www.docjar.com/
roadmap_1341_li=Website\: Don't use frames.
roadmap_1342_li=Try again with Lobo browser (pure Java)
roadmap_1343_li=Recovery tool\: bad blocks should be converted to INSERT INTO SYSTEM_ERRORS(...), and things should go into the .trace.db file
roadmap_1344_li=RECOVER\=2 to backup the database, run recovery, open the database
roadmap_1345_li=Recovery should work with encrypted databases
roadmap_1346_li=Integrate tools in H2 Console
roadmap_1347_li=Corruption\: new error code, add help
roadmap_1348_li=Space reuse\: after init, scan all storages and free those that don't belong to a live database object
roadmap_1349_li=SysProperties\: change everything to H2_...
roadmap_1350_li=Use FilterIn / FilterOut putStream?
roadmap_1351_li=Access rights\: add missing features (users should be 'owner' of objects; missing rights for sequences; dropping objects)
roadmap_1352_li=Support NOCACHE table option (Oracle)
roadmap_1353_li=Use ant 'get' to download dependencies
roadmap_1354_li=Index usage for UPDATE ... WHERE .. IN (SELECT...)
roadmap_1355_li=The RunScript tool should support interactive mode (reading from system in). Password using a second thread.
roadmap_1356_li=Add regular javadocs to the homepage.
roadmap_1357_li=The database should be kept open for a longer time when using the server mode.
roadmap_1358_li=Javadocs\: for each tool, add a copy &amp; paste sample in the class level.
roadmap_1359_li=Add google site search to web page.
roadmap_1360_li=Javadocs\: add @author tags.
roadmap_1361_li=SET LOG_SYSTEM {NATIVE|LOG4J|COMMONS|DRIVER_MANAGER}
roadmap_1362_li=Fluent API for tools\: Server.createTcpServer().setPort(9081).setPassword(password).start();
roadmap_1363_li=MySQL compatibility\: real SQL statements for SHOW TABLES, DESCRIBE TEST (then remove from Shell)
roadmap_1364_li=Use a default delay of 1 second before closing a database.
roadmap_1365_li=Maven\: upload source code and javadocs as well.
roadmap_1366_li=Write (log) to system table before adding to internal data structures.
roadmap_1367_li=Support very large deletes and updates.
roadmap_1368_li=Doclet (javadocs)\: constructors are not listed.
roadmap_1369_li=Support direct lookup for MIN and MAX when using WHERE (see todo.txt / Direct Lookup).
roadmap_1370_li=Support other array types (String[], double[]) in PreparedStatement.setObject(int, Object);
roadmap_1371_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).
roadmap_1372_li=Support CREATE TEMPORARY LINKED TABLE.
roadmap_1373_li=MySQL compatibility\: SELECT @variable \:\= x FROM SYSTEM_RANGE(1, 50);
roadmap_1374_li=Oracle compatibility\: support NLS_DATE_FORMAT.
roadmap_1375_li=Support flashback queries as in Oracle.
roadmap_1376_li=Import / Export of fixed with text files.
roadmap_1377_h2=Not Planned
roadmap_1378_li=HSQLDB (did) support this\: select id i from test where i>0 (other databases don't). Supporting it may break compatibility.
roadmap_1379_li=String.intern (so that Strings can be compared with \=\=) will not be used because some VMs have problems when used extensively.
search_1000_b=Search\:
search_1001_td=Highlight keyword(s)
search_1002_a=Home
......
......@@ -268,6 +268,12 @@ public class Database implements DataHandler {
}
}
/**
* Get the file header (the 'magic bytes').
*
* @param textStorage if the header of a text storage should be returned
* @return the magic bytes
*/
public static byte[] getMagic(boolean textStorage) {
if (textStorage) {
return Constants.MAGIC_FILE_HEADER_TEXT.getBytes();
......@@ -280,6 +286,13 @@ public class Database implements DataHandler {
return getMagic(textStorage);
}
/**
* Check if two values are equal with the current comparison mode.
*
* @param a the first value
* @param b the second value
* @return true if both objects are equal
*/
public boolean areEqual(Value a, Value b) throws SQLException {
// TODO optimization possible
// boolean is = a.compareEqual(b);
......@@ -292,10 +305,28 @@ public class Database implements DataHandler {
return a.compareTo(b, compareMode) == 0;
}
/**
* Compare two values with the current comparison mode. The values may not
* be of the same type.
*
* @param a the first value
* @param b the second value
* @return 0 if both values are equal, -1 if the first value is smaller, and
* 1 otherwise
*/
public int compare(Value a, Value b) throws SQLException {
return a.compareTo(b, compareMode);
}
/**
* Compare two values with the current comparison mode. The values must be
* of the same type.
*
* @param a the first value
* @param b the second value
* @return 0 if both values are equal, -1 if the first value is smaller, and
* 1 otherwise
*/
public int compareTypeSave(Value a, Value b) throws SQLException {
return a.compareTypeSave(b, compareMode);
}
......@@ -375,10 +406,22 @@ public class Database implements DataHandler {
throw Message.getSQLException(ErrorCode.SIMULATED_POWER_OFF);
}
/**
* Check if a database with the given name exists.
*
* @param name the name of the database (including path)
* @return true if one exists
*/
public static boolean exists(String name) {
return FileUtils.exists(name + Constants.SUFFIX_DATA_FILE);
}
/**
* Get the trace object for the given module.
*
* @param module the module name
* @return the trace object
*/
public Trace getTrace(String module) {
return traceSystem.getTrace(module);
}
......@@ -397,8 +440,15 @@ public class Database implements DataHandler {
return store;
}
public boolean validateFilePasswordHash(String c, byte[] hash) {
return ByteUtils.compareSecure(hash, filePasswordHash) && StringUtils.equals(c, cipher);
/**
* Check if the file password hash is correct.
*
* @param cipher the cipher algorithm
* @param hash the hash code
* @return true if the password matches
*/
public boolean validateFilePasswordHash(String cipher, byte[] hash) {
return ByteUtils.compareSecure(hash, filePasswordHash) && StringUtils.equals(cipher, this.cipher);
}
private void openFileData() throws SQLException {
......@@ -645,6 +695,12 @@ public class Database implements DataHandler {
}
}
/**
* Remove the storage object from the file.
*
* @param id the storage id
* @param file the file
*/
public void removeStorage(int id, DiskFile file) {
if (SysProperties.CHECK) {
Storage s = (Storage) storageMap.get(id);
......@@ -655,6 +711,14 @@ public class Database implements DataHandler {
storageMap.remove(id);
}
/**
* Get the storage object for the given file. An new object is created if
* required.
*
* @param id the storage id
* @param file the file
* @return the storage object
*/
public Storage getStorage(int id, DiskFile file) {
Storage storage = (Storage) storageMap.get(id);
if (storage != null) {
......@@ -689,6 +753,12 @@ public class Database implements DataHandler {
}
}
/**
* Remove the given object from the meta data.
*
* @param session the session
* @param id the id of the object to remove
*/
public synchronized void removeMeta(Session session, int id) throws SQLException {
SearchRow r = meta.getTemplateSimpleRow(false);
r.setValue(0, ValueInt.get(id));
......@@ -734,6 +804,12 @@ public class Database implements DataHandler {
}
}
/**
* Add a schema object to the database.
*
* @param session the session
* @param obj the object to add
*/
public synchronized void addSchemaObject(Session session, SchemaObject obj) throws SQLException {
obj.getSchema().add(obj);
int id = obj.getId();
......@@ -742,6 +818,12 @@ public class Database implements DataHandler {
}
}
/**
* Add an object to the database.
*
* @param session the session
* @param obj the object to add
*/
public synchronized void addDatabaseObject(Session session, DbObject obj) throws SQLException {
HashMap map = getMap(obj.getType());
if (obj.getType() == DbObject.USER) {
......@@ -760,11 +842,24 @@ public class Database implements DataHandler {
}
map.put(name, obj);
}
public Setting findSetting(String name) {
return (Setting) settings.get(name);
/**
* Get the user defined aggregate function if it exists, or null if not.
*
* @param name the name of the user defined aggregate function
* @return the aggregate function or null
*/
public UserAggregate findAggregate(String name) {
return (UserAggregate) aggregates.get(name);
}
/**
* Get the comment for the given database object if one exists, or null if
* not.
*
* @param object the database object
* @return the comment or null
*/
public Comment findComment(DbObject object) {
if (object.getType() == DbObject.COMMENT) {
return null;
......@@ -772,23 +867,75 @@ public class Database implements DataHandler {
String key = Comment.getKey(object);
return (Comment) comments.get(key);
}
public User findUser(String name) {
return (User) users.get(name);
}
/**
* Get the user defined function if it exists, or null if not.
*
* @param name the name of the user defined function
* @return the function or null
*/
public FunctionAlias findFunctionAlias(String name) {
return (FunctionAlias) functionAliases.get(name);
}
/**
* Get the role if it exists, or null if not.
*
* @param roleName the name of the role
* @return the role or null
*/
public Role findRole(String roleName) {
return (Role) roles.get(roleName);
}
public UserAggregate findAggregate(String name) {
return (UserAggregate) aggregates.get(name);
/**
* Get the schema if it exists, or null if not.
*
* @param schemaName the name of the schema
* @return the schema or null
*/
public Schema findSchema(String schemaName) {
return (Schema) schemas.get(schemaName);
}
/**
* Get the setting if it exists, or null if not.
*
* @param name the name of the setting
* @return the setting or null
*/
public Setting findSetting(String name) {
return (Setting) settings.get(name);
}
/**
* Get the user if it exists, or null if not.
*
* @param name the name of the user
* @return the user or null
*/
public User findUser(String name) {
return (User) users.get(name);
}
/**
* Get the user defined data type if it exists, or null if not.
*
* @param name the name of the user defined data type
* @return the user defined data type or null
*/
public UserDataType findUserDataType(String name) {
return (UserDataType) userDataTypes.get(name);
}
/**
* Get user with the given name. This method throws an exception if the user
* does not exist.
*
* @param name the user name
* @return the user
* @throws SQLException if the user does not exist
*/
public User getUser(String name) throws SQLException {
User user = findUser(name);
if (user == null) {
......@@ -797,7 +944,14 @@ public class Database implements DataHandler {
return user;
}
public synchronized Session createUserSession(User user) throws SQLException {
/**
* Create a session for the given user.
*
* @param user the user
* @return the session
* @throws SQLException if the database is in exclusive mode
*/
public synchronized Session createSession(User user) throws SQLException {
if (exclusiveSession != null) {
throw Message.getSQLException(ErrorCode.DATABASE_IS_IN_EXCLUSIVE_MODE);
}
......@@ -811,6 +965,11 @@ public class Database implements DataHandler {
return session;
}
/**
* Remove a session. This method is called after the user has disconnected.
*
* @param session the session
*/
public synchronized void removeSession(Session session) throws SQLException {
if (session != null) {
if (exclusiveSession == session) {
......@@ -1022,50 +1181,99 @@ public class Database implements DataHandler {
objectIds.set(i);
return i;
}
public ObjectArray getAllSettings() {
return new ObjectArray(settings.values());
public ObjectArray getAllAggregates() {
return new ObjectArray(aggregates.values());
}
public ObjectArray getAllUsers() {
return new ObjectArray(users.values());
public ObjectArray getAllComments() {
return new ObjectArray(comments.values());
}
public ObjectArray getAllRoles() {
return new ObjectArray(roles.values());
public ObjectArray getAllFunctionAliases() {
return new ObjectArray(functionAliases.values());
}
public int getAllowLiterals() {
if (starting) {
return Constants.ALLOW_LITERALS_ALL;
}
return allowLiterals;
}
public ObjectArray getAllRights() {
return new ObjectArray(rights.values());
}
public ObjectArray getAllRoles() {
return new ObjectArray(roles.values());
}
public ObjectArray getAllComments() {
return new ObjectArray(comments.values());
/**
* Get all schema objects of the given type.
*
* @param type the object type
* @return all objects of that type
*/
public ObjectArray getAllSchemaObjects(int type) {
ObjectArray list = new ObjectArray();
for (Iterator it = schemas.values().iterator(); it.hasNext();) {
Schema schema = (Schema) it.next();
list.addAll(schema.getAll(type));
}
return list;
}
public ObjectArray getAllSchemas() {
return new ObjectArray(schemas.values());
}
public ObjectArray getAllFunctionAliases() {
return new ObjectArray(functionAliases.values());
public ObjectArray getAllSettings() {
return new ObjectArray(settings.values());
}
public ObjectArray getAllAggregates() {
return new ObjectArray(aggregates.values());
public ObjectArray getAllStorages() {
return new ObjectArray(storageMap.values());
}
public ObjectArray getAllUserDataTypes() {
return new ObjectArray(userDataTypes.values());
}
public ObjectArray getAllSchemaObjects(int type) {
ObjectArray list = new ObjectArray();
for (Iterator it = schemas.values().iterator(); it.hasNext();) {
Schema schema = (Schema) it.next();
list.addAll(schema.getAll(type));
public ObjectArray getAllUsers() {
return new ObjectArray(users.values());
}
public int getCacheSize() {
return cacheSize;
}
public String getCacheType() {
return cacheType;
}
public int getChecksum(byte[] data, int start, int end) {
int x = 0;
while (start < end) {
x += data[start++];
}
return x;
}
public String getCluster() {
return cluster;
}
public CompareMode getCompareMode() {
return compareMode;
}
public String getDatabasePath() {
if (persistent) {
return FileUtils.getAbsolutePath(databaseName);
} else {
return null;
}
return list;
}
public String getShortName() {
......@@ -1080,6 +1288,13 @@ public class Database implements DataHandler {
return log;
}
/**
* Get all sessions that are currently connected to the database.
*
* @param includingSystemSession if the system session should also be
* included
* @return the list of sessions
*/
public Session[] getSessions(boolean includingSystemSession) {
ArrayList list = new ArrayList(userSessions);
if (includingSystemSession && systemSession != null) {
......@@ -1090,6 +1305,12 @@ public class Database implements DataHandler {
return array;
}
/**
* Update an object in the system table.
*
* @param session the session
* @param obj the database object
*/
public synchronized void update(Session session, DbObject obj) throws SQLException {
int id = obj.getId();
removeMeta(session, id);
......@@ -1219,14 +1440,13 @@ public class Database implements DataHandler {
return storage;
}
public Role findRole(String roleName) {
return (Role) roles.get(roleName);
}
public Schema findSchema(String schemaName) {
return (Schema) schemas.get(schemaName);
}
/**
* Get the schema. If the schema does not exist, an exception is thrown.
*
* @param schemaName the name of the schema
* @return the schema
* @throws SQLException no schema with that name exists
*/
public Schema getSchema(String schemaName) throws SQLException {
Schema schema = findSchema(schemaName);
if (schema == null) {
......@@ -1235,6 +1455,12 @@ public class Database implements DataHandler {
return schema;
}
/**
* Remove the object from the database.
*
* @param session the session
* @param obj the object to remove
*/
public synchronized void removeDatabaseObject(Session session, DbObject obj) throws SQLException {
String objName = obj.getName();
int type = obj.getType();
......@@ -1290,6 +1516,12 @@ public class Database implements DataHandler {
return null;
}
/**
* Remove an object from the system table.
*
* @param session the session
* @param obj the object to be removed
*/
public synchronized void removeSchemaObject(Session session, SchemaObject obj) throws SQLException {
if (obj.getType() == DbObject.TABLE_OR_VIEW) {
Table table = (Table) obj;
......@@ -1318,6 +1550,11 @@ public class Database implements DataHandler {
removeMeta(session, id);
}
/**
* Check if this database disk-based.
*
* @return true if it is disk-based, false it it is in-memory only.
*/
public boolean isPersistent() {
return persistent;
}
......@@ -1352,6 +1589,12 @@ public class Database implements DataHandler {
return publicRole;
}
/**
* Get a unique temporary table name.
*
* @param sessionId the session id
* @return a unique name
*/
public String getTempTableName(int sessionId) {
String tempName;
for (int i = 0;; i++) {
......@@ -1367,18 +1610,10 @@ public class Database implements DataHandler {
this.compareMode = compareMode;
}
public CompareMode getCompareMode() {
return compareMode;
}
public String getCluster() {
return cluster;
}
public void setCluster(String cluster) {
this.cluster = cluster;
}
public void checkWritingAllowed() throws SQLException {
if (readOnly) {
throw Message.getSQLException(ErrorCode.DATABASE_IS_READ_ONLY);
......@@ -1399,6 +1634,15 @@ public class Database implements DataHandler {
}
}
/**
* Delete an unused log file. It is deleted immediately if no writer thread
* is running, or deleted later on if one is running. Deleting is delayed
* because the hard drive otherwise may delete the file a bit before the
* data is written to the new file, which can cause problems when
* recovering.
*
* @param fileName the name of the file to be deleted
*/
public void deleteLogFileLater(String fileName) throws SQLException {
if (writer != null) {
writer.deleteLogFileLater(fileName);
......@@ -1407,16 +1651,6 @@ public class Database implements DataHandler {
}
}
public Class loadUserClass(String className) throws SQLException {
try {
return ClassUtils.loadUserClass(className);
} catch (ClassNotFoundException e) {
throw Message.getSQLException(ErrorCode.CLASS_NOT_FOUND_1, new String[] { className }, e);
} catch (NoClassDefFoundError e) {
throw Message.getSQLException(ErrorCode.CLASS_NOT_FOUND_1, new String[] { className }, e);
}
}
public void setEventListener(DatabaseEventListener eventListener) {
this.eventListener = eventListener;
}
......@@ -1426,7 +1660,7 @@ public class Database implements DataHandler {
eventListener = null;
} else {
try {
eventListener = (DatabaseEventListener) loadUserClass(className).newInstance();
eventListener = (DatabaseEventListener) ClassUtils.loadUserClass(className).newInstance();
String url = databaseURL;
if (cipher != null) {
url += ";CIPHER=" + cipher;
......@@ -1474,7 +1708,14 @@ public class Database implements DataHandler {
}
}
}
/**
* This method is called after an exception occured, to inform the database
* event listener (if one is set).
*
* @param e the exception
* @param sql the SQL statement
*/
public void exceptionThrown(SQLException e, String sql) {
if (eventListener != null) {
try {
......@@ -1485,6 +1726,10 @@ public class Database implements DataHandler {
}
}
/**
* Synchronize the files with the file system. This method is called when
* executing the SQL statement CHECKPOINT SYNC.
*/
public void sync() throws SQLException {
if (log != null) {
log.sync();
......@@ -1513,14 +1758,6 @@ public class Database implements DataHandler {
return maxMemoryUndo;
}
public int getChecksum(byte[] data, int start, int end) {
int x = 0;
while (start < end) {
x += data[start++];
}
return x;
}
public void setLockMode(int lockMode) {
this.lockMode = lockMode;
}
......@@ -1570,10 +1807,6 @@ public class Database implements DataHandler {
logLevel = level;
}
public ObjectArray getAllStorages() {
return new ObjectArray(storageMap.values());
}
public boolean getRecovery() {
return recovery;
}
......@@ -1582,14 +1815,6 @@ public class Database implements DataHandler {
return systemSession;
}
public String getDatabasePath() {
if (persistent) {
return FileUtils.getAbsolutePath(databaseName);
} else {
return null;
}
}
public void handleInvalidChecksum() throws SQLException {
SQLException e = Message.getSQLException(ErrorCode.FILE_CORRUPTED_1, "wrong checksum");
if (!recovery) {
......@@ -1599,6 +1824,11 @@ public class Database implements DataHandler {
}
}
/**
* Check if the database is in the process of closing.
*
* @return true if the database is closing
*/
public boolean isClosing() {
return closing;
}
......@@ -1607,10 +1837,6 @@ public class Database implements DataHandler {
return writeDelay;
}
public int getCacheSize() {
return cacheSize;
}
public void setMaxLengthInplaceLob(int value) {
this.maxLengthInplaceLob = value;
}
......@@ -1673,13 +1899,6 @@ public class Database implements DataHandler {
this.allowLiterals = value;
}
public int getAllowLiterals() {
if (starting) {
return Constants.ALLOW_LITERALS_ALL;
}
return allowLiterals;
}
public boolean getOptimizeReuseResults() {
return optimizeReuseResults;
}
......@@ -1688,10 +1907,6 @@ public class Database implements DataHandler {
optimizeReuseResults = b;
}
public String getCacheType() {
return cacheType;
}
/**
* Called when the summary of the index in the log file has become invalid.
* This method is only called if index changes are not logged, and if an
......@@ -1793,6 +2008,11 @@ public class Database implements DataHandler {
return lobFileListCache;
}
/**
* Checks if the system table (containing the catalog) is locked.
*
* @return true if it is currently locked
*/
public boolean isSysTableLocked() {
return meta.isLockedExclusively();
}
......
......@@ -10,7 +10,8 @@ import java.lang.ref.WeakReference;
/**
* This class is responsible to close a database if the application did not
* close a connection.
* close a connection. A database closer object only exists if there is no user
* connected to the database.
*/
public class DatabaseCloser extends Thread {
......@@ -25,6 +26,10 @@ public class DatabaseCloser extends Thread {
this.shutdownHook = shutdownHook;
}
/**
* Stop and disable the database closer. This method is called after the
* database has been closed, or after a session has been created.
*/
public void reset() {
synchronized (this) {
databaseRef = null;
......
......@@ -94,11 +94,17 @@ public class Engine {
throw Message.getSQLException(ErrorCode.WRONG_USER_OR_PASSWORD);
}
checkClustering(ci, database);
Session session = database.createUserSession(user);
Session session = database.createSession(user);
return session;
}
}
/**
* Open a database connection with the given connection information.
*
* @param ci the connection information
* @return the session
*/
public Session getSession(ConnectionInfo ci) throws SQLException {
try {
Session session = openSession(ci);
......@@ -171,6 +177,12 @@ public class Engine {
}
}
/**
* Called after a database has been closed, to remove the object from the
* list of open databases.
*
* @param name the database name
*/
public void close(String name) {
databases.remove(name);
}
......
......@@ -17,6 +17,7 @@ import org.h2.expression.Expression;
import org.h2.message.Message;
import org.h2.message.Trace;
import org.h2.table.Table;
import org.h2.util.ClassUtils;
import org.h2.value.DataType;
import org.h2.value.Value;
import org.h2.value.ValueNull;
......@@ -57,7 +58,7 @@ public class FunctionAlias extends DbObjectBase {
if (javaMethod != null) {
return;
}
Class javaClass = database.loadUserClass(className);
Class javaClass = ClassUtils.loadUserClass(className);
Method[] methods = javaClass.getMethods();
for (int i = 0; i < methods.length; i++) {
Method m = methods[i];
......@@ -150,10 +151,6 @@ public class FunctionAlias extends DbObjectBase {
throw Message.getUnsupportedException();
}
public Value getValue(Session session, Expression[] args) throws SQLException {
return getValue(session, args, false);
}
/**
* Call the user-defined function and return the value.
*
......@@ -228,6 +225,11 @@ public class FunctionAlias extends DbObjectBase {
return this.methodName;
}
/**
* Check if this function requires a database connection.
*
* @return if the function requires a connection
*/
public boolean hasConnectionParam() {
return this.hasConnectionParam;
}
......
......@@ -13,6 +13,7 @@ import org.h2.command.Parser;
import org.h2.message.Message;
import org.h2.message.Trace;
import org.h2.table.Table;
import org.h2.util.ClassUtils;
/**
* Represents a user-defined aggregate function.
......@@ -32,7 +33,7 @@ public class UserAggregate extends DbObjectBase {
public AggregateFunction getInstance() throws SQLException {
if (javaClass == null) {
javaClass = database.loadUserClass(className);
javaClass = ClassUtils.loadUserClass(className);
}
Object obj;
try {
......
......@@ -31,7 +31,7 @@ public class JavaFunction extends Expression implements FunctionCall {
}
public Value getValue(Session session) throws SQLException {
return functionAlias.getValue(session, args);
return functionAlias.getValue(session, args, false);
}
public int getType() {
......
......@@ -18,6 +18,7 @@ import org.h2.message.Message;
import org.h2.message.Trace;
import org.h2.result.Row;
import org.h2.table.Table;
import org.h2.util.ClassUtils;
import org.h2.value.DataType;
import org.h2.value.Value;
......@@ -55,7 +56,7 @@ public class TriggerObject extends SchemaObjectBase {
}
try {
Connection c2 = session.createConnection(false);
Object obj = session.getDatabase().loadUserClass(triggerClassName).newInstance();
Object obj = ClassUtils.loadUserClass(triggerClassName).newInstance();
triggerCallback = (Trigger) obj;
triggerCallback.init(c2, getSchema().getName(), getName(), table.getName(), before, typeMask);
} catch (Throwable e) {
......
......@@ -103,11 +103,7 @@ public class RunScript extends Tool {
showTime = true;
} else if (arg.equals("-driver")) {
String driver = args[++i];
try {
ClassUtils.loadUserClass(driver);
} catch (ClassNotFoundException e) {
throw Message.convert(e);
}
ClassUtils.loadUserClass(driver);
} else if (arg.equals("-options")) {
StringBuffer buff = new StringBuffer();
i++;
......
......@@ -20,7 +20,6 @@ import java.sql.Statement;
import java.util.Properties;
import org.h2.engine.Constants;
import org.h2.message.Message;
import org.h2.server.web.ConnectionInfo;
import org.h2.util.ClassUtils;
import org.h2.util.FileUtils;
......@@ -82,11 +81,7 @@ public class Shell {
password = args[++i];
} else if (args[i].equals("-driver")) {
String driver = args[++i];
try {
ClassUtils.loadUserClass(driver);
} catch (ClassNotFoundException e) {
throw Message.convert(e);
}
ClassUtils.loadUserClass(driver);
} else {
out.println("Unsupported option: " + args[i]);
showUsage();
......
......@@ -48,7 +48,7 @@ public class ClassUtils {
return Class.forName(className);
}
public static Class loadUserClass(String className) throws ClassNotFoundException, SQLException {
public static Class loadUserClass(String className) throws SQLException {
if (!ALLOW_ALL && !ALLOWED_CLASS_NAMES.contains(className)) {
boolean allowed = false;
for (int i = 0; i < ALLOWED_CLASS_NAME_PREFIXES.length; i++) {
......@@ -61,7 +61,13 @@ public class ClassUtils {
throw Message.getSQLException(ErrorCode.ACCESS_DENIED_TO_CLASS_1, className);
}
}
return Class.forName(className);
try {
return Class.forName(className);
} catch (ClassNotFoundException e) {
throw Message.getSQLException(ErrorCode.CLASS_NOT_FOUND_1, new String[] { className }, e);
} catch (NoClassDefFoundError e) {
throw Message.getSQLException(ErrorCode.CLASS_NOT_FOUND_1, new String[] { className }, e);
}
}
}
......@@ -6,6 +6,8 @@
*/
package org.h2.util;
import java.sql.SQLException;
/**
* This class tries to automatically load the right JDBC driver for a given
* database URL.
......@@ -50,10 +52,10 @@ public class JdbcDriverUtils {
return null;
}
public static void load(String url) throws ClassNotFoundException {
public static void load(String url) throws SQLException {
String driver = getDriver(url);
if (driver != null) {
Class.forName(driver);
ClassUtils.loadUserClass(driver);
}
}
......
......@@ -13,14 +13,11 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
//## Java 1.4 begin ##
import javax.naming.Context;
import javax.naming.NamingException;
import javax.sql.DataSource;
import javax.sql.XAConnection;
//## Java 1.4 end ##
import org.h2.constant.ErrorCode;
import org.h2.message.Message;
/**
......@@ -95,43 +92,37 @@ public class JdbcUtils {
}
public static Connection getConnection(String driver, String url, Properties prop) throws SQLException {
try {
if (StringUtils.isNullOrEmpty(driver)) {
JdbcDriverUtils.load(url);
} else {
Class d = ClassUtils.loadUserClass(driver);
if (java.sql.Driver.class.isAssignableFrom(d)) {
return DriverManager.getConnection(url, prop);
//## Java 1.4 begin ##
} else if (javax.naming.Context.class.isAssignableFrom(d)) {
// JNDI context
try {
Context context = (Context) d.newInstance();
DataSource ds = (DataSource) context.lookup(url);
String user = prop.getProperty("user");
String password = prop.getProperty("password");
if (StringUtils.isNullOrEmpty(user) && StringUtils.isNullOrEmpty(password)) {
return ds.getConnection();
} else {
return ds.getConnection(user, password);
}
} catch (InstantiationException e) {
throw Message.convert(e);
} catch (IllegalAccessException e) {
throw Message.convert(e);
} catch (NamingException e) {
throw Message.convert(e);
}
//## Java 1.4 end ##
} else {
// Don't know, but maybe it loaded a JDBC Driver
return DriverManager.getConnection(url, prop);
if (StringUtils.isNullOrEmpty(driver)) {
JdbcDriverUtils.load(url);
} else {
Class d = ClassUtils.loadUserClass(driver);
if (java.sql.Driver.class.isAssignableFrom(d)) {
return DriverManager.getConnection(url, prop);
//## Java 1.4 begin ##
} else if (javax.naming.Context.class.isAssignableFrom(d)) {
// JNDI context
try {
Context context = (Context) d.newInstance();
DataSource ds = (DataSource) context.lookup(url);
String user = prop.getProperty("user");
String password = prop.getProperty("password");
if (StringUtils.isNullOrEmpty(user) && StringUtils.isNullOrEmpty(password)) {
return ds.getConnection();
} else {
return ds.getConnection(user, password);
}
} catch (InstantiationException e) {
throw Message.convert(e);
} catch (IllegalAccessException e) {
throw Message.convert(e);
} catch (NamingException e) {
throw Message.convert(e);
}
}
} catch (ClassNotFoundException e) {
throw Message.getSQLException(ErrorCode.CLASS_NOT_FOUND_1, new String[]{driver}, e);
} catch (NoClassDefFoundError e) {
throw Message.getSQLException(ErrorCode.CLASS_NOT_FOUND_1, new String[]{driver}, e);
//## Java 1.4 end ##
} else {
// Don't know, but maybe it loaded a JDBC Driver
return DriverManager.getConnection(url, prop);
}
}
return DriverManager.getConnection(url, prop);
}
......
......@@ -171,6 +171,7 @@ public class Build extends BuildBase {
javadoc(new String[] {
"-sourcepath", "src/main" + File.pathSeparator + "src/test" + File.pathSeparator + "src/tools" ,
"-noindex",
"-d", "docs/javadocImpl2",
"-classpath", "ext/servlet-api-2.4.jar" + File.pathSeparator + "ext/lucene-core-2.2.0.jar" +
File.pathSeparator + System.getProperty("java.home") + "/../lib/tools.jar",
"-subpackages", "org.h2",
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论