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