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

--no commit message

--no commit message
上级 bd3ced2d
...@@ -54,6 +54,8 @@ Advanced Topics ...@@ -54,6 +54,8 @@ Advanced Topics
Restricting Class Loading and Usage</a><br /> Restricting Class Loading and Usage</a><br />
<a href="#security_protocols"> <a href="#security_protocols">
Security Protocols</a><br /> Security Protocols</a><br />
<a href="#ssl_tls_connections">
SSL/TLS Connections</a><br />
<a href="#uuid"> <a href="#uuid">
Universally Unique Identifiers (UUID)</a><br /> Universally Unique Identifiers (UUID)</a><br />
<a href="#system_properties"> <a href="#system_properties">
...@@ -126,14 +128,9 @@ NULL and values that are not set in the insert statement are both inserted as NU ...@@ -126,14 +128,9 @@ NULL and values that are not set in the insert statement are both inserted as NU
This may not have the desired effect if a default value in the target table is other than NULL. This may not have the desired effect if a default value in the target table is other than NULL.
</p> </p>
<p> <p>
For each linked table a new connection is opened. This can be a problem for some databases when using If multiple linked tables point to the same database (using the same database URL), the connection
many linked tables. For Oracle XE, the maximum number of connection can be increased. is shared. To disable this, set the system property h2.shareLinkedConnections to false.
Oracle XE needs to be restarted after changing these values:
</p> </p>
<pre>
alter system set processes=100 scope=spfile;
alter system set sessions=100 scope=spfile;
</pre>
<p> <p>
The CREATE LINKED TABLE statement supports an optional schema name parameter. The CREATE LINKED TABLE statement supports an optional schema name parameter.
See the grammar for details. See the grammar for details.
...@@ -990,7 +987,15 @@ so that an attacker needs to wait for the whole delay. Delays are synchronized. ...@@ -990,7 +987,15 @@ so that an attacker needs to wait for the whole delay. Delays are synchronized.
to protect against parallel attacks. to protect against parallel attacks.
</p> </p>
<h3>SSL/TLS Connections</h3> <h3>HTTPS Connections</h3>
<p>
The web server supports HTTP and HTTPS connections using SSLServerSocket.
There is a default self-certified certificate to support an easy starting point, but
custom certificates are supported as well.
</p>
<br /><a name="ssl_tls_connections"></a>
<h2>SSL/TLS Connections</h2>
<p> <p>
Remote SSL/TLS connections are supported using the Java Secure Socket Extension Remote SSL/TLS connections are supported using the Java Secure Socket Extension
(SSLServerSocket / SSLSocket). By default, anonymous SSL is enabled. (SSLServerSocket / SSLSocket). By default, anonymous SSL is enabled.
...@@ -1007,13 +1012,6 @@ for more information. ...@@ -1007,13 +1012,6 @@ for more information.
To disable anonymous SSL, set the system property <code>h2.enableAnonymousSSL</code> to false. To disable anonymous SSL, set the system property <code>h2.enableAnonymousSSL</code> to false.
</p> </p>
<h3>HTTPS Connections</h3>
<p>
The web server supports HTTP and HTTPS connections using SSLServerSocket.
There is a default self-certified certificate to support an easy starting point, but
custom certificates are supported as well.
</p>
<br /><a name="uuid"></a> <br /><a name="uuid"></a>
<h2>Universally Unique Identifiers (UUID)</h2> <h2>Universally Unique Identifiers (UUID)</h2>
<p> <p>
......
...@@ -147,19 +147,14 @@ Not all such problems may be fixed. ...@@ -147,19 +147,14 @@ Not all such problems may be fixed.
Areas that are not fully tested: Areas that are not fully tested:
</p> </p>
<ul> <ul>
<li>Platforms other than Windows XP and the Sun JVM 1.4 and 1.5 <li>Platforms other than Windows XP or Linux, or JVMs other than Sun 1.4 - 1.6
</li><li>The features AUTO_SERVER and AUTO_RECONNECT
</li><li>The MVCC (multi version concurrency) mode </li><li>The MVCC (multi version concurrency) mode
</li><li>Cluster mode, 2-phase commit, savepoints </li><li>Cluster mode, 2-phase commit, savepoints
</li><li>24/7 operation </li><li>24/7 operation
</li><li>Some operations on databases larger than 500 MB may be slower than expected </li><li>Some operations on databases larger than 500 MB may be slower than expected
</li><li>Updatable result sets
</li><li>Referential integrity and check constraints, triggers
</li><li>ALTER TABLE statements, views, linked tables, schema, UNION
</li><li>Not all built-in functions are completely tested
</li><li>The optimizer may not always select the best plan
</li><li>Data types BLOB, CLOB, VARCHAR_IGNORECASE, OTHER
</li><li>Wide indexes with large VARCHAR or VARBINARY columns and / or with a lot of columns
</li><li>Multi-threading and using multiple connections </li><li>Multi-threading and using multiple connections
</li><li>The optimizer may not always select the best plan
</li></ul> </li></ul>
<p> <p>
......
...@@ -29,8 +29,9 @@ Of course, patches are always welcome, but are not always applied as is. Patches ...@@ -29,8 +29,9 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>RECOVER=1 should automatically recover, =2 should run the recovery tool if required </li><li>RECOVER=1 should automatically recover, =2 should run the recovery tool if required
</li><li>Test with Spatial DB in a box / JTS (http://docs.codehaus.org/display/GEOS/SpatialDBBox) </li><li>Test with Spatial DB in a box / JTS (http://docs.codehaus.org/display/GEOS/SpatialDBBox)
</li><li>Optimization: result set caching (like MySQL) </li><li>Optimization: result set caching (like MySQL)
</li><li>Server side cursors </li><li>Support large updates (use the transaction log to undo).
</li><li>Shutdown compact </li><li>Shutdown compact
</li><li>Server side cursors
</li></ul> </li></ul>
<h2>Priority 2</h2> <h2>Priority 2</h2>
...@@ -44,7 +45,6 @@ Of course, patches are always welcome, but are not always applied as is. Patches ...@@ -44,7 +45,6 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>Optimize .. OR .. to UNION if the cost is lower </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>Index organized tables CREATE TABLE...(...) ORGANIZATION INDEX (store in data file) (probably file format changes are required for rowId)
</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>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>Full outer joins </li><li>Full outer joins
</li><li>Support trigger on the tables information_schema.tables and ...columns </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>Test very large databases and LOBs (up to 256 GB)
...@@ -98,7 +98,6 @@ Of course, patches are always welcome, but are not always applied as is. Patches ...@@ -98,7 +98,6 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>Linked schema using CSV files: one schema for a directory of files; support indexes for CSV files </li><li>Linked schema using CSV files: one schema for a directory of files; support indexes for CSV files
</li><li>Don't write stack traces for common exceptions like duplicate key to the log by default </li><li>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>GCJ: what is the state now?
</li><li>Use Janino to convert Java to C++
</li><li>Reduce disk space usage </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>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>Optimization: Log compression
...@@ -111,6 +110,7 @@ Of course, patches are always welcome, but are not always applied as is. Patches ...@@ -111,6 +110,7 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>EXE file: maybe use http://jsmooth.sourceforge.net </li><li>EXE file: maybe use http://jsmooth.sourceforge.net
</li><li>Performance: Automatically build in-memory indexes if the whole table is in memory </li><li>Performance: Automatically build in-memory indexes if the whole table is in memory
</li><li>H2 Console: The webclient could support more features like phpMyAdmin. </li><li>H2 Console: The webclient could support more features like phpMyAdmin.
</li><li>Use Janino to convert Java to C++
</li><li>The HELP information schema can be directly exposed in the Console </li><li>The HELP information schema can be directly exposed in the Console
</li><li>Maybe use the 0x1234 notation for binary fields, see MS SQL Server </li><li>Maybe use the 0x1234 notation for binary fields, see MS SQL Server
</li><li>Support Oracle CONNECT BY in some way: http://www.adp-gmbh.ch/ora/sql/connect_by.html, http://philip.greenspun.com/sql/trees.html </li><li>Support Oracle CONNECT BY in some way: http://www.adp-gmbh.ch/ora/sql/connect_by.html, http://philip.greenspun.com/sql/trees.html
...@@ -349,7 +349,7 @@ Of course, patches are always welcome, but are not always applied as is. Patches ...@@ -349,7 +349,7 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>Enable warning for 'Local variable declaration hides another field or variable'. </li><li>Enable warning for 'Local variable declaration hides another field or variable'.
</li><li>Linked tables: make hidden columns available (Oracle: rowid and ora_rowscn columns). </li><li>Linked tables: make hidden columns available (Oracle: rowid and ora_rowscn columns).
</li><li>Support merge join. </li><li>Support merge join.
</li><li>H2 Console: in-place autocomplete (need to merge query and result frame, use div). </li><li>H2 Console: in-place autocomplete.
</li><li>MySQL compatibility: update test1 t1, test2 t2 set t1.id = t2.id where t1.id = t2.id; </li><li>MySQL compatibility: update test1 t1, test2 t2 set t1.id = t2.id where t1.id = t2.id;
</li><li>Oracle: support DECODE method (convert to CASE WHEN). </li><li>Oracle: support DECODE method (convert to CASE WHEN).
</li><li>Support large databases: split LOB (BLOB, CLOB) to multiple directories / disks (similar to tablespaces). </li><li>Support large databases: split LOB (BLOB, CLOB) to multiple directories / disks (similar to tablespaces).
...@@ -358,6 +358,7 @@ Of course, patches are always welcome, but are not always applied as is. Patches ...@@ -358,6 +358,7 @@ Of course, patches are always welcome, but are not always applied as is. Patches
</li><li>H2 Console: support configuration option for fixed width (monospace) font. </li><li>H2 Console: support configuration option for fixed width (monospace) font.
</li><li>Native fulltext search: support analyzers (specially for Chinese, Japanese). </li><li>Native fulltext search: support analyzers (specially for Chinese, Japanese).
</li><li>Automatically compact databases from time to time (as a background process). </li><li>Automatically compact databases from time to time (as a background process).
</li><li>Support SCOPE_IDENTITY().
</li><li>Support GRANT SELECT, UPDATE ON *. </li><li>Support GRANT SELECT, UPDATE ON *.
</li><li>Test Eclipse DTP. </li><li>Test Eclipse DTP.
</li><li>Support JMX: Create an MBean for each database and server (support JConsole). </li><li>Support JMX: Create an MBean for each database and server (support JConsole).
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -414,11 +414,17 @@ Usually, for update statements, the old rows are deleted first ...@@ -414,11 +414,17 @@ Usually, for update statements, the old rows are deleted first
and then the new rows inserted. It is possible to emit update and then the new rows inserted. It is possible to emit update
statements (however this is not possible on rollback), however statements (however this is not possible on rollback), however
in this case multi-row unique key updates may not always work. in this case multi-row unique key updates may not always work.
Linked tables to the same database share one connection.
If a query is used instead of the original table name, the table is read only. If a query is used instead of the original table name, the table is read only.
To use JNDI to get the connection, the driver class must be a
javax.naming.Context (for example javax.naming.InitialContext), and the
URL must be the resource name (for example java:comp/env/jdbc/Test).
The current user owner must have admin rights. The current user owner must have admin rights.
"," ","
CREATE LINKED TABLE LINK('org.h2.Driver', 'jdbc:h2:test2', 'sa', 'sa', 'TEST'); CREATE LINKED TABLE LINK('org.h2.Driver', 'jdbc:h2:test2', 'sa', 'sa', 'TEST');
CREATE LINKED TABLE LINK('', 'jdbc:h2:test2', 'sa', 'sa', '(SELECT * FROM TEST WHERE ID>0)'); CREATE LINKED TABLE LINK('', 'jdbc:h2:test2', 'sa', 'sa', '(SELECT * FROM TEST WHERE ID>0)');
CREATE LINKED TABLE LINK('javax.naming.InitialContext',
'java:comp/env/jdbc/Test', NULL, NULL, '(SELECT * FROM TEST WHERE ID>0)');
" "
"Commands (DDL)","CREATE ROLE"," "Commands (DDL)","CREATE ROLE","
......
...@@ -46,7 +46,8 @@ public class BitField { ...@@ -46,7 +46,8 @@ public class BitField {
if (data[i] == 0) { if (data[i] == 0) {
continue; continue;
} }
for (int j = Math.max(fromIndex, i << ADDRESS_BITS); j < maxAddress; j++) { int j = Math.max(fromIndex, i << ADDRESS_BITS);
for (int end = Math.min(maxAddress, j + 64); j < end; j++) {
if (get(j)) { if (get(j)) {
return j; return j;
} }
...@@ -68,7 +69,8 @@ public class BitField { ...@@ -68,7 +69,8 @@ public class BitField {
if (data[i] == -1) { if (data[i] == -1) {
continue; continue;
} }
for (int j = Math.max(fromIndex, i << ADDRESS_BITS);; j++) { int j = Math.max(fromIndex, i << ADDRESS_BITS);
for (int end = j + 64; j < end; j++) {
if (!get(j)) { if (!get(j)) {
return j; return j;
} }
......
...@@ -279,13 +279,10 @@ java org.h2.test.TestAll timer ...@@ -279,13 +279,10 @@ java org.h2.test.TestAll timer
/* /*
test with 1.0
document shared connections for linked tables
document osgi
document url parameter auto_server document url parameter auto_server
document url parameter auto_reconnect document url parameter auto_reconnect
document url parameter open_new document url parameter open_new
osgi: create a sample application, test, document
merge join test case merge join test case
...@@ -310,12 +307,6 @@ not implemented / not tested ...@@ -310,12 +307,6 @@ not implemented / not tested
- keep identity, getGeneratedKeys on client - keep identity, getGeneratedKeys on client
- throw error when in cluster mode - throw error when in cluster mode
Feature requests:
SCOPE_IDENTITY
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
TestMVCC: TestMVCC:
Concurrent update in table test: another transaction has updated or Concurrent update in table test: another transaction has updated or
deleted the same row when exactly does it occur in other databases deleted the same row when exactly does it occur in other databases
......
...@@ -27,11 +27,42 @@ public class TestBitField extends TestBase { ...@@ -27,11 +27,42 @@ public class TestBitField extends TestBase {
} }
public void test() { public void test() {
testNextClearBit();
testNextSetBit();
testByteOperations(); testByteOperations();
testRandom(); testRandom();
testGetSet(); testGetSet();
} }
private void testNextSetBit() {
Random random = new Random(1);
BitField field = new BitField();
for (int i = 0; i < 100000; i++) {
int a = random.nextInt(120);
int b = a + 1 + random.nextInt(200);
field.set(a);
field.set(b);
assertEquals(b, field.nextSetBit(a + 1));
field.clear(a);
field.clear(b);
}
}
private void testNextClearBit() {
Random random = new Random(1);
BitField field = new BitField();
field.setRange(0, 500, true);
for (int i = 0; i < 100000; i++) {
int a = random.nextInt(120);
int b = a + 1 + random.nextInt(200);
field.clear(a);
field.clear(b);
assertEquals(b, field.nextClearBit(a + 1));
field.set(a);
field.set(b);
}
}
private void testByteOperations() { private void testByteOperations() {
BitField used = new BitField(); BitField used = new BitField();
testSetFast(used, false); testSetFast(used, false);
...@@ -48,7 +79,9 @@ public class TestBitField extends TestBase { ...@@ -48,7 +79,9 @@ public class TestBitField extends TestBase {
x += 8; x += 8;
// for (int j = 0; j < 8; j++, x++) { // for (int j = 0; j < 8; j++, x++) {
// if (used.get(x) != ((mask & (1 << j)) != 0)) { // if (used.get(x) != ((mask & (1 << j)) != 0)) {
// throw Message.getInternalError("Redo failure, block: " + x + " expected in-use bit: " + used.get(x)); // throw Message.getInternalError(
// "Redo failure, block: " + x +
// " expected in-use bit: " + used.get(x));
// } // }
// } // }
} else { } else {
......
...@@ -25,7 +25,7 @@ public class ThreadDumpFilter { ...@@ -25,7 +25,7 @@ public class ThreadDumpFilter {
do { do {
System.out.println(s); System.out.println(s);
s = in.readLine(); s = in.readLine();
} while(s != null && (s.length() == 0 || "\t\"".indexOf(s.charAt(0)) >= 0)); } while(s != null && (s.length() == 0 || " \t\"".indexOf(s.charAt(0)) >= 0));
} }
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论