Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
b3836d31
提交
b3836d31
authored
3月 01, 2014
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Limit line length to 80 characters
上级
fda7e2d5
全部展开
显示空白字符变更
内嵌
并排
正在显示
32 个修改的文件
包含
1082 行增加
和
569 行删除
+1082
-569
SimpleResultSet.java
h2/src/main/org/h2/tools/SimpleResultSet.java
+2
-1
TriggerAdapter.java
h2/src/main/org/h2/tools/TriggerAdapter.java
+8
-5
DbUpgrade.java
h2/src/main/org/h2/upgrade/DbUpgrade.java
+16
-8
CacheLRU.java
h2/src/main/org/h2/util/CacheLRU.java
+7
-3
CacheTQ.java
h2/src/main/org/h2/util/CacheTQ.java
+2
-1
CloseWatcher.java
h2/src/main/org/h2/util/CloseWatcher.java
+4
-2
DateTimeUtils.java
h2/src/main/org/h2/util/DateTimeUtils.java
+20
-11
DbDriverActivator.java
h2/src/main/org/h2/util/DbDriverActivator.java
+12
-4
OsgiDataSourceFactory.java
h2/src/main/org/h2/util/OsgiDataSourceFactory.java
+69
-50
SourceCompiler.java
h2/src/main/org/h2/util/SourceCompiler.java
+2
-1
Coverage.java
h2/src/test/org/h2/test/coverage/Coverage.java
+25
-13
Profile.java
h2/src/test/org/h2/test/coverage/Profile.java
+3
-2
Db.java
h2/src/test/org/h2/test/db/Db.java
+2
-1
TaskProcess.java
h2/src/test/org/h2/test/db/TaskProcess.java
+3
-1
TestBackup.java
h2/src/test/org/h2/test/db/TestBackup.java
+24
-12
TestBigDb.java
h2/src/test/org/h2/test/db/TestBigDb.java
+38
-19
TestBigResult.java
h2/src/test/org/h2/test/db/TestBigResult.java
+8
-4
TestCases.java
h2/src/test/org/h2/test/db/TestCases.java
+168
-86
TestCluster.java
h2/src/test/org/h2/test/db/TestCluster.java
+62
-31
TestCompatibility.java
h2/src/test/org/h2/test/db/TestCompatibility.java
+85
-46
TestCompatibilityOracle.java
h2/src/test/org/h2/test/db/TestCompatibilityOracle.java
+18
-9
TestCsv.java
h2/src/test/org/h2/test/db/TestCsv.java
+70
-37
TestDateStorage.java
h2/src/test/org/h2/test/db/TestDateStorage.java
+2
-1
TestDeadlock.java
h2/src/test/org/h2/test/db/TestDeadlock.java
+2
-1
TestDrop.java
h2/src/test/org/h2/test/db/TestDrop.java
+2
-1
TestDuplicateKeyUpdate.java
h2/src/test/org/h2/test/db/TestDuplicateKeyUpdate.java
+38
-20
TestFullText.java
h2/src/test/org/h2/test/db/TestFullText.java
+100
-50
TestFunctionOverload.java
h2/src/test/org/h2/test/db/TestFunctionOverload.java
+6
-3
TestFunctions.java
h2/src/test/org/h2/test/db/TestFunctions.java
+157
-79
TestIndex.java
h2/src/test/org/h2/test/db/TestIndex.java
+46
-23
TestLinkedTable.java
h2/src/test/org/h2/test/db/TestLinkedTable.java
+79
-43
TestView.java
h2/src/test/org/h2/test/db/TestView.java
+2
-1
没有找到文件。
h2/src/main/org/h2/tools/SimpleResultSet.java
浏览文件 @
b3836d31
...
@@ -2312,7 +2312,8 @@ public class SimpleResultSet implements ResultSet, ResultSetMetaData {
...
@@ -2312,7 +2312,8 @@ public class SimpleResultSet implements ResultSet, ResultSetMetaData {
private
void
checkColumnIndex
(
int
columnIndex
)
throws
SQLException
{
private
void
checkColumnIndex
(
int
columnIndex
)
throws
SQLException
{
if
(
columnIndex
<
1
||
columnIndex
>
columns
.
size
())
{
if
(
columnIndex
<
1
||
columnIndex
>
columns
.
size
())
{
throw
DbException
.
getInvalidValueException
(
"columnIndex"
,
columnIndex
).
getSQLException
();
throw
DbException
.
getInvalidValueException
(
"columnIndex"
,
columnIndex
).
getSQLException
();
}
}
}
}
...
...
h2/src/main/org/h2/tools/TriggerAdapter.java
浏览文件 @
b3836d31
...
@@ -140,9 +140,10 @@ public abstract class TriggerAdapter implements Trigger {
...
@@ -140,9 +140,10 @@ public abstract class TriggerAdapter implements Trigger {
* @throws SQLException if the operation must be undone
* @throws SQLException if the operation must be undone
*/
*/
@Override
@Override
public
void
fire
(
Connection
conn
,
Object
[]
oldRow
,
public
void
fire
(
Connection
conn
,
Object
[]
oldRow
,
Object
[]
newRow
)
Object
[]
newRow
)
throws
SQLException
{
throws
SQLException
{
fire
(
conn
,
wrap
(
oldResultSet
,
oldSource
,
oldRow
),
wrap
(
newResultSet
,
newSource
,
newRow
));
fire
(
conn
,
wrap
(
oldResultSet
,
oldSource
,
oldRow
),
wrap
(
newResultSet
,
newSource
,
newRow
));
}
}
/**
/**
...
@@ -162,9 +163,11 @@ public abstract class TriggerAdapter implements Trigger {
...
@@ -162,9 +163,11 @@ public abstract class TriggerAdapter implements Trigger {
* DELETE)
* DELETE)
* @throws SQLException if the operation must be undone
* @throws SQLException if the operation must be undone
*/
*/
public
abstract
void
fire
(
Connection
conn
,
ResultSet
oldRow
,
ResultSet
newRow
)
throws
SQLException
;
public
abstract
void
fire
(
Connection
conn
,
ResultSet
oldRow
,
ResultSet
newRow
)
throws
SQLException
;
private
static
SimpleResultSet
wrap
(
SimpleResultSet
rs
,
TriggerRowSource
source
,
Object
[]
row
)
throws
SQLException
{
private
static
SimpleResultSet
wrap
(
SimpleResultSet
rs
,
TriggerRowSource
source
,
Object
[]
row
)
throws
SQLException
{
if
(
row
==
null
)
{
if
(
row
==
null
)
{
return
null
;
return
null
;
}
}
...
...
h2/src/main/org/h2/upgrade/DbUpgrade.java
浏览文件 @
b3836d31
...
@@ -45,7 +45,8 @@ public class DbUpgrade {
...
@@ -45,7 +45,8 @@ public class DbUpgrade {
* @param info the properties
* @param info the properties
* @return the connection if connected with the old version (NO_UPGRADE)
* @return the connection if connected with the old version (NO_UPGRADE)
*/
*/
public
static
Connection
connectOrUpgrade
(
String
url
,
Properties
info
)
throws
SQLException
{
public
static
Connection
connectOrUpgrade
(
String
url
,
Properties
info
)
throws
SQLException
{
if
(!
UPGRADE_CLASSES_PRESENT
)
{
if
(!
UPGRADE_CLASSES_PRESENT
)
{
return
null
;
return
null
;
}
}
...
@@ -100,12 +101,15 @@ public class DbUpgrade {
...
@@ -100,12 +101,15 @@ public class DbUpgrade {
DbUpgrade
.
deleteOldDb
=
deleteOldDb
;
DbUpgrade
.
deleteOldDb
=
deleteOldDb
;
}
}
private
static
Connection
connectWithOldVersion
(
String
url
,
Properties
info
)
throws
SQLException
{
private
static
Connection
connectWithOldVersion
(
String
url
,
Properties
info
)
url
=
"jdbc:h2v1_1:"
+
url
.
substring
(
"jdbc:h2:"
.
length
())
+
";IGNORE_UNKNOWN_SETTINGS=TRUE"
;
throws
SQLException
{
url
=
"jdbc:h2v1_1:"
+
url
.
substring
(
"jdbc:h2:"
.
length
())
+
";IGNORE_UNKNOWN_SETTINGS=TRUE"
;
return
DriverManager
.
getConnection
(
url
,
info
);
return
DriverManager
.
getConnection
(
url
,
info
);
}
}
private
static
void
upgrade
(
ConnectionInfo
ci
,
Properties
info
)
throws
SQLException
{
private
static
void
upgrade
(
ConnectionInfo
ci
,
Properties
info
)
throws
SQLException
{
String
name
=
ci
.
getName
();
String
name
=
ci
.
getName
();
String
data
=
name
+
".data.db"
;
String
data
=
name
+
".data.db"
;
String
index
=
name
+
".index.db"
;
String
index
=
name
+
".index.db"
;
...
@@ -117,11 +121,13 @@ public class DbUpgrade {
...
@@ -117,11 +121,13 @@ public class DbUpgrade {
try
{
try
{
if
(
scriptInTempDir
)
{
if
(
scriptInTempDir
)
{
new
File
(
Utils
.
getProperty
(
"java.io.tmpdir"
,
"."
)).
mkdirs
();
new
File
(
Utils
.
getProperty
(
"java.io.tmpdir"
,
"."
)).
mkdirs
();
script
=
File
.
createTempFile
(
"h2dbmigration"
,
"backup.sql"
).
getAbsolutePath
();
script
=
File
.
createTempFile
(
"h2dbmigration"
,
"backup.sql"
).
getAbsolutePath
();
}
else
{
}
else
{
script
=
name
+
".script.sql"
;
script
=
name
+
".script.sql"
;
}
}
String
oldUrl
=
"jdbc:h2v1_1:"
+
name
+
";UNDO_LOG=0;LOG=0;LOCK_MODE=0"
;
String
oldUrl
=
"jdbc:h2v1_1:"
+
name
+
";UNDO_LOG=0;LOG=0;LOCK_MODE=0"
;
String
cipher
=
ci
.
getProperty
(
"CIPHER"
,
null
);
String
cipher
=
ci
.
getProperty
(
"CIPHER"
,
null
);
if
(
cipher
!=
null
)
{
if
(
cipher
!=
null
)
{
oldUrl
+=
";CIPHER="
+
cipher
;
oldUrl
+=
";CIPHER="
+
cipher
;
...
@@ -130,7 +136,8 @@ public class DbUpgrade {
...
@@ -130,7 +136,8 @@ public class DbUpgrade {
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
String
uuid
=
UUID
.
randomUUID
().
toString
();
String
uuid
=
UUID
.
randomUUID
().
toString
();
if
(
cipher
!=
null
)
{
if
(
cipher
!=
null
)
{
stat
.
execute
(
"script to '"
+
script
+
"' cipher aes password '"
+
uuid
+
"' --hide--"
);
stat
.
execute
(
"script to '"
+
script
+
"' cipher aes password '"
+
uuid
+
"' --hide--"
);
}
else
{
}
else
{
stat
.
execute
(
"script to '"
+
script
+
"'"
);
stat
.
execute
(
"script to '"
+
script
+
"'"
);
}
}
...
@@ -144,7 +151,8 @@ public class DbUpgrade {
...
@@ -144,7 +151,8 @@ public class DbUpgrade {
conn
=
new
JdbcConnection
(
ci
,
true
);
conn
=
new
JdbcConnection
(
ci
,
true
);
stat
=
conn
.
createStatement
();
stat
=
conn
.
createStatement
();
if
(
cipher
!=
null
)
{
if
(
cipher
!=
null
)
{
stat
.
execute
(
"runscript from '"
+
script
+
"' cipher aes password '"
+
uuid
+
"' --hide--"
);
stat
.
execute
(
"runscript from '"
+
script
+
"' cipher aes password '"
+
uuid
+
"' --hide--"
);
}
else
{
}
else
{
stat
.
execute
(
"runscript from '"
+
script
+
"'"
);
stat
.
execute
(
"runscript from '"
+
script
+
"'"
);
}
}
...
...
h2/src/main/org/h2/util/CacheLRU.java
浏览文件 @
b3836d31
...
@@ -65,7 +65,8 @@ public class CacheLRU implements Cache {
...
@@ -65,7 +65,8 @@ public class CacheLRU implements Cache {
* @param cacheSize the size
* @param cacheSize the size
* @return the cache object
* @return the cache object
*/
*/
public
static
Cache
getCache
(
CacheWriter
writer
,
String
cacheType
,
int
cacheSize
)
{
public
static
Cache
getCache
(
CacheWriter
writer
,
String
cacheType
,
int
cacheSize
)
{
Map
<
Integer
,
CacheObject
>
secondLevel
=
null
;
Map
<
Integer
,
CacheObject
>
secondLevel
=
null
;
if
(
cacheType
.
startsWith
(
"SOFT_"
))
{
if
(
cacheType
.
startsWith
(
"SOFT_"
))
{
secondLevel
=
new
SoftHashMap
<
Integer
,
CacheObject
>();
secondLevel
=
new
SoftHashMap
<
Integer
,
CacheObject
>();
...
@@ -121,7 +122,8 @@ public class CacheLRU implements Cache {
...
@@ -121,7 +122,8 @@ public class CacheLRU implements Cache {
}
else
{
}
else
{
if
(
SysProperties
.
CHECK
)
{
if
(
SysProperties
.
CHECK
)
{
if
(
old
!=
rec
)
{
if
(
old
!=
rec
)
{
DbException
.
throwInternalError
(
"old!=record pos:"
+
pos
+
" old:"
+
old
+
" new:"
+
rec
);
DbException
.
throwInternalError
(
"old!=record pos:"
+
pos
+
" old:"
+
old
+
" new:"
+
rec
);
}
}
}
}
if
(!
fifo
)
{
if
(!
fifo
)
{
...
@@ -170,7 +172,9 @@ public class CacheLRU implements Cache {
...
@@ -170,7 +172,9 @@ public class CacheLRU implements Cache {
}
else
{
}
else
{
// can't remove any record, because the records can not be removed
// can't remove any record, because the records can not be removed
// hopefully this does not happen frequently, but it can happen
// hopefully this does not happen frequently, but it can happen
writer
.
getTrace
().
info
(
"cannot remove records, cache size too small? records:"
+
recordCount
+
" memory:"
+
memory
);
writer
.
getTrace
().
info
(
"cannot remove records, cache size too small? records:"
+
recordCount
+
" memory:"
+
memory
);
break
;
break
;
}
}
}
}
...
...
h2/src/main/org/h2/util/CacheTQ.java
浏览文件 @
b3836d31
...
@@ -22,7 +22,8 @@ public class CacheTQ implements Cache {
...
@@ -22,7 +22,8 @@ public class CacheTQ implements Cache {
private
final
Cache
lru
;
private
final
Cache
lru
;
private
final
Cache
fifo
;
private
final
Cache
fifo
;
private
final
SmallLRUCache
<
Integer
,
Object
>
recentlyUsed
=
SmallLRUCache
.
newInstance
(
1024
);
private
final
SmallLRUCache
<
Integer
,
Object
>
recentlyUsed
=
SmallLRUCache
.
newInstance
(
1024
);
private
int
lastUsed
=
-
1
;
private
int
lastUsed
=
-
1
;
private
int
maxMemory
;
private
int
maxMemory
;
...
...
h2/src/main/org/h2/util/CloseWatcher.java
浏览文件 @
b3836d31
...
@@ -45,7 +45,8 @@ public class CloseWatcher extends PhantomReference<Object> {
...
@@ -45,7 +45,8 @@ public class CloseWatcher extends PhantomReference<Object> {
*/
*/
private
Closeable
closeable
;
private
Closeable
closeable
;
public
CloseWatcher
(
Object
referent
,
ReferenceQueue
<
Object
>
q
,
Closeable
closeable
)
{
public
CloseWatcher
(
Object
referent
,
ReferenceQueue
<
Object
>
q
,
Closeable
closeable
)
{
super
(
referent
,
q
);
super
(
referent
,
q
);
this
.
closeable
=
closeable
;
this
.
closeable
=
closeable
;
}
}
...
@@ -88,7 +89,8 @@ public class CloseWatcher extends PhantomReference<Object> {
...
@@ -88,7 +89,8 @@ public class CloseWatcher extends PhantomReference<Object> {
* relatively slow)
* relatively slow)
* @return the close watcher
* @return the close watcher
*/
*/
public
static
CloseWatcher
register
(
Object
o
,
Closeable
closeable
,
boolean
stackTrace
)
{
public
static
CloseWatcher
register
(
Object
o
,
Closeable
closeable
,
boolean
stackTrace
)
{
ReferenceQueue
<
Object
>
q
=
queue
;
ReferenceQueue
<
Object
>
q
=
queue
;
if
(
q
==
null
)
{
if
(
q
==
null
)
{
q
=
new
ReferenceQueue
<
Object
>();
q
=
new
ReferenceQueue
<
Object
>();
...
...
h2/src/main/org/h2/util/DateTimeUtils.java
浏览文件 @
b3836d31
...
@@ -42,12 +42,14 @@ public class DateTimeUtils {
...
@@ -42,12 +42,14 @@ public class DateTimeUtils {
private
static
final
int
SHIFT_YEAR
=
9
;
private
static
final
int
SHIFT_YEAR
=
9
;
private
static
final
int
SHIFT_MONTH
=
5
;
private
static
final
int
SHIFT_MONTH
=
5
;
private
static
final
int
[]
NORMAL_DAYS_PER_MONTH
=
{
0
,
31
,
28
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
};
private
static
final
int
[]
NORMAL_DAYS_PER_MONTH
=
{
0
,
31
,
28
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
};
/**
/**
* Offsets of month within a year, starting with March, April,...
* Offsets of month within a year, starting with March, April,...
*/
*/
private
static
final
int
[]
DAYS_OFFSET
=
{
0
,
31
,
61
,
92
,
122
,
153
,
184
,
214
,
245
,
275
,
306
,
337
,
366
};
private
static
final
int
[]
DAYS_OFFSET
=
{
0
,
31
,
61
,
92
,
122
,
153
,
184
,
214
,
245
,
275
,
306
,
337
,
366
};
private
static
int
zoneOffset
;
private
static
int
zoneOffset
;
private
static
Calendar
cachedCalendar
;
private
static
Calendar
cachedCalendar
;
...
@@ -341,7 +343,8 @@ public class DateTimeUtils {
...
@@ -341,7 +343,8 @@ public class DateTimeUtils {
* @param millis the number of milliseconds
* @param millis the number of milliseconds
* @return the number of milliseconds (UTC)
* @return the number of milliseconds (UTC)
*/
*/
public
static
long
getMillis
(
TimeZone
tz
,
int
year
,
int
month
,
int
day
,
int
hour
,
int
minute
,
int
second
,
int
millis
)
{
public
static
long
getMillis
(
TimeZone
tz
,
int
year
,
int
month
,
int
day
,
int
hour
,
int
minute
,
int
second
,
int
millis
)
{
try
{
try
{
return
getTimeTry
(
false
,
tz
,
year
,
month
,
day
,
hour
,
minute
,
second
,
millis
);
return
getTimeTry
(
false
,
tz
,
year
,
month
,
day
,
hour
,
minute
,
second
,
millis
);
}
catch
(
IllegalArgumentException
e
)
{
}
catch
(
IllegalArgumentException
e
)
{
...
@@ -391,8 +394,8 @@ public class DateTimeUtils {
...
@@ -391,8 +394,8 @@ public class DateTimeUtils {
}
}
}
}
private
static
void
setCalendarFields
(
Calendar
cal
,
int
year
,
int
month
,
int
day
,
private
static
void
setCalendarFields
(
Calendar
cal
,
int
year
,
int
month
,
int
hour
,
int
minute
,
int
second
,
int
millis
)
{
int
day
,
int
hour
,
int
minute
,
int
second
,
int
millis
)
{
if
(
year
<=
0
)
{
if
(
year
<=
0
)
{
cal
.
set
(
Calendar
.
ERA
,
GregorianCalendar
.
BC
);
cal
.
set
(
Calendar
.
ERA
,
GregorianCalendar
.
BC
);
cal
.
set
(
Calendar
.
YEAR
,
1
-
year
);
cal
.
set
(
Calendar
.
YEAR
,
1
-
year
);
...
@@ -539,7 +542,8 @@ public class DateTimeUtils {
...
@@ -539,7 +542,8 @@ public class DateTimeUtils {
* @param timeZone the timezone
* @param timeZone the timezone
* @return the formatted date
* @return the formatted date
*/
*/
public
static
String
formatDateTime
(
java
.
util
.
Date
date
,
String
format
,
String
locale
,
String
timeZone
)
{
public
static
String
formatDateTime
(
java
.
util
.
Date
date
,
String
format
,
String
locale
,
String
timeZone
)
{
SimpleDateFormat
dateFormat
=
getDateFormat
(
format
,
locale
,
timeZone
);
SimpleDateFormat
dateFormat
=
getDateFormat
(
format
,
locale
,
timeZone
);
synchronized
(
dateFormat
)
{
synchronized
(
dateFormat
)
{
return
dateFormat
.
format
(
date
);
return
dateFormat
.
format
(
date
);
...
@@ -555,7 +559,8 @@ public class DateTimeUtils {
...
@@ -555,7 +559,8 @@ public class DateTimeUtils {
* @param timeZone the timeZone
* @param timeZone the timeZone
* @return the parsed date
* @return the parsed date
*/
*/
public
static
java
.
util
.
Date
parseDateTime
(
String
date
,
String
format
,
String
locale
,
String
timeZone
)
{
public
static
java
.
util
.
Date
parseDateTime
(
String
date
,
String
format
,
String
locale
,
String
timeZone
)
{
SimpleDateFormat
dateFormat
=
getDateFormat
(
format
,
locale
,
timeZone
);
SimpleDateFormat
dateFormat
=
getDateFormat
(
format
,
locale
,
timeZone
);
try
{
try
{
synchronized
(
dateFormat
)
{
synchronized
(
dateFormat
)
{
...
@@ -567,7 +572,8 @@ public class DateTimeUtils {
...
@@ -567,7 +572,8 @@ public class DateTimeUtils {
}
}
}
}
private
static
SimpleDateFormat
getDateFormat
(
String
format
,
String
locale
,
String
timeZone
)
{
private
static
SimpleDateFormat
getDateFormat
(
String
format
,
String
locale
,
String
timeZone
)
{
try
{
try
{
// currently, a new instance is create for each call
// currently, a new instance is create for each call
// however, could cache the last few instances
// however, could cache the last few instances
...
@@ -583,7 +589,8 @@ public class DateTimeUtils {
...
@@ -583,7 +589,8 @@ public class DateTimeUtils {
}
}
return
df
;
return
df
;
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
throw
DbException
.
get
(
ErrorCode
.
PARSE_ERROR_1
,
e
,
format
+
"/"
+
locale
+
"/"
+
timeZone
);
throw
DbException
.
get
(
ErrorCode
.
PARSE_ERROR_1
,
e
,
format
+
"/"
+
locale
+
"/"
+
timeZone
);
}
}
}
}
...
@@ -641,7 +648,8 @@ public class DateTimeUtils {
...
@@ -641,7 +648,8 @@ public class DateTimeUtils {
* @param nanos the nanoseconds since midnight
* @param nanos the nanoseconds since midnight
* @return the timestamp
* @return the timestamp
*/
*/
public
static
Timestamp
convertDateValueToTimestamp
(
long
dateValue
,
long
nanos
)
{
public
static
Timestamp
convertDateValueToTimestamp
(
long
dateValue
,
long
nanos
)
{
long
millis
=
nanos
/
1000000
;
long
millis
=
nanos
/
1000000
;
nanos
-=
millis
*
1000000
;
nanos
-=
millis
*
1000000
;
long
s
=
millis
/
1000
;
long
s
=
millis
/
1000
;
...
@@ -800,7 +808,8 @@ public class DateTimeUtils {
...
@@ -800,7 +808,8 @@ public class DateTimeUtils {
nanos
-=
d
*
NANOS_PER_DAY
;
nanos
-=
d
*
NANOS_PER_DAY
;
absoluteDay
+=
d
;
absoluteDay
+=
d
;
}
}
return
ValueTimestamp
.
fromDateValueAndNanos
(
dateValueFromAbsoluteDay
(
absoluteDay
),
nanos
);
return
ValueTimestamp
.
fromDateValueAndNanos
(
dateValueFromAbsoluteDay
(
absoluteDay
),
nanos
);
}
}
/**
/**
...
...
h2/src/main/org/h2/util/DbDriverActivator.java
浏览文件 @
b3836d31
...
@@ -27,10 +27,18 @@ public class DbDriverActivator implements BundleActivator {
...
@@ -27,10 +27,18 @@ public class DbDriverActivator implements BundleActivator {
public
void
start
(
BundleContext
bundleContext
)
{
public
void
start
(
BundleContext
bundleContext
)
{
org
.
h2
.
Driver
driver
=
org
.
h2
.
Driver
.
load
();
org
.
h2
.
Driver
driver
=
org
.
h2
.
Driver
.
load
();
Properties
properties
=
new
Properties
();
Properties
properties
=
new
Properties
();
properties
.
put
(
DataSourceFactory
.
OSGI_JDBC_DRIVER_CLASS
,
org
.
h2
.
Driver
.
class
.
getName
());
properties
.
put
(
properties
.
put
(
DataSourceFactory
.
OSGI_JDBC_DRIVER_NAME
,
"H2 JDBC Driver"
);
DataSourceFactory
.
OSGI_JDBC_DRIVER_CLASS
,
properties
.
put
(
DataSourceFactory
.
OSGI_JDBC_DRIVER_VERSION
,
Constants
.
getFullVersion
());
org
.
h2
.
Driver
.
class
.
getName
());
bundleContext
.
registerService
(
DataSourceFactory
.
class
.
getName
(),
new
OsgiDataSourceFactory
(
driver
),
properties
);
properties
.
put
(
DataSourceFactory
.
OSGI_JDBC_DRIVER_NAME
,
"H2 JDBC Driver"
);
properties
.
put
(
DataSourceFactory
.
OSGI_JDBC_DRIVER_VERSION
,
Constants
.
getFullVersion
());
bundleContext
.
registerService
(
DataSourceFactory
.
class
.
getName
(),
new
OsgiDataSourceFactory
(
driver
),
properties
);
}
}
/**
/**
...
...
h2/src/main/org/h2/util/OsgiDataSourceFactory.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/main/org/h2/util/SourceCompiler.java
浏览文件 @
b3836d31
...
@@ -52,7 +52,8 @@ public class SourceCompiler {
...
@@ -52,7 +52,8 @@ public class SourceCompiler {
private
static
final
Class
<?>
JAVAC_SUN
;
private
static
final
Class
<?>
JAVAC_SUN
;
private
static
final
String
COMPILE_DIR
=
Utils
.
getProperty
(
"java.io.tmpdir"
,
"."
);
private
static
final
String
COMPILE_DIR
=
Utils
.
getProperty
(
"java.io.tmpdir"
,
"."
);
/**
/**
* The class name to source code map.
* The class name to source code map.
...
...
h2/src/test/org/h2/test/coverage/Coverage.java
浏览文件 @
b3836d31
...
@@ -23,7 +23,8 @@ import org.h2.util.New;
...
@@ -23,7 +23,8 @@ import org.h2.util.New;
* runtime of the tested application.
* runtime of the tested application.
*/
*/
public
class
Coverage
{
public
class
Coverage
{
private
static
final
String
IMPORT
=
"import "
+
Coverage
.
class
.
getPackage
().
getName
()
+
".Profile"
;
private
static
final
String
IMPORT
=
"import "
+
Coverage
.
class
.
getPackage
().
getName
()
+
".Profile"
;
private
final
ArrayList
<
String
>
files
=
New
.
arrayList
();
private
final
ArrayList
<
String
>
files
=
New
.
arrayList
();
private
final
ArrayList
<
String
>
exclude
=
New
.
arrayList
();
private
final
ArrayList
<
String
>
exclude
=
New
.
arrayList
();
private
Tokenizer
tokenizer
;
private
Tokenizer
tokenizer
;
...
@@ -41,15 +42,22 @@ public class Coverage {
...
@@ -41,15 +42,22 @@ public class Coverage {
private
boolean
perFunction
=
true
;
private
boolean
perFunction
=
true
;
private
void
printUsage
()
{
private
void
printUsage
()
{
System
.
out
.
println
(
"Usage:\n"
+
"- copy all your source files to another directory\n"
System
.
out
+
" (be careful, they will be modified - don't take originals!)\n"
+
"- java "
+
getClass
().
getName
()
.
println
(
"Usage:\n"
+
+
" <directory>\n"
+
" this will modified the source code and create 'profile.txt'\n"
"- copy all your source files to another directory\n"
+
+
"- compile the modified source files\n"
+
"- run your main application\n"
" (be careful, they will be modified - don't take originals!)\n"
+
+
"- after the application exits, a file 'notCovered.txt' is created,\n"
"- java "
+
getClass
().
getName
()
+
" <directory>\n"
+
+
" which contains the class names, function names and line numbers\n"
" this will modified the source code and create 'profile.txt'\n"
+
+
" of code that has not been covered\n\n"
+
"Options:\n"
+
"-r recurse all subdirectories\n"
"- compile the modified source files\n"
+
+
"-e exclude files\n"
+
"-c coverage on a per-class basis\n"
"- run your main application\n"
+
+
"-f coverage on a per-function basis\n"
+
"<dir> directory name (. for current directory)"
);
"- after the application exits, a file 'notCovered.txt' is created,\n"
+
" which contains the class names, function names and line numbers\n"
+
" of code that has not been covered\n\n"
+
"Options:\n"
+
"-r recurse all subdirectories\n"
+
"-e exclude files\n"
+
"-c coverage on a per-class basis\n"
+
"-f coverage on a per-function basis\n"
+
"<dir> directory name (. for current directory)"
);
}
}
/**
/**
...
@@ -124,7 +132,8 @@ public class Coverage {
...
@@ -124,7 +132,8 @@ public class Coverage {
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
long
t2
=
System
.
currentTimeMillis
();
long
t2
=
System
.
currentTimeMillis
();
if
(
t2
-
time
>
1000
||
i
>=
len
-
1
)
{
if
(
t2
-
time
>
1000
||
i
>=
len
-
1
)
{
System
.
out
.
println
((
i
+
1
)
+
" of "
+
len
+
" "
+
(
100
*
i
/
len
)
+
"%"
);
System
.
out
.
println
((
i
+
1
)
+
" of "
+
len
+
" "
+
(
100
*
i
/
len
)
+
"%"
);
time
=
t2
;
time
=
t2
;
}
}
String
fileName
=
files
.
get
(
i
);
String
fileName
=
files
.
get
(
i
);
...
@@ -149,7 +158,9 @@ public class Coverage {
...
@@ -149,7 +158,9 @@ public class Coverage {
}
}
file
=
file
.
substring
(
0
,
i
)
+
"."
+
file
.
substring
(
i
+
1
);
file
=
file
.
substring
(
0
,
i
)
+
"."
+
file
.
substring
(
i
+
1
);
}
}
if
(
name
.
endsWith
(
"Coverage.java"
)
||
name
.
endsWith
(
"Tokenizer.java"
)
||
name
.
endsWith
(
"Profile.java"
))
{
if
(
name
.
endsWith
(
"Coverage.java"
)
||
name
.
endsWith
(
"Tokenizer.java"
)
||
name
.
endsWith
(
"Profile.java"
))
{
return
;
return
;
}
}
File
f
=
new
File
(
name
);
File
f
=
new
File
(
name
);
...
@@ -359,7 +370,8 @@ public class Coverage {
...
@@ -359,7 +370,8 @@ public class Coverage {
private
void
processStatement
()
throws
IOException
{
private
void
processStatement
()
throws
IOException
{
while
(
true
)
{
while
(
true
)
{
if
(
token
.
equals
(
"while"
)
||
token
.
equals
(
"for"
)
||
token
.
equals
(
"synchronized"
))
{
if
(
token
.
equals
(
"while"
)
||
token
.
equals
(
"for"
)
||
token
.
equals
(
"synchronized"
))
{
read
();
read
();
readThis
(
"("
);
readThis
(
"("
);
processBracket
();
processBracket
();
...
...
h2/src/test/org/h2/test/coverage/Profile.java
浏览文件 @
b3836d31
...
@@ -155,8 +155,9 @@ public class Profile extends Thread {
...
@@ -155,8 +155,9 @@ public class Profile extends Thread {
}
}
}
}
int
percent
=
100
*
unvisited
/
maxIndex
;
int
percent
=
100
*
unvisited
/
maxIndex
;
print
(
"Not covered: "
+
percent
+
" % "
+
" ("
+
unvisited
+
" of "
+
maxIndex
+
"; throw="
print
(
"Not covered: "
+
percent
+
" % "
+
" ("
+
+
unvisitedThrow
+
")"
);
unvisited
+
" of "
+
maxIndex
+
"; throw="
+
unvisitedThrow
+
")"
);
}
finally
{
}
finally
{
IOUtils
.
closeSilently
(
writer
);
IOUtils
.
closeSilently
(
writer
);
IOUtils
.
closeSilently
(
r
);
IOUtils
.
closeSilently
(
r
);
...
...
h2/src/test/org/h2/test/db/Db.java
浏览文件 @
b3836d31
...
@@ -31,7 +31,8 @@ public class Db {
...
@@ -31,7 +31,8 @@ public class Db {
private
Connection
conn
;
private
Connection
conn
;
private
Statement
stat
;
private
Statement
stat
;
private
final
HashMap
<
String
,
PreparedStatement
>
prepared
=
new
HashMap
<
String
,
PreparedStatement
>();
private
final
HashMap
<
String
,
PreparedStatement
>
prepared
=
new
HashMap
<
String
,
PreparedStatement
>();
/**
/**
* Create a database object using the given connection.
* Create a database object using the given connection.
...
...
h2/src/test/org/h2/test/db/TaskProcess.java
浏览文件 @
b3836d31
...
@@ -67,7 +67,9 @@ public class TaskProcess {
...
@@ -67,7 +67,9 @@ public class TaskProcess {
writer
=
new
BufferedWriter
(
new
OutputStreamWriter
(
process
.
getOutputStream
()));
writer
=
new
BufferedWriter
(
new
OutputStreamWriter
(
process
.
getOutputStream
()));
String
line
=
reader
.
readLine
();
String
line
=
reader
.
readLine
();
if
(
line
==
null
)
{
if
(
line
==
null
)
{
throw
new
RuntimeException
(
"No reply from process, command: "
+
StringUtils
.
arrayCombine
(
procDef
,
' '
));
throw
new
RuntimeException
(
"No reply from process, command: "
+
StringUtils
.
arrayCombine
(
procDef
,
' '
));
}
else
if
(
line
.
startsWith
(
"running"
))
{
}
else
if
(
line
.
startsWith
(
"running"
))
{
traceOperation
(
"got reply: "
+
line
);
traceOperation
(
"got reply: "
+
line
);
}
else
if
(
line
.
startsWith
(
"init error"
))
{
}
else
if
(
line
.
startsWith
(
"init error"
))
{
...
...
h2/src/test/org/h2/test/db/TestBackup.java
浏览文件 @
b3836d31
...
@@ -78,7 +78,8 @@ public class TestBackup extends TestBase {
...
@@ -78,7 +78,8 @@ public class TestBackup extends TestBase {
}
}
};
};
Connection
conn2
;
Connection
conn2
;
conn2
=
getConnection
(
url
+
";database_event_listener='"
+
BackupListener
.
class
.
getName
()
+
"'"
);
conn2
=
getConnection
(
url
+
";database_event_listener='"
+
BackupListener
.
class
.
getName
()
+
"'"
);
Statement
stat2
=
conn2
.
createStatement
();
Statement
stat2
=
conn2
.
createStatement
();
task
.
execute
();
task
.
execute
();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
...
@@ -90,7 +91,8 @@ public class TestBackup extends TestBase {
...
@@ -90,7 +91,8 @@ public class TestBackup extends TestBase {
conn3
=
getConnection
(
"t2/backup"
);
conn3
=
getConnection
(
"t2/backup"
);
Statement
stat3
=
conn3
.
createStatement
();
Statement
stat3
=
conn3
.
createStatement
();
stat3
.
execute
(
"script"
);
stat3
.
execute
(
"script"
);
ResultSet
rs
=
stat3
.
executeQuery
(
"select * from test where name='Hallo'"
);
ResultSet
rs
=
stat3
.
executeQuery
(
"select * from test where name='Hallo'"
);
while
(
rs
.
next
())
{
while
(
rs
.
next
())
{
fail
();
fail
();
}
}
...
@@ -145,21 +147,27 @@ public class TestBackup extends TestBase {
...
@@ -145,21 +147,27 @@ public class TestBackup extends TestBase {
private
void
testBackupRestoreLob
()
throws
SQLException
{
private
void
testBackupRestoreLob
()
throws
SQLException
{
deleteDb
(
"backup"
);
deleteDb
(
"backup"
);
Connection
conn
=
getConnection
(
"backup"
);
Connection
conn
=
getConnection
(
"backup"
);
conn
.
createStatement
().
execute
(
"create table test(x clob) as select space(10000)"
);
conn
.
createStatement
().
execute
(
"create table test(x clob) as select space(10000)"
);
conn
.
close
();
conn
.
close
();
Backup
.
execute
(
getBaseDir
()
+
"/backup.zip"
,
getBaseDir
(),
"backup"
,
true
);
Backup
.
execute
(
getBaseDir
()
+
"/backup.zip"
,
getBaseDir
(),
"backup"
,
true
);
deleteDb
(
"backup"
);
deleteDb
(
"backup"
);
Restore
.
execute
(
getBaseDir
()
+
"/backup.zip"
,
getBaseDir
(),
"backup"
);
Restore
.
execute
(
getBaseDir
()
+
"/backup.zip"
,
getBaseDir
(),
"backup"
);
}
}
private
void
testBackupRestoreLobStatement
()
throws
SQLException
{
private
void
testBackupRestoreLobStatement
()
throws
SQLException
{
deleteDb
(
"backup"
);
deleteDb
(
"backup"
);
Connection
conn
=
getConnection
(
"backup"
);
Connection
conn
=
getConnection
(
"backup"
);
conn
.
createStatement
().
execute
(
"create table test(x clob) as select space(10000)"
);
conn
.
createStatement
().
execute
(
conn
.
createStatement
().
execute
(
"backup to '"
+
getBaseDir
()
+
"/backup.zip"
+
"'"
);
"create table test(x clob) as select space(10000)"
);
conn
.
createStatement
().
execute
(
"backup to '"
+
getBaseDir
()
+
"/backup.zip"
+
"'"
);
conn
.
close
();
conn
.
close
();
deleteDb
(
"backup"
);
deleteDb
(
"backup"
);
Restore
.
execute
(
getBaseDir
()
+
"/backup.zip"
,
getBaseDir
(),
"backup"
);
Restore
.
execute
(
getBaseDir
()
+
"/backup.zip"
,
getBaseDir
(),
"backup"
);
}
}
private
void
testBackup
()
throws
SQLException
{
private
void
testBackup
()
throws
SQLException
{
...
@@ -169,10 +177,14 @@ public class TestBackup extends TestBase {
...
@@ -169,10 +177,14 @@ public class TestBackup extends TestBase {
Statement
stat1
,
stat2
,
stat3
;
Statement
stat1
,
stat2
,
stat3
;
conn1
=
getConnection
(
"backup"
);
conn1
=
getConnection
(
"backup"
);
stat1
=
conn1
.
createStatement
();
stat1
=
conn1
.
createStatement
();
stat1
.
execute
(
"create table test(id int primary key, name varchar(255))"
);
stat1
.
execute
(
"create table test"
+
stat1
.
execute
(
"insert into test values(1, 'first'), (2, 'second')"
);
"(id int primary key, name varchar(255))"
);
stat1
.
execute
(
"create table testlob(id int primary key, b blob, c clob)"
);
stat1
.
execute
(
"insert into test values"
+
stat1
.
execute
(
"insert into testlob values(1, space(10000), repeat('00', 10000))"
);
"(1, 'first'), (2, 'second')"
);
stat1
.
execute
(
"create table testlob"
+
"(id int primary key, b blob, c clob)"
);
stat1
.
execute
(
"insert into testlob values"
+
"(1, space(10000), repeat('00', 10000))"
);
conn2
=
getConnection
(
"backup"
);
conn2
=
getConnection
(
"backup"
);
stat2
=
conn2
.
createStatement
();
stat2
=
conn2
.
createStatement
();
stat2
.
execute
(
"insert into test values(3, 'third')"
);
stat2
.
execute
(
"insert into test values(3, 'third')"
);
...
...
h2/src/test/org/h2/test/db/TestBigDb.java
浏览文件 @
b3836d31
...
@@ -47,30 +47,46 @@ public class TestBigDb extends TestBase {
...
@@ -47,30 +47,46 @@ public class TestBigDb extends TestBase {
deleteDb
(
"bigDb"
);
deleteDb
(
"bigDb"
);
Connection
conn
=
getConnection
(
"bigDb"
);
Connection
conn
=
getConnection
(
"bigDb"
);
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"CREATE CACHED TABLE TEST("
+
"M_CODE CHAR(1) DEFAULT CAST(RAND()*9 AS INT),"
stat
.
execute
(
"CREATE CACHED TABLE TEST("
+
"PRD_CODE CHAR(20) DEFAULT SECURE_RAND(10),"
+
"ORG_CODE_SUPPLIER CHAR(13) DEFAULT SECURE_RAND(6),"
+
"M_CODE CHAR(1) DEFAULT CAST(RAND()*9 AS INT),"
+
"PRD_CODE_1 CHAR(14) DEFAULT SECURE_RAND(7),"
+
"PRD_CODE_2 CHAR(20) DEFAULT SECURE_RAND(10),"
+
"PRD_CODE CHAR(20) DEFAULT SECURE_RAND(10),"
+
"ORG_CODE CHAR(13) DEFAULT SECURE_RAND(6),"
+
"SUBSTITUTED_BY CHAR(20) DEFAULT SECURE_RAND(10),"
+
"ORG_CODE_SUPPLIER CHAR(13) DEFAULT SECURE_RAND(6),"
+
"PRD_CODE_1 CHAR(14) DEFAULT SECURE_RAND(7),"
+
"PRD_CODE_2 CHAR(20) DEFAULT SECURE_RAND(10),"
+
"ORG_CODE CHAR(13) DEFAULT SECURE_RAND(6),"
+
"SUBSTITUTED_BY CHAR(20) DEFAULT SECURE_RAND(10),"
+
"SUBSTITUTED_BY_2 CHAR(14) DEFAULT SECURE_RAND(7),"
+
"SUBSTITUTED_BY_2 CHAR(14) DEFAULT SECURE_RAND(7),"
+
"SUBSTITUTION_FOR CHAR(20) DEFAULT SECURE_RAND(10),"
+
"SUBSTITUTION_FOR CHAR(20) DEFAULT SECURE_RAND(10),"
+
"SUBSTITUTION_FOR_2 CHAR(14) DEFAULT SECURE_RAND(7),"
+
"TEST CHAR(2) DEFAULT SECURE_RAND(1),"
+
"SUBSTITUTION_FOR_2 CHAR(14) DEFAULT SECURE_RAND(7),"
+
"TEST_2 CHAR(2) DEFAULT SECURE_RAND(1),"
+
"TEST_3 DECIMAL(7,2) DEFAULT RAND(),"
+
"TEST CHAR(2) DEFAULT SECURE_RAND(1),"
+
"TEST_2 CHAR(2) DEFAULT SECURE_RAND(1),"
+
"TEST_3 DECIMAL(7,2) DEFAULT RAND(),"
+
"PRIMARY_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"PRIMARY_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"RATE_PRICE_ORDER_UNIT DECIMAL(9,3) DEFAULT RAND(),"
+
"RATE_PRICE_ORDER_UNIT DECIMAL(9,3) DEFAULT RAND(),"
+
"ORDER_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"ORDER_QTY_MIN DECIMAL(6,1) DEFAULT RAND(),"
+
"ORDER_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"ORDER_QTY_MIN DECIMAL(6,1) DEFAULT RAND(),"
+
"ORDER_QTY_LOT_SIZE DECIMAL(6,1) DEFAULT RAND(),"
+
"ORDER_QTY_LOT_SIZE DECIMAL(6,1) DEFAULT RAND(),"
+
"ORDER_UNIT_CODE_2 CHAR(3) DEFAULT SECURE_RAND(1),"
+
"PRICE_GROUP CHAR(20) DEFAULT SECURE_RAND(10),"
+
"ORDER_UNIT_CODE_2 CHAR(3) DEFAULT SECURE_RAND(1),"
+
"LEAD_TIME INTEGER DEFAULT RAND(),"
+
"LEAD_TIME_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"PRICE_GROUP CHAR(20) DEFAULT SECURE_RAND(10),"
+
"PRD_GROUP CHAR(10) DEFAULT SECURE_RAND(5),"
+
"WEIGHT_GROSS DECIMAL(7,3) DEFAULT RAND(),"
+
"LEAD_TIME INTEGER DEFAULT RAND(),"
+
"WEIGHT_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"PACK_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"LEAD_TIME_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"PACK_LENGTH DECIMAL(7,3) DEFAULT RAND(),"
+
"PACK_WIDTH DECIMAL(7,3) DEFAULT RAND(),"
+
"PRD_GROUP CHAR(10) DEFAULT SECURE_RAND(5),"
+
"PACK_HEIGHT DECIMAL(7,3) DEFAULT RAND(),"
+
"SIZE_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"WEIGHT_GROSS DECIMAL(7,3) DEFAULT RAND(),"
+
"STATUS_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"INTRA_STAT_CODE CHAR(12) DEFAULT SECURE_RAND(6),"
+
"WEIGHT_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"PRD_TITLE CHAR(50) DEFAULT SECURE_RAND(25),"
+
"VALID_FROM DATE DEFAULT NOW(),"
+
"PACK_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"PACK_LENGTH DECIMAL(7,3) DEFAULT RAND(),"
+
"PACK_WIDTH DECIMAL(7,3) DEFAULT RAND(),"
+
"PACK_HEIGHT DECIMAL(7,3) DEFAULT RAND(),"
+
"SIZE_UNIT_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"STATUS_CODE CHAR(3) DEFAULT SECURE_RAND(1),"
+
"INTRA_STAT_CODE CHAR(12) DEFAULT SECURE_RAND(6),"
+
"PRD_TITLE CHAR(50) DEFAULT SECURE_RAND(25),"
+
"VALID_FROM DATE DEFAULT NOW(),"
+
"MOD_DATUM DATE DEFAULT NOW())"
);
+
"MOD_DATUM DATE DEFAULT NOW())"
);
int
len
=
getSize
(
10
,
50000
);
int
len
=
getSize
(
10
,
50000
);
try
{
try
{
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST(PRD_CODE) VALUES('abc' || ?)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST(PRD_CODE) VALUES('abc' || ?)"
);
long
time
=
System
.
currentTimeMillis
();
long
time
=
System
.
currentTimeMillis
();
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
if
((
i
%
1000
)
==
0
)
{
if
((
i
%
1000
)
==
0
)
{
...
@@ -104,9 +120,11 @@ public class TestBigDb extends TestBase {
...
@@ -104,9 +120,11 @@ public class TestBigDb extends TestBase {
deleteDb
(
"bigDb"
);
deleteDb
(
"bigDb"
);
Connection
conn
=
getConnection
(
"bigDb"
);
Connection
conn
=
getConnection
(
"bigDb"
);
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"CREATE TABLE TEST(ID INT, NEG INT AS -ID, NAME VARCHAR, PRIMARY KEY(ID, NAME))"
);
stat
.
execute
(
"CREATE TABLE TEST(ID INT, NEG INT AS -ID, "
+
"NAME VARCHAR, PRIMARY KEY(ID, NAME))"
);
stat
.
execute
(
"CREATE INDEX IDX_NEG ON TEST(NEG, NAME)"
);
stat
.
execute
(
"CREATE INDEX IDX_NEG ON TEST(NEG, NAME)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST(ID, NAME) VALUES(?, '1234567890')"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST(ID, NAME) VALUES(?, '1234567890')"
);
int
len
=
getSize
(
10
,
1000
);
int
len
=
getSize
(
10
,
1000
);
int
block
=
getSize
(
3
,
10
);
int
block
=
getSize
(
3
,
10
);
int
left
,
x
=
0
;
int
left
,
x
=
0
;
...
@@ -130,7 +148,8 @@ public class TestBigDb extends TestBase {
...
@@ -130,7 +148,8 @@ public class TestBigDb extends TestBase {
Connection
conn
=
getConnection
(
"bigDb"
);
Connection
conn
=
getConnection
(
"bigDb"
);
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"CREATE TABLE TEST(ID IDENTITY, NAME VARCHAR)"
);
stat
.
execute
(
"CREATE TABLE TEST(ID IDENTITY, NAME VARCHAR)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST(NAME) VALUES('Hello World')"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST(NAME) VALUES('Hello World')"
);
int
len
=
getSize
(
1000
,
10000
);
int
len
=
getSize
(
1000
,
10000
);
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
if
(
i
%
1000
==
0
)
{
if
(
i
%
1000
==
0
)
{
...
...
h2/src/test/org/h2/test/db/TestBigResult.java
浏览文件 @
b3836d31
...
@@ -53,7 +53,8 @@ public class TestBigResult extends TestBase {
...
@@ -53,7 +53,8 @@ public class TestBigResult extends TestBase {
stat
.
execute
(
"INSERT INTO RECOVERY "
+
stat
.
execute
(
"INSERT INTO RECOVERY "
+
"SELECT X, CASE MOD(X, 2) WHEN 0 THEN 'commit' ELSE 'begin' END "
+
"SELECT X, CASE MOD(X, 2) WHEN 0 THEN 'commit' ELSE 'begin' END "
+
"FROM SYSTEM_RANGE(1, "
+
len
+
")"
);
"FROM SYSTEM_RANGE(1, "
+
len
+
")"
);
ResultSet
rs
=
stat
.
executeQuery
(
"SELECT * FROM RECOVERY WHERE SQL_STMT LIKE 'begin%' AND "
+
ResultSet
rs
=
stat
.
executeQuery
(
"SELECT * FROM RECOVERY "
+
"WHERE SQL_STMT LIKE 'begin%' AND "
+
"TRANSACTION_ID NOT IN(SELECT TRANSACTION_ID FROM RECOVERY "
+
"TRANSACTION_ID NOT IN(SELECT TRANSACTION_ID FROM RECOVERY "
+
"WHERE SQL_STMT='commit' OR SQL_STMT='rollback')"
);
"WHERE SQL_STMT='commit' OR SQL_STMT='rollback')"
);
int
count
=
0
,
last
=
1
;
int
count
=
0
,
last
=
1
;
...
@@ -90,7 +91,8 @@ public class TestBigResult extends TestBase {
...
@@ -90,7 +91,8 @@ public class TestBigResult extends TestBase {
// rs.close();
// rs.close();
conn
.
close
();
conn
.
close
();
deleteDb
(
"bigResult"
);
deleteDb
(
"bigResult"
);
ArrayList
<
String
>
files
=
FileLister
.
getDatabaseFiles
(
getBaseDir
(),
"bigResult"
,
true
);
ArrayList
<
String
>
files
=
FileLister
.
getDatabaseFiles
(
getBaseDir
(),
"bigResult"
,
true
);
if
(
files
.
size
()
>
0
)
{
if
(
files
.
size
()
>
0
)
{
fail
(
"file not deleted: "
+
files
.
get
(
0
));
fail
(
"file not deleted: "
+
files
.
get
(
0
));
}
}
...
@@ -134,7 +136,8 @@ public class TestBigResult extends TestBase {
...
@@ -134,7 +136,8 @@ public class TestBigResult extends TestBase {
"Points INT,"
+
"Points INT,"
+
"LicenseID INT)"
);
"LicenseID INT)"
);
int
len
=
getSize
(
10
,
5000
);
int
len
=
getSize
(
10
,
5000
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST VALUES(?, ?, ?, ?, ?)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO TEST VALUES(?, ?, ?, ?, ?)"
);
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
prep
.
setInt
(
1
,
i
);
prep
.
setInt
(
1
,
i
);
prep
.
setString
(
2
,
"Name "
+
i
);
prep
.
setString
(
2
,
"Name "
+
i
);
...
@@ -185,7 +188,8 @@ public class TestBigResult extends TestBase {
...
@@ -185,7 +188,8 @@ public class TestBigResult extends TestBase {
prep
.
setString
(
2
,
""
+
i
/
200
);
prep
.
setString
(
2
,
""
+
i
/
200
);
prep
.
execute
();
prep
.
execute
();
}
}
Statement
s2
=
conn
.
createStatement
(
ResultSet
.
TYPE_SCROLL_INSENSITIVE
,
ResultSet
.
CONCUR_UPDATABLE
);
Statement
s2
=
conn
.
createStatement
(
ResultSet
.
TYPE_SCROLL_INSENSITIVE
,
ResultSet
.
CONCUR_UPDATABLE
);
rs
=
s2
.
executeQuery
(
"SELECT NAME FROM DATA"
);
rs
=
s2
.
executeQuery
(
"SELECT NAME FROM DATA"
);
rs
.
last
();
rs
.
last
();
conn
.
setAutoCommit
(
true
);
conn
.
setAutoCommit
(
true
);
...
...
h2/src/test/org/h2/test/db/TestCases.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/test/org/h2/test/db/TestCluster.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/test/org/h2/test/db/TestCompatibility.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/test/org/h2/test/db/TestCompatibilityOracle.java
浏览文件 @
b3836d31
...
@@ -49,8 +49,10 @@ public class TestCompatibilityOracle extends TestBase {
...
@@ -49,8 +49,10 @@ public class TestCompatibilityOracle extends TestBase {
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM A WHERE X IS NULL"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM A WHERE X IS NULL"
);
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM A WHERE TRIM(X) IS NULL"
);
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM A WHERE TRIM(X) IS NULL"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM A WHERE X = ''"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM A WHERE X = ''"
);
assertResult
(
new
Object
[][]
{
{
1
,
"a"
},
{
2
,
null
},
{
3
,
" "
}
},
stat
,
"SELECT * FROM A"
);
assertResult
(
new
Object
[][]
{
{
1
,
"a"
},
{
2
,
null
},
{
3
,
" "
}
},
assertResult
(
new
Object
[][]
{
{
1
,
"a"
},
{
2
,
null
},
{
3
,
null
}
},
stat
,
"SELECT ID, TRIM(X) FROM A"
);
stat
,
"SELECT * FROM A"
);
assertResult
(
new
Object
[][]
{
{
1
,
"a"
},
{
2
,
null
},
{
3
,
null
}
},
stat
,
"SELECT ID, TRIM(X) FROM A"
);
stat
.
execute
(
"CREATE TABLE B (ID NUMBER, X NUMBER)"
);
stat
.
execute
(
"CREATE TABLE B (ID NUMBER, X NUMBER)"
);
stat
.
execute
(
"INSERT INTO B VALUES (1, '5')"
);
stat
.
execute
(
"INSERT INTO B VALUES (1, '5')"
);
...
@@ -58,7 +60,8 @@ public class TestCompatibilityOracle extends TestBase {
...
@@ -58,7 +60,8 @@ public class TestCompatibilityOracle extends TestBase {
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM B"
);
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM B"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM B WHERE X IS NULL"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM B WHERE X IS NULL"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM B WHERE X = ''"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM B WHERE X = ''"
);
assertResult
(
new
Object
[][]
{
{
1
,
5
},
{
2
,
null
}
},
stat
,
"SELECT * FROM B"
);
assertResult
(
new
Object
[][]
{
{
1
,
5
},
{
2
,
null
}
},
stat
,
"SELECT * FROM B"
);
stat
.
execute
(
"CREATE TABLE C (ID NUMBER, X TIMESTAMP)"
);
stat
.
execute
(
"CREATE TABLE C (ID NUMBER, X TIMESTAMP)"
);
stat
.
execute
(
"INSERT INTO C VALUES (1, '1979-11-12')"
);
stat
.
execute
(
"INSERT INTO C VALUES (1, '1979-11-12')"
);
...
@@ -66,7 +69,8 @@ public class TestCompatibilityOracle extends TestBase {
...
@@ -66,7 +69,8 @@ public class TestCompatibilityOracle extends TestBase {
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM C"
);
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM C"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM C WHERE X IS NULL"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM C WHERE X IS NULL"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM C WHERE X = ''"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM C WHERE X = ''"
);
assertResult
(
new
Object
[][]
{
{
1
,
"1979-11-12 00:00:00.0"
},
{
2
,
null
}
},
stat
,
"SELECT * FROM C"
);
assertResult
(
new
Object
[][]
{
{
1
,
"1979-11-12 00:00:00.0"
},
{
2
,
null
}
},
stat
,
"SELECT * FROM C"
);
stat
.
execute
(
"CREATE TABLE D (ID NUMBER, X VARCHAR2(1))"
);
stat
.
execute
(
"CREATE TABLE D (ID NUMBER, X VARCHAR2(1))"
);
stat
.
execute
(
"INSERT INTO D VALUES (1, 'a')"
);
stat
.
execute
(
"INSERT INTO D VALUES (1, 'a')"
);
...
@@ -75,7 +79,8 @@ public class TestCompatibilityOracle extends TestBase {
...
@@ -75,7 +79,8 @@ public class TestCompatibilityOracle extends TestBase {
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM D"
);
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM D"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM D WHERE X IS NULL"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM D WHERE X IS NULL"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM D WHERE X = ''"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM D WHERE X = ''"
);
assertResult
(
new
Object
[][]
{
{
1
,
"a"
},
{
2
,
null
}
},
stat
,
"SELECT * FROM D"
);
assertResult
(
new
Object
[][]
{
{
1
,
"a"
},
{
2
,
null
}
},
stat
,
"SELECT * FROM D"
);
stat
.
execute
(
"CREATE TABLE E (ID NUMBER, X RAW(1))"
);
stat
.
execute
(
"CREATE TABLE E (ID NUMBER, X RAW(1))"
);
stat
.
execute
(
"INSERT INTO E VALUES (1, '0A')"
);
stat
.
execute
(
"INSERT INTO E VALUES (1, '0A')"
);
...
@@ -83,7 +88,8 @@ public class TestCompatibilityOracle extends TestBase {
...
@@ -83,7 +88,8 @@ public class TestCompatibilityOracle extends TestBase {
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM E"
);
assertResult
(
"2"
,
stat
,
"SELECT COUNT(*) FROM E"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM E WHERE X IS NULL"
);
assertResult
(
"1"
,
stat
,
"SELECT COUNT(*) FROM E WHERE X IS NULL"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM E WHERE X = ''"
);
assertResult
(
"0"
,
stat
,
"SELECT COUNT(*) FROM E WHERE X = ''"
);
assertResult
(
new
Object
[][]
{
{
1
,
new
byte
[]
{
10
}
},
{
2
,
null
}
},
stat
,
"SELECT * FROM E"
);
assertResult
(
new
Object
[][]
{
{
1
,
new
byte
[]
{
10
}
},
{
2
,
null
}
},
stat
,
"SELECT * FROM E"
);
conn
.
close
();
conn
.
close
();
}
}
...
@@ -98,16 +104,19 @@ public class TestCompatibilityOracle extends TestBase {
...
@@ -98,16 +104,19 @@ public class TestCompatibilityOracle extends TestBase {
stat
.
execute
(
"INSERT INTO A VALUES (2, 4.3)"
);
stat
.
execute
(
"INSERT INTO A VALUES (2, 4.3)"
);
stat
.
execute
(
"INSERT INTO A VALUES (3, '6.78')"
);
stat
.
execute
(
"INSERT INTO A VALUES (3, '6.78')"
);
assertResult
(
"3"
,
stat
,
"SELECT COUNT(*) FROM A"
);
assertResult
(
"3"
,
stat
,
"SELECT COUNT(*) FROM A"
);
assertResult
(
new
Object
[][]
{
{
1
,
2
},
{
2
,
4.3
},
{
3
,
6.78
}
},
stat
,
"SELECT * FROM A"
);
assertResult
(
new
Object
[][]
{
{
1
,
2
},
{
2
,
4.3
},
{
3
,
6.78
}
},
stat
,
"SELECT * FROM A"
);
conn
.
close
();
conn
.
close
();
}
}
private
void
assertResult
(
Object
[][]
expectedRowsOfValues
,
Statement
stat
,
String
sql
)
throws
SQLException
{
private
void
assertResult
(
Object
[][]
expectedRowsOfValues
,
Statement
stat
,
String
sql
)
throws
SQLException
{
assertResult
(
newSimpleResultSet
(
expectedRowsOfValues
),
stat
,
sql
);
assertResult
(
newSimpleResultSet
(
expectedRowsOfValues
),
stat
,
sql
);
}
}
private
void
assertResult
(
ResultSet
expected
,
Statement
stat
,
String
sql
)
throws
SQLException
{
private
void
assertResult
(
ResultSet
expected
,
Statement
stat
,
String
sql
)
throws
SQLException
{
ResultSet
actual
=
stat
.
executeQuery
(
sql
);
ResultSet
actual
=
stat
.
executeQuery
(
sql
);
int
expectedColumnCount
=
expected
.
getMetaData
().
getColumnCount
();
int
expectedColumnCount
=
expected
.
getMetaData
().
getColumnCount
();
assertEquals
(
expectedColumnCount
,
actual
.
getMetaData
().
getColumnCount
());
assertEquals
(
expectedColumnCount
,
actual
.
getMetaData
().
getColumnCount
());
...
...
h2/src/test/org/h2/test/db/TestCsv.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/test/org/h2/test/db/TestDateStorage.java
浏览文件 @
b3836d31
...
@@ -64,7 +64,8 @@ public class TestDateStorage extends TestBase {
...
@@ -64,7 +64,8 @@ public class TestDateStorage extends TestBase {
TimeZone
.
setDefault
(
tz
);
TimeZone
.
setDefault
(
tz
);
DateTimeUtils
.
resetCalendar
();
DateTimeUtils
.
resetCalendar
();
conn
=
getConnection
(
db
);
conn
=
getConnection
(
db
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"insert into date_list values(?, ?, ?)"
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"insert into date_list values(?, ?, ?)"
);
prep
.
setString
(
1
,
tz
.
getID
());
prep
.
setString
(
1
,
tz
.
getID
());
for
(
int
m
=
1
;
m
<
10
;
m
++)
{
for
(
int
m
=
1
;
m
<
10
;
m
++)
{
String
s
=
"2000-0"
+
m
+
"-01 15:00:00"
;
String
s
=
"2000-0"
+
m
+
"-01 15:00:00"
;
...
...
h2/src/test/org/h2/test/db/TestDeadlock.java
浏览文件 @
b3836d31
...
@@ -66,7 +66,8 @@ public class TestDeadlock extends TestBase {
...
@@ -66,7 +66,8 @@ public class TestDeadlock extends TestBase {
conn2
=
getConnection
(
url
);
conn2
=
getConnection
(
url
);
final
Statement
stat
=
conn
.
createStatement
();
final
Statement
stat
=
conn
.
createStatement
();
Statement
stat2
=
conn2
.
createStatement
();
Statement
stat2
=
conn2
.
createStatement
();
stat
.
execute
(
"create alias if not exists ft_init for \"org.h2.fulltext.FullText.init\""
);
stat
.
execute
(
"create alias if not exists ft_init for "
+
"\"org.h2.fulltext.FullText.init\""
);
stat
.
execute
(
"call ft_init()"
);
stat
.
execute
(
"call ft_init()"
);
stat
.
execute
(
"create table test(id int primary key, name varchar)"
);
stat
.
execute
(
"create table test(id int primary key, name varchar)"
);
stat
.
execute
(
"call ft_create_index('PUBLIC', 'TEST', null)"
);
stat
.
execute
(
"call ft_create_index('PUBLIC', 'TEST', null)"
);
...
...
h2/src/test/org/h2/test/db/TestDrop.java
浏览文件 @
b3836d31
...
@@ -57,7 +57,8 @@ public class TestDrop extends TestBase {
...
@@ -57,7 +57,8 @@ public class TestDrop extends TestBase {
stat
.
execute
(
"DROP ALL OBJECTS"
);
stat
.
execute
(
"DROP ALL OBJECTS"
);
stat
.
execute
(
"CREATE SCHEMA TEST_SCHEMA"
);
stat
.
execute
(
"CREATE SCHEMA TEST_SCHEMA"
);
stat
.
execute
(
"CREATE TABLE TEST_SCHEMA.A (A INT);"
);
stat
.
execute
(
"CREATE TABLE TEST_SCHEMA.A (A INT);"
);
stat
.
execute
(
"CREATE TABLE TEST_SCHEMA.B (B INT AS SELECT A FROM TEST_SCHEMA.A);"
);
stat
.
execute
(
"CREATE TABLE TEST_SCHEMA.B "
+
"(B INT AS SELECT A FROM TEST_SCHEMA.A);"
);
stat
.
execute
(
"DROP SCHEMA TEST_SCHEMA"
);
stat
.
execute
(
"DROP SCHEMA TEST_SCHEMA"
);
}
}
...
...
h2/src/test/org/h2/test/db/TestDuplicateKeyUpdate.java
浏览文件 @
b3836d31
...
@@ -80,29 +80,40 @@ public class TestDuplicateKeyUpdate extends TestBase {
...
@@ -80,29 +80,40 @@ public class TestDuplicateKeyUpdate extends TestBase {
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
ResultSet
rs
;
ResultSet
rs
;
stat
.
execute
(
"CREATE TABLE table_test2 (\n"
+
" id bigint(20) NOT NULL AUTO_INCREMENT,\n"
stat
.
execute
(
"CREATE TABLE table_test2 (\n"
+
" a_text varchar(254) NOT NULL,\n"
+
" some_text varchar(254) NOT NULL,\n"
+
" id bigint(20) NOT NULL AUTO_INCREMENT,\n"
+
" updatable_text varchar(254) NULL,\n"
+
" PRIMARY KEY (id)\n"
+
") ;"
);
+
" a_text varchar(254) NOT NULL,\n"
+
" some_text varchar(254) NOT NULL,\n"
stat
.
execute
(
"CREATE UNIQUE INDEX index_name \n"
+
"ON table_test2 (a_text, some_text);"
);
+
" updatable_text varchar(254) NULL,\n"
+
" PRIMARY KEY (id)\n"
+
") ;"
);
stat
.
execute
(
"INSERT INTO table_test2 ( a_text, some_text, updatable_text ) VALUES ('a', 'a', '1')"
);
stat
.
execute
(
"INSERT INTO table_test2 ( a_text, some_text, updatable_text ) VALUES ('b', 'b', '2')"
);
stat
.
execute
(
"CREATE UNIQUE INDEX index_name \n"
stat
.
execute
(
"INSERT INTO table_test2 ( a_text, some_text, updatable_text ) VALUES ('c', 'c', '3')"
);
+
"ON table_test2 (a_text, some_text);"
);
stat
.
execute
(
"INSERT INTO table_test2 ( a_text, some_text, updatable_text ) VALUES ('d', 'd', '4')"
);
stat
.
execute
(
"INSERT INTO table_test2 ( a_text, some_text, updatable_text ) VALUES ('e', 'e', '5')"
);
stat
.
execute
(
"INSERT INTO table_test2 "
+
"( a_text, some_text, updatable_text ) VALUES ('a', 'a', '1')"
);
stat
.
execute
(
"INSERT INTO table_test2 "
+
"( a_text, some_text, updatable_text ) VALUES ('b', 'b', '2')"
);
stat
.
execute
(
"INSERT INTO table_test2 "
+
"( a_text, some_text, updatable_text ) VALUES ('c', 'c', '3')"
);
stat
.
execute
(
"INSERT INTO table_test2 "
+
"( a_text, some_text, updatable_text ) VALUES ('d', 'd', '4')"
);
stat
.
execute
(
"INSERT INTO table_test2 "
+
"( a_text, some_text, updatable_text ) VALUES ('e', 'e', '5')"
);
stat
.
execute
(
"INSERT INTO table_test2 ( a_text, some_text ) "
+
stat
.
execute
(
"INSERT INTO table_test2 ( a_text, some_text ) "
+
"VALUES ('e', 'e') ON DUPLICATE KEY UPDATE updatable_text='UPDATE'"
);
"VALUES ('e', 'e') ON DUPLICATE KEY UPDATE updatable_text='UPDATE'"
);
rs
=
stat
.
executeQuery
(
"SELECT updatable_text FROM table_test2 where a_text = 'e'"
);
rs
=
stat
.
executeQuery
(
"SELECT updatable_text "
+
"FROM table_test2 where a_text = 'e'"
);
rs
.
next
();
rs
.
next
();
assertEquals
(
"UPDATE"
,
rs
.
getNString
(
1
));
assertEquals
(
"UPDATE"
,
rs
.
getNString
(
1
));
stat
.
execute
(
"INSERT INTO table_test2 (a_text, some_text, updatable_text ) "
+
stat
.
execute
(
"INSERT INTO table_test2 (a_text, some_text, updatable_text ) "
+
"VALUES ('b', 'b', 'test') "
+
"VALUES ('b', 'b', 'test') "
+
"ON DUPLICATE KEY UPDATE updatable_text=values(updatable_text)"
);
"ON DUPLICATE KEY UPDATE updatable_text=values(updatable_text)"
);
rs
=
stat
.
executeQuery
(
"SELECT updatable_text FROM table_test2 where a_text = 'b'"
);
rs
=
stat
.
executeQuery
(
"SELECT updatable_text "
+
"FROM table_test2 where a_text = 'b'"
);
rs
.
next
();
rs
.
next
();
assertEquals
(
"test"
,
rs
.
getNString
(
1
));
assertEquals
(
"test"
,
rs
.
getNString
(
1
));
}
}
...
@@ -154,16 +165,20 @@ public class TestDuplicateKeyUpdate extends TestBase {
...
@@ -154,16 +165,20 @@ public class TestDuplicateKeyUpdate extends TestBase {
stat
.
execute
(
"INSERT INTO table_test4 ( id, a_text, some_value ) "
+
stat
.
execute
(
"INSERT INTO table_test4 ( id, a_text, some_value ) "
+
"VALUES (2, 'aaaaaaaaaa', 5)"
);
"VALUES (2, 'aaaaaaaaaa', 5)"
);
stat
.
execute
(
"INSERT INTO table_test4 ( id , a_text, some_value ) VALUES (1, 'b', 1) "
+
stat
.
execute
(
"INSERT INTO table_test4 ( id , a_text, some_value ) "
+
"VALUES (1, 'b', 1) "
+
"ON DUPLICATE KEY UPDATE some_value=some_value + values(some_value)"
);
"ON DUPLICATE KEY UPDATE some_value=some_value + values(some_value)"
);
stat
.
execute
(
"INSERT INTO table_test4 ( id , a_text, some_value ) VALUES (1, 'b', 1) "
+
stat
.
execute
(
"INSERT INTO table_test4 ( id , a_text, some_value ) "
+
"VALUES (1, 'b', 1) "
+
"ON DUPLICATE KEY UPDATE some_value=some_value + 100"
);
"ON DUPLICATE KEY UPDATE some_value=some_value + 100"
);
stat
.
execute
(
"INSERT INTO table_test4 ( id , a_text, some_value ) VALUES (2, 'b', 1) "
+
stat
.
execute
(
"INSERT INTO table_test4 ( id , a_text, some_value ) "
+
"VALUES (2, 'b', 1) "
+
"ON DUPLICATE KEY UPDATE some_value=values(some_value) + 1"
);
"ON DUPLICATE KEY UPDATE some_value=values(some_value) + 1"
);
rs
=
stat
.
executeQuery
(
"SELECT some_value FROM table_test4 where id = 1"
);
rs
=
stat
.
executeQuery
(
"SELECT some_value FROM table_test4 where id = 1"
);
rs
.
next
();
rs
.
next
();
assertEquals
(
106
,
rs
.
getInt
(
1
));
assertEquals
(
106
,
rs
.
getInt
(
1
));
rs
=
stat
.
executeQuery
(
"SELECT some_value FROM table_test4 where id = 2"
);
rs
=
stat
.
executeQuery
(
"SELECT some_value FROM table_test4 where id = 2"
);
rs
.
next
();
rs
.
next
();
assertEquals
(
2
,
rs
.
getInt
(
1
));
assertEquals
(
2
,
rs
.
getInt
(
1
));
}
}
...
@@ -171,7 +186,8 @@ public class TestDuplicateKeyUpdate extends TestBase {
...
@@ -171,7 +186,8 @@ public class TestDuplicateKeyUpdate extends TestBase {
public
void
testOnDuplicateKeyInsertBatch
(
Connection
conn
)
public
void
testOnDuplicateKeyInsertBatch
(
Connection
conn
)
throws
SQLException
{
throws
SQLException
{
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test (key varchar(1) primary key, count int not null)"
);
stat
.
execute
(
"create table test "
+
"(key varchar(1) primary key, count int not null)"
);
// Insert multiple values as a batch
// Insert multiple values as a batch
for
(
int
i
=
0
;
i
<=
2
;
++
i
)
{
for
(
int
i
=
0
;
i
<=
2
;
++
i
)
{
...
@@ -191,7 +207,8 @@ public class TestDuplicateKeyUpdate extends TestBase {
...
@@ -191,7 +207,8 @@ public class TestDuplicateKeyUpdate extends TestBase {
}
}
// Check result
// Check result
ResultSet
rs
=
stat
.
executeQuery
(
"select count from test where key = 'a'"
);
ResultSet
rs
=
stat
.
executeQuery
(
"select count from test where key = 'a'"
);
rs
.
next
();
rs
.
next
();
assertEquals
(
3
,
rs
.
getInt
(
1
));
assertEquals
(
3
,
rs
.
getInt
(
1
));
...
@@ -201,7 +218,8 @@ public class TestDuplicateKeyUpdate extends TestBase {
...
@@ -201,7 +218,8 @@ public class TestDuplicateKeyUpdate extends TestBase {
public
void
testOnDuplicateKeyInsertMultiValue
(
Connection
conn
)
public
void
testOnDuplicateKeyInsertMultiValue
(
Connection
conn
)
throws
SQLException
{
throws
SQLException
{
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test(key varchar(1) primary key, count int not null)"
);
stat
.
execute
(
"create table test"
+
"(key varchar(1) primary key, count int not null)"
);
// Insert multiple values in single insert operation
// Insert multiple values in single insert operation
for
(
int
i
=
0
;
i
<=
2
;
++
i
)
{
for
(
int
i
=
0
;
i
<=
2
;
++
i
)
{
...
...
h2/src/test/org/h2/test/db/TestFullText.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/test/org/h2/test/db/TestFunctionOverload.java
浏览文件 @
b3836d31
...
@@ -89,7 +89,8 @@ public class TestFunctionOverload extends TestBase {
...
@@ -89,7 +89,8 @@ public class TestFunctionOverload extends TestBase {
private
void
testOverloadNamedArgs
()
throws
SQLException
{
private
void
testOverloadNamedArgs
()
throws
SQLException
{
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create alias overload1or2Named for \""
+
ME
+
".overload1or2(int)\""
);
stat
.
execute
(
"create alias overload1or2Named for \""
+
ME
+
".overload1or2(int)\""
);
ResultSet
rs
=
stat
.
executeQuery
(
"select overload1or2Named(1) from dual"
);
ResultSet
rs
=
stat
.
executeQuery
(
"select overload1or2Named(1) from dual"
);
assertTrue
(
"First Row"
,
rs
.
next
());
assertTrue
(
"First Row"
,
rs
.
next
());
...
@@ -104,7 +105,8 @@ public class TestFunctionOverload extends TestBase {
...
@@ -104,7 +105,8 @@ public class TestFunctionOverload extends TestBase {
private
void
testOverloadWithConnection
()
throws
SQLException
{
private
void
testOverloadWithConnection
()
throws
SQLException
{
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create alias overload1or2WithConn for \""
+
ME
+
".overload1or2WithConn\""
);
stat
.
execute
(
"create alias overload1or2WithConn for \""
+
ME
+
".overload1or2WithConn\""
);
ResultSet
rs
=
stat
.
executeQuery
(
"select overload1or2WithConn(1) from dual"
);
ResultSet
rs
=
stat
.
executeQuery
(
"select overload1or2WithConn(1) from dual"
);
rs
.
next
();
rs
.
next
();
...
@@ -158,7 +160,8 @@ public class TestFunctionOverload extends TestBase {
...
@@ -158,7 +160,8 @@ public class TestFunctionOverload extends TestBase {
* @param one the value
* @param one the value
* @return the value
* @return the value
*/
*/
public
static
int
overload1or2WithConn
(
Connection
conn
,
int
one
)
throws
SQLException
{
public
static
int
overload1or2WithConn
(
Connection
conn
,
int
one
)
throws
SQLException
{
conn
.
createStatement
().
executeQuery
(
"select 1 from dual"
);
conn
.
createStatement
().
executeQuery
(
"select 1 from dual"
);
return
one
;
return
one
;
}
}
...
...
h2/src/test/org/h2/test/db/TestFunctions.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/test/org/h2/test/db/TestIndex.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/test/org/h2/test/db/TestLinkedTable.java
浏览文件 @
b3836d31
差异被折叠。
点击展开。
h2/src/test/org/h2/test/db/TestView.java
浏览文件 @
b3836d31
...
@@ -188,7 +188,8 @@ public class TestView extends TestBase {
...
@@ -188,7 +188,8 @@ public class TestView extends TestBase {
for
(
int
i
=
0
;
i
<
30
;
i
++)
{
for
(
int
i
=
0
;
i
<
30
;
i
++)
{
s
.
execute
(
"create view t"
+
(
i
+
1
)
+
" as select * from t"
+
i
);
s
.
execute
(
"create view t"
+
(
i
+
1
)
+
" as select * from t"
+
i
);
s
.
execute
(
"select * from t"
+
(
i
+
1
));
s
.
execute
(
"select * from t"
+
(
i
+
1
));
ResultSet
rs
=
s
.
executeQuery
(
"select count(*) from t"
+
(
i
+
1
)
+
" where id=2"
);
ResultSet
rs
=
s
.
executeQuery
(
"select count(*) from t"
+
(
i
+
1
)
+
" where id=2"
);
assertTrue
(
rs
.
next
());
assertTrue
(
rs
.
next
());
assertEquals
(
1
,
rs
.
getInt
(
1
));
assertEquals
(
1
,
rs
.
getInt
(
1
));
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论