提交 fbf19960 authored 作者: noelgrandin@gmail.com's avatar noelgrandin@gmail.com

Issue 581: When running in LOCK_MODE=0,

    JdbcDatabaseMetaData#supportsTransactionIsolationLevel(TRANSACTION_READ_UNCOMMITTED)
should return false
上级 df154436
......@@ -17,7 +17,9 @@ Change Log
<h1>Change Log</h1>
<h2>Next Version (unreleased)</h2>
<ul><li>-
<ul><li>Issue 581: When running in LOCK_MODE=0,
JdbcDatabaseMetaData#supportsTransactionIsolationLevel(TRANSACTION_READ_UNCOMMITTED)
should return false
</li></ul>
<h2>Version 1.4.182 Beta (2014-10-17)</h2>
......
......@@ -2091,7 +2091,8 @@ public class Database implements DataHandler {
case Constants.LOCK_MODE_OFF:
if (multiThreaded) {
// currently the combination of LOCK_MODE=0 and MULTI_THREADED
// is not supported
// is not supported. also see code in
// JdbcDatabaseMetaData#supportsTransactionIsolationLevel(int)
throw DbException.get(
ErrorCode.UNSUPPORTED_SETTING_COMBINATION,
"LOCK_MODE=0 & MULTI_THREADED");
......
......@@ -2200,8 +2200,19 @@ public class JdbcDatabaseMetaData extends TraceObject implements
* @return true
*/
@Override
public boolean supportsTransactionIsolationLevel(int level) {
public boolean supportsTransactionIsolationLevel(int level) throws SQLException {
debugCodeCall("supportsTransactionIsolationLevel");
if (level == Connection.TRANSACTION_READ_UNCOMMITTED) {
// currently the combination of LOCK_MODE=0 and MULTI_THREADED
// is not supported, also see code in Database#setLockMode(int)
PreparedStatement prep = conn.prepareAutoCloseStatement(
"SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME=?");
prep.setString(1, "MULTI_THREADED");
ResultSet rs = prep.executeQuery();
if (rs.next() && rs.getString(1).equals("1")) {
return false;
}
}
return true;
}
......
......@@ -7,6 +7,7 @@ package org.h2.test.db;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
......@@ -58,6 +59,7 @@ public class TestMultiThread extends TestBase implements Runnable {
testConcurrentAlter();
testConcurrentAnalyze();
testConcurrentInsertUpdateSelect();
testMetadataWith();
}
private void testConcurrentLobAdd() throws Exception {
......@@ -244,4 +246,15 @@ public class TestMultiThread extends TestBase implements Runnable {
}
}
private void testMetadataWith() throws Exception {
// currently the combination of LOCK_MODE=0 and MULTI_THREADED
// is not supported. also see code in
deleteDb("concurrentAnalyze");
final String url = getURL("concurrentAnalyze;MULTI_THREADED=1", true);
Connection conn = getConnection(url);
DatabaseMetaData dmd = conn.getMetaData();
assertFalse(dmd.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED));
conn.close();
deleteDb("concurrentAnalyze");
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论