Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
00b26a11
提交
00b26a11
authored
2月 27, 2014
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Limit line length to 80 characters
上级
74525f99
全部展开
显示空白字符变更
内嵌
并排
正在显示
61 个修改的文件
包含
1118 行增加
和
612 行删除
+1118
-612
CommandRemote.java
h2/src/main/org/h2/command/CommandRemote.java
+13
-7
Database.java
h2/src/main/org/h2/engine/Database.java
+32
-16
Engine.java
h2/src/main/org/h2/engine/Engine.java
+18
-9
IntArray.java
h2/src/main/org/h2/util/IntArray.java
+2
-1
JdbcUtils.java
h2/src/main/org/h2/util/JdbcUtils.java
+2
-1
NetUtils.java
h2/src/main/org/h2/util/NetUtils.java
+10
-5
Utils.java
h2/src/main/org/h2/util/Utils.java
+33
-15
BenchA.java
h2/src/test/org/h2/test/bench/BenchA.java
+21
-8
BenchB.java
h2/src/test/org/h2/test/bench/BenchB.java
+13
-4
BenchC.java
h2/src/test/org/h2/test/bench/BenchC.java
+3
-2
BenchCThread.java
h2/src/test/org/h2/test/bench/BenchCThread.java
+2
-1
Database.java
h2/src/test/org/h2/test/bench/Database.java
+4
-2
TestPerformance.java
h2/src/test/org/h2/test/bench/TestPerformance.java
+28
-17
TestScalability.java
h2/src/test/org/h2/test/bench/TestScalability.java
+38
-22
TestMultiThreadedKernel.java
h2/src/test/org/h2/test/db/TestMultiThreadedKernel.java
+6
-3
Player.java
h2/src/test/org/h2/test/trace/Player.java
+2
-1
TestAutoReconnect.java
h2/src/test/org/h2/test/unit/TestAutoReconnect.java
+14
-7
TestBnf.java
h2/src/test/org/h2/test/unit/TestBnf.java
+15
-6
TestCache.java
h2/src/test/org/h2/test/unit/TestCache.java
+25
-11
TestClassLoaderLeak.java
h2/src/test/org/h2/test/unit/TestClassLoaderLeak.java
+8
-5
TestCompress.java
h2/src/test/org/h2/test/unit/TestCompress.java
+6
-3
TestConnectionInfo.java
h2/src/test/org/h2/test/unit/TestConnectionInfo.java
+16
-8
TestDataPage.java
h2/src/test/org/h2/test/unit/TestDataPage.java
+4
-3
TestDate.java
h2/src/test/org/h2/test/unit/TestDate.java
+82
-43
TestDateIso8601.java
h2/src/test/org/h2/test/unit/TestDateIso8601.java
+2
-1
TestExit.java
h2/src/test/org/h2/test/unit/TestExit.java
+17
-14
TestFile.java
h2/src/test/org/h2/test/unit/TestFile.java
+7
-4
TestFileLock.java
h2/src/test/org/h2/test/unit/TestFileLock.java
+21
-14
TestFileLockSerialized.java
h2/src/test/org/h2/test/unit/TestFileLockSerialized.java
+100
-56
TestFileSystem.java
h2/src/test/org/h2/test/unit/TestFileSystem.java
+16
-8
TestFtp.java
h2/src/test/org/h2/test/unit/TestFtp.java
+2
-1
TestIntIntHashMap.java
h2/src/test/org/h2/test/unit/TestIntIntHashMap.java
+6
-3
TestJmx.java
h2/src/test/org/h2/test/unit/TestJmx.java
+60
-30
TestMathUtils.java
h2/src/test/org/h2/test/unit/TestMathUtils.java
+4
-2
TestObjectDeserialization.java
h2/src/test/org/h2/test/unit/TestObjectDeserialization.java
+4
-2
TestOldVersion.java
h2/src/test/org/h2/test/unit/TestOldVersion.java
+10
-6
TestPageStore.java
h2/src/test/org/h2/test/unit/TestPageStore.java
+56
-30
TestPageStoreCoverage.java
h2/src/test/org/h2/test/unit/TestPageStoreCoverage.java
+18
-9
TestPattern.java
h2/src/test/org/h2/test/unit/TestPattern.java
+2
-1
TestPgServer.java
h2/src/test/org/h2/test/unit/TestPgServer.java
+47
-22
TestReopen.java
h2/src/test/org/h2/test/unit/TestReopen.java
+16
-8
TestSampleApps.java
h2/src/test/org/h2/test/unit/TestSampleApps.java
+15
-8
TestScriptReader.java
h2/src/test/org/h2/test/unit/TestScriptReader.java
+4
-2
TestSecurity.java
h2/src/test/org/h2/test/unit/TestSecurity.java
+34
-17
TestServlet.java
h2/src/test/org/h2/test/unit/TestServlet.java
+3
-2
TestShell.java
h2/src/test/org/h2/test/unit/TestShell.java
+4
-2
TestSort.java
h2/src/test/org/h2/test/unit/TestSort.java
+2
-1
TestStringCache.java
h2/src/test/org/h2/test/unit/TestStringCache.java
+4
-2
TestStringUtils.java
h2/src/test/org/h2/test/unit/TestStringUtils.java
+5
-2
TestTools.java
h2/src/test/org/h2/test/unit/TestTools.java
+129
-71
TestUtils.java
h2/src/test/org/h2/test/unit/TestUtils.java
+19
-7
TestValue.java
h2/src/test/org/h2/test/unit/TestValue.java
+10
-6
TestValueHashMap.java
h2/src/test/org/h2/test/unit/TestValueHashMap.java
+2
-1
TestValueMemory.java
h2/src/test/org/h2/test/unit/TestValueMemory.java
+6
-3
AssertThrows.java
h2/src/test/org/h2/test/utils/AssertThrows.java
+4
-2
FilePathDebug.java
h2/src/test/org/h2/test/utils/FilePathDebug.java
+6
-4
FilePathUnstable.java
h2/src/test/org/h2/test/utils/FilePathUnstable.java
+4
-3
MemoryFootprint.java
h2/src/test/org/h2/test/utils/MemoryFootprint.java
+2
-1
OutputCatcher.java
h2/src/test/org/h2/test/utils/OutputCatcher.java
+8
-4
ProxyCodeGenerator.java
h2/src/test/org/h2/test/utils/ProxyCodeGenerator.java
+6
-3
SelfDestructor.java
h2/src/test/org/h2/test/utils/SelfDestructor.java
+66
-60
没有找到文件。
h2/src/main/org/h2/command/CommandRemote.java
浏览文件 @
00b26a11
...
...
@@ -37,7 +37,8 @@ public class CommandRemote implements CommandInterface {
private
boolean
readonly
;
private
final
int
created
;
public
CommandRemote
(
SessionRemote
session
,
ArrayList
<
Transfer
>
transferList
,
String
sql
,
int
fetchSize
)
{
public
CommandRemote
(
SessionRemote
session
,
ArrayList
<
Transfer
>
transferList
,
String
sql
,
int
fetchSize
)
{
this
.
transferList
=
transferList
;
trace
=
session
.
getTrace
();
this
.
sql
=
sql
;
...
...
@@ -57,10 +58,13 @@ public class CommandRemote implements CommandInterface {
Transfer
transfer
=
transferList
.
get
(
i
);
if
(
createParams
)
{
s
.
traceOperation
(
"SESSION_PREPARE_READ_PARAMS"
,
id
);
transfer
.
writeInt
(
SessionRemote
.
SESSION_PREPARE_READ_PARAMS
).
writeInt
(
id
).
writeString
(
sql
);
transfer
.
writeInt
(
SessionRemote
.
SESSION_PREPARE_READ_PARAMS
).
writeInt
(
id
).
writeString
(
sql
);
}
else
{
s
.
traceOperation
(
"SESSION_PREPARE"
,
id
);
transfer
.
writeInt
(
SessionRemote
.
SESSION_PREPARE
).
writeInt
(
id
).
writeString
(
sql
);
transfer
.
writeInt
(
SessionRemote
.
SESSION_PREPARE
).
writeInt
(
id
).
writeString
(
sql
);
}
s
.
done
(
transfer
);
isQuery
=
transfer
.
readBoolean
();
...
...
@@ -115,10 +119,12 @@ public class CommandRemote implements CommandInterface {
Transfer
transfer
=
transferList
.
get
(
i
);
try
{
session
.
traceOperation
(
"COMMAND_GET_META_DATA"
,
id
);
transfer
.
writeInt
(
SessionRemote
.
COMMAND_GET_META_DATA
).
writeInt
(
id
).
writeInt
(
objectId
);
transfer
.
writeInt
(
SessionRemote
.
COMMAND_GET_META_DATA
).
writeInt
(
id
).
writeInt
(
objectId
);
session
.
done
(
transfer
);
int
columnCount
=
transfer
.
readInt
();
result
=
new
ResultRemote
(
session
,
transfer
,
objectId
,
columnCount
,
Integer
.
MAX_VALUE
);
result
=
new
ResultRemote
(
session
,
transfer
,
objectId
,
columnCount
,
Integer
.
MAX_VALUE
);
break
;
}
catch
(
IOException
e
)
{
session
.
removeServer
(
e
,
i
--,
++
count
);
...
...
@@ -140,8 +146,8 @@ public class CommandRemote implements CommandInterface {
Transfer
transfer
=
transferList
.
get
(
i
);
try
{
session
.
traceOperation
(
"COMMAND_EXECUTE_QUERY"
,
id
);
transfer
.
writeInt
(
SessionRemote
.
COMMAND_EXECUTE_QUERY
).
writeInt
(
id
).
writeInt
(
objectId
).
writeInt
(
maxRows
);
transfer
.
writeInt
(
SessionRemote
.
COMMAND_EXECUTE_QUERY
).
writeInt
(
id
).
writeInt
(
objectId
).
writeInt
(
maxRows
);
int
fetch
;
if
(
session
.
isClustered
()
||
scrollable
)
{
fetch
=
Integer
.
MAX_VALUE
;
...
...
h2/src/main/org/h2/engine/Database.java
浏览文件 @
00b26a11
...
...
@@ -105,7 +105,8 @@ public class Database implements DataHandler {
private
final
HashMap
<
String
,
UserAggregate
>
aggregates
=
New
.
hashMap
();
private
final
HashMap
<
String
,
Comment
>
comments
=
New
.
hashMap
();
private
final
Set
<
Session
>
userSessions
=
Collections
.
synchronizedSet
(
new
HashSet
<
Session
>());
private
final
Set
<
Session
>
userSessions
=
Collections
.
synchronizedSet
(
new
HashSet
<
Session
>());
private
Session
exclusiveSession
;
private
final
BitField
objectIds
=
new
BitField
();
private
final
Object
lobSyncObject
=
new
Object
();
...
...
@@ -154,7 +155,8 @@ public class Database implements DataHandler {
private
DatabaseCloser
closeOnExit
;
private
Mode
mode
=
Mode
.
getInstance
(
Mode
.
REGULAR
);
private
boolean
multiThreaded
;
private
int
maxOperationMemory
=
Constants
.
DEFAULT_MAX_OPERATION_MEMORY
;
private
int
maxOperationMemory
=
Constants
.
DEFAULT_MAX_OPERATION_MEMORY
;
private
SmallLRUCache
<
String
,
String
[]>
lobFileListCache
;
private
final
boolean
autoServerMode
;
private
final
int
autoServerPort
;
...
...
@@ -228,19 +230,28 @@ public class Database implements DataHandler {
if
(
modeName
!=
null
)
{
this
.
mode
=
Mode
.
getInstance
(
modeName
);
}
this
.
multiVersion
=
ci
.
getProperty
(
"MVCC"
,
false
);
this
.
logMode
=
ci
.
getProperty
(
"LOG"
,
PageStore
.
LOG_MODE_SYNC
);
this
.
javaObjectSerializerName
=
ci
.
getProperty
(
"JAVA_OBJECT_SERIALIZER"
,
null
);
boolean
closeAtVmShutdown
=
dbSettings
.
dbCloseOnExit
;
int
traceLevelFile
=
ci
.
getIntProperty
(
SetTypes
.
TRACE_LEVEL_FILE
,
TraceSystem
.
DEFAULT_TRACE_LEVEL_FILE
);
int
traceLevelSystemOut
=
ci
.
getIntProperty
(
SetTypes
.
TRACE_LEVEL_SYSTEM_OUT
,
this
.
multiVersion
=
ci
.
getProperty
(
"MVCC"
,
false
);
this
.
logMode
=
ci
.
getProperty
(
"LOG"
,
PageStore
.
LOG_MODE_SYNC
);
this
.
javaObjectSerializerName
=
ci
.
getProperty
(
"JAVA_OBJECT_SERIALIZER"
,
null
);
boolean
closeAtVmShutdown
=
dbSettings
.
dbCloseOnExit
;
int
traceLevelFile
=
ci
.
getIntProperty
(
SetTypes
.
TRACE_LEVEL_FILE
,
TraceSystem
.
DEFAULT_TRACE_LEVEL_FILE
);
int
traceLevelSystemOut
=
ci
.
getIntProperty
(
SetTypes
.
TRACE_LEVEL_SYSTEM_OUT
,
TraceSystem
.
DEFAULT_TRACE_LEVEL_SYSTEM_OUT
);
this
.
cacheType
=
StringUtils
.
toUpperEnglish
(
ci
.
removeProperty
(
"CACHE_TYPE"
,
Constants
.
CACHE_TYPE_DEFAULT
));
this
.
cacheType
=
StringUtils
.
toUpperEnglish
(
ci
.
removeProperty
(
"CACHE_TYPE"
,
Constants
.
CACHE_TYPE_DEFAULT
));
openDatabase
(
traceLevelFile
,
traceLevelSystemOut
,
closeAtVmShutdown
);
}
private
void
openDatabase
(
int
traceLevelFile
,
int
traceLevelSystemOut
,
boolean
closeAtVmShutdown
)
{
private
void
openDatabase
(
int
traceLevelFile
,
int
traceLevelSystemOut
,
boolean
closeAtVmShutdown
)
{
try
{
open
(
traceLevelFile
,
traceLevelSystemOut
);
if
(
closeAtVmShutdown
)
{
...
...
@@ -547,8 +558,10 @@ public class Database implements DataHandler {
boolean
existsPage
=
FileUtils
.
exists
(
pageFileName
);
boolean
existsMv
=
FileUtils
.
exists
(
mvFileName
);
if
(
existsData
&&
(!
existsPage
&&
!
existsMv
))
{
throw
DbException
.
get
(
ErrorCode
.
FILE_VERSION_ERROR_1
,
"Old database: "
+
dataFileName
+
" - please convert the database to a SQL script and re-create it."
);
throw
DbException
.
get
(
ErrorCode
.
FILE_VERSION_ERROR_1
,
"Old database: "
+
dataFileName
+
" - please convert the database to a SQL script and re-create it."
);
}
if
(
existsPage
&&
!
FileUtils
.
canWrite
(
pageFileName
))
{
readOnly
=
true
;
...
...
@@ -576,7 +589,8 @@ public class Database implements DataHandler {
fileLockMethod
==
FileLock
.
LOCK_SERIALIZED
||
fileLockMethod
==
FileLock
.
LOCK_FS
||
!
persistent
)
{
throw
DbException
.
getUnsupportedException
(
"autoServerMode && (readOnly || fileLockMethod == NO"
+
throw
DbException
.
getUnsupportedException
(
"autoServerMode && (readOnly || fileLockMethod == NO"
+
" || fileLockMethod == SERIALIZED || inMemory)"
);
}
}
...
...
@@ -634,7 +648,8 @@ public class Database implements DataHandler {
}
}
else
{
if
(
autoServerMode
)
{
throw
DbException
.
getUnsupportedException
(
"autoServerMode && inMemory"
);
throw
DbException
.
getUnsupportedException
(
"autoServerMode && inMemory"
);
}
traceSystem
=
new
TraceSystem
(
null
);
trace
=
traceSystem
.
getTrace
(
Trace
.
DATABASE
);
...
...
@@ -671,7 +686,8 @@ public class Database implements DataHandler {
data
.
session
=
systemSession
;
meta
=
mainSchema
.
createTable
(
data
);
IndexColumn
[]
pkCols
=
IndexColumn
.
wrap
(
new
Column
[]
{
columnId
});
metaIdIndex
=
meta
.
addIndex
(
systemSession
,
"SYS_ID"
,
0
,
pkCols
,
IndexType
.
createPrimaryKey
(
metaIdIndex
=
meta
.
addIndex
(
systemSession
,
"SYS_ID"
,
0
,
pkCols
,
IndexType
.
createPrimaryKey
(
false
,
false
),
true
,
null
);
objectIds
.
set
(
0
);
starting
=
true
;
...
...
h2/src/main/org/h2/engine/Engine.java
浏览文件 @
00b26a11
...
...
@@ -30,7 +30,8 @@ public class Engine implements SessionFactory {
private
static
final
Engine
INSTANCE
=
new
Engine
();
private
static
final
HashMap
<
String
,
Database
>
DATABASES
=
New
.
hashMap
();
private
volatile
long
wrongPasswordDelay
=
SysProperties
.
DELAY_WRONG_PASSWORD_MIN
;
private
volatile
long
wrongPasswordDelay
=
SysProperties
.
DELAY_WRONG_PASSWORD_MIN
;
private
boolean
jmx
;
public
static
Engine
getInstance
()
{
...
...
@@ -58,7 +59,8 @@ public class Engine implements SessionFactory {
if
(
database
.
getAllUsers
().
size
()
==
0
)
{
// users is the last thing we add, so if no user is around,
// the database is new (or not initialized correctly)
user
=
new
User
(
database
,
database
.
allocateObjectId
(),
ci
.
getUserName
(),
false
);
user
=
new
User
(
database
,
database
.
allocateObjectId
(),
ci
.
getUserName
(),
false
);
user
.
setAdmin
(
true
);
user
.
setUserPasswordHash
(
ci
.
getUserPasswordHash
());
database
.
setMasterUser
(
user
);
...
...
@@ -100,7 +102,8 @@ public class Engine implements SessionFactory {
Session
session
=
database
.
createSession
(
user
);
if
(
ci
.
getProperty
(
"JMX"
,
false
))
{
try
{
Utils
.
callStaticMethod
(
"org.h2.jmx.DatabaseInfo.registerMBean"
,
ci
,
database
);
Utils
.
callStaticMethod
(
"org.h2.jmx.DatabaseInfo.registerMBean"
,
ci
,
database
);
}
catch
(
Exception
e
)
{
database
.
removeSession
(
session
);
throw
DbException
.
get
(
ErrorCode
.
FEATURE_NOT_SUPPORTED_1
,
e
,
"JMX"
);
...
...
@@ -152,7 +155,8 @@ public class Engine implements SessionFactory {
private
synchronized
Session
openSession
(
ConnectionInfo
ci
)
{
boolean
ifExists
=
ci
.
removeProperty
(
"IFEXISTS"
,
false
);
boolean
ignoreUnknownSetting
=
ci
.
removeProperty
(
"IGNORE_UNKNOWN_SETTINGS"
,
false
);
boolean
ignoreUnknownSetting
=
ci
.
removeProperty
(
"IGNORE_UNKNOWN_SETTINGS"
,
false
);
String
cipher
=
ci
.
removeProperty
(
"CIPHER"
,
null
);
String
init
=
ci
.
removeProperty
(
"INIT"
,
null
);
Session
session
;
...
...
@@ -183,8 +187,9 @@ public class Engine implements SessionFactory {
}
String
value
=
ci
.
getProperty
(
setting
);
try
{
CommandInterface
command
=
session
.
prepareCommand
(
"SET "
+
Parser
.
quoteIdentifier
(
setting
)
+
" "
+
value
,
Integer
.
MAX_VALUE
);
CommandInterface
command
=
session
.
prepareCommand
(
"SET "
+
Parser
.
quoteIdentifier
(
setting
)
+
" "
+
value
,
Integer
.
MAX_VALUE
);
command
.
executeUpdate
();
}
catch
(
DbException
e
)
{
if
(!
ignoreUnknownSetting
)
{
...
...
@@ -195,7 +200,8 @@ public class Engine implements SessionFactory {
}
if
(
init
!=
null
)
{
try
{
CommandInterface
command
=
session
.
prepareCommand
(
init
,
Integer
.
MAX_VALUE
);
CommandInterface
command
=
session
.
prepareCommand
(
init
,
Integer
.
MAX_VALUE
);
command
.
executeUpdate
();
}
catch
(
DbException
e
)
{
if
(!
ignoreUnknownSetting
)
{
...
...
@@ -221,9 +227,12 @@ public class Engine implements SessionFactory {
if
(!
Constants
.
CLUSTERING_ENABLED
.
equals
(
clusterSession
))
{
if
(!
StringUtils
.
equals
(
clusterSession
,
clusterDb
))
{
if
(
clusterDb
.
equals
(
Constants
.
CLUSTERING_DISABLED
))
{
throw
DbException
.
get
(
ErrorCode
.
CLUSTER_ERROR_DATABASE_RUNS_ALONE
);
throw
DbException
.
get
(
ErrorCode
.
CLUSTER_ERROR_DATABASE_RUNS_ALONE
);
}
throw
DbException
.
get
(
ErrorCode
.
CLUSTER_ERROR_DATABASE_RUNS_CLUSTERED_1
,
clusterDb
);
throw
DbException
.
get
(
ErrorCode
.
CLUSTER_ERROR_DATABASE_RUNS_CLUSTERED_1
,
clusterDb
);
}
}
}
...
...
h2/src/main/org/h2/util/IntArray.java
浏览文件 @
00b26a11
...
...
@@ -167,7 +167,8 @@ public class IntArray {
public
void
removeRange
(
int
fromIndex
,
int
toIndex
)
{
if
(
SysProperties
.
CHECK
)
{
if
(
fromIndex
>
toIndex
||
toIndex
>
size
)
{
throw
new
ArrayIndexOutOfBoundsException
(
"from="
+
fromIndex
+
" to="
+
toIndex
+
" size="
+
size
);
throw
new
ArrayIndexOutOfBoundsException
(
"from="
+
fromIndex
+
" to="
+
toIndex
+
" size="
+
size
);
}
}
System
.
arraycopy
(
data
,
toIndex
,
data
,
fromIndex
,
size
-
toIndex
);
...
...
h2/src/main/org/h2/util/JdbcUtils.java
浏览文件 @
00b26a11
...
...
@@ -107,7 +107,8 @@ public class JdbcUtils {
* @param password the password
* @return the database connection
*/
public
static
Connection
getConnection
(
String
driver
,
String
url
,
String
user
,
String
password
)
throws
SQLException
{
public
static
Connection
getConnection
(
String
driver
,
String
url
,
String
user
,
String
password
)
throws
SQLException
{
Properties
prop
=
new
Properties
();
if
(
user
!=
null
)
{
prop
.
setProperty
(
"user"
,
user
);
...
...
h2/src/main/org/h2/util/NetUtils.java
浏览文件 @
00b26a11
...
...
@@ -41,7 +41,8 @@ public class NetUtils {
* @param ssl if SSL should be used
* @return the socket
*/
public
static
Socket
createLoopbackSocket
(
int
port
,
boolean
ssl
)
throws
IOException
{
public
static
Socket
createLoopbackSocket
(
int
port
,
boolean
ssl
)
throws
IOException
{
InetAddress
address
=
getBindAddress
();
if
(
address
==
null
)
{
address
=
InetAddress
.
getLocalHost
();
...
...
@@ -84,7 +85,8 @@ public class NetUtils {
* @param ssl if SSL should be used
* @return the socket
*/
public
static
Socket
createSocket
(
String
server
,
int
defaultPort
,
boolean
ssl
)
throws
IOException
{
public
static
Socket
createSocket
(
String
server
,
int
defaultPort
,
boolean
ssl
)
throws
IOException
{
int
port
=
defaultPort
;
// IPv6: RFC 2732 format is '[a:b:c:d:e:f:g:h]' or
// '[a:b:c:d:e:f:g:h]:port'
...
...
@@ -108,7 +110,8 @@ public class NetUtils {
* @param ssl if SSL should be used
* @return the socket
*/
public
static
Socket
createSocket
(
InetAddress
address
,
int
port
,
boolean
ssl
)
throws
IOException
{
public
static
Socket
createSocket
(
InetAddress
address
,
int
port
,
boolean
ssl
)
throws
IOException
{
long
start
=
System
.
currentTimeMillis
();
for
(
int
i
=
0
;;
i
++)
{
try
{
...
...
@@ -120,7 +123,8 @@ public class NetUtils {
SysProperties
.
SOCKET_CONNECT_TIMEOUT
);
return
socket
;
}
catch
(
IOException
e
)
{
if
(
System
.
currentTimeMillis
()
-
start
>=
SysProperties
.
SOCKET_CONNECT_TIMEOUT
)
{
if
(
System
.
currentTimeMillis
()
-
start
>=
SysProperties
.
SOCKET_CONNECT_TIMEOUT
)
{
// either it was a connect timeout,
// or list of different exceptions
throw
e
;
...
...
@@ -200,7 +204,8 @@ public class NetUtils {
* @param socket the socket
* @return true if it is
*/
public
static
boolean
isLocalAddress
(
Socket
socket
)
throws
UnknownHostException
{
public
static
boolean
isLocalAddress
(
Socket
socket
)
throws
UnknownHostException
{
InetAddress
test
=
socket
.
getInetAddress
();
if
(
test
.
isLoopbackAddress
())
{
return
true
;
...
...
h2/src/main/org/h2/util/Utils.java
浏览文件 @
00b26a11
...
...
@@ -67,7 +67,8 @@ public class Utils {
/**
* In order to manage more than one class loader
*/
private
static
ArrayList
<
ClassFactory
>
userClassFactories
=
new
ArrayList
<
ClassFactory
>();
private
static
ArrayList
<
ClassFactory
>
userClassFactories
=
new
ArrayList
<
ClassFactory
>();
private
static
String
[]
allowedClassNamePrefixes
;
...
...
@@ -114,7 +115,10 @@ public class Utils {
}
private
static
int
readInt
(
byte
[]
buff
,
int
pos
)
{
return
(
buff
[
pos
++]
<<
24
)
+
((
buff
[
pos
++]
&
0xff
)
<<
16
)
+
((
buff
[
pos
++]
&
0xff
)
<<
8
)
+
(
buff
[
pos
]
&
0xff
);
return
(
buff
[
pos
++]
<<
24
)
+
((
buff
[
pos
++]
&
0xff
)
<<
16
)
+
((
buff
[
pos
++]
&
0xff
)
<<
8
)
+
(
buff
[
pos
]
&
0xff
);
}
/**
...
...
@@ -397,7 +401,8 @@ public class Utils {
final
ClassLoader
loader
=
Thread
.
currentThread
().
getContextClassLoader
();
is
=
new
ObjectInputStream
(
in
)
{
@Override
protected
Class
<?>
resolveClass
(
ObjectStreamClass
desc
)
throws
IOException
,
ClassNotFoundException
{
protected
Class
<?>
resolveClass
(
ObjectStreamClass
desc
)
throws
IOException
,
ClassNotFoundException
{
try
{
return
Class
.
forName
(
desc
.
getName
(),
true
,
loader
);
}
catch
(
ClassNotFoundException
e
)
{
...
...
@@ -529,7 +534,8 @@ public class Utils {
*/
private
static
<
X
>
void
partitionTopN
(
X
[]
array
,
int
offset
,
int
limit
,
Comparator
<?
super
X
>
comp
)
{
partialQuickSort
(
array
,
0
,
array
.
length
-
1
,
comp
,
offset
,
offset
+
limit
-
1
);
partialQuickSort
(
array
,
0
,
array
.
length
-
1
,
comp
,
offset
,
offset
+
limit
-
1
);
}
private
static
<
X
>
void
partialQuickSort
(
X
[]
array
,
int
low
,
int
high
,
...
...
@@ -577,7 +583,8 @@ public class Utils {
* @param c2 the second class
* @return true if they have
*/
public
static
boolean
haveCommonComparableSuperclass
(
Class
<?>
c1
,
Class
<?>
c2
)
{
public
static
boolean
haveCommonComparableSuperclass
(
Class
<?>
c1
,
Class
<?>
c2
)
{
if
(
c1
==
c2
||
c1
.
isAssignableFrom
(
c2
)
||
c2
.
isAssignableFrom
(
c1
))
{
return
true
;
}
...
...
@@ -633,7 +640,8 @@ public class Utils {
}
}
if
(!
allowed
)
{
throw
DbException
.
get
(
ErrorCode
.
ACCESS_DENIED_TO_CLASS_1
,
className
);
throw
DbException
.
get
(
ErrorCode
.
ACCESS_DENIED_TO_CLASS_1
,
className
);
}
}
// Use provided class factory first.
...
...
@@ -645,7 +653,8 @@ public class Utils {
return
userClass
;
}
}
catch
(
Exception
e
)
{
throw
DbException
.
get
(
ErrorCode
.
CLASS_NOT_FOUND_1
,
e
,
className
);
throw
DbException
.
get
(
ErrorCode
.
CLASS_NOT_FOUND_1
,
e
,
className
);
}
}
}
...
...
@@ -654,15 +663,20 @@ public class Utils {
return
Class
.
forName
(
className
);
}
catch
(
ClassNotFoundException
e
)
{
try
{
return
Class
.
forName
(
className
,
true
,
Thread
.
currentThread
().
getContextClassLoader
());
return
Class
.
forName
(
className
,
true
,
Thread
.
currentThread
().
getContextClassLoader
());
}
catch
(
Exception
e2
)
{
throw
DbException
.
get
(
ErrorCode
.
CLASS_NOT_FOUND_1
,
e
,
className
);
throw
DbException
.
get
(
ErrorCode
.
CLASS_NOT_FOUND_1
,
e
,
className
);
}
}
catch
(
NoClassDefFoundError
e
)
{
throw
DbException
.
get
(
ErrorCode
.
CLASS_NOT_FOUND_1
,
e
,
className
);
throw
DbException
.
get
(
ErrorCode
.
CLASS_NOT_FOUND_1
,
e
,
className
);
}
catch
(
Error
e
)
{
// UnsupportedClassVersionError
throw
DbException
.
get
(
ErrorCode
.
GENERAL_ERROR_1
,
e
,
className
);
throw
DbException
.
get
(
ErrorCode
.
GENERAL_ERROR_1
,
e
,
className
);
}
}
...
...
@@ -728,7 +742,8 @@ public class Utils {
* @param params the method parameters
* @return the return value from this call
*/
public
static
Object
callStaticMethod
(
String
classAndMethod
,
Object
...
params
)
throws
Exception
{
public
static
Object
callStaticMethod
(
String
classAndMethod
,
Object
...
params
)
throws
Exception
{
int
lastDot
=
classAndMethod
.
lastIndexOf
(
'.'
);
String
className
=
classAndMethod
.
substring
(
0
,
lastDot
);
String
methodName
=
classAndMethod
.
substring
(
lastDot
+
1
);
...
...
@@ -760,7 +775,8 @@ public class Utils {
int
bestMatch
=
0
;
boolean
isStatic
=
instance
==
null
;
for
(
Method
m
:
clazz
.
getMethods
())
{
if
(
Modifier
.
isStatic
(
m
.
getModifiers
())
==
isStatic
&&
m
.
getName
().
equals
(
methodName
))
{
if
(
Modifier
.
isStatic
(
m
.
getModifiers
())
==
isStatic
&&
m
.
getName
().
equals
(
methodName
))
{
int
p
=
match
(
m
.
getParameterTypes
(),
params
);
if
(
p
>
bestMatch
)
{
bestMatch
=
p
;
...
...
@@ -783,7 +799,8 @@ public class Utils {
* @param params the constructor parameters
* @return the newly created object
*/
public
static
Object
newInstance
(
String
className
,
Object
...
params
)
throws
Exception
{
public
static
Object
newInstance
(
String
className
,
Object
...
params
)
throws
Exception
{
Constructor
<?>
best
=
null
;
int
bestMatch
=
0
;
for
(
Constructor
<?>
c
:
Class
.
forName
(
className
).
getConstructors
())
{
...
...
@@ -840,7 +857,8 @@ public class Utils {
* @param fieldName the field name
* @return the field value
*/
public
static
Object
getField
(
Object
instance
,
String
fieldName
)
throws
Exception
{
public
static
Object
getField
(
Object
instance
,
String
fieldName
)
throws
Exception
{
return
instance
.
getClass
().
getField
(
fieldName
).
get
(
instance
);
}
...
...
h2/src/test/org/h2/test/bench/BenchA.java
浏览文件 @
00b26a11
...
...
@@ -48,10 +48,16 @@ public class BenchA implements Bench {
db
.
dropTable
(
"ACCOUNTS"
);
db
.
dropTable
(
"HISTORY"
);
String
[]
create
=
{
"CREATE TABLE BRANCHES(BID INT NOT NULL PRIMARY KEY, BBALANCE DECIMAL(15,2), FILLER VARCHAR(88))"
,
"CREATE TABLE TELLERS(TID INT NOT NULL PRIMARY KEY, BID INT, TBALANCE DECIMAL(15,2), FILLER VARCHAR(84))"
,
"CREATE TABLE ACCOUNTS(AID INT NOT NULL PRIMARY KEY, BID INT, ABALANCE DECIMAL(15,2), FILLER VARCHAR(84))"
,
"CREATE TABLE HISTORY(TID INT, BID INT, AID INT, DELTA DECIMAL(15,2), HTIME DATETIME, FILLER VARCHAR(40))"
};
String
[]
create
=
{
"CREATE TABLE BRANCHES(BID INT NOT NULL PRIMARY KEY, "
+
"BBALANCE DECIMAL(15,2), FILLER VARCHAR(88))"
,
"CREATE TABLE TELLERS(TID INT NOT NULL PRIMARY KEY, "
+
"BID INT, TBALANCE DECIMAL(15,2), FILLER VARCHAR(84))"
,
"CREATE TABLE ACCOUNTS(AID INT NOT NULL PRIMARY KEY, "
+
"BID INT, ABALANCE DECIMAL(15,2), FILLER VARCHAR(84))"
,
"CREATE TABLE HISTORY(TID INT, "
+
"BID INT, AID INT, DELTA DECIMAL(15,2), HTIME DATETIME, "
+
"FILLER VARCHAR(40))"
};
for
(
String
sql
:
create
)
{
db
.
update
(
sql
);
...
...
@@ -60,7 +66,9 @@ public class BenchA implements Bench {
PreparedStatement
prep
;
db
.
setAutoCommit
(
false
);
int
commitEvery
=
1000
;
prep
=
db
.
prepare
(
"INSERT INTO BRANCHES(BID,BBALANCE,FILLER) VALUES(?,10000.00,'"
+
FILLER
+
"')"
);
prep
=
db
.
prepare
(
"INSERT INTO BRANCHES(BID, BBALANCE, FILLER) "
+
"VALUES(?, 10000.00, '"
+
FILLER
+
"')"
);
for
(
int
i
=
0
;
i
<
branches
*
scale
;
i
++)
{
prep
.
setInt
(
1
,
i
);
db
.
update
(
prep
,
"insertBranches"
);
...
...
@@ -69,7 +77,9 @@ public class BenchA implements Bench {
}
}
db
.
commit
();
prep
=
db
.
prepare
(
"INSERT INTO TELLERS(TID,BID,TBALANCE,FILLER) VALUES(?,?,10000.00,'"
+
FILLER
+
"')"
);
prep
=
db
.
prepare
(
"INSERT INTO TELLERS(TID, BID, TBALANCE, FILLER) "
+
"VALUES(?, ?, 10000.00, '"
+
FILLER
+
"')"
);
for
(
int
i
=
0
;
i
<
tellers
*
scale
;
i
++)
{
prep
.
setInt
(
1
,
i
);
prep
.
setInt
(
2
,
i
/
tellers
);
...
...
@@ -80,7 +90,9 @@ public class BenchA implements Bench {
}
db
.
commit
();
int
len
=
accounts
*
scale
;
prep
=
db
.
prepare
(
"INSERT INTO ACCOUNTS(AID,BID,ABALANCE,FILLER) VALUES(?,?,10000.00,'"
+
FILLER
+
"')"
);
prep
=
db
.
prepare
(
"INSERT INTO ACCOUNTS(AID, BID, ABALANCE, FILLER) "
+
"VALUES(?, ?, 10000.00, '"
+
FILLER
+
"')"
);
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
prep
.
setInt
(
1
,
i
);
prep
.
setInt
(
2
,
i
/
accounts
);
...
...
@@ -129,7 +141,8 @@ public class BenchA implements Bench {
PreparedStatement
updateBranch
=
database
.
prepare
(
"UPDATE BRANCHES SET BBALANCE=BBALANCE+? WHERE BID=?"
);
PreparedStatement
insertHistory
=
database
.
prepare
(
"INSERT INTO HISTORY(AID,TID,BID,DELTA,HTIME,FILLER) VALUES(?,?,?,?,?,?)"
);
"INSERT INTO HISTORY(AID, TID, BID, DELTA, HTIME, FILLER) "
+
"VALUES(?, ?, ?, ?, ?, ?)"
);
int
accountsPerBranch
=
accounts
/
branches
;
database
.
setAutoCommit
(
false
);
...
...
h2/src/test/org/h2/test/bench/BenchB.java
浏览文件 @
00b26a11
...
...
@@ -74,10 +74,19 @@ public class BenchB implements Bench, Runnable {
db
.
dropTable
(
"TELLERS"
);
db
.
dropTable
(
"ACCOUNTS"
);
db
.
dropTable
(
"HISTORY"
);
String
[]
create
=
{
"CREATE TABLE BRANCHES(BID INT NOT NULL PRIMARY KEY, BBALANCE INT, FILLER VARCHAR(88))"
,
"CREATE TABLE TELLERS(TID INT NOT NULL PRIMARY KEY, BID INT, TBALANCE INT, FILLER VARCHAR(84))"
,
"CREATE TABLE ACCOUNTS(AID INT NOT NULL PRIMARY KEY, BID INT, ABALANCE INT, FILLER VARCHAR(84))"
,
"CREATE TABLE HISTORY(TID INT, BID INT, AID INT, DELTA INT, TIME DATETIME, FILLER VARCHAR(22))"
};
String
[]
create
=
{
"CREATE TABLE BRANCHES("
+
"BID INT NOT NULL PRIMARY KEY, "
+
"BBALANCE INT, FILLER VARCHAR(88))"
,
"CREATE TABLE TELLERS("
+
"TID INT NOT NULL PRIMARY KEY, "
+
"BID INT, TBALANCE INT, FILLER VARCHAR(84))"
,
"CREATE TABLE ACCOUNTS("
+
"AID INT NOT NULL PRIMARY KEY, "
+
"BID INT, ABALANCE INT, FILLER VARCHAR(84))"
,
"CREATE TABLE HISTORY("
+
"TID INT, BID INT, AID INT, "
+
"DELTA INT, TIME DATETIME, FILLER VARCHAR(22))"
};
for
(
String
sql
:
create
)
{
db
.
update
(
sql
);
}
...
...
h2/src/test/org/h2/test/bench/BenchC.java
浏览文件 @
00b26a11
...
...
@@ -23,8 +23,9 @@ public class BenchC implements Bench {
private
static
final
int
COMMIT_EVERY
=
1000
;
private
static
final
String
[]
TABLES
=
{
"WAREHOUSE"
,
"DISTRICT"
,
"CUSTOMER"
,
"HISTORY"
,
"ORDERS"
,
"NEW_ORDER"
,
"ITEM"
,
"STOCK"
,
"ORDER_LINE"
,
"RESULTS"
};
private
static
final
String
[]
TABLES
=
{
"WAREHOUSE"
,
"DISTRICT"
,
"CUSTOMER"
,
"HISTORY"
,
"ORDERS"
,
"NEW_ORDER"
,
"ITEM"
,
"STOCK"
,
"ORDER_LINE"
,
"RESULTS"
};
private
static
final
String
[]
CREATE_SQL
=
{
"CREATE TABLE WAREHOUSE(\n"
+
...
...
h2/src/test/org/h2/test/bench/BenchCThread.java
浏览文件 @
00b26a11
...
...
@@ -26,7 +26,8 @@ public class BenchCThread {
private
final
Database
db
;
private
final
int
warehouseId
;
private
final
int
terminalId
;
private
final
HashMap
<
String
,
PreparedStatement
>
prepared
=
new
HashMap
<
String
,
PreparedStatement
>();
private
final
HashMap
<
String
,
PreparedStatement
>
prepared
=
new
HashMap
<
String
,
PreparedStatement
>();
private
final
BenchCRandom
random
;
private
final
BenchC
bench
;
...
...
h2/src/test/org/h2/test/bench/Database.java
浏览文件 @
00b26a11
...
...
@@ -95,7 +95,8 @@ class Database {
serverH2
=
Server
.
createTcpServer
().
start
();
Thread
.
sleep
(
100
);
}
else
if
(
url
.
startsWith
(
"jdbc:derby://"
))
{
serverDerby
=
Class
.
forName
(
"org.apache.derby.drda.NetworkServerControl"
).
newInstance
();
serverDerby
=
Class
.
forName
(
"org.apache.derby.drda.NetworkServerControl"
).
newInstance
();
Method
m
=
serverDerby
.
getClass
().
getMethod
(
"start"
,
PrintWriter
.
class
);
m
.
invoke
(
serverDerby
,
new
Object
[]
{
null
});
// serverDerby = new NetworkServerControl();
...
...
@@ -152,7 +153,8 @@ class Database {
* @param threadCount the number of threads to use
* @return a new database object with the given settings
*/
static
Database
parse
(
DatabaseTest
test
,
int
id
,
String
dbString
,
int
threadCount
)
{
static
Database
parse
(
DatabaseTest
test
,
int
id
,
String
dbString
,
int
threadCount
)
{
try
{
StringTokenizer
tokenizer
=
new
StringTokenizer
(
dbString
,
","
);
Database
db
=
new
Database
();
...
...
h2/src/test/org/h2/test/bench/TestPerformance.java
浏览文件 @
00b26a11
...
...
@@ -59,8 +59,10 @@ public class TestPerformance implements Database.DatabaseTest {
try
{
conn
=
getResultConnection
();
stat
=
conn
.
createStatement
();
stat
.
execute
(
"CREATE TABLE IF NOT EXISTS RESULTS(TESTID INT, TEST VARCHAR, "
+
"UNIT VARCHAR, DBID INT, DB VARCHAR, RESULT VARCHAR)"
);
stat
.
execute
(
"CREATE TABLE IF NOT EXISTS RESULTS("
+
"TESTID INT, TEST VARCHAR, "
+
"UNIT VARCHAR, DBID INT, DB VARCHAR, RESULT VARCHAR)"
);
}
finally
{
JdbcUtils
.
closeSilently
(
stat
);
JdbcUtils
.
closeSilently
(
conn
);
...
...
@@ -128,8 +130,9 @@ public class TestPerformance implements Database.DatabaseTest {
openResults
();
conn
=
getResultConnection
();
stat
=
conn
.
createStatement
();
prep
=
conn
.
prepareStatement
(
"INSERT INTO RESULTS(TESTID, TEST, UNIT, DBID, DB, RESULT) VALUES(?, ?, ?, ?, ?, ?)"
);
prep
=
conn
.
prepareStatement
(
"INSERT INTO RESULTS(TESTID, TEST, "
+
"UNIT, DBID, DB, RESULT) VALUES(?, ?, ?, ?, ?, ?)"
);
for
(
int
i
=
0
;
i
<
results
.
size
();
i
++)
{
Object
[]
res
=
results
.
get
(
i
);
prep
.
setInt
(
1
,
i
);
...
...
@@ -146,15 +149,19 @@ public class TestPerformance implements Database.DatabaseTest {
writer
=
new
PrintWriter
(
new
FileWriter
(
out
));
ResultSet
rs
=
stat
.
executeQuery
(
"CALL '<table><tr><th>Test Case</th><th>Unit</th>' "
+
"|| SELECT GROUP_CONCAT('<th>' || DB || '</th>' ORDER BY DBID SEPARATOR '') FROM "
+
"(SELECT DISTINCT DBID, DB FROM RESULTS)"
+
"|| '</tr>' || CHAR(10) "
+
"|| SELECT GROUP_CONCAT('<tr><td>' || TEST || '</td><td>' || UNIT || '</td>' || ( "
+
"SELECT GROUP_CONCAT('<td>' || RESULT || '</td>' ORDER BY DBID SEPARATOR '') FROM RESULTS R2 WHERE "
+
"R2.TESTID = R1.TESTID) || '</tr>' ORDER BY TESTID SEPARATOR CHAR(10)) FROM "
+
"(SELECT DISTINCT TESTID, TEST, UNIT FROM RESULTS) R1"
+
"|| '</table>'"
"CALL '<table><tr><th>Test Case</th><th>Unit</th>' "
+
"|| SELECT GROUP_CONCAT('<th>' || DB || '</th>' "
+
"ORDER BY DBID SEPARATOR '') FROM "
+
"(SELECT DISTINCT DBID, DB FROM RESULTS)"
+
"|| '</tr>' || CHAR(10) "
+
"|| SELECT GROUP_CONCAT('<tr><td>' || TEST || "
+
"'</td><td>' || UNIT || '</td>' || ( "
+
"SELECT GROUP_CONCAT('<td>' || RESULT || '</td>' "
+
"ORDER BY DBID SEPARATOR '') FROM RESULTS R2 WHERE "
+
"R2.TESTID = R1.TESTID) || '</tr>' "
+
"ORDER BY TESTID SEPARATOR CHAR(10)) FROM "
+
"(SELECT DISTINCT TESTID, TEST, UNIT FROM RESULTS) R1"
+
"|| '</table>'"
);
rs
.
next
();
String
result
=
rs
.
getString
(
1
);
...
...
@@ -211,7 +218,8 @@ public class TestPerformance implements Database.DatabaseTest {
}
}
private
void
testAll
(
ArrayList
<
Database
>
dbs
,
ArrayList
<
Bench
>
tests
,
int
size
)
throws
Exception
{
private
void
testAll
(
ArrayList
<
Database
>
dbs
,
ArrayList
<
Bench
>
tests
,
int
size
)
throws
Exception
{
for
(
int
i
=
0
;
i
<
dbs
.
size
();
i
++)
{
if
(
i
>
0
)
{
Thread
.
sleep
(
1000
);
...
...
@@ -224,7 +232,8 @@ public class TestPerformance implements Database.DatabaseTest {
db
.
startServer
();
Connection
conn
=
db
.
openNewConnection
();
DatabaseMetaData
meta
=
conn
.
getMetaData
();
System
.
out
.
println
(
" "
+
meta
.
getDatabaseProductName
()
+
" "
+
meta
.
getDatabaseProductVersion
());
System
.
out
.
println
(
" "
+
meta
.
getDatabaseProductName
()
+
" "
+
meta
.
getDatabaseProductVersion
());
runDatabase
(
db
,
tests
,
1
);
runDatabase
(
db
,
tests
,
1
);
collect
=
true
;
...
...
@@ -240,13 +249,15 @@ public class TestPerformance implements Database.DatabaseTest {
}
}
private
static
void
runDatabase
(
Database
db
,
ArrayList
<
Bench
>
tests
,
int
size
)
throws
Exception
{
private
static
void
runDatabase
(
Database
db
,
ArrayList
<
Bench
>
tests
,
int
size
)
throws
Exception
{
for
(
Bench
bench
:
tests
)
{
runTest
(
db
,
bench
,
size
);
}
}
private
static
void
runTest
(
Database
db
,
Bench
bench
,
int
size
)
throws
Exception
{
private
static
void
runTest
(
Database
db
,
Bench
bench
,
int
size
)
throws
Exception
{
bench
.
init
(
db
,
size
);
bench
.
runTest
();
}
...
...
h2/src/test/org/h2/test/bench/TestScalability.java
浏览文件 @
00b26a11
...
...
@@ -56,8 +56,10 @@ public class TestScalability implements Database.DatabaseTest {
try
{
conn
=
getResultConnection
();
stat
=
conn
.
createStatement
();
stat
.
execute
(
"CREATE TABLE IF NOT EXISTS RESULTS(TESTID INT, TEST VARCHAR, "
+
"UNIT VARCHAR, DBID INT, DB VARCHAR, RESULT VARCHAR)"
);
stat
.
execute
(
"CREATE TABLE IF NOT EXISTS RESULTS(TESTID INT, "
+
"TEST VARCHAR, UNIT VARCHAR, DBID INT, "
+
"DB VARCHAR, RESULT VARCHAR)"
);
}
finally
{
JdbcUtils
.
closeSilently
(
stat
);
JdbcUtils
.
closeSilently
(
conn
);
...
...
@@ -72,7 +74,8 @@ public class TestScalability implements Database.DatabaseTest {
ArrayList
<
Database
>
dbs
=
new
ArrayList
<
Database
>();
int
id
=
1
;
final
String
h2Url
=
"jdbc:h2:data/test;LOCK_TIMEOUT=10000;LOCK_MODE=3"
;
final
String
h2Url
=
"jdbc:h2:data/test;"
+
"LOCK_TIMEOUT=10000;LOCK_MODE=3"
;
dbs
.
add
(
createDbEntry
(
id
++,
"H2"
,
1
,
h2Url
));
dbs
.
add
(
createDbEntry
(
id
++,
"H2"
,
10
,
h2Url
));
dbs
.
add
(
createDbEntry
(
id
++,
"H2"
,
20
,
h2Url
));
...
...
@@ -81,7 +84,8 @@ public class TestScalability implements Database.DatabaseTest {
dbs
.
add
(
createDbEntry
(
id
++,
"H2"
,
50
,
h2Url
));
dbs
.
add
(
createDbEntry
(
id
++,
"H2"
,
100
,
h2Url
));
final
String
mvUrl
=
"jdbc:h2:data/mvTest;LOCK_TIMEOUT=10000;MV_STORE=TRUE"
;
final
String
mvUrl
=
"jdbc:h2:data/mvTest;"
+
"LOCK_TIMEOUT=10000;MV_STORE=TRUE"
;
dbs
.
add
(
createDbEntry
(
id
++,
"MV"
,
1
,
mvUrl
));
dbs
.
add
(
createDbEntry
(
id
++,
"MV"
,
10
,
mvUrl
));
dbs
.
add
(
createDbEntry
(
id
++,
"MV"
,
20
,
mvUrl
));
...
...
@@ -103,8 +107,9 @@ public class TestScalability implements Database.DatabaseTest {
openResults
();
conn
=
getResultConnection
();
stat
=
conn
.
createStatement
();
prep
=
conn
.
prepareStatement
(
"INSERT INTO RESULTS(TESTID, TEST, UNIT, DBID, DB, RESULT) VALUES(?, ?, ?, ?, ?, ?)"
);
prep
=
conn
.
prepareStatement
(
"INSERT INTO RESULTS(TESTID, "
+
"TEST, UNIT, DBID, DB, RESULT) VALUES(?, ?, ?, ?, ?, ?)"
);
for
(
int
i
=
0
;
i
<
results
.
size
();
i
++)
{
Object
[]
res
=
results
.
get
(
i
);
prep
.
setInt
(
1
,
i
);
...
...
@@ -120,15 +125,21 @@ public class TestScalability implements Database.DatabaseTest {
}
writer
=
new
PrintWriter
(
new
FileWriter
(
out
));
ResultSet
rs
=
stat
.
executeQuery
(
"CALL '<table><tr><th>Test Case</th><th>Unit</th>' "
+
"|| SELECT GROUP_CONCAT('<th>' || DB || '</th>' ORDER BY DBID SEPARATOR '') FROM "
+
"(SELECT DISTINCT DBID, DB FROM RESULTS)"
+
"|| '</tr>' || CHAR(10) "
+
"|| SELECT GROUP_CONCAT('<tr><td>' || TEST || '</td><td>' || UNIT || '</td>' || ( "
+
"SELECT GROUP_CONCAT('<td>' || RESULT || '</td>' ORDER BY DBID SEPARATOR '') FROM RESULTS R2 WHERE "
+
"R2.TESTID = R1.TESTID) || '</tr>' ORDER BY TESTID SEPARATOR CHAR(10)) FROM "
+
"(SELECT DISTINCT TESTID, TEST, UNIT FROM RESULTS) R1"
+
"|| '</table>'"
);
ResultSet
rs
=
stat
.
executeQuery
(
"CALL '<table><tr><th>Test Case</th>"
+
"<th>Unit</th>' "
+
"|| SELECT GROUP_CONCAT('<th>' || DB || '</th>' "
+
"ORDER BY DBID SEPARATOR '') FROM "
+
"(SELECT DISTINCT DBID, DB FROM RESULTS)"
+
"|| '</tr>' || CHAR(10) "
+
"|| SELECT GROUP_CONCAT('<tr><td>' || "
+
"TEST || '</td><td>' || UNIT || '</td>' || ( "
+
"SELECT GROUP_CONCAT('<td>' || RESULT || '</td>' "
+
"ORDER BY DBID SEPARATOR '') FROM RESULTS R2 WHERE "
+
"R2.TESTID = R1.TESTID) || '</tr>' "
+
"ORDER BY TESTID SEPARATOR CHAR(10)) FROM "
+
"(SELECT DISTINCT TESTID, TEST, UNIT FROM RESULTS) R1"
+
"|| '</table>'"
);
rs
.
next
();
String
result
=
rs
.
getString
(
1
);
writer
.
println
(
result
);
...
...
@@ -144,14 +155,16 @@ public class TestScalability implements Database.DatabaseTest {
}
}
private
Database
createDbEntry
(
int
id
,
String
namePrefix
,
int
threadCount
,
String
url
)
{
Database
db
=
Database
.
parse
(
this
,
id
,
namePrefix
+
"("
+
threadCount
+
"threads), org.h2.Driver, "
+
url
+
", sa, sa"
,
threadCount
);
private
Database
createDbEntry
(
int
id
,
String
namePrefix
,
int
threadCount
,
String
url
)
{
Database
db
=
Database
.
parse
(
this
,
id
,
namePrefix
+
"("
+
threadCount
+
"threads), org.h2.Driver, "
+
url
+
", sa, sa"
,
threadCount
);
return
db
;
}
private
void
testAll
(
ArrayList
<
Database
>
dbs
,
BenchB
test
,
int
size
)
throws
Exception
{
private
void
testAll
(
ArrayList
<
Database
>
dbs
,
BenchB
test
,
int
size
)
throws
Exception
{
for
(
int
i
=
0
;
i
<
dbs
.
size
();
i
++)
{
if
(
i
>
0
)
{
Thread
.
sleep
(
1000
);
...
...
@@ -163,7 +176,8 @@ public class TestScalability implements Database.DatabaseTest {
db
.
startServer
();
Connection
conn
=
db
.
openNewConnection
();
DatabaseMetaData
meta
=
conn
.
getMetaData
();
System
.
out
.
println
(
" "
+
meta
.
getDatabaseProductName
()
+
" "
+
meta
.
getDatabaseProductVersion
());
System
.
out
.
println
(
" "
+
meta
.
getDatabaseProductName
()
+
" "
+
meta
.
getDatabaseProductVersion
());
runDatabase
(
db
,
test
,
1
);
runDatabase
(
db
,
test
,
1
);
collect
=
true
;
...
...
@@ -171,7 +185,8 @@ public class TestScalability implements Database.DatabaseTest {
conn
.
close
();
db
.
log
(
"Executed statements"
,
"#"
,
db
.
getExecutedStatements
());
db
.
log
(
"Total time"
,
"ms"
,
db
.
getTotalTime
());
int
statPerSec
=
(
int
)
(
db
.
getExecutedStatements
()
*
1000L
/
db
.
getTotalTime
());
int
statPerSec
=
(
int
)
(
db
.
getExecutedStatements
()
*
1000L
/
db
.
getTotalTime
());
db
.
log
(
"Statements per second"
,
"#"
,
statPerSec
);
System
.
out
.
println
(
"Statements per second: "
+
statPerSec
);
collect
=
false
;
...
...
@@ -179,7 +194,8 @@ public class TestScalability implements Database.DatabaseTest {
}
}
private
static
void
runDatabase
(
Database
db
,
BenchB
bench
,
int
size
)
throws
Exception
{
private
static
void
runDatabase
(
Database
db
,
BenchB
bench
,
int
size
)
throws
Exception
{
bench
.
init
(
db
,
size
);
bench
.
setThreadCount
(
db
.
getThreadsCount
());
bench
.
runTest
();
...
...
h2/src/test/org/h2/test/db/TestMultiThreadedKernel.java
浏览文件 @
00b26a11
...
...
@@ -51,7 +51,8 @@ public class TestMultiThreadedKernel extends TestBase {
testConcurrentRead
();
testCache
();
deleteDb
(
"multiThreadedKernel"
);
final
String
url
=
getURL
(
"multiThreadedKernel;DB_CLOSE_DELAY=-1;MULTI_THREADED=1"
,
true
);
final
String
url
=
getURL
(
"multiThreadedKernel;"
+
"DB_CLOSE_DELAY=-1;MULTI_THREADED=1"
,
true
);
final
String
user
=
getUser
(),
password
=
getPassword
();
int
len
=
3
;
Thread
[]
threads
=
new
Thread
[
len
];
...
...
@@ -64,8 +65,10 @@ public class TestMultiThreadedKernel extends TestBase {
for
(
int
j
=
0
;
j
<
100
&&
!
stop
;
j
++)
{
conn
=
DriverManager
.
getConnection
(
url
,
user
,
password
);
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create local temporary table temp(id identity)"
);
stat
.
execute
(
"insert into temp values(1)"
);
stat
.
execute
(
"create local temporary table temp(id identity)"
);
stat
.
execute
(
"insert into temp values(1)"
);
conn
.
close
();
}
}
catch
(
Exception
e
)
{
...
...
h2/src/test/org/h2/test/trace/Player.java
浏览文件 @
00b26a11
...
...
@@ -49,7 +49,8 @@ public class Player {
// TODO support Map
// TODO support SQLXML
private
static
final
String
[]
IMPORTED_PACKAGES
=
{
""
,
"java.lang."
,
"java.sql."
,
"javax.sql."
};
private
static
final
String
[]
IMPORTED_PACKAGES
=
{
""
,
"java.lang."
,
"java.sql."
,
"javax.sql."
};
private
boolean
trace
;
private
final
HashMap
<
String
,
Object
>
objects
=
New
.
hashMap
();
...
...
h2/src/test/org/h2/test/unit/TestAutoReconnect.java
浏览文件 @
00b26a11
...
...
@@ -64,16 +64,21 @@ public class TestAutoReconnect extends TestBase {
deleteDb
(
"autoReconnect"
);
Server
tcp
=
Server
.
createTcpServer
().
start
();
try
{
conn
=
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/autoReconnect;AUTO_SERVER=TRUE"
);
conn
=
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/autoReconnect;AUTO_SERVER=TRUE"
);
assertThrows
(
ErrorCode
.
DATABASE_ALREADY_OPEN_1
,
this
).
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/autoReconnect;OPEN_NEW=TRUE"
);
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/autoReconnect;OPEN_NEW=TRUE"
);
assertThrows
(
ErrorCode
.
DATABASE_ALREADY_OPEN_1
,
this
).
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/autoReconnect;OPEN_NEW=TRUE"
);
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/autoReconnect;OPEN_NEW=TRUE"
);
conn
.
close
();
conn
=
getConnection
(
"jdbc:h2:tcp://localhost/"
+
getBaseDir
()
+
"/autoReconnect"
);
conn
=
getConnection
(
"jdbc:h2:tcp://localhost/"
+
getBaseDir
()
+
"/autoReconnect"
);
assertThrows
(
ErrorCode
.
DATABASE_ALREADY_OPEN_1
,
this
).
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/autoReconnect;AUTO_SERVER=TRUE;OPEN_NEW=TRUE"
);
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/autoReconnect;AUTO_SERVER=TRUE;OPEN_NEW=TRUE"
);
conn
.
close
();
}
finally
{
tcp
.
stop
();
...
...
@@ -94,7 +99,8 @@ public class TestAutoReconnect extends TestBase {
}
// test the database event listener
conn
=
getConnection
(
url
+
";DATABASE_EVENT_LISTENER='"
+
MyDatabaseEventListener
.
class
.
getName
()
+
"'"
);
conn
=
getConnection
(
url
+
";DATABASE_EVENT_LISTENER='"
+
MyDatabaseEventListener
.
class
.
getName
()
+
"'"
);
conn
.
close
();
Statement
stat
;
...
...
@@ -105,7 +111,8 @@ public class TestAutoReconnect extends TestBase {
restart
();
stat
.
execute
(
"create table test(id identity, name varchar)"
);
restart
();
PreparedStatement
prep
=
conn
.
prepareStatement
(
"insert into test values(null, ?)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"insert into test values(null, ?)"
);
restart
();
prep
.
setString
(
1
,
"Hello"
);
restart
();
...
...
h2/src/test/org/h2/test/unit/TestBnf.java
浏览文件 @
00b26a11
...
...
@@ -81,10 +81,17 @@ public class TestBnf extends TestBase {
private
void
testProcedures
(
Connection
conn
,
boolean
isMySQLMode
)
throws
Exception
{
// Register a procedure and check if it is present in DbContents
conn
.
createStatement
().
execute
(
"DROP ALIAS IF EXISTS CUSTOM_PRINT"
);
conn
.
createStatement
().
execute
(
"CREATE ALIAS CUSTOM_PRINT AS $$ void print(String s) { System.out.println(s); } $$"
);
conn
.
createStatement
().
execute
(
"DROP TABLE IF EXISTS TABLE_WITH_STRING_FIELD"
);
conn
.
createStatement
().
execute
(
"CREATE TABLE TABLE_WITH_STRING_FIELD (STRING_FIELD VARCHAR(50), INT_FIELD integer)"
);
conn
.
createStatement
().
execute
(
"DROP ALIAS IF EXISTS CUSTOM_PRINT"
);
conn
.
createStatement
().
execute
(
"CREATE ALIAS CUSTOM_PRINT "
+
"AS $$ void print(String s) { System.out.println(s); } $$"
);
conn
.
createStatement
().
execute
(
"DROP TABLE IF EXISTS "
+
"TABLE_WITH_STRING_FIELD"
);
conn
.
createStatement
().
execute
(
"CREATE TABLE "
+
"TABLE_WITH_STRING_FIELD (STRING_FIELD VARCHAR(50), INT_FIELD integer)"
);
DbContents
dbContents
=
new
DbContents
();
dbContents
.
readContents
(
"jdbc:h2:test"
,
conn
);
assertTrue
(
dbContents
.
isH2
());
...
...
@@ -126,9 +133,11 @@ public class TestBnf extends TestBase {
// Test completion
Bnf
bnf
=
Bnf
.
getInstance
(
null
);
DbContextRule
columnRule
=
new
DbContextRule
(
dbContents
,
DbContextRule
.
COLUMN
);
DbContextRule
columnRule
=
new
DbContextRule
(
dbContents
,
DbContextRule
.
COLUMN
);
bnf
.
updateTopic
(
"column_name"
,
columnRule
);
bnf
.
updateTopic
(
"expression"
,
new
DbContextRule
(
dbContents
,
DbContextRule
.
PROCEDURE
));
bnf
.
updateTopic
(
"expression"
,
new
DbContextRule
(
dbContents
,
DbContextRule
.
PROCEDURE
));
bnf
.
linkStatements
();
// Test partial
Map
<
String
,
String
>
tokens
=
bnf
.
getNextTokenList
(
"SELECT CUSTOM_PR"
);
...
...
h2/src/test/org/h2/test/unit/TestCache.java
浏览文件 @
00b26a11
...
...
@@ -84,12 +84,14 @@ public class TestCache extends TestBase implements CacheWriter {
}
private
void
testTQ
(
String
cacheType
,
boolean
scanResistant
)
throws
Exception
{
Connection
conn
=
getConnection
(
"cache;CACHE_TYPE="
+
cacheType
+
";CACHE_SIZE=4096"
);
Connection
conn
=
getConnection
(
"cache;CACHE_TYPE="
+
cacheType
+
";CACHE_SIZE=4096"
);
Statement
stat
=
conn
.
createStatement
();
PreparedStatement
prep
;
for
(
int
k
=
0
;
k
<
10
;
k
++)
{
int
rc
;
prep
=
conn
.
prepareStatement
(
"select * from test where id = ?"
);
prep
=
conn
.
prepareStatement
(
"select * from test where id = ?"
);
rc
=
getReadCount
(
stat
);
for
(
int
x
=
0
;
x
<
2
;
x
++)
{
for
(
int
i
=
0
;
i
<
15000
;
i
++)
{
...
...
@@ -106,7 +108,8 @@ public class TestCache extends TestBase implements CacheWriter {
assertTrue
(
rcData
>
0
);
}
rc
=
getReadCount
(
stat
);
ResultSet
rs
=
stat
.
executeQuery
(
"select * from lob where id = "
+
k
);
ResultSet
rs
=
stat
.
executeQuery
(
"select * from lob where id = "
+
k
);
rs
.
next
();
InputStream
in
=
rs
.
getBinaryStream
(
2
);
while
(
in
.
read
()
>=
0
)
{
...
...
@@ -121,7 +124,9 @@ public class TestCache extends TestBase implements CacheWriter {
private
static
int
getReadCount
(
Statement
stat
)
throws
Exception
{
ResultSet
rs
;
rs
=
stat
.
executeQuery
(
"select value from information_schema.settings where name = 'info.FILE_READ'"
);
rs
=
stat
.
executeQuery
(
"select value from information_schema.settings "
+
"where name = 'info.FILE_READ'"
);
rs
.
next
();
return
rs
.
getInt
(
1
);
}
...
...
@@ -152,12 +157,16 @@ public class TestCache extends TestBase implements CacheWriter {
// -XX:+HeapDumpOnOutOfMemoryError
stat
.
execute
(
"insert into test select x, random_uuid() || space(1) from system_range(1, 10000)"
);
stat
.
execute
(
"insert into test select x, random_uuid() || space(1) "
+
"from system_range(1, 10000)"
);
// stat.execute("create index idx_test_n on test(data)");
// stat.execute("select data from test where data >= ''");
rs
=
stat
.
executeQuery
(
"select value from information_schema.settings where name = 'info.CACHE_SIZE'"
);
rs
=
stat
.
executeQuery
(
"select value from information_schema.settings "
+
"where name = 'info.CACHE_SIZE'"
);
rs
.
next
();
int
calculated
=
rs
.
getInt
(
1
);
rs
=
null
;
...
...
@@ -167,8 +176,10 @@ public class TestCache extends TestBase implements CacheWriter {
stat
=
null
;
conn
=
null
;
long
afterClose
=
getRealMemory
();
trace
(
"Used memory: "
+
(
afterInsert
-
afterClose
)
+
" calculated cache size: "
+
calculated
);
trace
(
"Before: "
+
before
+
" after: "
+
afterInsert
+
" after closing: "
+
afterClose
);
trace
(
"Used memory: "
+
(
afterInsert
-
afterClose
)
+
" calculated cache size: "
+
calculated
);
trace
(
"Before: "
+
before
+
" after: "
+
afterInsert
+
" after closing: "
+
afterClose
);
}
private
int
getRealMemory
()
{
...
...
@@ -240,13 +251,16 @@ public class TestCache extends TestBase implements CacheWriter {
return
;
}
deleteDb
(
"cache"
);
Connection
conn
=
getConnection
(
"cache;CACHE_TYPE="
+
(
lru
?
"LRU"
:
"SOFT_LRU"
));
Connection
conn
=
getConnection
(
"cache;CACHE_TYPE="
+
(
lru
?
"LRU"
:
"SOFT_LRU"
));
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"SET CACHE_SIZE 1024"
);
stat
.
execute
(
"CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)"
);
stat
.
execute
(
"CREATE TABLE MAIN(ID INT PRIMARY KEY, NAME VARCHAR)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST VALUES(?, ?)"
);
PreparedStatement
prep2
=
conn
.
prepareStatement
(
"INSERT INTO MAIN VALUES(?, ?)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST VALUES(?, ?)"
);
PreparedStatement
prep2
=
conn
.
prepareStatement
(
"INSERT INTO MAIN VALUES(?, ?)"
);
int
max
=
10000
;
for
(
int
i
=
0
;
i
<
max
;
i
++)
{
prep
.
setInt
(
1
,
i
);
...
...
h2/src/test/org/h2/test/unit/TestClassLoaderLeak.java
浏览文件 @
00b26a11
...
...
@@ -63,8 +63,10 @@ public class TestClassLoaderLeak extends TestBase {
memory
.
add
(
new
byte
[
1024
]);
}
}
DriverManager
.
registerDriver
((
Driver
)
Class
.
forName
(
"org.h2.Driver"
).
newInstance
());
DriverManager
.
registerDriver
((
Driver
)
Class
.
forName
(
"org.h2.upgrade.v1_1.Driver"
).
newInstance
());
DriverManager
.
registerDriver
((
Driver
)
Class
.
forName
(
"org.h2.Driver"
).
newInstance
());
DriverManager
.
registerDriver
((
Driver
)
Class
.
forName
(
"org.h2.upgrade.v1_1.Driver"
).
newInstance
());
}
private
static
WeakReference
<
ClassLoader
>
createClassLoader
()
throws
Exception
{
...
...
@@ -98,13 +100,14 @@ public class TestClassLoaderLeak extends TestBase {
private
static
class
TestClassLoader
extends
URLClassLoader
{
public
TestClassLoader
()
{
super
(((
URLClassLoader
)
TestClassLoader
.
class
.
getClassLoader
())
.
getURLs
(),
ClassLoader
.
getSystemClassLoader
());
super
(((
URLClassLoader
)
TestClassLoader
.
class
.
getClassLoader
())
.
get
URLs
(),
ClassLoader
.
get
SystemClassLoader
());
}
// allows delegation of H2 to the AppClassLoader
@Override
public
synchronized
Class
<?>
loadClass
(
String
name
,
boolean
resolve
)
throws
ClassNotFoundException
{
public
synchronized
Class
<?>
loadClass
(
String
name
,
boolean
resolve
)
throws
ClassNotFoundException
{
if
(!
name
.
contains
(
CLASS_NAME
)
&&
!
name
.
startsWith
(
"org.h2."
))
{
return
super
.
loadClass
(
name
,
resolve
);
}
...
...
h2/src/test/org/h2/test/unit/TestCompress.java
浏览文件 @
00b26a11
...
...
@@ -149,7 +149,8 @@ public class TestCompress extends TestBase {
while
(
rs
.
next
())
{
String
table
=
rs
.
getString
(
1
);
if
(!
"COLLATIONS"
.
equals
(
table
))
{
stat2
.
execute
(
"create table "
+
table
+
" as select * from information_schema."
+
table
);
stat2
.
execute
(
"create table "
+
table
+
" as select * from information_schema."
+
table
);
}
}
conn
.
close
();
...
...
@@ -240,12 +241,14 @@ public class TestCompress extends TestBase {
}
CompressTool
utils
=
CompressTool
.
getInstance
();
// level 9 is highest, strategy 2 is huffman only
for
(
String
a
:
new
String
[]
{
"LZF"
,
"No"
,
"Deflate"
,
"Deflate level 9 strategy 2"
})
{
for
(
String
a
:
new
String
[]
{
"LZF"
,
"No"
,
"Deflate"
,
"Deflate level 9 strategy 2"
})
{
long
time
=
System
.
currentTimeMillis
();
byte
[]
out
=
utils
.
compress
(
b
,
a
);
byte
[]
test
=
utils
.
expand
(
out
);
if
(
testPerformance
)
{
System
.
out
.
println
(
"p:"
+
pattern
+
" len: "
+
out
.
length
+
" time: "
+
(
System
.
currentTimeMillis
()
-
time
)
+
" "
+
a
);
System
.
out
.
println
(
"p:"
+
pattern
+
" len: "
+
out
.
length
+
" time: "
+
(
System
.
currentTimeMillis
()
-
time
)
+
" "
+
a
);
}
assertEquals
(
b
.
length
,
test
.
length
);
assertEquals
(
b
,
test
);
...
...
h2/src/test/org/h2/test/unit/TestConnectionInfo.java
浏览文件 @
00b26a11
...
...
@@ -52,20 +52,28 @@ public class TestConnectionInfo extends TestBase {
";IFEXISTS=TRUE"
,
info
);
assertEquals
(
"jdbc:h2:mem:test"
,
connectionInfo
.
getURL
());
assertEquals
(
"jdbc:h2:mem:test"
,
connectionInfo
.
getURL
());
assertEquals
(
"2"
,
connectionInfo
.
getProperty
(
"LOG"
,
""
));
assertEquals
(
"rws"
,
connectionInfo
.
getProperty
(
"ACCESS_MODE_DATA"
,
""
));
assertEquals
(
"CREATE this...;INSERT that..."
,
connectionInfo
.
getProperty
(
"INIT"
,
""
));
assertEquals
(
"TRUE"
,
connectionInfo
.
getProperty
(
"IFEXISTS"
,
""
));
assertEquals
(
"undefined"
,
connectionInfo
.
getProperty
(
"CACHE_TYPE"
,
"undefined"
));
assertEquals
(
"2"
,
connectionInfo
.
getProperty
(
"LOG"
,
""
));
assertEquals
(
"rws"
,
connectionInfo
.
getProperty
(
"ACCESS_MODE_DATA"
,
""
));
assertEquals
(
"CREATE this...;INSERT that..."
,
connectionInfo
.
getProperty
(
"INIT"
,
""
));
assertEquals
(
"TRUE"
,
connectionInfo
.
getProperty
(
"IFEXISTS"
,
""
));
assertEquals
(
"undefined"
,
connectionInfo
.
getProperty
(
"CACHE_TYPE"
,
"undefined"
));
}
private
void
testName
()
throws
Exception
{
char
differentFileSeparator
=
File
.
separatorChar
==
'/'
?
'\\'
:
'/'
;
ConnectionInfo
connectionInfo
=
new
ConnectionInfo
(
"test"
+
differentFileSeparator
+
"subDir"
);
ConnectionInfo
connectionInfo
=
new
ConnectionInfo
(
"test"
+
differentFileSeparator
+
"subDir"
);
File
file
=
new
File
(
"test"
+
File
.
separatorChar
+
"subDir"
);
assertEquals
(
file
.
getCanonicalPath
().
replace
(
'\\'
,
'/'
),
connectionInfo
.
getName
());
assertEquals
(
file
.
getCanonicalPath
().
replace
(
'\\'
,
'/'
),
connectionInfo
.
getName
());
}
}
h2/src/test/org/h2/test/unit/TestDataPage.java
浏览文件 @
00b26a11
...
...
@@ -200,8 +200,8 @@ public class TestDataPage extends TestBase implements DataHandler {
}
}
testValue
(
ValueArray
.
get
(
new
Value
[
0
]));
testValue
(
ValueArray
.
get
(
new
Value
[]
{
ValueBoolean
.
get
(
true
),
ValueInt
.
get
(
10
)}));
testValue
(
ValueArray
.
get
(
new
Value
[]
{
ValueBoolean
.
get
(
true
),
ValueInt
.
get
(
10
)
}));
SimpleResultSet
rs
=
new
SimpleResultSet
();
rs
.
setAutoClose
(
false
);
...
...
@@ -332,7 +332,8 @@ public class TestDataPage extends TestBase implements DataHandler {
}
@Override
public
int
readLob
(
long
lobId
,
byte
[]
hmac
,
long
offset
,
byte
[]
buff
,
int
off
,
int
length
)
{
public
int
readLob
(
long
lobId
,
byte
[]
hmac
,
long
offset
,
byte
[]
buff
,
int
off
,
int
length
)
{
return
-
1
;
}
...
...
h2/src/test/org/h2/test/unit/TestDate.java
浏览文件 @
00b26a11
...
...
@@ -193,20 +193,31 @@ public class TestDate extends TestBase {
}
private
void
testValueTimestamp
()
{
assertEquals
(
"2001-02-03 04:05:06.0"
,
ValueTimestamp
.
get
(
Timestamp
.
valueOf
(
"2001-02-03 04:05:06"
)).
getString
());
assertEquals
(
"2001-02-03 04:05:06.001002003"
,
ValueTimestamp
.
get
(
Timestamp
.
valueOf
(
"2001-02-03 04:05:06.001002003"
)).
getString
());
assertEquals
(
"0-00-00 00:00:00.0"
,
ValueTimestamp
.
fromDateValueAndNanos
(
0
,
0
).
getString
());
assertEquals
(
"9999-12-31 23:59:59.0"
,
ValueTimestamp
.
parse
(
"9999-12-31 23:59:59"
).
getString
());
assertEquals
(
"2001-02-03 04:05:06.0"
,
ValueTimestamp
.
get
(
Timestamp
.
valueOf
(
"2001-02-03 04:05:06"
)).
getString
());
assertEquals
(
"2001-02-03 04:05:06.001002003"
,
ValueTimestamp
.
get
(
Timestamp
.
valueOf
(
"2001-02-03 04:05:06.001002003"
)).
getString
());
assertEquals
(
"0-00-00 00:00:00.0"
,
ValueTimestamp
.
fromDateValueAndNanos
(
0
,
0
).
getString
());
assertEquals
(
"9999-12-31 23:59:59.0"
,
ValueTimestamp
.
parse
(
"9999-12-31 23:59:59"
).
getString
());
assertEquals
(
Integer
.
MAX_VALUE
+
"-12-31 01:02:03.04050607"
,
ValueTimestamp
.
parse
(
Integer
.
MAX_VALUE
+
"-12-31 01:02:03.0405060708"
).
getString
());
Integer
.
MAX_VALUE
+
"-12-31 01:02:03.04050607"
,
ValueTimestamp
.
parse
(
Integer
.
MAX_VALUE
+
"-12-31 01:02:03.0405060708"
).
getString
());
assertEquals
(
Integer
.
MIN_VALUE
+
"-12-31 01:02:03.04050607"
,
ValueTimestamp
.
parse
(
Integer
.
MIN_VALUE
+
"-12-31 01:02:03.0405060708"
).
getString
());
Integer
.
MIN_VALUE
+
"-12-31 01:02:03.04050607"
,
ValueTimestamp
.
parse
(
Integer
.
MIN_VALUE
+
"-12-31 01:02:03.0405060708"
).
getString
());
ValueTimestamp
t1
=
ValueTimestamp
.
parse
(
"2001-01-01 01:01:01.111"
);
assertEquals
(
"2001-01-01 01:01:01.111"
,
t1
.
getTimestamp
().
toString
());
...
...
@@ -240,18 +251,30 @@ public class TestDate extends TestBase {
assertEquals
(-
1
,
t1
.
compareTo
(
t2
,
null
));
assertEquals
(
1
,
t2
.
compareTo
(
t1
,
null
));
t1
=
ValueTimestamp
.
parse
(
"2001-01-01 01:01:01.123456789"
);
assertEquals
(
"2001-01-01 01:01:01.123456789"
,
t1
.
getString
());
assertEquals
(
"2001-01-01 01:01:01.123456789"
,
t1
.
convertScale
(
true
,
10
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.123456789"
,
t1
.
convertScale
(
true
,
9
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.12345679"
,
t1
.
convertScale
(
true
,
8
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.1234568"
,
t1
.
convertScale
(
true
,
7
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.123457"
,
t1
.
convertScale
(
true
,
6
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.12346"
,
t1
.
convertScale
(
true
,
5
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.1235"
,
t1
.
convertScale
(
true
,
4
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.123"
,
t1
.
convertScale
(
true
,
3
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.12"
,
t1
.
convertScale
(
true
,
2
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.1"
,
t1
.
convertScale
(
true
,
1
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.0"
,
t1
.
convertScale
(
true
,
0
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.123456789"
,
t1
.
getString
());
assertEquals
(
"2001-01-01 01:01:01.123456789"
,
t1
.
convertScale
(
true
,
10
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.123456789"
,
t1
.
convertScale
(
true
,
9
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.12345679"
,
t1
.
convertScale
(
true
,
8
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.1234568"
,
t1
.
convertScale
(
true
,
7
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.123457"
,
t1
.
convertScale
(
true
,
6
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.12346"
,
t1
.
convertScale
(
true
,
5
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.1235"
,
t1
.
convertScale
(
true
,
4
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.123"
,
t1
.
convertScale
(
true
,
3
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.12"
,
t1
.
convertScale
(
true
,
2
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.1"
,
t1
.
convertScale
(
true
,
1
).
getString
());
assertEquals
(
"2001-01-01 01:01:01.0"
,
t1
.
convertScale
(
true
,
0
).
getString
());
t1
=
ValueTimestamp
.
parse
(
"-2001-01-01 01:01:01.123456789"
);
assertEquals
(
"-2001-01-01 01:01:01.123457"
,
t1
.
convertScale
(
true
,
6
).
getString
());
// classes do not match
...
...
@@ -276,20 +299,30 @@ public class TestDate extends TestBase {
ValueTimestamp
.
parse
(
"-1010-10-10 10:10:10"
).
subtract
(
ValueTime
.
parse
(
"10:10:10"
)).
getString
());
assertEquals
(
0
,
DateTimeUtils
.
absoluteDayFromDateValue
(
ValueTimestamp
.
parse
(
"1970-01-01"
).
getDateValue
()));
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"1970-01-01"
).
getNanos
());
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"1970-01-01 00:00:00.000 UTC"
).
getTimestamp
().
getTime
());
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"+1970-01-01T00:00:00.000Z"
).
getTimestamp
().
getTime
());
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"1970-01-01T00:00:00.000+00:00"
).
getTimestamp
().
getTime
());
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"1970-01-01T00:00:00.000-00:00"
).
getTimestamp
().
getTime
());
new
AssertThrows
(
ErrorCode
.
INVALID_DATETIME_CONSTANT_2
)
{
@Override
assertEquals
(
0
,
DateTimeUtils
.
absoluteDayFromDateValue
(
ValueTimestamp
.
parse
(
"1970-01-01"
).
getDateValue
()));
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"1970-01-01"
).
getNanos
());
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"1970-01-01 00:00:00.000 UTC"
).
getTimestamp
().
getTime
());
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"+1970-01-01T00:00:00.000Z"
).
getTimestamp
().
getTime
());
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"1970-01-01T00:00:00.000+00:00"
).
getTimestamp
().
getTime
());
assertEquals
(
0
,
ValueTimestamp
.
parse
(
"1970-01-01T00:00:00.000-00:00"
).
getTimestamp
().
getTime
());
new
AssertThrows
(
ErrorCode
.
INVALID_DATETIME_CONSTANT_2
)
{
@Override
public
void
test
()
{
ValueTimestamp
.
parse
(
"1970-01-01 00:00:00.000 ABC"
);
}};
new
AssertThrows
(
ErrorCode
.
INVALID_DATETIME_CONSTANT_2
)
{
@Override
}
};
new
AssertThrows
(
ErrorCode
.
INVALID_DATETIME_CONSTANT_2
)
{
@Override
public
void
test
()
{
ValueTimestamp
.
parse
(
"1970-01-01T00:00:00.000+ABC"
);
}};
}
};
}
private
void
testAbsoluteDay
()
{
...
...
@@ -346,7 +379,8 @@ public class TestDate extends TestBase {
expected
=
false
;
}
if
(
expected
!=
valid
)
{
fail
(
y
+
"-"
+
m
+
"-"
+
d
+
" expected: "
+
expected
+
" got: "
+
valid
);
fail
(
y
+
"-"
+
m
+
"-"
+
d
+
" expected: "
+
expected
+
" got: "
+
valid
);
}
}
}
...
...
@@ -382,13 +416,15 @@ public class TestDate extends TestBase {
}
private
static
void
testDate
(
int
y
,
int
m
,
int
day
)
{
long
millis
=
DateTimeUtils
.
getMillis
(
TimeZone
.
getDefault
(),
y
,
m
,
day
,
0
,
0
,
0
,
0
);
long
millis
=
DateTimeUtils
.
getMillis
(
TimeZone
.
getDefault
(),
y
,
m
,
day
,
0
,
0
,
0
,
0
);
String
st
=
new
java
.
sql
.
Date
(
millis
).
toString
();
int
y2
=
Integer
.
parseInt
(
st
.
substring
(
0
,
4
));
int
m2
=
Integer
.
parseInt
(
st
.
substring
(
5
,
7
));
int
d2
=
Integer
.
parseInt
(
st
.
substring
(
8
,
10
));
if
(
y
!=
y2
||
m
!=
m2
||
day
!=
d2
)
{
String
s
=
y
+
"-"
+
(
m
<
10
?
"0"
+
m
:
m
)
+
"-"
+
(
day
<
10
?
"0"
+
day
:
day
);
String
s
=
y
+
"-"
+
(
m
<
10
?
"0"
+
m
:
m
)
+
"-"
+
(
day
<
10
?
"0"
+
day
:
day
);
System
.
out
.
println
(
s
+
"<>"
+
st
+
" "
+
TimeZone
.
getDefault
().
getID
());
}
}
...
...
@@ -412,7 +448,8 @@ public class TestDate extends TestBase {
// timezones because of daylight saving
continue
;
}
String
s
=
"2000-"
+
(
m
<
10
?
"0"
+
m
:
m
)
+
"-01 "
+
(
h
<
10
?
"0"
+
h
:
h
)
+
":00:00.0"
;
String
s
=
"2000-"
+
(
m
<
10
?
"0"
+
m
:
m
)
+
"-01 "
+
(
h
<
10
?
"0"
+
h
:
h
)
+
":00:00.0"
;
d
.
writeValue
(
ValueString
.
get
(
s
));
d
.
writeValue
(
ValueTimestamp
.
get
(
Timestamp
.
valueOf
(
s
)));
}
...
...
@@ -482,8 +519,10 @@ public class TestDate extends TestBase {
assertEquals
(
"19999-08-07 13:14:15.16"
,
ts2
.
getString
());
assertEquals
(
"19999-08-07"
,
d2
.
getString
());
assertEquals
(
"13:14:15.16"
,
t2
.
getString
());
ValueTimestamp
ts1a
=
DateTimeUtils
.
convertTimestamp
(
ts1
.
getTimestamp
(),
Calendar
.
getInstance
());
ValueTimestamp
ts2a
=
DateTimeUtils
.
convertTimestamp
(
ts2
.
getTimestamp
(),
Calendar
.
getInstance
());
ValueTimestamp
ts1a
=
DateTimeUtils
.
convertTimestamp
(
ts1
.
getTimestamp
(),
Calendar
.
getInstance
());
ValueTimestamp
ts2a
=
DateTimeUtils
.
convertTimestamp
(
ts2
.
getTimestamp
(),
Calendar
.
getInstance
());
assertEquals
(
"-999-08-07 13:14:15.16"
,
ts1a
.
getString
());
assertEquals
(
"19999-08-07 13:14:15.16"
,
ts2a
.
getString
());
}
...
...
h2/src/test/org/h2/test/unit/TestDateIso8601.java
浏览文件 @
00b26a11
...
...
@@ -19,7 +19,8 @@ import org.h2.util.DateTimeUtils;
*/
public
class
TestDateIso8601
extends
TestBase
{
private
final
SimpleDateFormat
dateFormatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
private
final
SimpleDateFormat
dateFormatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
/**
* Run just this test.
...
...
h2/src/test/org/h2/test/unit/TestExit.java
浏览文件 @
00b26a11
...
...
@@ -17,14 +17,14 @@ import org.h2.test.TestBase;
import
org.h2.test.utils.SelfDestructor
;
/**
* Tests the flag db_close_on_exit.
* A new process is started.
* Tests the flag db_close_on_exit. A new process is started.
*/
public
class
TestExit
extends
TestBase
{
private
static
Connection
conn
;
private
static
final
int
OPEN_WITH_CLOSE_ON_EXIT
=
1
,
OPEN_WITHOUT_CLOSE_ON_EXIT
=
2
;
private
static
final
int
OPEN_WITH_CLOSE_ON_EXIT
=
1
,
OPEN_WITHOUT_CLOSE_ON_EXIT
=
2
;
@Override
public
void
test
()
throws
Exception
{
...
...
@@ -37,8 +37,7 @@ public class TestExit extends TestBase {
deleteDb
(
"exit"
);
String
url
=
getURL
(
OPEN_WITH_CLOSE_ON_EXIT
);
String
selfDestruct
=
SelfDestructor
.
getPropertyString
(
60
);
String
[]
procDef
=
{
"java"
,
selfDestruct
,
"-cp"
,
getClassPath
(),
String
[]
procDef
=
{
"java"
,
selfDestruct
,
"-cp"
,
getClassPath
(),
getClass
().
getName
(),
url
};
Process
proc
=
Runtime
.
getRuntime
().
exec
(
procDef
);
while
(
true
)
{
...
...
@@ -61,9 +60,8 @@ public class TestExit extends TestBase {
fail
(
"did not close database"
);
}
url
=
getURL
(
OPEN_WITHOUT_CLOSE_ON_EXIT
);
procDef
=
new
String
[]
{
"java"
,
"-cp"
,
getClassPath
(),
getClass
().
getName
(),
url
};
procDef
=
new
String
[]
{
"java"
,
"-cp"
,
getClassPath
(),
getClass
().
getName
(),
url
};
proc
=
Runtime
.
getRuntime
().
exec
(
procDef
);
proc
.
waitFor
();
Thread
.
sleep
(
100
);
...
...
@@ -77,12 +75,16 @@ public class TestExit extends TestBase {
String
url
=
""
;
switch
(
action
)
{
case
OPEN_WITH_CLOSE_ON_EXIT:
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/exit;database_event_listener='"
+
MyDatabaseEventListener
.
class
.
getName
()
+
"';db_close_on_exit=true"
;
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/exit;database_event_listener='"
+
MyDatabaseEventListener
.
class
.
getName
()
+
"';db_close_on_exit=true"
;
break
;
case
OPEN_WITHOUT_CLOSE_ON_EXIT:
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/exit;database_event_listener='"
+
MyDatabaseEventListener
.
class
.
getName
()
+
"';db_close_on_exit=false"
;
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/exit;database_event_listener='"
+
MyDatabaseEventListener
.
class
.
getName
()
+
"';db_close_on_exit=false"
;
break
;
default
:
}
...
...
@@ -126,7 +128,8 @@ public class TestExit extends TestBase {
/**
* A database event listener used in this test.
*/
public
static
final
class
MyDatabaseEventListener
implements
DatabaseEventListener
{
public
static
final
class
MyDatabaseEventListener
implements
DatabaseEventListener
{
@Override
public
void
exceptionThrown
(
SQLException
e
,
String
sql
)
{
...
...
h2/src/test/org/h2/test/unit/TestFile.java
浏览文件 @
00b26a11
...
...
@@ -45,7 +45,8 @@ public class TestFile extends TestBase implements DataHandler {
FileStore
mem
=
null
,
file
=
null
;
byte
[]
buffMem
=
null
;
byte
[]
buffFile
=
null
;
String
prefix
=
nioMem
?
(
compress
?
"nioMemLZF:"
:
"nioMemFS:"
)
:
(
compress
?
"memLZF:"
:
"memFS:"
);
String
prefix
=
nioMem
?
(
compress
?
"nioMemLZF:"
:
"nioMemFS:"
)
:
(
compress
?
"memLZF:"
:
"memFS:"
);
FileUtils
.
delete
(
prefix
+
"test"
);
FileUtils
.
delete
(
"~/testFile"
);
...
...
@@ -91,7 +92,8 @@ public class TestFile extends TestBase implements DataHandler {
if
(
buffFile
.
length
>
16
)
{
int
off
=
random
.
nextInt
(
buffFile
.
length
-
16
);
int
l
=
random
.
nextInt
((
buffFile
.
length
-
off
)
/
16
)
*
16
;
l
=
(
int
)
Math
.
min
(
l
,
file
.
length
()
-
file
.
getFilePointer
());
l
=
(
int
)
Math
.
min
(
l
,
file
.
length
()
-
file
.
getFilePointer
());
trace
(
"read "
+
off
+
" "
+
l
);
Exception
a
=
null
,
b
=
null
;
try
{
...
...
@@ -186,7 +188,8 @@ public class TestFile extends TestBase implements DataHandler {
}
@Override
public
int
readLob
(
long
lobId
,
byte
[]
hmac
,
long
offset
,
byte
[]
buff
,
int
off
,
int
length
)
{
public
int
readLob
(
long
lobId
,
byte
[]
hmac
,
long
offset
,
byte
[]
buff
,
int
off
,
int
length
)
{
return
-
1
;
}
...
...
h2/src/test/org/h2/test/unit/TestFileLock.java
浏览文件 @
00b26a11
...
...
@@ -15,8 +15,8 @@ import org.h2.store.FileLock;
import
org.h2.test.TestBase
;
/**
* Tests the database file locking facility.
*
Both lock files and sockets locking
is tested.
* Tests the database file locking facility.
Both lock files and sockets locking
* is tested.
*/
public
class
TestFileLock
extends
TestBase
implements
Runnable
{
...
...
@@ -62,10 +62,11 @@ public class TestFileLock extends TestBase implements Runnable {
private
void
testFsFileLock
()
throws
Exception
{
deleteDb
(
"fileLock"
);
String
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/fileLock;FILE_LOCK=FS;OPEN_NEW=TRUE"
;
String
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/fileLock;FILE_LOCK=FS;OPEN_NEW=TRUE"
;
Connection
conn
=
getConnection
(
url
);
assertThrows
(
ErrorCode
.
DATABASE_ALREADY_OPEN_1
,
this
)
.
getConnection
(
url
);
assertThrows
(
ErrorCode
.
DATABASE_ALREADY_OPEN_1
,
this
)
.
getConnection
(
url
);
conn
.
close
();
}
...
...
@@ -74,20 +75,24 @@ public class TestFileLock extends TestBase implements Runnable {
f
.
delete
();
f
.
createNewFile
();
f
.
setLastModified
(
System
.
currentTimeMillis
()
+
10000
);
FileLock
lock
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
Constants
.
LOCK_SLEEP
);
FileLock
lock
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
Constants
.
LOCK_SLEEP
);
lock
.
lock
(
FileLock
.
LOCK_FILE
);
lock
.
unlock
();
}
private
void
testSimple
()
{
FileLock
lock1
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
Constants
.
LOCK_SLEEP
);
FileLock
lock2
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
Constants
.
LOCK_SLEEP
);
FileLock
lock1
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
Constants
.
LOCK_SLEEP
);
FileLock
lock2
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
Constants
.
LOCK_SLEEP
);
lock1
.
lock
(
FileLock
.
LOCK_FILE
);
createClassProxy
(
FileLock
.
class
);
assertThrows
(
ErrorCode
.
DATABASE_ALREADY_OPEN_1
,
lock2
).
lock
(
FileLock
.
LOCK_FILE
);
assertThrows
(
ErrorCode
.
DATABASE_ALREADY_OPEN_1
,
lock2
).
lock
(
FileLock
.
LOCK_FILE
);
lock1
.
unlock
();
lock2
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
Constants
.
LOCK_SLEEP
);
lock2
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
Constants
.
LOCK_SLEEP
);
lock2
.
lock
(
FileLock
.
LOCK_FILE
);
lock2
.
unlock
();
}
...
...
@@ -118,11 +123,13 @@ public class TestFileLock extends TestBase implements Runnable {
while
(!
stop
)
{
lock
=
new
FileLock
(
new
TraceSystem
(
null
),
getFile
(),
100
);
try
{
lock
.
lock
(
allowSockets
?
FileLock
.
LOCK_SOCKET
:
FileLock
.
LOCK_FILE
);
lock
.
lock
(
allowSockets
?
FileLock
.
LOCK_SOCKET
:
FileLock
.
LOCK_FILE
);
base
.
trace
(
lock
+
" locked"
);
locks
++;
if
(
locks
>
1
)
{
System
.
err
.
println
(
"ERROR! LOCKS="
+
locks
+
" sockets="
+
allowSockets
);
System
.
err
.
println
(
"ERROR! LOCKS="
+
locks
+
" sockets="
+
allowSockets
);
stop
=
true
;
}
Thread
.
sleep
(
wait
+
(
int
)
(
Math
.
random
()
*
wait
));
...
...
h2/src/test/org/h2/test/unit/TestFileLockSerialized.java
浏览文件 @
00b26a11
差异被折叠。
点击展开。
h2/src/test/org/h2/test/unit/TestFileSystem.java
浏览文件 @
00b26a11
...
...
@@ -271,12 +271,16 @@ public class TestFileSystem extends TestBase {
deleteDb
(
"fsMem"
);
String
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/fsMem"
;
Connection
conn
=
getConnection
(
url
,
"sa"
,
"sa"
);
conn
.
createStatement
().
execute
(
"CREATE TABLE TEST AS SELECT * FROM DUAL"
);
conn
.
createStatement
().
execute
(
"BACKUP TO '"
+
getBaseDir
()
+
"/fsMem.zip'"
);
conn
.
createStatement
().
execute
(
"CREATE TABLE TEST AS SELECT * FROM DUAL"
);
conn
.
createStatement
().
execute
(
"BACKUP TO '"
+
getBaseDir
()
+
"/fsMem.zip'"
);
conn
.
close
();
org
.
h2
.
tools
.
Restore
.
main
(
"-file"
,
getBaseDir
()
+
"/fsMem.zip"
,
"-dir"
,
"memFS:"
);
org
.
h2
.
tools
.
Restore
.
main
(
"-file"
,
getBaseDir
()
+
"/fsMem.zip"
,
"-dir"
,
"memFS:"
);
conn
=
getConnection
(
"jdbc:h2:memFS:fsMem"
,
"sa"
,
"sa"
);
ResultSet
rs
=
conn
.
createStatement
().
executeQuery
(
"SELECT * FROM TEST"
);
ResultSet
rs
=
conn
.
createStatement
()
.
executeQuery
(
"SELECT * FROM TEST"
);
rs
.
close
();
conn
.
close
();
deleteDb
(
"fsMem"
);
...
...
@@ -294,8 +298,10 @@ public class TestFileSystem extends TestBase {
String
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/fsJar"
;
Connection
conn
=
getConnection
(
url
,
"sa"
,
"sa"
);
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test(id int primary key, name varchar, b blob, c clob)"
);
stat
.
execute
(
"insert into test values(1, 'Hello', SECURE_RAND(2000), space(2000))"
);
stat
.
execute
(
"create table test(id int primary key, "
+
"name varchar, b blob, c clob)"
);
stat
.
execute
(
"insert into test values(1, 'Hello', "
+
"SECURE_RAND(2000), space(2000))"
);
ResultSet
rs
;
rs
=
stat
.
executeQuery
(
"select * from test"
);
rs
.
next
();
...
...
@@ -308,7 +314,8 @@ public class TestFileSystem extends TestBase {
conn
.
close
();
deleteDb
(
"fsJar"
);
for
(
String
f
:
FileUtils
.
newDirectoryStream
(
"zip:"
+
getBaseDir
()
+
"/fsJar.zip"
))
{
for
(
String
f
:
FileUtils
.
newDirectoryStream
(
"zip:"
+
getBaseDir
()
+
"/fsJar.zip"
))
{
assertFalse
(
FileUtils
.
isAbsolute
(
f
));
assertTrue
(!
FileUtils
.
isDirectory
(
f
));
assertTrue
(
FileUtils
.
size
(
f
)
>
0
);
...
...
@@ -735,7 +742,8 @@ public class TestFileSystem extends TestBase {
}
}
private
static
ByteBuffer
createSlicedBuffer
(
byte
[]
buffer
,
int
offset
,
int
len
)
{
private
static
ByteBuffer
createSlicedBuffer
(
byte
[]
buffer
,
int
offset
,
int
len
)
{
ByteBuffer
byteBuff
=
ByteBuffer
.
wrap
(
buffer
);
byteBuff
.
position
(
offset
);
// force the arrayOffset to be non-0
...
...
h2/src/test/org/h2/test/unit/TestFtp.java
浏览文件 @
00b26a11
...
...
@@ -41,7 +41,8 @@ public class TestFtp extends TestBase implements FtpEventListener {
}
private
void
test
(
String
dir
)
throws
Exception
{
Server
server
=
FtpServer
.
createFtpServer
(
"-ftpDir"
,
dir
,
"-ftpPort"
,
"8121"
).
start
();
Server
server
=
FtpServer
.
createFtpServer
(
"-ftpDir"
,
dir
,
"-ftpPort"
,
"8121"
).
start
();
FtpServer
ftp
=
(
FtpServer
)
server
.
getService
();
ftp
.
setEventListener
(
this
);
FtpClient
client
=
FtpClient
.
open
(
"localhost:8121"
);
...
...
h2/src/test/org/h2/test/unit/TestIntIntHashMap.java
浏览文件 @
00b26a11
...
...
@@ -54,7 +54,8 @@ public class TestIntIntHashMap extends TestBase {
}
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
if
(
map
.
get
(
x
[
i
])
!=
i
)
{
throw
new
AssertionError
(
"get "
+
x
[
i
]
+
" = "
+
map
.
get
(
i
)
+
" should be "
+
i
);
throw
new
AssertionError
(
"get "
+
x
[
i
]
+
" = "
+
map
.
get
(
i
)
+
" should be "
+
i
);
}
}
for
(
int
i
=
1
;
i
<
len
;
i
+=
2
)
{
...
...
@@ -62,7 +63,8 @@ public class TestIntIntHashMap extends TestBase {
}
for
(
int
i
=
1
;
i
<
len
;
i
+=
2
)
{
if
(
map
.
get
(
x
[
i
])
!=
-
1
)
{
throw
new
AssertionError
(
"get "
+
x
[
i
]
+
" = "
+
map
.
get
(
i
)
+
" should be <=0"
);
throw
new
AssertionError
(
"get "
+
x
[
i
]
+
" = "
+
map
.
get
(
i
)
+
" should be <=0"
);
}
}
for
(
int
i
=
1
;
i
<
len
;
i
+=
2
)
{
...
...
@@ -70,7 +72,8 @@ public class TestIntIntHashMap extends TestBase {
}
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
if
(
map
.
get
(
x
[
i
])
!=
i
)
{
throw
new
AssertionError
(
"get "
+
x
[
i
]
+
" = "
+
map
.
get
(
i
)
+
" should be "
+
i
);
throw
new
AssertionError
(
"get "
+
x
[
i
]
+
" = "
+
map
.
get
(
i
)
+
" should be "
+
i
);
}
}
}
...
...
h2/src/test/org/h2/test/unit/TestJmx.java
浏览文件 @
00b26a11
...
...
@@ -51,28 +51,45 @@ public class TestJmx extends TestBase {
name
=
new
ObjectName
(
"org.h2:name=JMX,path=mem_jmx"
);
info
=
mbeanServer
.
getMBeanInfo
(
name
);
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
// cache size is ignored for in-memory databases
mbeanServer
.
setAttribute
(
name
,
new
Attribute
(
"CacheSizeMax"
,
1
));
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSize"
).
toString
());
assertEquals
(
"false"
,
mbeanServer
.
getAttribute
(
name
,
"Exclusive"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileSize"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileReadCount"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileWriteCount"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileWriteCountTotal"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"LogMode"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSize"
).
toString
());
assertEquals
(
"false"
,
mbeanServer
.
getAttribute
(
name
,
"Exclusive"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileSize"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileReadCount"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileWriteCount"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileWriteCountTotal"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"LogMode"
).
toString
());
// ignored for in-memory databases
mbeanServer
.
setAttribute
(
name
,
new
Attribute
(
"LogMode"
,
1
));
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"LogMode"
).
toString
());
assertEquals
(
"REGULAR"
,
mbeanServer
.
getAttribute
(
name
,
"Mode"
).
toString
());
assertEquals
(
"false"
,
mbeanServer
.
getAttribute
(
name
,
"MultiThreaded"
).
toString
());
assertEquals
(
"false"
,
mbeanServer
.
getAttribute
(
name
,
"Mvcc"
).
toString
());
assertEquals
(
"false"
,
mbeanServer
.
getAttribute
(
name
,
"ReadOnly"
).
toString
());
assertEquals
(
"1"
,
mbeanServer
.
getAttribute
(
name
,
"TraceLevel"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"LogMode"
).
toString
());
assertEquals
(
"REGULAR"
,
mbeanServer
.
getAttribute
(
name
,
"Mode"
).
toString
());
assertEquals
(
"false"
,
mbeanServer
.
getAttribute
(
name
,
"MultiThreaded"
).
toString
());
assertEquals
(
"false"
,
mbeanServer
.
getAttribute
(
name
,
"Mvcc"
).
toString
());
assertEquals
(
"false"
,
mbeanServer
.
getAttribute
(
name
,
"ReadOnly"
).
toString
());
assertEquals
(
"1"
,
mbeanServer
.
getAttribute
(
name
,
"TraceLevel"
).
toString
());
mbeanServer
.
setAttribute
(
name
,
new
Attribute
(
"TraceLevel"
,
0
));
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"TraceLevel"
).
toString
());
assertTrue
(
mbeanServer
.
getAttribute
(
name
,
"Version"
).
toString
().
startsWith
(
"1."
));
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"TraceLevel"
).
toString
());
assertTrue
(
mbeanServer
.
getAttribute
(
name
,
"Version"
).
toString
().
startsWith
(
"1."
));
assertEquals
(
14
,
info
.
getAttributes
().
length
);
result
=
mbeanServer
.
invoke
(
name
,
"listSettings"
,
null
,
null
).
toString
();
assertTrue
(
result
.
indexOf
(
"ANALYZE_AUTO"
)
>=
0
);
...
...
@@ -110,24 +127,37 @@ public class TestJmx extends TestBase {
Set
set
=
mbeanServer
.
queryNames
(
name
,
null
);
name
=
(
ObjectName
)
set
.
iterator
().
next
();
assertEquals
(
"16384"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
assertEquals
(
"16384"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
mbeanServer
.
setAttribute
(
name
,
new
Attribute
(
"CacheSizeMax"
,
1
));
if
(
config
.
mvStore
)
{
assertEquals
(
"1024"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSize"
).
toString
());
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileReadCount"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileWriteCount"
));
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileWriteCountTotal"
).
toString
());
assertEquals
(
"1024"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSize"
).
toString
());
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileReadCount"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileWriteCount"
));
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"FileWriteCountTotal"
).
toString
());
}
else
{
assertEquals
(
"1"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
assertTrue
(
0
<
(
Integer
)
mbeanServer
.
getAttribute
(
name
,
"CacheSize"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileSize"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileReadCount"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileWriteCount"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileWriteCountTotal"
));
assertEquals
(
"1"
,
mbeanServer
.
getAttribute
(
name
,
"CacheSizeMax"
).
toString
());
assertTrue
(
0
<
(
Integer
)
mbeanServer
.
getAttribute
(
name
,
"CacheSize"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileSize"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileReadCount"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileWriteCount"
));
assertTrue
(
0
<
(
Long
)
mbeanServer
.
getAttribute
(
name
,
"FileWriteCountTotal"
));
}
mbeanServer
.
setAttribute
(
name
,
new
Attribute
(
"LogMode"
,
0
));
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"LogMode"
).
toString
());
assertEquals
(
"0"
,
mbeanServer
.
getAttribute
(
name
,
"LogMode"
).
toString
());
conn
.
close
();
...
...
h2/src/test/org/h2/test/unit/TestMathUtils.java
浏览文件 @
00b26a11
...
...
@@ -56,8 +56,10 @@ public class TestMathUtils extends TestBase {
private
void
testReverse
()
{
assertEquals
(
Integer
.
reverse
(
0
),
Integer
.
reverse
(
0
));
assertEquals
(
Integer
.
reverse
(
Integer
.
MAX_VALUE
),
Integer
.
reverse
(
Integer
.
MAX_VALUE
));
assertEquals
(
Integer
.
reverse
(
Integer
.
MIN_VALUE
),
Integer
.
reverse
(
Integer
.
MIN_VALUE
));
assertEquals
(
Integer
.
reverse
(
Integer
.
MAX_VALUE
),
Integer
.
reverse
(
Integer
.
MAX_VALUE
));
assertEquals
(
Integer
.
reverse
(
Integer
.
MIN_VALUE
),
Integer
.
reverse
(
Integer
.
MIN_VALUE
));
assertEquals
(
Long
.
reverse
(
0
),
Long
.
reverse
(
0L
));
assertEquals
(
Long
.
reverse
(
Long
.
MAX_VALUE
),
Long
.
reverse
(
Long
.
MAX_VALUE
));
assertEquals
(
Long
.
reverse
(
Long
.
MIN_VALUE
),
Long
.
reverse
(
Long
.
MIN_VALUE
));
...
...
h2/src/test/org/h2/test/unit/TestObjectDeserialization.java
浏览文件 @
00b26a11
...
...
@@ -19,7 +19,8 @@ public class TestObjectDeserialization extends TestBase {
private
static
final
String
CLAZZ
=
"org.h2.test.unit.SampleObject"
;
private
static
final
String
OBJECT
=
"aced00057372001d6f72672e68322e746573742e756e69742e53616d706c654f626a65637400000000000000010200007870"
;
"aced00057372001d6f72672e68322e746573742e756"
+
"e69742e53616d706c654f626a65637400000000000000010200007870"
;
/**
* The thread context class loader was used.
...
...
@@ -63,7 +64,8 @@ public class TestObjectDeserialization extends TestBase {
}
@Override
protected
synchronized
Class
<?>
loadClass
(
String
name
,
boolean
resolve
)
throws
ClassNotFoundException
{
protected
synchronized
Class
<?>
loadClass
(
String
name
,
boolean
resolve
)
throws
ClassNotFoundException
{
if
(
name
.
equals
(
CLAZZ
))
{
usesThreadContextClassLoader
=
true
;
}
...
...
h2/src/test/org/h2/test/unit/TestOldVersion.java
浏览文件 @
00b26a11
...
...
@@ -51,7 +51,8 @@ public class TestOldVersion extends TestBase {
return
;
}
Connection
conn
=
driver
.
connect
(
"jdbc:h2:mem:"
,
null
);
assertEquals
(
"1.2.127 (2010-01-15)"
,
conn
.
getMetaData
().
getDatabaseProductVersion
());
assertEquals
(
"1.2.127 (2010-01-15)"
,
conn
.
getMetaData
()
.
getDatabaseProductVersion
());
conn
.
close
();
testLobInFiles
();
testOldClientNewServer
();
...
...
@@ -64,7 +65,8 @@ public class TestOldVersion extends TestBase {
conn
=
driver
.
connect
(
"jdbc:h2:"
+
getBaseDir
()
+
"/oldVersion"
,
null
);
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test(id int primary key, b blob, c clob)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"insert into test values(?, ?, ?)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"insert into test values(?, ?, ?)"
);
prep
.
setInt
(
1
,
0
);
prep
.
setNull
(
2
,
Types
.
BLOB
);
prep
.
setNull
(
3
,
Types
.
CLOB
);
...
...
@@ -82,7 +84,8 @@ public class TestOldVersion extends TestBase {
prep
.
setString
(
3
,
new
String
(
new
char
[
100000
]));
prep
.
execute
();
conn
.
close
();
conn
=
DriverManager
.
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/oldVersion"
,
new
Properties
());
conn
=
DriverManager
.
getConnection
(
"jdbc:h2:"
+
getBaseDir
()
+
"/oldVersion"
,
new
Properties
());
stat
=
conn
.
createStatement
();
checkResult
(
stat
.
executeQuery
(
"select * from test order by id"
));
stat
.
execute
(
"create table test2 as select * from test"
);
...
...
@@ -113,14 +116,15 @@ public class TestOldVersion extends TestBase {
private
void
testOldClientNewServer
()
throws
Exception
{
Server
server
=
org
.
h2
.
tools
.
Server
.
createTcpServer
(
"-tcpPort"
,
"9001"
);
server
.
start
();
assertThrows
(
ErrorCode
.
DRIVER_VERSION_ERROR_2
,
driver
).
connect
(
"jdbc:h2:tcp://localhost:9001/mem:test"
,
null
);
assertThrows
(
ErrorCode
.
DRIVER_VERSION_ERROR_2
,
driver
).
connect
(
"jdbc:h2:tcp://localhost:9001/mem:test"
,
null
);
server
.
stop
();
Class
<?>
serverClass
=
cl
.
loadClass
(
"org.h2.tools.Server"
);
Method
m
;
m
=
serverClass
.
getMethod
(
"createTcpServer"
,
String
[].
class
);
Object
serverOld
=
m
.
invoke
(
null
,
new
Object
[]{
new
String
[]{
"-tcpPort"
,
"9001"
}});
Object
serverOld
=
m
.
invoke
(
null
,
new
Object
[]
{
new
String
[]
{
"-tcpPort"
,
"9001"
}
});
m
=
serverOld
.
getClass
().
getMethod
(
"start"
);
m
.
invoke
(
serverOld
);
Connection
conn
;
...
...
h2/src/test/org/h2/test/unit/TestPageStore.java
浏览文件 @
00b26a11
差异被折叠。
点击展开。
h2/src/test/org/h2/test/unit/TestPageStoreCoverage.java
浏览文件 @
00b26a11
...
...
@@ -22,7 +22,8 @@ import org.h2.tools.Restore;
*/
public
class
TestPageStoreCoverage
extends
TestBase
{
private
static
final
String
URL
=
"pageStoreCoverage;PAGE_SIZE=64;CACHE_SIZE=16;MAX_LOG_SIZE=1"
;
private
static
final
String
URL
=
"pageStoreCoverage;"
+
"PAGE_SIZE=64;CACHE_SIZE=16;MAX_LOG_SIZE=1"
;
/**
* Run just this test.
...
...
@@ -56,9 +57,11 @@ public class TestPageStoreCoverage extends TestBase {
conn
=
getConnection
(
URL
);
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create memory table test(id int primary key) as select x from system_range(1, 20)"
);
stat
.
execute
(
"create memory table test(id int primary key) "
+
"as select x from system_range(1, 20)"
);
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
stat
.
execute
(
"create memory table test"
+
i
+
"(id int primary key) as select x from system_range(1, 2)"
);
stat
.
execute
(
"create memory table test"
+
i
+
"(id int primary key) as select x from system_range(1, 2)"
);
}
stat
.
execute
(
"drop table test"
);
conn
.
close
();
...
...
@@ -70,9 +73,11 @@ public class TestPageStoreCoverage extends TestBase {
conn
=
getConnection
(
URL
);
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test(id int primary key) as select x from system_range(1, 100)"
);
stat
.
execute
(
"create table test(id int primary key) "
+
"as select x from system_range(1, 100)"
);
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
stat
.
execute
(
"create table test"
+
i
+
"(id int primary key) as select x from system_range(1, 2)"
);
stat
.
execute
(
"create table test"
+
i
+
"(id int primary key) "
+
"as select x from system_range(1, 2)"
);
}
stat
.
execute
(
"drop table test"
);
conn
.
close
();
...
...
@@ -202,14 +207,18 @@ public class TestPageStoreCoverage extends TestBase {
Connection
conn
;
conn
=
getConnection
(
URL
);
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test(id int primary key, name varchar)"
);
stat
.
execute
(
"create index idx_name on test(name, id)"
);
stat
.
execute
(
"insert into test select x, x || space(200 * x) from system_range(1, 10)"
);
stat
.
execute
(
"create table test(id int primary key, name varchar)"
);
stat
.
execute
(
"create index idx_name on test(name, id)"
);
stat
.
execute
(
"insert into test select x, x || space(200 * x) from system_range(1, 10)"
);
conn
.
setAutoCommit
(
false
);
stat
.
execute
(
"delete from test where id > 5"
);
stat
.
execute
(
"backup to '"
+
getBaseDir
()
+
"/backup.zip'"
);
conn
.
rollback
();
Restore
.
execute
(
getBaseDir
()
+
"/backup.zip"
,
getBaseDir
(),
"pageStore2"
);
Restore
.
execute
(
getBaseDir
()
+
"/backup.zip"
,
getBaseDir
(),
"pageStore2"
);
Connection
conn2
;
conn2
=
getConnection
(
"pageStore2"
);
Statement
stat2
=
conn2
.
createStatement
();
...
...
h2/src/test/org/h2/test/unit/TestPattern.java
浏览文件 @
00b26a11
...
...
@@ -63,7 +63,8 @@ public class TestPattern extends TestBase {
boolean
resultRegexp
=
value
.
matches
(
regexp
);
boolean
result
=
comp
.
test
(
pattern
,
value
,
'\\'
);
if
(
result
!=
resultRegexp
)
{
fail
(
"Error: >"
+
value
+
"< LIKE >"
+
pattern
+
"< result="
+
result
+
" resultReg="
+
resultRegexp
);
fail
(
"Error: >"
+
value
+
"< LIKE >"
+
pattern
+
"< result="
+
result
+
" resultReg="
+
resultRegexp
);
}
}
...
...
h2/src/test/org/h2/test/unit/TestPgServer.java
浏览文件 @
00b26a11
...
...
@@ -54,14 +54,17 @@ public class TestPgServer extends TestBase {
return
;
}
deleteDb
(
"test"
);
Connection
conn
=
getConnection
(
"test;DATABASE_TO_UPPER=false"
,
"sa"
,
"sa"
);
Connection
conn
=
getConnection
(
"test;DATABASE_TO_UPPER=false"
,
"sa"
,
"sa"
);
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test(id int, name varchar(255))"
);
Server
server
=
Server
.
createPgServer
(
"-baseDir"
,
getBaseDir
(),
"-pgPort"
,
"5535"
,
"-pgDaemon"
);
Server
server
=
Server
.
createPgServer
(
"-baseDir"
,
getBaseDir
(),
"-pgPort"
,
"5535"
,
"-pgDaemon"
);
server
.
start
();
try
{
Connection
conn2
;
conn2
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
conn2
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
stat
=
conn2
.
createStatement
();
stat
.
execute
(
"select * from test"
);
conn2
.
close
();
...
...
@@ -84,7 +87,8 @@ public class TestPgServer extends TestBase {
private
void
testPgAdapter
()
throws
SQLException
{
deleteDb
(
"test"
);
Server
server
=
Server
.
createPgServer
(
"-baseDir"
,
getBaseDir
(),
"-pgPort"
,
"5535"
,
"-pgDaemon"
);
Server
server
=
Server
.
createPgServer
(
"-baseDir"
,
getBaseDir
(),
"-pgPort"
,
"5535"
,
"-pgDaemon"
);
assertEquals
(
5535
,
server
.
getPort
());
assertEquals
(
"Not started"
,
server
.
getStatus
());
server
.
start
();
...
...
@@ -103,12 +107,14 @@ public class TestPgServer extends TestBase {
return
;
}
Server
server
=
Server
.
createPgServer
(
"-pgPort"
,
"5535"
,
"-pgDaemon"
,
"-key"
,
"test"
,
"mem:test"
);
Server
server
=
Server
.
createPgServer
(
"-pgPort"
,
"5535"
,
"-pgDaemon"
,
"-key"
,
"test"
,
"mem:test"
);
server
.
start
();
ExecutorService
executor
=
Executors
.
newSingleThreadExecutor
();
try
{
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
final
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create alias sleep for \"java.lang.Thread.sleep\""
);
...
...
@@ -133,7 +139,8 @@ public class TestPgServer extends TestBase {
future
.
get
();
throw
new
IllegalStateException
();
}
catch
(
ExecutionException
e
)
{
assertStartsWith
(
e
.
getCause
().
getMessage
(),
"ERROR: canceling statement due to user request"
);
assertStartsWith
(
e
.
getCause
().
getMessage
(),
"ERROR: canceling statement due to user request"
);
}
finally
{
conn
.
close
();
}
...
...
@@ -145,7 +152,8 @@ public class TestPgServer extends TestBase {
}
private
void
testPgClient
()
throws
SQLException
{
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
Statement
stat
=
conn
.
createStatement
();
assertThrows
(
SQLException
.
class
,
stat
).
execute
(
"select ***"
);
...
...
@@ -156,7 +164,8 @@ public class TestPgServer extends TestBase {
stat
.
close
();
conn
.
close
();
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"test"
,
"test"
);
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"test"
,
"test"
);
stat
=
conn
.
createStatement
();
ResultSet
rs
;
...
...
@@ -189,7 +198,9 @@ public class TestPgServer extends TestBase {
assertEquals
(
1
,
rs
.
getInt
(
1
));
assertEquals
(
"Hello"
,
rs
.
getString
(
2
));
assertFalse
(
rs
.
next
());
prep
=
conn
.
prepareStatement
(
"select * from test where id = ? and name = ?"
);
prep
=
conn
.
prepareStatement
(
"select * from test "
+
"where id = ? and name = ?"
);
prep
.
setInt
(
1
,
1
);
prep
.
setString
(
2
,
"Hello"
);
rs
=
prep
.
executeQuery
();
...
...
@@ -216,7 +227,8 @@ public class TestPgServer extends TestBase {
// rs.next();
// assertEquals("TEST", rs.getString("TABLE_NAME"));
assertFalse
(
rs
.
next
());
rs
=
stat
.
executeQuery
(
"select version(), pg_postmaster_start_time(), current_schema()"
);
rs
=
stat
.
executeQuery
(
"select version(), pg_postmaster_start_time(), current_schema()"
);
rs
.
next
();
String
s
=
rs
.
getString
(
1
);
assertTrue
(
s
.
indexOf
(
"H2"
)
>=
0
);
...
...
@@ -237,7 +249,8 @@ public class TestPgServer extends TestBase {
assertEquals
(
"Hallo"
,
rs
.
getString
(
2
));
assertFalse
(
rs
.
next
());
rs
=
stat
.
executeQuery
(
"select id, name, pg_get_userbyid(id) from information_schema.users order by id"
);
rs
=
stat
.
executeQuery
(
"select id, name, pg_get_userbyid(id) "
+
"from information_schema.users order by id"
);
rs
.
next
();
assertEquals
(
rs
.
getString
(
2
),
rs
.
getString
(
3
));
assertFalse
(
rs
.
next
());
...
...
@@ -292,7 +305,8 @@ public class TestPgServer extends TestBase {
rs
.
next
();
assertEquals
(
""
,
rs
.
getString
(
1
));
rs
=
stat
.
executeQuery
(
"select id from information_schema.indexes where index_name='IDX_TEST_NAME'"
);
rs
=
stat
.
executeQuery
(
"select id from information_schema.indexes "
+
"where index_name='IDX_TEST_NAME'"
);
rs
.
next
();
int
indexId
=
rs
.
getInt
(
1
);
...
...
@@ -301,7 +315,9 @@ public class TestPgServer extends TestBase {
assertEquals
(
"CREATE INDEX PUBLIC.IDX_TEST_NAME ON PUBLIC.TEST(NAME, ID)"
,
rs
.
getString
(
1
));
rs
=
stat
.
executeQuery
(
"select pg_get_indexdef("
+
indexId
+
", null, false)"
);
rs
.
next
();
assertEquals
(
"CREATE INDEX PUBLIC.IDX_TEST_NAME ON PUBLIC.TEST(NAME, ID)"
,
rs
.
getString
(
1
));
assertEquals
(
"CREATE INDEX PUBLIC.IDX_TEST_NAME ON PUBLIC.TEST(NAME, ID)"
,
rs
.
getString
(
1
));
rs
=
stat
.
executeQuery
(
"select pg_get_indexdef("
+
indexId
+
", 1, false)"
);
rs
.
next
();
assertEquals
(
"NAME"
,
rs
.
getString
(
1
));
...
...
@@ -316,16 +332,20 @@ public class TestPgServer extends TestBase {
if
(!
getPgJdbcDriver
())
{
return
;
}
Server
server
=
Server
.
createPgServer
(
"-pgPort"
,
"5535"
,
"-pgDaemon"
,
"-key"
,
"test"
,
"mem:test"
);
Server
server
=
Server
.
createPgServer
(
"-pgPort"
,
"5535"
,
"-pgDaemon"
,
"-key"
,
"test"
,
"mem:test"
);
server
.
start
();
try
{
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
Statement
stat
=
conn
.
createStatement
();
// confirm that we've got the in memory implementation
// by creating a table and checking flags
stat
.
execute
(
"create table test(id int primary key, name varchar)"
);
ResultSet
rs
=
stat
.
executeQuery
(
"select storage_type from information_schema.tables where table_name = 'TEST'"
);
ResultSet
rs
=
stat
.
executeQuery
(
"select storage_type from information_schema.tables "
+
"where table_name = 'TEST'"
);
assertTrue
(
rs
.
next
());
assertEquals
(
"MEMORY"
,
rs
.
getString
(
1
));
...
...
@@ -340,16 +360,21 @@ public class TestPgServer extends TestBase {
return
;
}
Server
server
=
Server
.
createPgServer
(
"-pgPort"
,
"5535"
,
"-pgDaemon"
,
"-key"
,
"test"
,
"mem:test"
);
Server
server
=
Server
.
createPgServer
(
"-pgPort"
,
"5535"
,
"-pgDaemon"
,
"-key"
,
"test"
,
"mem:test"
);
server
.
start
();
try
{
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5535/test"
,
"sa"
,
"sa"
);
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test(x1 varchar, x2 int, x3 smallint, x4 bigint, x5 double, x6 float, "
+
stat
.
execute
(
"create table test(x1 varchar, x2 int, "
+
"x3 smallint, x4 bigint, x5 double, x6 float, "
+
"x7 real, x8 boolean, x9 char, x10 bytea)"
);
PreparedStatement
ps
=
conn
.
prepareStatement
(
"insert into test values (?,?,?,?,?,?,?,?,?,?)"
);
PreparedStatement
ps
=
conn
.
prepareStatement
(
"insert into test values (?,?,?,?,?,?,?,?,?,?)"
);
ps
.
setString
(
1
,
"test"
);
ps
.
setInt
(
2
,
12345678
);
ps
.
setShort
(
3
,
(
short
)
12345
);
...
...
h2/src/test/org/h2/test/unit/TestReopen.java
浏览文件 @
00b26a11
...
...
@@ -36,7 +36,8 @@ public class TestReopen extends TestBase implements Recorder {
private
String
testDatabase
=
"memFS:"
+
TestBase
.
BASE_TEST_DIR
+
"/reopen"
;
private
int
writeCount
=
Utils
.
getProperty
(
"h2.reopenOffset"
,
0
);
private
final
int
testEvery
=
1
<<
Utils
.
getProperty
(
"h2.reopenShift"
,
6
);
private
final
long
maxFileSize
=
Utils
.
getProperty
(
"h2.reopenMaxFileSize"
,
Integer
.
MAX_VALUE
)
*
1024L
*
1024
;
private
final
long
maxFileSize
=
Utils
.
getProperty
(
"h2.reopenMaxFileSize"
,
Integer
.
MAX_VALUE
)
*
1024L
*
1024
;
private
int
verifyCount
;
private
final
HashSet
<
String
>
knownErrors
=
New
.
hashSet
();
private
volatile
boolean
testing
;
...
...
@@ -100,9 +101,11 @@ public class TestReopen extends TestBase implements Recorder {
try
{
if
(
fileName
.
endsWith
(
Constants
.
SUFFIX_PAGE_FILE
))
{
IOUtils
.
copyFiles
(
fileName
,
testDatabase
+
Constants
.
SUFFIX_PAGE_FILE
);
IOUtils
.
copyFiles
(
fileName
,
testDatabase
+
Constants
.
SUFFIX_PAGE_FILE
);
}
else
{
IOUtils
.
copyFiles
(
fileName
,
testDatabase
+
Constants
.
SUFFIX_MV_FILE
);
IOUtils
.
copyFiles
(
fileName
,
testDatabase
+
Constants
.
SUFFIX_MV_FILE
);
}
verifyCount
++;
// avoid using the Engine class to avoid deadlocks
...
...
@@ -110,7 +113,8 @@ public class TestReopen extends TestBase implements Recorder {
String
userName
=
getUser
();
p
.
setProperty
(
"user"
,
userName
);
p
.
setProperty
(
"password"
,
getPassword
());
String
url
=
"jdbc:h2:"
+
testDatabase
+
";FILE_LOCK=NO;TRACE_LEVEL_FILE=0"
;
String
url
=
"jdbc:h2:"
+
testDatabase
+
";FILE_LOCK=NO;TRACE_LEVEL_FILE=0"
;
if
(
config
.
mvStore
)
{
url
+=
";MV_STORE=TRUE"
;
}
...
...
@@ -146,7 +150,8 @@ public class TestReopen extends TestBase implements Recorder {
}
e
.
printStackTrace
(
System
.
out
);
}
System
.
out
.
println
(
"begin ------------------------------ "
+
writeCount
);
System
.
out
.
println
(
"begin ------------------------------ "
+
writeCount
);
try
{
Recover
.
execute
(
fileName
.
substring
(
0
,
fileName
.
lastIndexOf
(
'/'
)),
null
);
}
catch
(
SQLException
e
)
{
...
...
@@ -155,9 +160,11 @@ public class TestReopen extends TestBase implements Recorder {
testDatabase
+=
"X"
;
try
{
if
(
fileName
.
endsWith
(
Constants
.
SUFFIX_PAGE_FILE
))
{
IOUtils
.
copyFiles
(
fileName
,
testDatabase
+
Constants
.
SUFFIX_PAGE_FILE
);
IOUtils
.
copyFiles
(
fileName
,
testDatabase
+
Constants
.
SUFFIX_PAGE_FILE
);
}
else
{
IOUtils
.
copyFiles
(
fileName
,
testDatabase
+
Constants
.
SUFFIX_MV_FILE
);
IOUtils
.
copyFiles
(
fileName
,
testDatabase
+
Constants
.
SUFFIX_MV_FILE
);
}
// avoid using the Engine class to avoid deadlocks
Properties
p
=
new
Properties
();
...
...
@@ -187,7 +194,8 @@ public class TestReopen extends TestBase implements Recorder {
}
String
s
=
buff
.
toString
();
if
(!
knownErrors
.
contains
(
s
))
{
System
.
out
.
println
(
writeCount
+
" code: "
+
errorCode
+
" "
+
e
.
toString
());
System
.
out
.
println
(
writeCount
+
" code: "
+
errorCode
+
" "
+
e
.
toString
());
e
.
printStackTrace
(
System
.
out
);
knownErrors
.
add
(
s
);
}
else
{
...
...
h2/src/test/org/h2/test/unit/TestSampleApps.java
浏览文件 @
00b26a11
...
...
@@ -40,18 +40,24 @@ public class TestSampleApps extends TestBase {
return
;
}
deleteDb
(
"optimizations"
);
InputStream
in
=
getClass
().
getClassLoader
().
getResourceAsStream
(
"org/h2/samples/optimizations.sql"
);
InputStream
in
=
getClass
().
getClassLoader
().
getResourceAsStream
(
"org/h2/samples/optimizations.sql"
);
new
File
(
getBaseDir
()).
mkdirs
();
FileOutputStream
out
=
new
FileOutputStream
(
getBaseDir
()
+
"/optimizations.sql"
);
FileOutputStream
out
=
new
FileOutputStream
(
getBaseDir
()
+
"/optimizations.sql"
);
IOUtils
.
copyAndClose
(
in
,
out
);
String
url
=
"jdbc:h2:"
+
getBaseDir
()
+
"/optimizations"
;
testApp
(
""
,
org
.
h2
.
tools
.
RunScript
.
class
,
"-url"
,
url
,
"-user"
,
"sa"
,
"-password"
,
"sa"
,
"-script"
,
getBaseDir
()
+
"/optimizations.sql"
,
"-checkResults"
);
testApp
(
""
,
org
.
h2
.
tools
.
RunScript
.
class
,
"-url"
,
url
,
"-user"
,
"sa"
,
"-password"
,
"sa"
,
"-script"
,
getBaseDir
()
+
"/optimizations.sql"
,
"-checkResults"
);
deleteDb
(
"optimizations"
);
testApp
(
"Compacting...\nDone."
,
org
.
h2
.
samples
.
Compact
.
class
);
testApp
(
"NAME: Bob Meier\n"
+
"EMAIL: bob.meier@abcde.abc\n"
+
"PHONE: +41123456789\n\n"
+
"NAME: John Jones\n"
+
"EMAIL: john.jones@abcde.abc\n"
+
"PHONE: +41976543210\n"
,
testApp
(
"NAME: Bob Meier\n"
+
"EMAIL: bob.meier@abcde.abc\n"
+
"PHONE: +41123456789\n\n"
+
"NAME: John Jones\n"
+
"EMAIL: john.jones@abcde.abc\n"
+
"PHONE: +41976543210\n"
,
org
.
h2
.
samples
.
CsvSample
.
class
);
testApp
(
""
,
org
.
h2
.
samples
.
CachedPreparedStatements
.
class
);
...
...
@@ -106,7 +112,8 @@ public class TestSampleApps extends TestBase {
FileUtils
.
delete
(
getBaseDir
()
+
"/optimizations.sql"
);
}
private
void
testApp
(
String
expected
,
Class
<?>
clazz
,
String
...
args
)
throws
Exception
{
private
void
testApp
(
String
expected
,
Class
<?>
clazz
,
String
...
args
)
throws
Exception
{
DeleteDbFiles
.
execute
(
"data"
,
"test"
,
true
);
Method
m
=
clazz
.
getMethod
(
"main"
,
String
[].
class
);
PrintStream
oldOut
=
System
.
out
,
oldErr
=
System
.
err
;
...
...
h2/src/test/org/h2/test/unit/TestScriptReader.java
浏览文件 @
00b26a11
...
...
@@ -76,7 +76,8 @@ public class TestScriptReader extends TestBase {
case
1
:
{
buff
.
append
(
'\''
);
int
l
=
random
.
nextInt
(
4
);
String
[]
ch
=
{
";"
,
"\n"
,
"\r"
,
"--"
,
"//"
,
"/"
,
"-"
,
"*"
,
"/*"
,
"*/"
,
"\""
,
"$ "
};
String
[]
ch
=
{
";"
,
"\n"
,
"\r"
,
"--"
,
"//"
,
"/"
,
"-"
,
"*"
,
"/*"
,
"*/"
,
"\""
,
"$ "
};
for
(
int
j
=
0
;
j
<
l
;
j
++)
{
buff
.
append
(
ch
[
random
.
nextInt
(
ch
.
length
)]);
}
...
...
@@ -86,7 +87,8 @@ public class TestScriptReader extends TestBase {
case
2
:
{
buff
.
append
(
'"'
);
int
l
=
random
.
nextInt
(
4
);
String
[]
ch
=
{
";"
,
"\n"
,
"\r"
,
"--"
,
"//"
,
"/"
,
"-"
,
"*"
,
"/*"
,
"*/"
,
"\'"
,
"$"
};
String
[]
ch
=
{
";"
,
"\n"
,
"\r"
,
"--"
,
"//"
,
"/"
,
"-"
,
"*"
,
"/*"
,
"*/"
,
"\'"
,
"$"
};
for
(
int
j
=
0
;
j
<
l
;
j
++)
{
buff
.
append
(
ch
[
random
.
nextInt
(
ch
.
length
)]);
}
...
...
h2/src/test/org/h2/test/unit/TestSecurity.java
浏览文件 @
00b26a11
...
...
@@ -39,9 +39,12 @@ public class TestSecurity extends TestBase {
}
private
static
void
testConnectWithHash
()
throws
SQLException
{
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:h2:mem:test"
,
"sa"
,
"sa"
);
String
pwd
=
StringUtils
.
convertBytesToHex
(
SHA256
.
getKeyPasswordHash
(
"SA"
,
"sa"
.
toCharArray
()));
Connection
conn2
=
DriverManager
.
getConnection
(
"jdbc:h2:mem:test;PASSWORD_HASH=TRUE"
,
"sa"
,
pwd
);
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:h2:mem:test"
,
"sa"
,
"sa"
);
String
pwd
=
StringUtils
.
convertBytesToHex
(
SHA256
.
getKeyPasswordHash
(
"SA"
,
"sa"
.
toCharArray
()));
Connection
conn2
=
DriverManager
.
getConnection
(
"jdbc:h2:mem:test;PASSWORD_HASH=TRUE"
,
"sa"
,
pwd
);
conn
.
close
();
conn2
.
close
();
}
...
...
@@ -121,35 +124,49 @@ public class TestSecurity extends TestBase {
}
private
void
testOneSHA
()
{
assertEquals
(
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
,
assertEquals
(
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
,
getHashString
(
new
byte
[]
{}));
assertEquals
(
"68aa2e2ee5dff96e3355e6c7ee373e3d6a4e17f75f9518d843709c0c9bc3e3d4"
,
assertEquals
(
"68aa2e2ee5dff96e3355e6c7ee373e3d6a4e17f75f9518d843709c0c9bc3e3d4"
,
getHashString
(
new
byte
[]
{
0x19
}));
assertEquals
(
"175ee69b02ba9b58e2b0a5fd13819cea573f3940a94f825128cf4209beabb4e8"
,
assertEquals
(
"175ee69b02ba9b58e2b0a5fd13819cea573f3940a94f825128cf4209beabb4e8"
,
getHashString
(
new
byte
[]
{
(
byte
)
0xe3
,
(
byte
)
0xd7
,
0x25
,
0x70
,
(
byte
)
0xdc
,
(
byte
)
0xdd
,
0x78
,
0x7c
,
(
byte
)
0xe3
,
(
byte
)
0x88
,
0x7a
,
(
byte
)
0xb2
,
(
byte
)
0xcd
,
0x68
,
0x46
,
0x52
}));
checkSHA256
(
""
,
new
byte
[]
{
(
byte
)
0xe3
,
(
byte
)
0xd7
,
0x25
,
0x70
,
(
byte
)
0xdc
,
(
byte
)
0xdd
,
0x78
,
0x7c
,
(
byte
)
0xe3
,
(
byte
)
0x88
,
0x7a
,
(
byte
)
0xb2
,
(
byte
)
0xcd
,
0x68
,
0x46
,
0x52
}));
checkSHA256
(
""
,
"E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
);
checkSHA256
(
"a"
,
checkSHA256
(
"a"
,
"CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB"
);
checkSHA256
(
"abc"
,
checkSHA256
(
"abc"
,
"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD"
);
checkSHA256
(
"message digest"
,
checkSHA256
(
"message digest"
,
"F7846F55CF23E14EEBEAB5B4E1550CAD5B509E3348FBC4EFA3A1413D393CB650"
);
checkSHA256
(
"abcdefghijklmnopqrstuvwxyz"
,
checkSHA256
(
"abcdefghijklmnopqrstuvwxyz"
,
"71C480DF93D6AE2F1EFAD1447C66C9525E316218CF51FC8D9ED832F2DAF18B73"
);
checkSHA256
(
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
checkSHA256
(
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
,
"248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1"
);
checkSHA256
(
"12345678901234567890123456789012345678901234567890123456789012345678901234567890"
,
checkSHA256
(
"12345678901234567890123456789012345678901234567890123456789012345678901234567890"
,
"F371BC4A311F2B009EEF952DD83CA80E2B60026C8E935592D0F9C308453C813E"
);
StringBuilder
buff
=
new
StringBuilder
(
1000000
);
buff
.
append
(
'a'
);
checkSHA256
(
buff
.
toString
(),
"CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB"
);
checkSHA256
(
buff
.
toString
(),
"CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB"
);
}
private
void
checkSHA256
(
String
message
,
String
expected
)
{
String
hash
=
StringUtils
.
convertBytesToHex
(
SHA256
.
getHash
(
message
.
getBytes
(),
true
)).
toUpperCase
();
String
hash
=
StringUtils
.
convertBytesToHex
(
SHA256
.
getHash
(
message
.
getBytes
(),
true
)).
toUpperCase
();
assertEquals
(
expected
,
hash
);
}
...
...
h2/src/test/org/h2/test/unit/TestServlet.java
浏览文件 @
00b26a11
...
...
@@ -233,8 +233,9 @@ public class TestServlet extends TestBase {
listener
.
contextDestroyed
(
event
);
// listener must be stopped
assertThrows
(
ErrorCode
.
CONNECTION_BROKEN_1
,
this
).
getConnection
(
"jdbc:h2:tcp://localhost:8888/"
+
getBaseDir
()
+
"/servlet"
,
getUser
(),
getPassword
());
assertThrows
(
ErrorCode
.
CONNECTION_BROKEN_1
,
this
).
getConnection
(
"jdbc:h2:tcp://localhost:8888/"
+
getBaseDir
()
+
"/servlet"
,
getUser
(),
getPassword
());
// connection must be closed
assertThrows
(
ErrorCode
.
OBJECT_CLOSED
,
stat1
).
...
...
h2/src/test/org/h2/test/unit/TestShell.java
浏览文件 @
00b26a11
...
...
@@ -50,7 +50,8 @@ public class TestShell extends TestBase {
ByteArrayOutputStream
buff
=
new
ByteArrayOutputStream
();
shell
.
setOut
(
new
PrintStream
(
buff
));
shell
.
runTool
(
"-url"
,
"jdbc:h2:mem:"
,
"-driver"
,
"org.h2.Driver"
,
"-user"
,
"sa"
,
"-password"
,
"sa"
,
"-properties"
,
"null"
,
"-sql"
,
"select 'Hello ' || 'World' as hi"
);
"-user"
,
"sa"
,
"-password"
,
"sa"
,
"-properties"
,
"null"
,
"-sql"
,
"select 'Hello ' || 'World' as hi"
);
String
s
=
new
String
(
buff
.
toByteArray
());
assertContains
(
s
,
"HI"
);
assertContains
(
s
,
"Hello World"
);
...
...
@@ -61,7 +62,8 @@ public class TestShell extends TestBase {
shell
.
setOut
(
new
PrintStream
(
buff
));
shell
.
runTool
(
"-help"
);
s
=
new
String
(
buff
.
toByteArray
());
assertContains
(
s
,
"Interactive command line tool to access a database using JDBC."
);
assertContains
(
s
,
"Interactive command line tool to access a database using JDBC."
);
test
(
true
);
test
(
false
);
...
...
h2/src/test/org/h2/test/unit/TestSort.java
浏览文件 @
00b26a11
...
...
@@ -94,7 +94,8 @@ public class TestSort extends TestBase {
// long t = System.currentTimeMillis();
clazz
.
getMethod
(
"sort"
,
Object
[].
class
,
Comparator
.
class
).
invoke
(
null
,
array
,
comp
);
clazz
.
getMethod
(
"sort"
,
Object
[].
class
,
Comparator
.
class
).
invoke
(
null
,
array
,
comp
);
// System.out.printf(
// "%4d ms; %10d comparisons order: %s data: %s\n",
...
...
h2/src/test/org/h2/test/unit/TestStringCache.java
浏览文件 @
00b26a11
...
...
@@ -21,7 +21,8 @@ public class TestStringCache extends TestBase {
*/
volatile
boolean
stop
;
private
final
Random
random
=
new
Random
(
1
);
private
final
String
[]
some
=
{
null
,
""
,
"ABC"
,
"this is a medium sized string"
,
"1"
,
"2"
};
private
final
String
[]
some
=
{
null
,
""
,
"ABC"
,
"this is a medium sized string"
,
"1"
,
"2"
};
private
boolean
returnNew
;
private
boolean
useIntern
;
...
...
@@ -88,7 +89,8 @@ public class TestStringCache extends TestBase {
TestBase
.
logError
(
"error"
,
e
);
}
if
(
a
!=
null
&&
a
==
b
&&
a
.
length
()
>
0
)
{
throw
new
AssertionError
(
"a="
+
System
.
identityHashCode
(
a
)
+
" b="
+
System
.
identityHashCode
(
b
));
throw
new
AssertionError
(
"a="
+
System
.
identityHashCode
(
a
)
+
" b="
+
System
.
identityHashCode
(
b
));
}
}
else
{
String
b
;
...
...
h2/src/test/org/h2/test/unit/TestStringUtils.java
浏览文件 @
00b26a11
...
...
@@ -179,8 +179,11 @@ public class TestStringUtils extends TestBase {
}
private
void
testSplit
()
{
assertEquals
(
3
,
StringUtils
.
arraySplit
(
"ABC,DEF,G\\,HI"
,
','
,
false
).
length
);
assertEquals
(
StringUtils
.
arrayCombine
(
new
String
[]
{
""
,
" "
,
","
},
','
),
", ,\\,"
);
assertEquals
(
3
,
StringUtils
.
arraySplit
(
"ABC,DEF,G\\,HI"
,
','
,
false
).
length
);
assertEquals
(
StringUtils
.
arrayCombine
(
new
String
[]
{
""
,
" "
,
","
},
','
),
", ,\\,"
);
Random
random
=
new
Random
(
1
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
int
len
=
random
.
nextInt
(
10
);
...
...
h2/src/test/org/h2/test/unit/TestTools.java
浏览文件 @
00b26a11
差异被折叠。
点击展开。
h2/src/test/org/h2/test/unit/TestUtils.java
浏览文件 @
00b26a11
...
...
@@ -149,7 +149,8 @@ public class TestUtils extends TestBase {
Arrays
.
sort
(
arr2
,
comp
);
for
(
int
i
=
offset
,
end
=
Math
.
min
(
offset
+
limit
,
arr
.
length
);
i
<
end
;
i
++)
{
if
(!
arr
[
i
].
equals
(
arr2
[
i
]))
{
fail
(
offset
+
" "
+
end
+
"\n"
+
Arrays
.
toString
(
arr
)
+
"\n"
+
Arrays
.
toString
(
arr2
));
fail
(
offset
+
" "
+
end
+
"\n"
+
Arrays
.
toString
(
arr
)
+
"\n"
+
Arrays
.
toString
(
arr2
));
}
}
}
...
...
@@ -176,7 +177,8 @@ public class TestUtils extends TestBase {
private
void
testReflectionUtils
()
throws
Exception
{
// Static method call
long
currentTimeMillis1
=
System
.
currentTimeMillis
();
long
currentTimeMillis2
=
(
Long
)
Utils
.
callStaticMethod
(
"java.lang.System.currentTimeMillis"
);
long
currentTimeMillis2
=
(
Long
)
Utils
.
callStaticMethod
(
"java.lang.System.currentTimeMillis"
);
assertTrue
(
currentTimeMillis1
<=
currentTimeMillis2
);
// New Instance
Object
instance
=
Utils
.
newInstance
(
"java.lang.StringBuilder"
);
...
...
@@ -201,11 +203,21 @@ public class TestUtils extends TestBase {
Utils
.
callStaticMethod
(
"java.awt.AWTKeyStroke.getAWTKeyStroke"
,
'x'
,
java
.
awt
.
event
.
InputEvent
.
SHIFT_DOWN_MASK
);
// Common comparable superclass
assertFalse
(
Utils
.
haveCommonComparableSuperclass
(
Integer
.
class
,
Long
.
class
));
assertTrue
(
Utils
.
haveCommonComparableSuperclass
(
Integer
.
class
,
Integer
.
class
));
assertTrue
(
Utils
.
haveCommonComparableSuperclass
(
Timestamp
.
class
,
Date
.
class
));
assertFalse
(
Utils
.
haveCommonComparableSuperclass
(
ArrayList
.
class
,
Long
.
class
));
assertFalse
(
Utils
.
haveCommonComparableSuperclass
(
Integer
.
class
,
ArrayList
.
class
));
assertFalse
(
Utils
.
haveCommonComparableSuperclass
(
Integer
.
class
,
Long
.
class
));
assertTrue
(
Utils
.
haveCommonComparableSuperclass
(
Integer
.
class
,
Integer
.
class
));
assertTrue
(
Utils
.
haveCommonComparableSuperclass
(
Timestamp
.
class
,
Date
.
class
));
assertFalse
(
Utils
.
haveCommonComparableSuperclass
(
ArrayList
.
class
,
Long
.
class
));
assertFalse
(
Utils
.
haveCommonComparableSuperclass
(
Integer
.
class
,
ArrayList
.
class
));
}
}
h2/src/test/org/h2/test/unit/TestValue.java
浏览文件 @
00b26a11
...
...
@@ -62,7 +62,8 @@ public class TestValue extends TestBase {
Value
v
;
String
spaces
=
new
String
(
new
char
[
100
]).
replace
((
char
)
0
,
' '
);
v
=
ValueArray
.
get
(
new
Value
[]{
ValueString
.
get
(
"hello"
),
ValueString
.
get
(
"world"
)});
v
=
ValueArray
.
get
(
new
Value
[]
{
ValueString
.
get
(
"hello"
),
ValueString
.
get
(
"world"
)
});
assertEquals
(
10
,
v
.
getPrecision
());
assertEquals
(
5
,
v
.
convertPrecision
(
5
,
true
).
getPrecision
());
v
=
ValueArray
.
get
(
new
Value
[]{
ValueString
.
get
(
""
),
ValueString
.
get
(
""
)});
...
...
@@ -79,10 +80,12 @@ public class TestValue extends TestBase {
final
Value
vd
=
ValueDecimal
.
get
(
new
BigDecimal
(
"1234567890.123456789"
));
assertEquals
(
19
,
vd
.
getPrecision
());
assertEquals
(
"1234567890.1234567"
,
vd
.
convertPrecision
(
10
,
true
).
getString
());
new
AssertThrows
(
ErrorCode
.
NUMERIC_VALUE_OUT_OF_RANGE_1
)
{
@Override
new
AssertThrows
(
ErrorCode
.
NUMERIC_VALUE_OUT_OF_RANGE_1
)
{
@Override
public
void
test
()
{
vd
.
convertPrecision
(
10
,
false
);
}};
}
};
v
=
ValueLobDb
.
createSmallLob
(
Value
.
CLOB
,
spaces
.
getBytes
(),
100
);
assertEquals
(
100
,
v
.
getPrecision
());
...
...
@@ -200,7 +203,8 @@ public class TestValue extends TestBase {
};
Value
[]
values
=
new
Value
[
d
.
length
];
for
(
int
i
=
0
;
i
<
d
.
length
;
i
++)
{
Value
v
=
useFloat
?
(
Value
)
ValueFloat
.
get
((
float
)
d
[
i
])
:
(
Value
)
ValueDouble
.
get
(
d
[
i
]);
Value
v
=
useFloat
?
(
Value
)
ValueFloat
.
get
((
float
)
d
[
i
])
:
(
Value
)
ValueDouble
.
get
(
d
[
i
]);
values
[
i
]
=
v
;
assertTrue
(
values
[
i
].
compareTypeSave
(
values
[
i
],
null
)
==
0
);
assertTrue
(
v
.
equals
(
v
));
...
...
h2/src/test/org/h2/test/unit/TestValueHashMap.java
浏览文件 @
00b26a11
...
...
@@ -163,7 +163,8 @@ public class TestValueHashMap extends TestBase implements DataHandler {
}
@Override
public
int
readLob
(
long
lobId
,
byte
[]
hmac
,
long
offset
,
byte
[]
buff
,
int
off
,
int
length
)
{
public
int
readLob
(
long
lobId
,
byte
[]
hmac
,
long
offset
,
byte
[]
buff
,
int
off
,
int
length
)
{
return
-
1
;
}
...
...
h2/src/test/org/h2/test/unit/TestValueMemory.java
浏览文件 @
00b26a11
...
...
@@ -56,7 +56,8 @@ import org.h2.value.ValueUuid;
public
class
TestValueMemory
extends
TestBase
implements
DataHandler
{
private
final
Random
random
=
new
Random
(
1
);
private
final
SmallLRUCache
<
String
,
String
[]>
lobFileListCache
=
SmallLRUCache
.
newInstance
(
128
);
private
final
SmallLRUCache
<
String
,
String
[]>
lobFileListCache
=
SmallLRUCache
.
newInstance
(
128
);
private
LobStorageFrontend
lobStorage
;
/**
...
...
@@ -198,7 +199,8 @@ public class TestValueMemory extends TestBase implements DataHandler {
if
(
DataType
.
GEOMETRY_CLASS
==
null
)
{
return
ValueNull
.
INSTANCE
;
}
return
ValueGeometry
.
get
(
"POINT ("
+
random
.
nextInt
(
100
)
+
" "
+
random
.
nextInt
(
100
)+
")"
);
return
ValueGeometry
.
get
(
"POINT ("
+
random
.
nextInt
(
100
)
+
" "
+
random
.
nextInt
(
100
)
+
")"
);
default
:
throw
new
AssertionError
(
"type="
+
type
);
}
...
...
@@ -278,7 +280,8 @@ public class TestValueMemory extends TestBase implements DataHandler {
}
@Override
public
int
readLob
(
long
lobId
,
byte
[]
hmac
,
long
offset
,
byte
[]
buff
,
int
off
,
int
length
)
{
public
int
readLob
(
long
lobId
,
byte
[]
hmac
,
long
offset
,
byte
[]
buff
,
int
off
,
int
length
)
{
return
-
1
;
}
...
...
h2/src/test/org/h2/test/utils/AssertThrows.java
浏览文件 @
00b26a11
...
...
@@ -29,7 +29,8 @@ public abstract class AssertThrows {
public
AssertThrows
(
final
Class
<?
extends
Exception
>
expectedExceptionClass
)
{
this
(
new
ResultVerifier
()
{
@Override
public
boolean
verify
(
Object
returnValue
,
Throwable
t
,
Method
m
,
Object
...
args
)
{
public
boolean
verify
(
Object
returnValue
,
Throwable
t
,
Method
m
,
Object
...
args
)
{
if
(
t
==
null
)
{
throw
new
AssertionError
(
"Expected an exception of type "
+
expectedExceptionClass
.
getSimpleName
()
+
...
...
@@ -77,7 +78,8 @@ public abstract class AssertThrows {
public
AssertThrows
(
final
int
expectedErrorCode
)
{
this
(
new
ResultVerifier
()
{
@Override
public
boolean
verify
(
Object
returnValue
,
Throwable
t
,
Method
m
,
Object
...
args
)
{
public
boolean
verify
(
Object
returnValue
,
Throwable
t
,
Method
m
,
Object
...
args
)
{
int
errorCode
;
if
(
t
instanceof
DbException
)
{
errorCode
=
((
DbException
)
t
).
getErrorCode
();
...
...
h2/src/test/org/h2/test/utils/FilePathDebug.java
浏览文件 @
00b26a11
...
...
@@ -25,7 +25,8 @@ public class FilePathDebug extends FilePathWrapper {
private
static
final
FilePathDebug
INSTANCE
=
new
FilePathDebug
();
private
static
final
IOException
POWER_OFF
=
new
IOException
(
"Simulated power failure"
);
private
static
final
IOException
POWER_OFF
=
new
IOException
(
"Simulated power failure"
);
private
int
powerOffCount
;
private
boolean
trace
;
...
...
@@ -191,8 +192,8 @@ public class FilePathDebug extends FilePathWrapper {
}
@Override
public
FilePath
createTempFile
(
String
suffix
,
boolean
deleteOnExit
,
boolean
inTempDir
)
throws
IOException
{
public
FilePath
createTempFile
(
String
suffix
,
boolean
deleteOnExit
,
boolean
inTempDir
)
throws
IOException
{
trace
(
name
,
"createTempFile"
,
suffix
,
deleteOnExit
,
inTempDir
);
return
super
.
createTempFile
(
suffix
,
deleteOnExit
,
inTempDir
);
}
...
...
@@ -323,7 +324,8 @@ class FileDebug extends FileBase {
}
@Override
public
synchronized
FileLock
tryLock
(
long
position
,
long
size
,
boolean
shared
)
throws
IOException
{
public
synchronized
FileLock
tryLock
(
long
position
,
long
size
,
boolean
shared
)
throws
IOException
{
debug
(
"tryLock"
);
return
channel
.
tryLock
(
position
,
size
,
shared
);
}
...
...
h2/src/test/org/h2/test/utils/FilePathUnstable.java
浏览文件 @
00b26a11
...
...
@@ -199,8 +199,8 @@ public class FilePathUnstable extends FilePathWrapper {
}
@Override
public
FilePath
createTempFile
(
String
suffix
,
boolean
deleteOnExit
,
boolean
inTempDir
)
throws
IOException
{
public
FilePath
createTempFile
(
String
suffix
,
boolean
deleteOnExit
,
boolean
inTempDir
)
throws
IOException
{
return
super
.
createTempFile
(
suffix
,
deleteOnExit
,
inTempDir
);
}
...
...
@@ -296,7 +296,8 @@ class FileUnstable extends FileBase {
}
@Override
public
synchronized
FileLock
tryLock
(
long
position
,
long
size
,
boolean
shared
)
throws
IOException
{
public
synchronized
FileLock
tryLock
(
long
position
,
long
size
,
boolean
shared
)
throws
IOException
{
return
channel
.
tryLock
(
position
,
size
,
shared
);
}
...
...
h2/src/test/org/h2/test/utils/MemoryFootprint.java
浏览文件 @
00b26a11
...
...
@@ -54,7 +54,8 @@ public class MemoryFootprint {
print
(
"long["
+
i
+
"]"
,
new
long
[
i
]);
print
(
"double["
+
i
+
"]"
,
new
double
[
i
]);
System
.
out
.
println
(
getArraySize
(
Constants
.
MEMORY_POINTER
,
i
)
+
" bytes per obj[]"
);
System
.
out
.
println
(
getArraySize
(
Constants
.
MEMORY_POINTER
,
i
)
+
" bytes per obj[]"
);
print
(
"Object["
+
i
+
"]"
,
new
Object
[
i
]);
System
.
out
.
println
();
...
...
h2/src/test/org/h2/test/utils/OutputCatcher.java
浏览文件 @
00b26a11
...
...
@@ -60,11 +60,15 @@ public class OutputCatcher {
file
.
getParentFile
().
mkdirs
();
PrintWriter
writer
=
new
PrintWriter
(
new
FileOutputStream
(
file
));
writer
.
write
(
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 "
+
"Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
);
writer
.
write
(
"<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">\n"
);
writer
.
write
(
"<head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" /><title>\n"
);
"Strict//EN\" "
+
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
);
writer
.
write
(
"<html xmlns=\"http://www.w3.org/1999/xhtml\" "
+
"lang=\"en\" xml:lang=\"en\">\n"
);
writer
.
write
(
"<head><meta http-equiv=\"Content-Type\" "
+
"content=\"text/html;charset=utf-8\" /><title>\n"
);
writer
.
print
(
title
);
writer
.
print
(
"</title><link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" />\n"
);
writer
.
print
(
"</title><link rel=\"stylesheet\" "
+
"type=\"text/css\" href=\"stylesheet.css\" />\n"
);
writer
.
print
(
"</head><body style=\"margin: 20px;\">\n"
);
writer
.
print
(
"<h1>"
+
title
+
"</h1><br />\n"
);
writer
.
print
(
output
);
...
...
h2/src/test/org/h2/test/utils/ProxyCodeGenerator.java
浏览文件 @
00b26a11
...
...
@@ -122,7 +122,8 @@ public class ProxyCodeGenerator {
}
if
(
constructor
==
null
)
{
constructor
=
c
;
}
else
if
(
c
.
getParameterTypes
().
length
<
constructor
.
getParameterTypes
().
length
)
{
}
else
if
(
c
.
getParameterTypes
().
length
<
constructor
.
getParameterTypes
().
length
)
{
constructor
=
c
;
}
}
...
...
@@ -203,7 +204,8 @@ public class ProxyCodeGenerator {
writer
.
println
(
" public "
+
className
+
"() {"
);
writer
.
println
(
" this(new InvocationHandler() {"
);
writer
.
println
(
" public Object invoke(Object proxy,"
);
writer
.
println
(
" Method method, Object[] args) throws Throwable {"
);
writer
.
println
(
" Method method, Object[] args) "
+
"throws Throwable {"
);
writer
.
println
(
" return method.invoke(proxy, args);"
);
writer
.
println
(
" }});"
);
writer
.
println
(
" }"
);
...
...
@@ -243,7 +245,8 @@ public class ProxyCodeGenerator {
writer
.
println
(
" this.ih = ih;"
);
writer
.
println
(
" }"
);
writer
.
println
(
" @SuppressWarnings(\"unchecked\")"
);
writer
.
println
(
" private static <T extends RuntimeException> T convertException(Throwable e) {"
);
writer
.
println
(
" private static <T extends RuntimeException> "
+
"T convertException(Throwable e) {"
);
writer
.
println
(
" if (e instanceof Error) {"
);
writer
.
println
(
" throw (Error) e;"
);
writer
.
println
(
" }"
);
...
...
h2/src/test/org/h2/test/utils/SelfDestructor.java
浏览文件 @
00b26a11
...
...
@@ -27,8 +27,11 @@ public class SelfDestructor extends Thread {
* current process is killed.
*/
public
static
void
startCountdown
(
int
defaultMinutes
)
{
final
int
minutes
=
Integer
.
parseInt
(
System
.
getProperty
(
PROPERTY_NAME
,
""
+
defaultMinutes
));
if
(
minutes
!=
0
)
{
final
int
minutes
=
Integer
.
parseInt
(
System
.
getProperty
(
PROPERTY_NAME
,
""
+
defaultMinutes
));
if
(
minutes
==
0
)
{
return
;
}
Thread
thread
=
new
Thread
()
{
@Override
public
void
run
()
{
...
...
@@ -49,11 +52,15 @@ public class SelfDestructor extends Thread {
}
}
try
{
String
time
=
new
Timestamp
(
System
.
currentTimeMillis
()).
toString
();
System
.
out
.
println
(
time
+
" Killing the process after "
+
minutes
+
" minute(s)"
);
String
time
=
new
Timestamp
(
System
.
currentTimeMillis
()).
toString
();
System
.
out
.
println
(
time
+
" Killing the process after "
+
minutes
+
" minute(s)"
);
try
{
Map
<
Thread
,
StackTraceElement
[]>
map
=
Thread
.
getAllStackTraces
();
for
(
Map
.
Entry
<
Thread
,
StackTraceElement
[]>
en
:
map
.
entrySet
())
{
Map
<
Thread
,
StackTraceElement
[]>
map
=
Thread
.
getAllStackTraces
();
for
(
Map
.
Entry
<
Thread
,
StackTraceElement
[]>
en
:
map
.
entrySet
())
{
System
.
out
.
println
(
en
.
getKey
());
for
(
StackTraceElement
el
:
en
.
getValue
())
{
System
.
out
.
println
(
" "
+
el
);
...
...
@@ -102,7 +109,6 @@ public class SelfDestructor extends Thread {
thread
.
setDaemon
(
true
);
thread
.
start
();
}
}
/**
* Get the string to be added when starting the Java process.
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论