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

--no commit message

--no commit message
上级 6b9c06de
......@@ -67,7 +67,11 @@ On the command line, go to the directory h2 and execute the following command:
build -?
</pre>
<p>
You will get a list of targets. If you want to build the jar file, execute:
For Linux and OS X, use <code>./build.sh</code> instead of <code>build</code>.
</p>
<p>
You will get a list of targets. If you want to build the jar file, execute (Windows):
</p>
<pre>
build jar
......
......@@ -18,7 +18,17 @@ Change Log
<h1>Change Log</h1>
<h2>Next Version (unreleased)</h2>
<ul><li>Improved Glassfish / Toplink support in H2Platform
<ul><li>RUNSCRIPT no longer uses a temporary file.
</li><li>New system table INFORMATION_SCHEMA.SESSION_STATE containing the
SQL statements that make up the session state. The list currently contains
variables (SET @..) and local temporary tables (without data).
</li><li>After an automatic re-connect, part of the session state stays (the part
that is stored in the SESSION_STATE table).
</li><li>The build didn't work if the directory temp didn't exist before.
</li><li>New system property h2.maxReconnect (default 3) to limit the number of re-connects
for the same SQL statement (this is usually only important for SHUTDOWN).
</li><li>WHERE .. IN (SELECT ...) could throw a NullPointerException.
</li><li>Improved Glassfish / Toplink support in H2Platform
thanks to Marcio Borges from Brazil. Thanks a lot!
</li></ul>
......
......@@ -23,18 +23,13 @@ Of course, patches are always welcome, but are not always applied as is. Patches
<h2>In Version 1.1</h2>
<ul>
<li>Add version number. Install directory: h2-1.1, jar file: h2-1.1.100.jar. Micro version: use build number, staring with 1.1.100
</li><li>Automatic upgrade if there is a file format change
</li><li>Change Constants.DEFAULT_MAX_MEMORY_UNDO to 10000 (and change the docs). Test.
</li><li>Enable and document optimizations, LOB files in directories
</li><li>Special methods for DataPage.writeByte / writeShort and so on
<li>Change Constants.DEFAULT_MAX_MEMORY_UNDO to 10000 (and change the docs). Test.
</li><li>Change the default for NULL || 'x' to NULL
</li></ul>
<h2>Priority 1</h2>
<ul>
<li>Bugfixes
</li><li>Row level locking
</li><li>Write more tests and documentation for MVCC (Multi Version Concurrency Control)
</li><li>RECOVER=1 should automatically recover, =2 should run the recovery tool if required
</li><li>More tests with MULTI_THREADED=1
......@@ -48,7 +43,6 @@ Of course, patches are always welcome, but are not always applied as is. Patches
<h2>Priority 2</h2>
<ul>
<li>Improve test code coverage
</li><li>More fuzz tests
</li><li>Test multi-threaded in-memory db access
</li><li>Procedural language / script language (Javascript)
</li><li>Option to shutdown all the running servers (on the same VM).
......@@ -56,17 +50,15 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>Optimize ID=? OR ID=?: convert to IN(...)
</li><li>Optimize .. OR .. to UNION if the cost is lower
</li><li>Index organized tables CREATE TABLE...(...) ORGANIZATION INDEX (store in data file) (probably file format changes are required for rowId)
</li><li>H2 Console: new option 'Open a browser when starting the H2 Console'.
</li><li>Better space re-use in the files after deleting data: shrink the data file without closing the database (if the end of the file is empty)
</li><li>Support large updates (use the transaction log to undo).
</li><li>Auto-reconnect on lost connection to server (even if the server was re-started) except if autocommit was off and there was pending transaction.
</li><li>Full outer joins
</li><li>Support trigger on the tables information_schema.tables and ...columns
</li><li>Test very large databases and LOBs (up to 256 GB)
</li><li>Support hints for the optimizer (which index to use, enforce the join order).
</li><li>Change LOB mechanism (less files, keep index of lob files, point to files and row, delete unused files earlier, maybe bundle files into a tar file)
</li><li>Clustering: recovery needs to becomes fully automatic. Global write lock feature.
</li><li>Option for Java functions: constant/isDeterministic/readonly/pure (always return the same value) to allow early evaluation when all parameters are constant
</li><li>Option for Java functions: [DETERMINISTIC] FOR ...
</li><li>Support mixed clustering mode (one embedded, the other server mode)
</li><li>Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED)
</li><li>Groovy Stored Procedures (http://groovy.codehaus.org/Groovy+SQL)
......@@ -74,7 +66,6 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>Add a migration guide (list differences between databases)
</li><li>Optimization: automatic index creation suggestion using the trace file?
</li><li>Compression performance: don't allocate buffers, compress / expand in to out buffer
</li><li>Start / stop server with database URL
</li><li>Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE
</li><li>Rebuild index functionality (other than delete the index file)
</li><li>Don't use deleteOnExit (bug 4513817: File.deleteOnExit consumes memory)
......@@ -86,14 +77,12 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>Test with dbcopy (http://dbcopyplugin.sourceforge.net)
</li><li>Find a tool to view large text file >100 MB, with find, page up and down (like less), truncate before / after
</li><li>Implement, test, document XAConnection and so on
</li><li>Web site: get rid of frame set
</li><li>Pluggable data type (for compression, validation, conversion, encryption)
</li><li>CHECK: find out what makes CHECK=TRUE slow, move to CHECK2
</li><li>Improve recovery: improve code for log recovery problems (less try/catch)
</li><li>Index usage for (ID, NAME)=(1, 'Hi'); document
</li><li>Suggestion: include Jetty as Servlet Container (like LAMP)
</li><li>Trace shipping to server
</li><li>Performance / server mode: use UDP optionally?
</li><li>Version check: docs / web console (using Javascript), and maybe in the library (using TCP/IP)
</li><li>Web server classloader: override findResource / getResourceFrom
</li><li>Cost for embedded temporary view is calculated wrong, if result is constant
......@@ -116,7 +105,7 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>Don't write stack traces for common exceptions like duplicate key to the log by default
</li><li>GCJ: what is the state now?
</li><li>Use Janino to convert Java to C++
</li><li>Reduce disk space usage (Derby uses less disk space?)
</li><li>Reduce disk space usage
</li><li>Events for: Database Startup, Connections, Login attempts, Disconnections, Prepare (after parsing), Web Server (see http://docs.openlinksw.com/virtuoso/fn_dbev_startup.html)
</li><li>Optimization: Log compression
</li><li>Support standard INFORMATION_SCHEMA tables, as defined in http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt; specially KEY_COLUMN_USAGE (http://dev.mysql.com/doc/refman/5.0/en/information-schema.html, http://www.xcdsql.org/Misc/INFORMATION_SCHEMA%20With%20Rolenames.gif)
......@@ -392,6 +381,8 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>Support DatabaseMetaData.insertsAreDetected: updatable result sets should detect inserts.
</li><li>Auto-server: add option to define the IP address range or list.
</li><li>Open a read-only database but don't share it with other connections. jdbc:h2:~/test;PRIVATE=TRUE
</li><li>Index creation only using deterministic functions.
</li><li>Use http://recaptcha.net somehow to secure the Google Group.
</li></ul>
<h2>Not Planned</h2>
......
......@@ -276,12 +276,16 @@ java org.h2.test.TestAll timer
/*
download/local_temp_index.txt
system_temp_lob.db leaks unencrypted data, even when I use
encrypted SCRIPT/RUNSCRIPT with an encrypted database.
Event on Re-Connect (DatabaseEventListener)
extend server protocol to keep stuff on client
(temporary linked tables, variables; identity)
H2 Dialect for TopLink
http://www.marciowb.net/blog/2008/08/quickly-using-h2-database-with
osgi (derby, hsqldb)
support 'build test'
......@@ -307,7 +311,8 @@ not implemented / not tested
- keep identity, getGeneratedKeys on client
- throw error when in cluster mode
check all version(s) before the release
Feature requests:
SCOPE_IDENTITY
test with system property h2.aliasColumnName.
......
......@@ -361,8 +361,8 @@ insert into t2 select x from system_range(1, 1000);
explain select count(*) from t1 where t1.id in ( select t2.id from t2 );
> PLAN
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> SELECT COUNT(*) FROM PUBLIC.T1 /* PUBLIC.T1_TABLE_SCAN */ /* WHERE TRUE */ INNER JOIN (SELECT DISTINCT T2.ID AS TEMP_VIEW_2_X FROM PUBLIC.T2 /* PUBLIC.T2_TABLE_SCAN */) TEMP_VIEW_3 /* SELECT DISTINCT T2.ID AS TEMP_VIEW_2_X FROM PUBLIC.T2 /++ PUBLIC.PRIMARY_KEY_A5: ID = ?1 ++/ WHERE T2.ID = ?1: TEMP_VIEW_2_X = T1.ID */ ON T1.ID = TEMP_VIEW_3.TEMP_VIEW_2_X WHERE TRUE
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> SELECT COUNT(*) FROM (SELECT DISTINCT T2.ID AS TEMP_VIEW_2_X FROM PUBLIC.T2 /* PUBLIC.T2_TABLE_SCAN */) TEMP_VIEW_3 /* SELECT DISTINCT T2.ID AS TEMP_VIEW_2_X FROM PUBLIC.T2 /++ PUBLIC.T2_TABLE_SCAN ++/ */ INNER JOIN PUBLIC.T1 /* PUBLIC.PRIMARY_KEY_A: ID = TEMP_VIEW_3.TEMP_VIEW_2_X */ ON 1=1 WHERE T1.ID = TEMP_VIEW_3.TEMP_VIEW_2_X
> rows: 1
select count(*) from t1 where t1.id in ( select t2.id from t2 );
......@@ -2529,8 +2529,8 @@ select * from test t1 where id in(id);
explain select * from test t1 where id in(select id from test);
> PLAN
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> SELECT T1.ID, T1.NAME FROM PUBLIC.TEST T1 /* PUBLIC.TEST_TABLE_SCAN */ /* WHERE TRUE */ INNER JOIN (SELECT DISTINCT ID AS TEMP_VIEW_70_X FROM PUBLIC.TEST /* PUBLIC.TEST_TABLE_SCAN */) TEMP_VIEW_71 /* SELECT DISTINCT ID AS TEMP_VIEW_70_X FROM PUBLIC.TEST /++ PUBLIC.PRIMARY_KEY_2: ID = ?1 ++/ WHERE ID = ?1: TEMP_VIEW_70_X = ID */ ON ID = TEMP_VIEW_71.TEMP_VIEW_70_X WHERE TRUE
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> SELECT T1.ID, T1.NAME FROM (SELECT DISTINCT ID AS TEMP_VIEW_70_X FROM PUBLIC.TEST /* PUBLIC.TEST_TABLE_SCAN */) TEMP_VIEW_71 /* SELECT DISTINCT ID AS TEMP_VIEW_70_X FROM PUBLIC.TEST /++ PUBLIC.TEST_TABLE_SCAN ++/ */ INNER JOIN PUBLIC.TEST T1 /* PUBLIC.PRIMARY_KEY_2: ID = TEMP_VIEW_71.TEMP_VIEW_70_X */ ON 1=1 WHERE ID = TEMP_VIEW_71.TEMP_VIEW_70_X
> rows: 1
select * from test t1 where id in(select id from test);
......@@ -5451,8 +5451,8 @@ EXPLAIN PLAN FOR SELECT * FROM TEST T1 WHERE ID IN(1, 2);
EXPLAIN PLAN FOR SELECT * FROM TEST T1 WHERE ID IN(SELECT ID FROM TEST);
> PLAN
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> SELECT T1.ID, T1.NAME FROM PUBLIC.TEST T1 /* PUBLIC.TEST_TABLE_SCAN */ /* WHERE TRUE */ INNER JOIN (SELECT DISTINCT ID AS TEMP_VIEW_119_X FROM PUBLIC.TEST /* PUBLIC.TEST_TABLE_SCAN */) TEMP_VIEW_120 /* SELECT DISTINCT ID AS TEMP_VIEW_119_X FROM PUBLIC.TEST /++ PUBLIC.PRIMARY_KEY_2: ID = ?1 ++/ WHERE ID = ?1: TEMP_VIEW_119_X = ID */ ON ID = TEMP_VIEW_120.TEMP_VIEW_119_X WHERE TRUE
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> SELECT T1.ID, T1.NAME FROM (SELECT DISTINCT ID AS TEMP_VIEW_119_X FROM PUBLIC.TEST /* PUBLIC.TEST_TABLE_SCAN */) TEMP_VIEW_120 /* SELECT DISTINCT ID AS TEMP_VIEW_119_X FROM PUBLIC.TEST /++ PUBLIC.TEST_TABLE_SCAN ++/ */ INNER JOIN PUBLIC.TEST T1 /* PUBLIC.PRIMARY_KEY_2: ID = TEMP_VIEW_120.TEMP_VIEW_119_X */ ON 1=1 WHERE ID = TEMP_VIEW_120.TEMP_VIEW_119_X
> rows: 1
EXPLAIN PLAN FOR SELECT * FROM TEST T1 WHERE ID NOT IN(SELECT ID FROM TEST);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论