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

--no commit message

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