提交 9838c2c2 authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 3b5b3f45
...@@ -18,7 +18,23 @@ Change Log ...@@ -18,7 +18,23 @@ Change Log
<h1>Change Log</h1> <h1>Change Log</h1>
<h2>Next Version (unreleased)</h2> <h2>Next Version (unreleased)</h2>
<ul><li>Issue 117: Multi-version concurrency: concurrent MERGE statements now work. <ul><li>Page store: opening a database sometimes failed if large rows where updated,
or if a table was truncated before.
</li><li>Page store: when using a very small page size (128 bytes), writing a large
row could result in an endless recursion. This is only a theoretical problem, as the
page size is 2 KB.
</li><li>Page store: getting the min value from a descending index
with NULL entries could return the wrong result.
</li><li>The JDBC client did not detect that it was not talking to an H2 server.
This could result in strange exceptions when trying to connect to another kind of server.
</li><li>User defined functions can be created with source code. Example:
CREATE ALIAS HI AS 'String hi() { return "Hello"; }'
</li><li>Database file lock: the exception "lock file modified in the future" is longer thrown;
instead, opening the file will be delayed by 2 seconds.
</li><li>Page store: improved auto-recovery after power failure.
</li><li>Inserting LOBs got slower each time the process was restarted.
It could loop endlessly after about 1000 process restarts.
</li><li>Issue 117: Multi-version concurrency: concurrent MERGE statements now work.
</li><li>Improved read-only database detection. </li><li>Improved read-only database detection.
</li></ul> </li></ul>
......
...@@ -36,7 +36,6 @@ See also <a href="build.html#providing_patches">Providing Patches</a>. ...@@ -36,7 +36,6 @@ See also <a href="build.html#providing_patches">Providing Patches</a>.
</li><li>Optimization: result set caching (like MySQL) </li><li>Optimization: result set caching (like MySQL)
</li><li>Server side cursors </li><li>Server side cursors
</li><li>MVCC: support concurrent MERGE </li><li>MVCC: support concurrent MERGE
</li><li>Procedural language / script language (Java, Javascript)
</li></ul> </li></ul>
<h2>Priority 2</h2> <h2>Priority 2</h2>
...@@ -461,6 +460,11 @@ See also <a href="build.html#providing_patches">Providing Patches</a>. ...@@ -461,6 +460,11 @@ See also <a href="build.html#providing_patches">Providing Patches</a>.
</li><li>Check state of https://issues.apache.org/jira/browse/OPENJPA-1367 (H2 does support cross joins). </li><li>Check state of https://issues.apache.org/jira/browse/OPENJPA-1367 (H2 does support cross joins).
</li><li>Fulltext search (Lucene): only prefix column names with _ if they already start with _. Instead of DATA / QUERY / modified use _DATA, _QUERY, _MODIFIED if possible. </li><li>Fulltext search (Lucene): only prefix column names with _ if they already start with _. Instead of DATA / QUERY / modified use _DATA, _QUERY, _MODIFIED if possible.
</li><li>Support a way to create or read compressed encrypted script files using an API. </li><li>Support a way to create or read compressed encrypted script files using an API.
</li><li>Scripting language support (Javascript).
</li><li>The network client should better detect if the server is not an H2 server and fail early.
</li><li>H2 Console: support CLOB/BLOB download using a link.
</li><li>H2 Console: support CLOB/BLOB upload.
</li><li>Recover tool: stream blob / clob data (problem: currently using varchar data type).
</li></ul> </li></ul>
<h2>Not Planned</h2> <h2>Not Planned</h2>
......
...@@ -274,7 +274,8 @@ public class FileSystemDisk extends FileSystem { ...@@ -274,7 +274,8 @@ public class FileSystemDisk extends FileSystem {
private boolean canWriteInternal(File file) { private boolean canWriteInternal(File file) {
if (file.canWrite()) { if (file.canWrite()) {
// Does not respect windows user permissions, // Does not respect windows user permissions,
// so we must try to open it rw // so we must try to open it mode "rw".
// See also http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4420020
RandomAccessFile randomAccessFile = null; RandomAccessFile randomAccessFile = null;
try { try {
randomAccessFile = new RandomAccessFile(file, "rw"); randomAccessFile = new RandomAccessFile(file, "rw");
......
...@@ -297,6 +297,15 @@ java org.h2.test.TestAll timer ...@@ -297,6 +297,15 @@ java org.h2.test.TestAll timer
/* /*
remove PageStore.checkUndo
verify logUndo is correct
test with page size 64
check auto-build
DoubleTrace.java
Compiler documentation
ConvertTraceFile: remove newlines and duplicate spaces from output in statistics
check memory usage when inserting a lot of rows
http://www.apache.org/dev/contrib-email-tips.html http://www.apache.org/dev/contrib-email-tips.html
google app engine google app engine
documentation: rolling review at history.html documentation: rolling review at history.html
...@@ -356,7 +365,7 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1` ...@@ -356,7 +365,7 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1`
System.setProperty(SysProperties.H2_PAGE_STORE, "false"); System.setProperty(SysProperties.H2_PAGE_STORE, "false");
test.pageStore = false; test.pageStore = false;
test.runTests(); // test.runTests();
TestPerformance.main("-init", "-db", "1"); TestPerformance.main("-init", "-db", "1");
} }
System.out.println(TestBase.formatTime(System.currentTimeMillis() - time) + " total"); System.out.println(TestBase.formatTime(System.currentTimeMillis() - time) + " total");
...@@ -497,7 +506,7 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1` ...@@ -497,7 +506,7 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1`
new TestMultiDimension().runTest(this); new TestMultiDimension().runTest(this);
new TestMultiThread().runTest(this); new TestMultiThread().runTest(this);
new TestMultiThreadedKernel().runTest(this); new TestMultiThreadedKernel().runTest(this);
new TestOpenClose().runTest(this); // new TestOpenClose().runTest(this);
new TestOptimizations().runTest(this); new TestOptimizations().runTest(this);
new TestOutOfMemory().runTest(this); new TestOutOfMemory().runTest(this);
new TestPowerOff().runTest(this); new TestPowerOff().runTest(this);
...@@ -598,7 +607,7 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1` ...@@ -598,7 +607,7 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1`
new TestStreams().runTest(this); new TestStreams().runTest(this);
new TestStringCache().runTest(this); new TestStringCache().runTest(this);
new TestStringUtils().runTest(this); new TestStringUtils().runTest(this);
new TestTools().runTest(this); // new TestTools().runTest(this);
new TestValue().runTest(this); new TestValue().runTest(this);
new TestValueHashMap().runTest(this); new TestValueHashMap().runTest(this);
new TestValueMemory().runTest(this); new TestValueMemory().runTest(this);
......
...@@ -60,6 +60,7 @@ There is a known problem in version 1.2.120 that can cause a ClassCastException. ...@@ -60,6 +60,7 @@ There is a known problem in version 1.2.120 that can cause a ClassCastException.
You can find it out using: You can find it out using:
select * from information_schema.settings where name='CREATE_BUILD' select * from information_schema.settings where name='CREATE_BUILD'
or have a look in the SQL script created by the recover tool. or have a look in the SQL script created by the recover tool.
- Did the application run out of memory (once, or multiple times)?
- Do you use any settings or special features (for example, the setting - Do you use any settings or special features (for example, the setting
LOG=0, or two phase commit, linked tables, cache settings)? LOG=0, or two phase commit, linked tables, cache settings)?
- Is the application multi-threaded? - Is the application multi-threaded?
...@@ -87,6 +88,7 @@ I have a few questions: ...@@ -87,6 +88,7 @@ I have a few questions:
- With which version of H2 was this database created? - With which version of H2 was this database created?
You can find it out using: You can find it out using:
select * from information_schema.settings where name='CREATE_BUILD' select * from information_schema.settings where name='CREATE_BUILD'
- Did the application run out of memory (once, or multiple times)?
- Did you use multiple connections? - Did you use multiple connections?
- Do you use any settings or special features (for example, the setting - Do you use any settings or special features (for example, the setting
LOG=0, or two phase commit, linked tables, cache settings)? LOG=0, or two phase commit, linked tables, cache settings)?
...@@ -126,6 +128,7 @@ I am sorry to say that, but it looks like a corruption problem. I am very intere ...@@ -126,6 +128,7 @@ I am sorry to say that, but it looks like a corruption problem. I am very intere
- With which version of H2 was this database created? - With which version of H2 was this database created?
You can find it out using: You can find it out using:
select * from information_schema.settings where name='CREATE_BUILD' select * from information_schema.settings where name='CREATE_BUILD'
- Did the application run out of memory (once, or multiple times)?
- Do you use any settings or special features (for example, the setting - Do you use any settings or special features (for example, the setting
LOG=0, or two phase commit, linked tables, cache settings)? LOG=0, or two phase commit, linked tables, cache settings)?
- Is the application multi-threaded? - Is the application multi-threaded?
......
...@@ -36,6 +36,8 @@ public class TestPageStore extends TestBase implements DatabaseEventListener { ...@@ -36,6 +36,8 @@ public class TestPageStore extends TestBase implements DatabaseEventListener {
} }
public void test() throws Exception { public void test() throws Exception {
testUpdateOverflow();
testTruncateReconnect();
testReverseIndex(); testReverseIndex();
testLargeUpdates(); testLargeUpdates();
testLargeInserts(); testLargeInserts();
...@@ -54,6 +56,45 @@ public class TestPageStore extends TestBase implements DatabaseEventListener { ...@@ -54,6 +56,45 @@ public class TestPageStore extends TestBase implements DatabaseEventListener {
testFuzzOperations(); testFuzzOperations();
} }
private void testTruncateReconnect() throws SQLException {
if (config.memory) {
return;
}
deleteDb("pageStore");
Connection conn;
conn = getConnection("pageStore;PAGE_STORE=TRUE");
conn.createStatement().execute("create table test(id int primary key, name varchar)");
conn.createStatement().execute("insert into test(id) select x from system_range(1, 390)");
conn.createStatement().execute("checkpoint");
conn.createStatement().execute("shutdown immediately");
conn = getConnection("pageStore;PAGE_STORE=TRUE");
conn.createStatement().execute("truncate table test");
conn.createStatement().execute("insert into test(id) select x from system_range(1, 390)");
conn.createStatement().execute("shutdown immediately");
conn = getConnection("pageStore;PAGE_STORE=TRUE");
conn.close();
}
private void testUpdateOverflow() throws SQLException {
if (config.memory) {
return;
}
deleteDb("pageStore");
Connection conn;
conn = getConnection("pageStore;PAGE_STORE=TRUE");
conn.createStatement().execute("create table test(id int primary key, name varchar)");
conn.createStatement().execute("insert into test values(0, space(3000))");
conn.createStatement().execute("checkpoint");
conn.createStatement().execute("shutdown immediately");
conn = getConnection("pageStore;PAGE_STORE=TRUE");
conn.createStatement().execute("update test set id = 1");
conn.createStatement().execute("shutdown immediately");
conn = getConnection("pageStore;PAGE_STORE=TRUE");
conn.close();
}
private void testReverseIndex() throws SQLException { private void testReverseIndex() throws SQLException {
if (config.memory) { if (config.memory) {
return; return;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论