Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
1397fe53
提交
1397fe53
authored
12月 17, 2012
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
MVStore: improved API thanks to Simo Tripodi.
上级
54d90c04
隐藏空白字符变更
内嵌
并排
正在显示
19 个修改的文件
包含
479 行增加
和
343 行删除
+479
-343
changelog.html
h2/src/docsrc/html/changelog.html
+1
-0
DataUtils.java
h2/src/main/org/h2/mvstore/DataUtils.java
+6
-2
MVMap.java
h2/src/main/org/h2/mvstore/MVMap.java
+74
-1
MVMapConcurrent.java
h2/src/main/org/h2/mvstore/MVMapConcurrent.java
+53
-0
MVStore.java
h2/src/main/org/h2/mvstore/MVStore.java
+24
-57
MVPrimaryIndex.java
h2/src/main/org/h2/mvstore/db/MVPrimaryIndex.java
+2
-3
MVSecondaryIndex.java
h2/src/main/org/h2/mvstore/db/MVSecondaryIndex.java
+4
-3
ValueDataTypeFactory.java
h2/src/main/org/h2/mvstore/db/ValueDataTypeFactory.java
+0
-5
MVRTreeMap.java
h2/src/main/org/h2/mvstore/rtree/MVRTreeMap.java
+51
-0
DataTypeFactory.java
h2/src/main/org/h2/mvstore/type/DataTypeFactory.java
+0
-11
ObjectDataTypeFactory.java
h2/src/main/org/h2/mvstore/type/ObjectDataTypeFactory.java
+0
-8
TestAll.java
h2/src/test/org/h2/test/TestAll.java
+166
-166
TestBase.java
h2/src/test/org/h2/test/TestBase.java
+1
-1
SampleTypeFactory.java
h2/src/test/org/h2/test/store/SampleTypeFactory.java
+0
-5
SequenceMap.java
h2/src/test/org/h2/test/store/SequenceMap.java
+19
-0
TestConcurrent.java
h2/src/test/org/h2/test/store/TestConcurrent.java
+4
-4
TestMVRTree.java
h2/src/test/org/h2/test/store/TestMVRTree.java
+17
-15
TestMVStore.java
h2/src/test/org/h2/test/store/TestMVStore.java
+56
-61
TestMVTableEngine.java
h2/src/test/org/h2/test/store/TestMVTableEngine.java
+1
-1
没有找到文件。
h2/src/docsrc/html/changelog.html
浏览文件 @
1397fe53
...
@@ -31,6 +31,7 @@ Change Log
...
@@ -31,6 +31,7 @@ Change Log
</li><li>
New connection setting "DEFAULT_TABLE_ENGINE" to use a specific
</li><li>
New connection setting "DEFAULT_TABLE_ENGINE" to use a specific
table engine if none is set explicitly. This is to simplify testing
table engine if none is set explicitly. This is to simplify testing
the MVStore table engine.
the MVStore table engine.
</li><li>
MVStore: improved API thanks to Simo Tripodi.
</li><li>
MVStore: maps can now be renamed.
</li><li>
MVStore: maps can now be renamed.
</li><li>
MVStore: store the file header also at the end of each chunk,
</li><li>
MVStore: store the file header also at the end of each chunk,
which results in a further reduced number of write operations.
which results in a further reduced number of write operations.
...
...
h2/src/main/org/h2/mvstore/DataUtils.java
浏览文件 @
1397fe53
...
@@ -557,14 +557,18 @@ public class DataUtils {
...
@@ -557,14 +557,18 @@ public class DataUtils {
return
new
IllegalStateException
(
message
+
version
());
return
new
IllegalStateException
(
message
+
version
());
}
}
public
static
IllegalStateException
illegalStateException
(
String
message
,
Exception
e
)
{
public
static
IllegalStateException
illegalStateException
(
String
message
,
Exception
caus
e
)
{
return
new
IllegalStateException
(
message
+
version
(),
e
);
return
new
IllegalStateException
(
message
+
version
(),
caus
e
);
}
}
public
static
IllegalArgumentException
illegalArgumentException
(
String
message
)
{
public
static
IllegalArgumentException
illegalArgumentException
(
String
message
)
{
return
new
IllegalArgumentException
(
message
+
version
());
return
new
IllegalArgumentException
(
message
+
version
());
}
}
public
static
IllegalArgumentException
illegalArgumentException
(
String
message
,
Exception
cause
)
{
return
new
IllegalArgumentException
(
message
+
version
(),
cause
);
}
public
static
UnsupportedOperationException
unsupportedOperationException
(
String
message
)
{
public
static
UnsupportedOperationException
unsupportedOperationException
(
String
message
)
{
return
new
UnsupportedOperationException
(
message
+
version
());
return
new
UnsupportedOperationException
(
message
+
version
());
}
}
...
...
h2/src/main/org/h2/mvstore/MVMap.java
浏览文件 @
1397fe53
...
@@ -17,6 +17,7 @@ import java.util.Map;
...
@@ -17,6 +17,7 @@ import java.util.Map;
import
java.util.Set
;
import
java.util.Set
;
import
java.util.concurrent.ConcurrentMap
;
import
java.util.concurrent.ConcurrentMap
;
import
org.h2.mvstore.type.DataType
;
import
org.h2.mvstore.type.DataType
;
import
org.h2.mvstore.type.ObjectDataType
;
import
org.h2.util.New
;
import
org.h2.util.New
;
/**
/**
...
@@ -47,7 +48,7 @@ public class MVMap<K, V> extends AbstractMap<K, V>
...
@@ -47,7 +48,7 @@ public class MVMap<K, V> extends AbstractMap<K, V>
private
boolean
closed
;
private
boolean
closed
;
private
boolean
readOnly
;
private
boolean
readOnly
;
p
ublic
MVMap
(
DataType
keyType
,
DataType
valueType
)
{
p
rotected
MVMap
(
DataType
keyType
,
DataType
valueType
)
{
this
.
keyType
=
keyType
;
this
.
keyType
=
keyType
;
this
.
valueType
=
valueType
;
this
.
valueType
=
valueType
;
this
.
root
=
Page
.
createEmpty
(
this
,
-
1
);
this
.
root
=
Page
.
createEmpty
(
this
,
-
1
);
...
@@ -1048,4 +1049,76 @@ public class MVMap<K, V> extends AbstractMap<K, V>
...
@@ -1048,4 +1049,76 @@ public class MVMap<K, V> extends AbstractMap<K, V>
return
asString
(
null
);
return
asString
(
null
);
}
}
/**
* A builder for maps.
*
* @param <M> the map type
* @param <K> the key type
* @param <V> the value type
*/
public
interface
MapBuilder
<
M
extends
MVMap
<
K
,
V
>,
K
,
V
>
{
/**
* Create a new map of the given type.
*
* @return the map
*/
public
M
create
();
}
/**
* A builder for this class.
*
* @param <K> the key type
* @param <V> the value type
*/
public
static
class
Builder
<
K
,
V
>
implements
MapBuilder
<
MVMap
<
K
,
V
>,
K
,
V
>
{
protected
DataType
keyType
;
protected
DataType
valueType
;
/**
* Create a new builder with the default key and value data types.
*/
public
Builder
()
{
// ignore
}
/**
* Set the key data type.
*
* @param keyType the key type
* @return this
*/
public
Builder
<
K
,
V
>
keyType
(
DataType
keyType
)
{
this
.
keyType
=
keyType
;
return
this
;
}
/**
* Set the key data type.
*
* @param valueType the key type
* @return this
*/
public
Builder
<
K
,
V
>
valueType
(
DataType
valueType
)
{
this
.
valueType
=
valueType
;
return
this
;
}
@Override
public
MVMap
<
K
,
V
>
create
()
{
if
(
keyType
==
null
)
{
keyType
=
new
ObjectDataType
();
}
if
(
valueType
==
null
)
{
valueType
=
new
ObjectDataType
();
}
return
new
MVMap
<
K
,
V
>(
keyType
,
valueType
);
}
}
}
}
h2/src/main/org/h2/mvstore/MVMapConcurrent.java
浏览文件 @
1397fe53
...
@@ -69,4 +69,57 @@ public class MVMapConcurrent<K, V> extends MVMap<K, V> {
...
@@ -69,4 +69,57 @@ public class MVMapConcurrent<K, V> extends MVMap<K, V> {
return
result
;
return
result
;
}
}
/**
* A builder for this class.
*
* @param <K> the key type
* @param <V> the value type
*/
public
static
class
Builder
<
K
,
V
>
implements
MapBuilder
<
MVMapConcurrent
<
K
,
V
>,
K
,
V
>
{
protected
DataType
keyType
;
protected
DataType
valueType
;
/**
* Create a new builder with the default key and value data types.
*/
public
Builder
()
{
// ignore
}
/**
* Set the key data type.
*
* @param keyType the key type
* @return this
*/
public
Builder
<
K
,
V
>
keyType
(
DataType
keyType
)
{
this
.
keyType
=
keyType
;
return
this
;
}
/**
* Set the key data type.
*
* @param valueType the key type
* @return this
*/
public
Builder
<
K
,
V
>
valueType
(
DataType
valueType
)
{
this
.
valueType
=
valueType
;
return
this
;
}
@Override
public
MVMapConcurrent
<
K
,
V
>
create
()
{
if
(
keyType
==
null
)
{
keyType
=
new
ObjectDataType
();
}
if
(
valueType
==
null
)
{
valueType
=
new
ObjectDataType
();
}
return
new
MVMapConcurrent
<
K
,
V
>(
keyType
,
valueType
);
}
}
}
}
h2/src/main/org/h2/mvstore/MVStore.java
浏览文件 @
1397fe53
...
@@ -21,7 +21,6 @@ import org.h2.compress.CompressLZF;
...
@@ -21,7 +21,6 @@ import org.h2.compress.CompressLZF;
import
org.h2.compress.Compressor
;
import
org.h2.compress.Compressor
;
import
org.h2.mvstore.cache.CacheLongKeyLIRS
;
import
org.h2.mvstore.cache.CacheLongKeyLIRS
;
import
org.h2.mvstore.cache.FilePathCache
;
import
org.h2.mvstore.cache.FilePathCache
;
import
org.h2.mvstore.type.DataType
;
import
org.h2.mvstore.type.DataTypeFactory
;
import
org.h2.mvstore.type.DataTypeFactory
;
import
org.h2.mvstore.type.ObjectDataTypeFactory
;
import
org.h2.mvstore.type.ObjectDataTypeFactory
;
import
org.h2.mvstore.type.StringDataType
;
import
org.h2.mvstore.type.StringDataType
;
...
@@ -44,7 +43,8 @@ H:3,...
...
@@ -44,7 +43,8 @@ H:3,...
TODO:
TODO:
- MVStore: improved API thanks to Simo Tripodi
- fix MVStore documentation, example code
- improve exception factory (fluent api)
- implement table engine for H2
- implement table engine for H2
- automated 'kill process' and 'power failure' test
- automated 'kill process' and 'power failure' test
- maybe split database into multiple files, to speed up compact
- maybe split database into multiple files, to speed up compact
...
@@ -121,8 +121,6 @@ public class MVStore {
...
@@ -121,8 +121,6 @@ public class MVStore {
*/
*/
static
final
int
BLOCK_SIZE
=
4
*
1024
;
static
final
int
BLOCK_SIZE
=
4
*
1024
;
private
final
HashMap
<
String
,
Object
>
config
;
private
final
String
fileName
;
private
final
String
fileName
;
private
final
DataTypeFactory
dataTypeFactory
;
private
final
DataTypeFactory
dataTypeFactory
;
...
@@ -187,7 +185,6 @@ public class MVStore {
...
@@ -187,7 +185,6 @@ public class MVStore {
private
boolean
closed
;
private
boolean
closed
;
MVStore
(
HashMap
<
String
,
Object
>
config
)
{
MVStore
(
HashMap
<
String
,
Object
>
config
)
{
this
.
config
=
config
;
this
.
fileName
=
(
String
)
config
.
get
(
"fileName"
);
this
.
fileName
=
(
String
)
config
.
get
(
"fileName"
);
DataTypeFactory
parent
=
new
ObjectDataTypeFactory
();
DataTypeFactory
parent
=
new
ObjectDataTypeFactory
();
DataTypeFactory
f
=
(
DataTypeFactory
)
config
.
get
(
"dataTypeFactory"
);
DataTypeFactory
f
=
(
DataTypeFactory
)
config
.
get
(
"dataTypeFactory"
);
...
@@ -242,67 +239,49 @@ public class MVStore {
...
@@ -242,67 +239,49 @@ public class MVStore {
}
}
/**
/**
* Open a map with the previous key and value type (if the map already
* Open a map with the default settings. The map is automatically create if
* exists), or Object if not.
* it does not yet exist. If a map with this name is already open, this map
* is returned.
*
*
* @param <K> the key type
* @param <K> the key type
* @param <V> the value type
* @param <V> the value type
* @param name the name of the map
* @param name the name of the map
* @return the map
* @return the map
*/
*/
@SuppressWarnings
(
"unchecked"
)
public
<
K
,
V
>
MVMap
<
K
,
V
>
openMap
(
String
name
)
{
public
<
K
,
V
>
MVMap
<
K
,
V
>
openMap
(
String
name
)
{
return
(
MVMap
<
K
,
V
>)
openMap
(
name
,
Object
.
class
,
Object
.
class
);
return
openMap
(
name
,
new
MVMap
.
Builder
<
K
,
V
>()
);
}
}
/**
/**
* Open a map.
* Open a map with the given builder. The map is automatically create if it
* does not yet exist. If a map with this name is already open, this map is
* returned.
*
*
* @param <K> the key type
* @param <K> the key type
* @param <V> the value type
* @param <V> the value type
* @param name the name of the map
* @param name the name of the map
* @param keyClass the key class
* @param builder the map builder
* @param valueClass the value class
* @return the map
* @return the map
*/
*/
public
<
K
,
V
>
MVMap
<
K
,
V
>
openMap
(
String
name
,
Class
<
K
>
keyClass
,
Class
<
V
>
valueClass
)
{
public
<
M
extends
MVMap
<
K
,
V
>,
K
,
V
>
M
openMap
(
String
name
,
MVMap
.
MapBuilder
<
M
,
K
,
V
>
builder
)
{
checkOpen
();
DataType
keyType
=
getDataType
(
keyClass
);
DataType
valueType
=
getDataType
(
valueClass
);
MVMap
<
K
,
V
>
m
=
new
MVMap
<
K
,
V
>(
keyType
,
valueType
);
return
openMap
(
name
,
m
);
}
/**
* Open a map using the given template. The returned map is of the same type
* as the template, and contains the same key and value types. If a map with
* this name is already open, this map is returned. If it is not open,
* the template object is opened with the applicable configuration.
*
* @param <T> the map type
* @param name the name of the map
* @param template the template map
* @return the opened map
*/
@SuppressWarnings
(
"unchecked"
)
public
<
T
extends
MVMap
<
K
,
V
>,
K
,
V
>
T
openMap
(
String
name
,
T
template
)
{
checkOpen
();
checkOpen
();
MVMap
<
K
,
V
>
m
;
String
x
=
meta
.
get
(
"name."
+
name
);
String
x
=
meta
.
get
(
"name."
+
name
);
int
id
;
int
id
;
long
root
;
long
root
;
HashMap
<
String
,
String
>
c
;
HashMap
<
String
,
String
>
c
;
M
map
;
if
(
x
!=
null
)
{
if
(
x
!=
null
)
{
id
=
Integer
.
parseInt
(
x
);
id
=
Integer
.
parseInt
(
x
);
m
=
(
MVMap
<
K
,
V
>)
maps
.
get
(
id
);
@SuppressWarnings
(
"unchecked"
)
if
(
m
!=
null
)
{
M
old
=
(
M
)
maps
.
get
(
id
);
return
(
T
)
m
;
if
(
old
!=
null
)
{
return
old
;
}
}
m
=
template
;
m
ap
=
builder
.
create
()
;
String
config
=
meta
.
get
(
"map."
+
x
);
String
config
=
meta
.
get
(
"map."
+
x
);
c
=
DataUtils
.
parseMap
(
config
);
c
=
DataUtils
.
parseMap
(
config
);
c
.
put
(
"id"
,
x
);
c
.
put
(
"id"
,
x
);
m
.
open
(
this
,
c
);
m
ap
.
open
(
this
,
c
);
String
r
=
meta
.
get
(
"root."
+
id
);
String
r
=
meta
.
get
(
"root."
+
id
);
root
=
r
==
null
?
0
:
Long
.
parseLong
(
r
);
root
=
r
==
null
?
0
:
Long
.
parseLong
(
r
);
}
else
{
}
else
{
...
@@ -310,15 +289,15 @@ public class MVStore {
...
@@ -310,15 +289,15 @@ public class MVStore {
id
=
++
lastMapId
;
id
=
++
lastMapId
;
c
.
put
(
"id"
,
Integer
.
toString
(
id
));
c
.
put
(
"id"
,
Integer
.
toString
(
id
));
c
.
put
(
"createVersion"
,
Long
.
toString
(
currentVersion
));
c
.
put
(
"createVersion"
,
Long
.
toString
(
currentVersion
));
m
=
template
;
m
ap
=
builder
.
create
()
;
m
.
open
(
this
,
c
);
m
ap
.
open
(
this
,
c
);
meta
.
put
(
"map."
+
id
,
m
.
asString
(
name
));
meta
.
put
(
"map."
+
id
,
m
ap
.
asString
(
name
));
meta
.
put
(
"name."
+
name
,
Integer
.
toString
(
id
));
meta
.
put
(
"name."
+
name
,
Integer
.
toString
(
id
));
root
=
0
;
root
=
0
;
}
}
m
.
setRootPos
(
root
,
-
1
);
m
ap
.
setRootPos
(
root
,
-
1
);
maps
.
put
(
id
,
m
);
maps
.
put
(
id
,
m
ap
);
return
(
T
)
m
;
return
map
;
}
}
/**
/**
...
@@ -377,14 +356,6 @@ public class MVStore {
...
@@ -377,14 +356,6 @@ public class MVStore {
maps
.
remove
(
id
);
maps
.
remove
(
id
);
}
}
private
DataType
getDataType
(
Class
<?>
clazz
)
{
if
(
clazz
==
String
.
class
)
{
return
StringDataType
.
INSTANCE
;
}
String
s
=
dataTypeFactory
.
getDataType
(
clazz
);
return
dataTypeFactory
.
buildDataType
(
s
);
}
/**
/**
* Mark a map as changed (containing unsaved changes).
* Mark a map as changed (containing unsaved changes).
*
*
...
@@ -1372,10 +1343,6 @@ public class MVStore {
...
@@ -1372,10 +1343,6 @@ public class MVStore {
}
}
}
}
public
String
toString
()
{
return
DataUtils
.
appendMap
(
new
StringBuilder
(),
config
).
toString
();
}
void
renameMap
(
MVMap
<?,
?>
map
,
String
newName
)
{
void
renameMap
(
MVMap
<?,
?>
map
,
String
newName
)
{
checkOpen
();
checkOpen
();
if
(
map
==
meta
)
{
if
(
map
==
meta
)
{
...
...
h2/src/main/org/h2/mvstore/db/MVPrimaryIndex.java
浏览文件 @
1397fe53
...
@@ -18,7 +18,6 @@ import org.h2.index.Cursor;
...
@@ -18,7 +18,6 @@ import org.h2.index.Cursor;
import
org.h2.index.IndexType
;
import
org.h2.index.IndexType
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.mvstore.MVMap
;
import
org.h2.mvstore.MVMap
;
import
org.h2.mvstore.type.ObjectDataType
;
import
org.h2.result.Row
;
import
org.h2.result.Row
;
import
org.h2.result.SearchRow
;
import
org.h2.result.SearchRow
;
import
org.h2.result.SortOrder
;
import
org.h2.result.SortOrder
;
...
@@ -47,8 +46,8 @@ public class MVPrimaryIndex extends BaseIndex {
...
@@ -47,8 +46,8 @@ public class MVPrimaryIndex extends BaseIndex {
}
}
ValueArrayDataType
t
=
new
ValueArrayDataType
(
ValueArrayDataType
t
=
new
ValueArrayDataType
(
db
.
getCompareMode
(),
db
,
sortTypes
);
db
.
getCompareMode
(),
db
,
sortTypes
);
map
=
new
MVMap
<
Long
,
Value
[]>(
new
ObjectDataType
(),
t
);
map
=
table
.
getStore
().
openMap
(
getName
()
+
"_"
+
getId
(),
map
=
table
.
getStore
().
openMap
(
getName
()
+
"_"
+
getId
(),
map
);
new
MVMap
.
Builder
<
Long
,
Value
[]>().
valueType
(
t
)
);
Long
k
=
map
.
lastKey
();
Long
k
=
map
.
lastKey
();
lastKey
=
k
==
null
?
0
:
k
;
lastKey
=
k
==
null
?
0
:
k
;
}
}
...
...
h2/src/main/org/h2/mvstore/db/MVSecondaryIndex.java
浏览文件 @
1397fe53
...
@@ -17,7 +17,6 @@ import org.h2.index.Cursor;
...
@@ -17,7 +17,6 @@ import org.h2.index.Cursor;
import
org.h2.index.IndexType
;
import
org.h2.index.IndexType
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.mvstore.MVMap
;
import
org.h2.mvstore.MVMap
;
import
org.h2.mvstore.type.ObjectDataType
;
import
org.h2.result.Row
;
import
org.h2.result.Row
;
import
org.h2.result.SearchRow
;
import
org.h2.result.SearchRow
;
import
org.h2.result.SortOrder
;
import
org.h2.result.SortOrder
;
...
@@ -52,10 +51,12 @@ public class MVSecondaryIndex extends BaseIndex {
...
@@ -52,10 +51,12 @@ public class MVSecondaryIndex extends BaseIndex {
sortTypes
[
i
]
=
columns
[
i
].
sortType
;
sortTypes
[
i
]
=
columns
[
i
].
sortType
;
}
}
sortTypes
[
keyColumns
-
1
]
=
SortOrder
.
ASCENDING
;
sortTypes
[
keyColumns
-
1
]
=
SortOrder
.
ASCENDING
;
String
name
=
getName
()
+
"_"
+
getId
();
ValueArrayDataType
t
=
new
ValueArrayDataType
(
ValueArrayDataType
t
=
new
ValueArrayDataType
(
db
.
getCompareMode
(),
db
,
sortTypes
);
db
.
getCompareMode
(),
db
,
sortTypes
);
map
=
new
MVMap
<
Value
[],
Long
>(
t
,
new
ObjectDataType
());
map
=
table
.
getStore
().
openMap
(
name
,
map
=
table
.
getStore
().
openMap
(
getName
()
+
"_"
+
getId
(),
map
);
new
MVMap
.
Builder
<
Value
[],
Long
>().
keyType
(
t
));
}
}
private
static
void
checkIndexColumnTypes
(
IndexColumn
[]
columns
)
{
private
static
void
checkIndexColumnTypes
(
IndexColumn
[]
columns
)
{
...
...
h2/src/main/org/h2/mvstore/db/ValueDataTypeFactory.java
浏览文件 @
1397fe53
...
@@ -37,9 +37,4 @@ public class ValueDataTypeFactory implements DataTypeFactory {
...
@@ -37,9 +37,4 @@ public class ValueDataTypeFactory implements DataTypeFactory {
return
parent
.
buildDataType
(
s
);
return
parent
.
buildDataType
(
s
);
}
}
@Override
public
String
getDataType
(
Class
<?>
objectClass
)
{
return
parent
.
getDataType
(
objectClass
);
}
}
}
h2/src/main/org/h2/mvstore/rtree/MVRTreeMap.java
浏览文件 @
1397fe53
...
@@ -13,6 +13,8 @@ import org.h2.mvstore.CursorPos;
...
@@ -13,6 +13,8 @@ import org.h2.mvstore.CursorPos;
import
org.h2.mvstore.MVMap
;
import
org.h2.mvstore.MVMap
;
import
org.h2.mvstore.Page
;
import
org.h2.mvstore.Page
;
import
org.h2.mvstore.type.DataType
;
import
org.h2.mvstore.type.DataType
;
import
org.h2.mvstore.type.ObjectDataType
;
import
org.h2.mvstore.type.StringDataType
;
import
org.h2.util.New
;
import
org.h2.util.New
;
/**
/**
...
@@ -541,4 +543,53 @@ public class MVRTreeMap<V> extends MVMap<SpatialKey, V> {
...
@@ -541,4 +543,53 @@ public class MVRTreeMap<V> extends MVMap<SpatialKey, V> {
return
"rtree"
;
return
"rtree"
;
}
}
/**
* A builder for this class.
*
* @param <V> the value type
*/
public
static
class
Builder
<
V
>
implements
MVMap
.
MapBuilder
<
MVRTreeMap
<
V
>,
SpatialKey
,
V
>
{
private
int
dimensions
=
2
;
private
DataType
valueType
;
/**
* Create a new builder for maps with 2 dimensions.
*/
public
Builder
()
{
// default
}
/**
* Set the dimensions.
*
* @param dimensions the dimensions to use
* @return this
*/
public
Builder
<
V
>
dimensions
(
int
dimensions
)
{
this
.
dimensions
=
dimensions
;
return
this
;
}
/**
* Set the key data type.
*
* @param valueType the key type
* @return this
*/
public
Builder
<
V
>
valueType
(
StringDataType
valueType
)
{
this
.
valueType
=
valueType
;
return
this
;
}
public
MVRTreeMap
<
V
>
create
()
{
if
(
valueType
==
null
)
{
valueType
=
new
ObjectDataType
();
}
return
new
MVRTreeMap
<
V
>(
dimensions
,
valueType
);
}
}
}
}
h2/src/main/org/h2/mvstore/type/DataTypeFactory.java
浏览文件 @
1397fe53
...
@@ -26,15 +26,4 @@ public interface DataTypeFactory {
...
@@ -26,15 +26,4 @@ public interface DataTypeFactory {
*/
*/
DataType
buildDataType
(
String
dataType
);
DataType
buildDataType
(
String
dataType
);
/**
* Get the data type identifier for the given class.
* <p>
* To avoid conflict with the default factory, the returned string should
* start with the package name of the type factory.
*
* @param objectClass the class
* @return the data type identifier, or null if not supported
*/
String
getDataType
(
Class
<?>
objectClass
);
}
}
h2/src/main/org/h2/mvstore/type/ObjectDataTypeFactory.java
浏览文件 @
1397fe53
...
@@ -27,12 +27,4 @@ public class ObjectDataTypeFactory implements DataTypeFactory {
...
@@ -27,12 +27,4 @@ public class ObjectDataTypeFactory implements DataTypeFactory {
return
null
;
return
null
;
}
}
@Override
public
String
getDataType
(
Class
<?>
objectClass
)
{
if
(
objectClass
==
SpatialDataType
.
class
)
{
return
"s"
;
}
return
"o"
;
}
}
}
h2/src/test/org/h2/test/TestAll.java
浏览文件 @
1397fe53
...
@@ -556,123 +556,123 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1`
...
@@ -556,123 +556,123 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1`
beforeTest
();
beforeTest
();
// db
// db
new
TestScriptSimple
().
runTest
(
this
);
//
new TestScriptSimple().runTest(this);
new
TestScript
().
runTest
(
this
);
//
new TestScript().runTest(this);
new
TestAlter
().
runTest
(
this
);
//
new TestAlter().runTest(this);
new
TestAlterSchemaRename
().
runTest
(
this
);
//
new TestAlterSchemaRename().runTest(this);
new
TestAutoRecompile
().
runTest
(
this
);
//
new TestAutoRecompile().runTest(this);
new
TestBitField
().
runTest
(
this
);
//
new TestBitField().runTest(this);
new
TestBackup
().
runTest
(
this
);
//
new TestBackup().runTest(this);
new
TestBigDb
().
runTest
(
this
);
//
new TestBigDb().runTest(this);
new
TestBigResult
().
runTest
(
this
);
//
new TestBigResult().runTest(this);
new
TestCases
().
runTest
(
this
);
//
new TestCases().runTest(this);
new
TestCheckpoint
().
runTest
(
this
);
//
new TestCheckpoint().runTest(this);
new
TestCluster
().
runTest
(
this
);
//
new TestCluster().runTest(this);
new
TestCompatibility
().
runTest
(
this
);
//
new TestCompatibility().runTest(this);
new
TestCsv
().
runTest
(
this
);
//
new TestCsv().runTest(this);
new
TestDateStorage
().
runTest
(
this
);
//
new TestDateStorage().runTest(this);
new
TestDeadlock
().
runTest
(
this
);
//
new TestDeadlock().runTest(this);
new
TestEncryptedDb
().
runTest
(
this
);
//
new TestEncryptedDb().runTest(this);
new
TestExclusive
().
runTest
(
this
);
//
new TestExclusive().runTest(this);
new
TestFullText
().
runTest
(
this
);
//
new TestFullText().runTest(this);
new
TestFunctionOverload
().
runTest
(
this
);
//
new TestFunctionOverload().runTest(this);
new
TestFunctions
().
runTest
(
this
);
//
new TestFunctions().runTest(this);
new
TestInit
().
runTest
(
this
);
//
new TestInit().runTest(this);
new
TestIndex
().
runTest
(
this
);
//
new TestIndex().runTest(this);
new
TestLargeBlob
().
runTest
(
this
);
//
new TestLargeBlob().runTest(this);
new
TestLinkedTable
().
runTest
(
this
);
//
new TestLinkedTable().runTest(this);
new
TestListener
().
runTest
(
this
);
//
new TestListener().runTest(this);
// verify
//
// verify
new
TestLob
().
runTest
(
this
);
//
new TestLob().runTest(this);
new
TestMemoryUsage
().
runTest
(
this
);
//
new TestMemoryUsage().runTest(this);
new
TestMultiConn
().
runTest
(
this
);
//
new TestMultiConn().runTest(this);
new
TestMultiDimension
().
runTest
(
this
);
//
new TestMultiDimension().runTest(this);
new
TestMultiThread
().
runTest
(
this
);
//
new TestMultiThread().runTest(this);
new
TestMultiThreadedKernel
().
runTest
(
this
);
//
new TestMultiThreadedKernel().runTest(this);
new
TestOpenClose
().
runTest
(
this
);
//
new TestOpenClose().runTest(this);
new
TestOptimizations
().
runTest
(
this
);
//
new TestOptimizations().runTest(this);
new
TestOutOfMemory
().
runTest
(
this
);
//
new TestOutOfMemory().runTest(this);
new
TestPowerOff
().
runTest
(
this
);
//
new TestPowerOff().runTest(this);
new
TestQueryCache
().
runTest
(
this
);
//
new TestQueryCache().runTest(this);
new
TestReadOnly
().
runTest
(
this
);
//
new TestReadOnly().runTest(this);
new
TestRecursiveQueries
().
runTest
(
this
);
//
new TestRecursiveQueries().runTest(this);
new
TestRights
().
runTest
(
this
);
//
new TestRights().runTest(this);
// verify
//
// verify
new
TestRunscript
().
runTest
(
this
);
//
new TestRunscript().runTest(this);
new
TestSQLInjection
().
runTest
(
this
);
//
new TestSQLInjection().runTest(this);
// verify
//
// verify
new
TestSessionsLocks
().
runTest
(
this
);
//
new TestSessionsLocks().runTest(this);
new
TestSelectCountNonNullColumn
().
runTest
(
this
);
//
new TestSelectCountNonNullColumn().runTest(this);
new
TestSequence
().
runTest
(
this
);
//
new TestSequence().runTest(this);
new
TestSpaceReuse
().
runTest
(
this
);
//
new TestSpaceReuse().runTest(this);
new
TestSpeed
().
runTest
(
this
);
//
new TestSpeed().runTest(this);
new
TestTableEngines
().
runTest
(
this
);
//
new TestTableEngines().runTest(this);
new
TestTempTables
().
runTest
(
this
);
//
new TestTempTables().runTest(this);
new
TestTransaction
().
runTest
(
this
);
//
new TestTransaction().runTest(this);
new
TestTriggersConstraints
().
runTest
(
this
);
//
new TestTriggersConstraints().runTest(this);
new
TestTwoPhaseCommit
().
runTest
(
this
);
//
new TestTwoPhaseCommit().runTest(this);
new
TestView
().
runTest
(
this
);
//
new TestView().runTest(this);
new
TestViewAlterTable
().
runTest
(
this
);
//
new TestViewAlterTable().runTest(this);
new
TestViewDropView
().
runTest
(
this
);
//
new TestViewDropView().runTest(this);
//
// jaqu
//
// jaqu
new
AliasMapTest
().
runTest
(
this
);
//
new AliasMapTest().runTest(this);
new
AnnotationsTest
().
runTest
(
this
);
//
new AnnotationsTest().runTest(this);
new
ClobTest
().
runTest
(
this
);
//
new ClobTest().runTest(this);
new
ModelsTest
().
runTest
(
this
);
//
new ModelsTest().runTest(this);
new
SamplesTest
().
runTest
(
this
);
//
new SamplesTest().runTest(this);
new
UpdateTest
().
runTest
(
this
);
//
new UpdateTest().runTest(this);
//
// jdbc
//
// jdbc
new
TestBatchUpdates
().
runTest
(
this
);
//
new TestBatchUpdates().runTest(this);
new
TestCallableStatement
().
runTest
(
this
);
//
new TestCallableStatement().runTest(this);
new
TestCancel
().
runTest
(
this
);
//
new TestCancel().runTest(this);
new
TestDatabaseEventListener
().
runTest
(
this
);
//
new TestDatabaseEventListener().runTest(this);
new
TestDriver
().
runTest
(
this
);
//
new TestDriver().runTest(this);
new
TestJavaObject
().
runTest
(
this
);
//
new TestJavaObject().runTest(this);
new
TestLimitUpdates
().
runTest
(
this
);
//
new TestLimitUpdates().runTest(this);
new
TestLobApi
().
runTest
(
this
);
//
new TestLobApi().runTest(this);
new
TestManyJdbcObjects
().
runTest
(
this
);
//
new TestManyJdbcObjects().runTest(this);
new
TestMetaData
().
runTest
(
this
);
//
new TestMetaData().runTest(this);
new
TestNativeSQL
().
runTest
(
this
);
//
new TestNativeSQL().runTest(this);
new
TestPreparedStatement
().
runTest
(
this
);
//
new TestPreparedStatement().runTest(this);
new
TestResultSet
().
runTest
(
this
);
//
new TestResultSet().runTest(this);
new
TestStatement
().
runTest
(
this
);
//
new TestStatement().runTest(this);
new
TestTransactionIsolation
().
runTest
(
this
);
//
new TestTransactionIsolation().runTest(this);
new
TestUpdatableResultSet
().
runTest
(
this
);
//
new TestUpdatableResultSet().runTest(this);
new
TestZloty
().
runTest
(
this
);
//
new TestZloty().runTest(this);
//
// jdbcx
//
// jdbcx
new
TestConnectionPool
().
runTest
(
this
);
//
new TestConnectionPool().runTest(this);
new
TestDataSource
().
runTest
(
this
);
//
new TestDataSource().runTest(this);
new
TestXA
().
runTest
(
this
);
//
new TestXA().runTest(this);
new
TestXASimple
().
runTest
(
this
);
//
new TestXASimple().runTest(this);
//
// server
//
// server
new
TestAutoServer
().
runTest
(
this
);
//
new TestAutoServer().runTest(this);
new
TestNestedLoop
().
runTest
(
this
);
//
new TestNestedLoop().runTest(this);
new
TestWeb
().
runTest
(
this
);
//
new TestWeb().runTest(this);
//
// mvcc & row level locking
//
// mvcc & row level locking
new
TestMvcc1
().
runTest
(
this
);
//
new TestMvcc1().runTest(this);
new
TestMvcc2
().
runTest
(
this
);
//
new TestMvcc2().runTest(this);
new
TestMvcc3
().
runTest
(
this
);
//
new TestMvcc3().runTest(this);
new
TestMvccMultiThreaded
().
runTest
(
this
);
//
new TestMvccMultiThreaded().runTest(this);
new
TestRowLocks
().
runTest
(
this
);
//
new TestRowLocks().runTest(this);
//
// synth
//
// synth
new
TestBtreeIndex
().
runTest
(
this
);
//
new TestBtreeIndex().runTest(this);
new
TestDiskFull
().
runTest
(
this
);
//
new TestDiskFull().runTest(this);
new
TestCrashAPI
().
runTest
(
this
);
//
new TestCrashAPI().runTest(this);
new
TestFuzzOptimizations
().
runTest
(
this
);
//
new TestFuzzOptimizations().runTest(this);
new
TestLimit
().
runTest
(
this
);
//
new TestLimit().runTest(this);
new
TestRandomSQL
().
runTest
(
this
);
//
new TestRandomSQL().runTest(this);
new
TestRandomCompare
().
runTest
(
this
);
//
new TestRandomCompare().runTest(this);
new
TestKillRestart
().
runTest
(
this
);
//
new TestKillRestart().runTest(this);
new
TestKillRestartMulti
().
runTest
(
this
);
//
new TestKillRestartMulti().runTest(this);
new
TestMultiThreaded
().
runTest
(
this
);
//
new TestMultiThreaded().runTest(this);
new
TestOuterJoins
().
runTest
(
this
);
//
new TestOuterJoins().runTest(this);
new
TestNestedJoins
().
runTest
(
this
);
//
new TestNestedJoins().runTest(this);
afterTest
();
afterTest
();
}
}
...
@@ -691,55 +691,55 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1`
...
@@ -691,55 +691,55 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1`
new
TestStreamStore
().
runTest
(
this
);
new
TestStreamStore
().
runTest
(
this
);
// unit
// unit
new
TestAutoReconnect
().
runTest
(
this
);
//
new TestAutoReconnect().runTest(this);
new
TestCache
().
runTest
(
this
);
//
new TestCache().runTest(this);
new
TestClearReferences
().
runTest
(
this
);
//
new TestClearReferences().runTest(this);
new
TestCollation
().
runTest
(
this
);
//
new TestCollation().runTest(this);
new
TestCompress
().
runTest
(
this
);
//
new TestCompress().runTest(this);
new
TestConnectionInfo
().
runTest
(
this
);
//
new TestConnectionInfo().runTest(this);
new
TestDataPage
().
runTest
(
this
);
//
new TestDataPage().runTest(this);
new
TestDate
().
runTest
(
this
);
//
new TestDate().runTest(this);
new
TestDateIso8601
().
runTest
(
this
);
//
new TestDateIso8601().runTest(this);
new
TestExit
().
runTest
(
this
);
//
new TestExit().runTest(this);
new
TestFile
().
runTest
(
this
);
//
new TestFile().runTest(this);
new
TestFileLock
().
runTest
(
this
);
//
new TestFileLock().runTest(this);
new
TestFileLockProcess
().
runTest
(
this
);
//
new TestFileLockProcess().runTest(this);
new
TestFileLockSerialized
().
runTest
(
this
);
//
new TestFileLockSerialized().runTest(this);
new
TestFtp
().
runTest
(
this
);
//
new TestFtp().runTest(this);
new
TestFileSystem
().
runTest
(
this
);
//
new TestFileSystem().runTest(this);
new
TestIntArray
().
runTest
(
this
);
//
new TestIntArray().runTest(this);
new
TestIntIntHashMap
().
runTest
(
this
);
//
new TestIntIntHashMap().runTest(this);
// verify
//
// verify
new
TestJmx
().
runTest
(
this
);
//
new TestJmx().runTest(this);
new
TestMathUtils
().
runTest
(
this
);
//
new TestMathUtils().runTest(this);
new
TestModifyOnWrite
().
runTest
(
this
);
//
new TestModifyOnWrite().runTest(this);
new
TestOldVersion
().
runTest
(
this
);
//
new TestOldVersion().runTest(this);
new
TestNetUtils
().
runTest
(
this
);
//
new TestNetUtils().runTest(this);
new
TestObjectDeserialization
().
runTest
(
this
);
//
new TestObjectDeserialization().runTest(this);
new
TestMultiThreadedKernel
().
runTest
(
this
);
//
new TestMultiThreadedKernel().runTest(this);
new
TestOverflow
().
runTest
(
this
);
//
new TestOverflow().runTest(this);
new
TestPageStore
().
runTest
(
this
);
//
new TestPageStore().runTest(this);
new
TestPageStoreCoverage
().
runTest
(
this
);
//
new TestPageStoreCoverage().runTest(this);
new
TestPattern
().
runTest
(
this
);
//
new TestPattern().runTest(this);
new
TestPgServer
().
runTest
(
this
);
//
new TestPgServer().runTest(this);
new
TestReader
().
runTest
(
this
);
//
new TestReader().runTest(this);
new
TestRecovery
().
runTest
(
this
);
//
new TestRecovery().runTest(this);
new
TestSampleApps
().
runTest
(
this
);
//
new TestSampleApps().runTest(this);
new
TestScriptReader
().
runTest
(
this
);
//
new TestScriptReader().runTest(this);
runTest
(
"org.h2.test.unit.TestServlet"
);
//
runTest("org.h2.test.unit.TestServlet");
new
TestSecurity
().
runTest
(
this
);
//
new TestSecurity().runTest(this);
new
TestShell
().
runTest
(
this
);
//
new TestShell().runTest(this);
new
TestSort
().
runTest
(
this
);
//
new TestSort().runTest(this);
new
TestStreams
().
runTest
(
this
);
//
new TestStreams().runTest(this);
new
TestStringCache
().
runTest
(
this
);
//
new TestStringCache().runTest(this);
new
TestStringUtils
().
runTest
(
this
);
//
new TestStringUtils().runTest(this);
new
TestTools
().
runTest
(
this
);
//
new TestTools().runTest(this);
new
TestTraceSystem
().
runTest
(
this
);
//
new TestTraceSystem().runTest(this);
new
TestUpgrade
().
runTest
(
this
);
//
new TestUpgrade().runTest(this);
new
TestUtils
().
runTest
(
this
);
//
new TestUtils().runTest(this);
new
TestValue
().
runTest
(
this
);
//
new TestValue().runTest(this);
new
TestValueHashMap
().
runTest
(
this
);
//
new TestValueHashMap().runTest(this);
new
TestValueMemory
().
runTest
(
this
);
//
new TestValueMemory().runTest(this);
}
}
private
void
runTest
(
String
className
)
{
private
void
runTest
(
String
className
)
{
...
...
h2/src/test/org/h2/test/TestBase.java
浏览文件 @
1397fe53
...
@@ -267,7 +267,7 @@ public abstract class TestBase {
...
@@ -267,7 +267,7 @@ public abstract class TestBase {
url
=
name
;
url
=
name
;
}
}
int
test
;
int
test
;
//
url = addOption(url, "DEFAULT_TABLE_ENGINE", MVTableEngine.class.getName());
url
=
addOption
(
url
,
"DEFAULT_TABLE_ENGINE"
,
MVTableEngine
.
class
.
getName
());
if
(!
config
.
memory
)
{
if
(!
config
.
memory
)
{
if
(
config
.
smallLog
&&
admin
)
{
if
(
config
.
smallLog
&&
admin
)
{
url
=
addOption
(
url
,
"MAX_LOG_SIZE"
,
"1"
);
url
=
addOption
(
url
,
"MAX_LOG_SIZE"
,
"1"
);
...
...
h2/src/test/org/h2/test/store/SampleTypeFactory.java
浏览文件 @
1397fe53
...
@@ -27,9 +27,4 @@ public class SampleTypeFactory implements DataTypeFactory {
...
@@ -27,9 +27,4 @@ public class SampleTypeFactory implements DataTypeFactory {
return
parent
.
buildDataType
(
s
);
return
parent
.
buildDataType
(
s
);
}
}
@Override
public
String
getDataType
(
Class
<?>
objectClass
)
{
return
parent
.
getDataType
(
objectClass
);
}
}
}
h2/src/test/org/h2/test/store/SequenceMap.java
浏览文件 @
1397fe53
...
@@ -71,4 +71,23 @@ public class SequenceMap extends MVMap<Long, Long> {
...
@@ -71,4 +71,23 @@ public class SequenceMap extends MVMap<Long, Long> {
};
};
}
}
/**
* A builder for this class.
*/
public
static
class
Builder
implements
MapBuilder
<
SequenceMap
,
Long
,
Long
>
{
/**
* Create a new builder.
*/
public
Builder
()
{
// ignore
}
@Override
public
SequenceMap
create
()
{
return
new
SequenceMap
();
}
}
}
}
h2/src/test/org/h2/test/store/TestConcurrent.java
浏览文件 @
1397fe53
...
@@ -50,8 +50,8 @@ public class TestConcurrent extends TestMVStore {
...
@@ -50,8 +50,8 @@ public class TestConcurrent extends TestMVStore {
*/
*/
private
void
testConcurrentMap
()
throws
InterruptedException
{
private
void
testConcurrentMap
()
throws
InterruptedException
{
final
MVStore
s
=
openStore
(
null
);
final
MVStore
s
=
openStore
(
null
);
final
MVMap
<
Integer
,
Integer
>
cm
=
MVMapConcurrent
.
create
();
final
MVMap
<
Integer
,
Integer
>
m
=
s
.
openMap
(
"data"
,
final
MVMap
<
Integer
,
Integer
>
m
=
s
.
openMap
(
"data"
,
cm
);
new
MVMapConcurrent
.
Builder
<
Integer
,
Integer
>()
);
final
int
size
=
20
;
final
int
size
=
20
;
final
Random
rand
=
new
Random
(
1
);
final
Random
rand
=
new
Random
(
1
);
Task
task
=
new
Task
()
{
Task
task
=
new
Task
()
{
...
@@ -210,7 +210,7 @@ public class TestConcurrent extends TestMVStore {
...
@@ -210,7 +210,7 @@ public class TestConcurrent extends TestMVStore {
*/
*/
private
void
testConcurrentWrite
()
throws
InterruptedException
{
private
void
testConcurrentWrite
()
throws
InterruptedException
{
final
MVStore
s
=
openStore
(
null
);
final
MVStore
s
=
openStore
(
null
);
final
MVMap
<
Integer
,
Integer
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
Integer
.
class
);
final
MVMap
<
Integer
,
Integer
>
m
=
s
.
openMap
(
"data"
);
final
int
size
=
20
;
final
int
size
=
20
;
final
Random
rand
=
new
Random
(
1
);
final
Random
rand
=
new
Random
(
1
);
Task
task
=
new
Task
()
{
Task
task
=
new
Task
()
{
...
@@ -265,7 +265,7 @@ public class TestConcurrent extends TestMVStore {
...
@@ -265,7 +265,7 @@ public class TestConcurrent extends TestMVStore {
private
void
testConcurrentRead
()
throws
InterruptedException
{
private
void
testConcurrentRead
()
throws
InterruptedException
{
final
MVStore
s
=
openStore
(
null
);
final
MVStore
s
=
openStore
(
null
);
final
MVMap
<
Integer
,
Integer
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
Integer
.
class
);
final
MVMap
<
Integer
,
Integer
>
m
=
s
.
openMap
(
"data"
);
final
int
size
=
3
;
final
int
size
=
3
;
int
x
=
(
int
)
s
.
getCurrentVersion
();
int
x
=
(
int
)
s
.
getCurrentVersion
();
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
...
...
h2/src/test/org/h2/test/store/TestMVRTree.java
浏览文件 @
1397fe53
...
@@ -23,7 +23,6 @@ import javax.imageio.stream.FileImageOutputStream;
...
@@ -23,7 +23,6 @@ import javax.imageio.stream.FileImageOutputStream;
import
org.h2.mvstore.MVStore
;
import
org.h2.mvstore.MVStore
;
import
org.h2.mvstore.rtree.MVRTreeMap
;
import
org.h2.mvstore.rtree.MVRTreeMap
;
import
org.h2.mvstore.rtree.SpatialKey
;
import
org.h2.mvstore.rtree.SpatialKey
;
import
org.h2.mvstore.type.ObjectDataType
;
import
org.h2.mvstore.type.StringDataType
;
import
org.h2.mvstore.type.StringDataType
;
import
org.h2.store.fs.FileUtils
;
import
org.h2.store.fs.FileUtils
;
import
org.h2.test.TestBase
;
import
org.h2.test.TestBase
;
...
@@ -54,12 +53,9 @@ public class TestMVRTree extends TestMVStore {
...
@@ -54,12 +53,9 @@ public class TestMVRTree extends TestMVStore {
// create an in-memory store
// create an in-memory store
MVStore
s
=
MVStore
.
open
(
null
);
MVStore
s
=
MVStore
.
open
(
null
);
// create an R-tree map
// open an R-tree map
// the key has 2 dimensions, the value is a string
MVRTreeMap
<
String
>
r
=
s
.
openMap
(
"data"
,
MVRTreeMap
<
String
>
r
=
MVRTreeMap
.
create
(
2
,
new
ObjectDataType
());
new
MVRTreeMap
.
Builder
<
String
>());
// open the map
r
=
s
.
openMap
(
"data"
,
r
);
// add two key-value pairs
// add two key-value pairs
// the first value is the key id (to make the key unique)
// the first value is the key id (to make the key unique)
...
@@ -84,8 +80,9 @@ public class TestMVRTree extends TestMVStore {
...
@@ -84,8 +80,9 @@ public class TestMVRTree extends TestMVStore {
MVStore
s
;
MVStore
s
;
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
// s.setMaxPageSize(50);
// s.setMaxPageSize(50);
MVRTreeMap
<
String
>
r
=
MVRTreeMap
.
create
(
2
,
StringDataType
.
INSTANCE
);
MVRTreeMap
<
String
>
r
=
s
.
openMap
(
"data"
,
r
=
s
.
openMap
(
"data"
,
r
);
new
MVRTreeMap
.
Builder
<
String
>().
dimensions
(
2
).
valueType
(
StringDataType
.
INSTANCE
));
// r.setQuadraticSplit(true);
// r.setQuadraticSplit(true);
Random
rand
=
new
Random
(
1
);
Random
rand
=
new
Random
(
1
);
int
len
=
1000
;
int
len
=
1000
;
...
@@ -109,8 +106,9 @@ public class TestMVRTree extends TestMVStore {
...
@@ -109,8 +106,9 @@ public class TestMVRTree extends TestMVStore {
s
.
store
();
s
.
store
();
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
r
=
MVRTreeMap
.
create
(
2
,
StringDataType
.
INSTANCE
);
r
=
s
.
openMap
(
"data"
,
r
=
s
.
openMap
(
"data"
,
r
);
new
MVRTreeMap
.
Builder
<
String
>().
dimensions
(
2
).
valueType
(
StringDataType
.
INSTANCE
));
// t = System.currentTimeMillis();
// t = System.currentTimeMillis();
rand
=
new
Random
(
1
);
rand
=
new
Random
(
1
);
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
...
@@ -148,8 +146,10 @@ public class TestMVRTree extends TestMVStore {
...
@@ -148,8 +146,10 @@ public class TestMVRTree extends TestMVStore {
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
;
MVStore
s
;
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
MVRTreeMap
<
String
>
r
=
MVRTreeMap
.
create
(
2
,
StringDataType
.
INSTANCE
);
MVRTreeMap
<
String
>
r
=
s
.
openMap
(
"data"
,
r
=
s
.
openMap
(
"data"
,
r
);
new
MVRTreeMap
.
Builder
<
String
>().
dimensions
(
2
).
valueType
(
StringDataType
.
INSTANCE
));
add
(
r
,
"Bern"
,
key
(
0
,
46.57
,
7.27
,
124381
));
add
(
r
,
"Bern"
,
key
(
0
,
46.57
,
7.27
,
124381
));
add
(
r
,
"Basel"
,
key
(
1
,
47.34
,
7.36
,
170903
));
add
(
r
,
"Basel"
,
key
(
1
,
47.34
,
7.36
,
170903
));
add
(
r
,
"Zurich"
,
key
(
2
,
47.22
,
8.33
,
376008
));
add
(
r
,
"Zurich"
,
key
(
2
,
47.22
,
8.33
,
376008
));
...
@@ -273,9 +273,11 @@ public class TestMVRTree extends TestMVStore {
...
@@ -273,9 +273,11 @@ public class TestMVRTree extends TestMVStore {
String
fileName
=
getBaseDir
()
+
"/testRandom.h3"
;
String
fileName
=
getBaseDir
()
+
"/testRandom.h3"
;
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVRTreeMap
<
String
>
m
=
MVRTreeMap
.
create
(
2
,
StringDataType
.
INSTANCE
);
MVRTreeMap
<
String
>
m
=
s
.
openMap
(
"data"
,
new
MVRTreeMap
.
Builder
<
String
>());
m
.
setQuadraticSplit
(
quadraticSplit
);
m
.
setQuadraticSplit
(
quadraticSplit
);
m
=
s
.
openMap
(
"data"
,
m
);
HashMap
<
SpatialKey
,
String
>
map
=
new
HashMap
<
SpatialKey
,
String
>();
HashMap
<
SpatialKey
,
String
>
map
=
new
HashMap
<
SpatialKey
,
String
>();
Random
rand
=
new
Random
(
1
);
Random
rand
=
new
Random
(
1
);
int
operationCount
=
1000
;
int
operationCount
=
1000
;
...
...
h2/src/test/org/h2/test/store/TestMVStore.java
浏览文件 @
1397fe53
...
@@ -91,8 +91,7 @@ public class TestMVStore extends TestBase {
...
@@ -91,8 +91,7 @@ public class TestMVStore extends TestBase {
String
fileName
=
getBaseDir
()
+
"/testMapType.h3"
;
String
fileName
=
getBaseDir
()
+
"/testMapType.h3"
;
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
SequenceMap
seq
=
new
SequenceMap
();
SequenceMap
seq
=
s
.
openMap
(
"data"
,
new
SequenceMap
.
Builder
());
seq
=
s
.
openMap
(
"data"
,
seq
);
StringBuilder
buff
=
new
StringBuilder
();
StringBuilder
buff
=
new
StringBuilder
();
for
(
long
x
:
seq
.
keySet
())
{
for
(
long
x
:
seq
.
keySet
())
{
buff
.
append
(
x
).
append
(
';'
);
buff
.
append
(
x
).
append
(
';'
);
...
@@ -455,8 +454,7 @@ public class TestMVStore extends TestBase {
...
@@ -455,8 +454,7 @@ public class TestMVStore extends TestBase {
// long t = System.currentTimeMillis();
// long t = System.currentTimeMillis();
for
(
int
j
=
0
;
j
<
3
;
j
++)
{
for
(
int
j
=
0
;
j
<
3
;
j
++)
{
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
Map
<
String
,
Integer
>
m
=
s
.
openMap
(
"data"
,
String
.
class
,
Map
<
String
,
Integer
>
m
=
s
.
openMap
(
"data"
);
Integer
.
class
);
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
Integer
x
=
m
.
get
(
"value"
);
Integer
x
=
m
.
get
(
"value"
);
m
.
put
(
"value"
,
x
==
null
?
0
:
x
+
1
);
m
.
put
(
"value"
,
x
==
null
?
0
:
x
+
1
);
...
@@ -474,7 +472,7 @@ public class TestMVStore extends TestBase {
...
@@ -474,7 +472,7 @@ public class TestMVStore extends TestBase {
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
s
.
setPageSize
(
6
);
s
.
setPageSize
(
6
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
m
.
put
(
i
,
"Hi"
);
m
.
put
(
i
,
"Hi"
);
}
}
...
@@ -508,7 +506,7 @@ public class TestMVStore extends TestBase {
...
@@ -508,7 +506,7 @@ public class TestMVStore extends TestBase {
MVStore
s
;
MVStore
s
;
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
MVMap
<
String
,
String
>
m
;
MVMap
<
String
,
String
>
m
;
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
long
first
=
s
.
getCurrentVersion
();
long
first
=
s
.
getCurrentVersion
();
s
.
incrementVersion
();
s
.
incrementVersion
();
m
.
put
(
"1"
,
"Hello"
);
m
.
put
(
"1"
,
"Hello"
);
...
@@ -547,7 +545,7 @@ public class TestMVStore extends TestBase {
...
@@ -547,7 +545,7 @@ public class TestMVStore extends TestBase {
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
assertEquals
(
"Hi"
,
m
.
get
(
"1"
));
assertEquals
(
"Hi"
,
m
.
get
(
"1"
));
assertEquals
(
null
,
m
.
get
(
"2"
));
assertEquals
(
null
,
m
.
get
(
"2"
));
...
@@ -563,7 +561,7 @@ public class TestMVStore extends TestBase {
...
@@ -563,7 +561,7 @@ public class TestMVStore extends TestBase {
MVStore
s
;
MVStore
s
;
MVMap
<
Integer
,
String
>
m
;
MVMap
<
Integer
,
String
>
m
;
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
m
.
put
(
i
,
"Hello World"
);
m
.
put
(
i
,
"Hello World"
);
}
}
...
@@ -572,7 +570,7 @@ public class TestMVStore extends TestBase {
...
@@ -572,7 +570,7 @@ public class TestMVStore extends TestBase {
long
len
=
FileUtils
.
size
(
fileName
);
long
len
=
FileUtils
.
size
(
fileName
);
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
s
.
setRetentionTime
(
0
);
s
.
setRetentionTime
(
0
);
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
m
.
clear
();
m
.
clear
();
s
.
store
();
s
.
store
();
s
.
compact
(
100
);
s
.
compact
(
100
);
...
@@ -588,7 +586,7 @@ public class TestMVStore extends TestBase {
...
@@ -588,7 +586,7 @@ public class TestMVStore extends TestBase {
MVMap
<
Integer
,
String
>
m
;
MVMap
<
Integer
,
String
>
m
;
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
s
.
setPageSize
(
700
);
s
.
setPageSize
(
700
);
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
m
.
put
(
i
,
"Hello World"
);
m
.
put
(
i
,
"Hello World"
);
assertEquals
(
i
+
1
,
m
.
size
());
assertEquals
(
i
+
1
,
m
.
size
());
...
@@ -600,7 +598,7 @@ public class TestMVStore extends TestBase {
...
@@ -600,7 +598,7 @@ public class TestMVStore extends TestBase {
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
m
.
clear
();
m
.
clear
();
assertEquals
(
0
,
m
.
size
());
assertEquals
(
0
,
m
.
size
());
s
.
store
();
s
.
store
();
...
@@ -622,9 +620,9 @@ public class TestMVStore extends TestBase {
...
@@ -622,9 +620,9 @@ public class TestMVStore extends TestBase {
assertEquals
(
45
,
s
.
getRetentionTime
());
assertEquals
(
45
,
s
.
getRetentionTime
());
assertEquals
(
0
,
s
.
getCurrentVersion
());
assertEquals
(
0
,
s
.
getCurrentVersion
());
assertFalse
(
s
.
hasUnsavedChanges
());
assertFalse
(
s
.
hasUnsavedChanges
());
MVMap
<
String
,
String
>
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
m
=
s
.
openMap
(
"data"
);
assertTrue
(
s
.
hasUnsavedChanges
());
assertTrue
(
s
.
hasUnsavedChanges
());
MVMap
<
String
,
String
>
m0
=
s
.
openMap
(
"data0"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
m0
=
s
.
openMap
(
"data0"
);
m
.
put
(
"1"
,
"Hello"
);
m
.
put
(
"1"
,
"Hello"
);
assertEquals
(
1
,
s
.
incrementVersion
());
assertEquals
(
1
,
s
.
incrementVersion
());
s
.
rollbackTo
(
1
);
s
.
rollbackTo
(
1
);
...
@@ -638,9 +636,9 @@ public class TestMVStore extends TestBase {
...
@@ -638,9 +636,9 @@ public class TestMVStore extends TestBase {
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
assertEquals
(
2
,
s
.
getCurrentVersion
());
assertEquals
(
2
,
s
.
getCurrentVersion
());
meta
=
s
.
getMetaMap
();
meta
=
s
.
getMetaMap
();
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
m0
=
s
.
openMap
(
"data0"
,
String
.
class
,
String
.
class
);
m0
=
s
.
openMap
(
"data0"
);
MVMap
<
String
,
String
>
m1
=
s
.
openMap
(
"data1"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
m1
=
s
.
openMap
(
"data1"
);
m
.
put
(
"1"
,
"Hallo"
);
m
.
put
(
"1"
,
"Hallo"
);
m0
.
put
(
"1"
,
"Hallo"
);
m0
.
put
(
"1"
,
"Hallo"
);
m1
.
put
(
"1"
,
"Hallo"
);
m1
.
put
(
"1"
,
"Hallo"
);
...
@@ -661,8 +659,8 @@ public class TestMVStore extends TestBase {
...
@@ -661,8 +659,8 @@ public class TestMVStore extends TestBase {
assertTrue
(
meta
.
get
(
"name.data"
)
!=
null
);
assertTrue
(
meta
.
get
(
"name.data"
)
!=
null
);
assertTrue
(
meta
.
get
(
"name.data0"
)
!=
null
);
assertTrue
(
meta
.
get
(
"name.data0"
)
!=
null
);
assertNull
(
meta
.
get
(
"name.data1"
));
assertNull
(
meta
.
get
(
"name.data1"
));
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
m0
=
s
.
openMap
(
"data0"
,
String
.
class
,
String
.
class
);
m0
=
s
.
openMap
(
"data0"
);
assertNull
(
m0
.
get
(
"1"
));
assertNull
(
m0
.
get
(
"1"
));
assertEquals
(
"Hello"
,
m
.
get
(
"1"
));
assertEquals
(
"Hello"
,
m
.
get
(
"1"
));
assertFalse
(
m0
.
isReadOnly
());
assertFalse
(
m0
.
isReadOnly
());
...
@@ -677,20 +675,20 @@ public class TestMVStore extends TestBase {
...
@@ -677,20 +675,20 @@ public class TestMVStore extends TestBase {
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
assertEquals
(
4
,
s
.
getCurrentVersion
());
assertEquals
(
4
,
s
.
getCurrentVersion
());
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
m
.
put
(
"1"
,
"Hi"
);
m
.
put
(
"1"
,
"Hi"
);
s
.
store
();
s
.
store
();
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
assertEquals
(
"Hi"
,
m
.
get
(
"1"
));
assertEquals
(
"Hi"
,
m
.
get
(
"1"
));
s
.
rollbackTo
(
v4
);
s
.
rollbackTo
(
v4
);
assertEquals
(
"Hallo"
,
m
.
get
(
"1"
));
assertEquals
(
"Hallo"
,
m
.
get
(
"1"
));
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
assertEquals
(
"Hallo"
,
m
.
get
(
"1"
));
assertEquals
(
"Hallo"
,
m
.
get
(
"1"
));
s
.
close
();
s
.
close
();
}
}
...
@@ -701,14 +699,14 @@ public class TestMVStore extends TestBase {
...
@@ -701,14 +699,14 @@ public class TestMVStore extends TestBase {
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
assertEquals
(
0
,
s
.
getCurrentVersion
());
assertEquals
(
0
,
s
.
getCurrentVersion
());
s
.
setPageSize
(
5
);
s
.
setPageSize
(
5
);
MVMap
<
String
,
String
>
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
m
=
s
.
openMap
(
"data"
);
s
.
rollbackTo
(
0
);
s
.
rollbackTo
(
0
);
assertTrue
(
m
.
isClosed
());
assertTrue
(
m
.
isClosed
());
assertEquals
(
0
,
s
.
getCurrentVersion
());
assertEquals
(
0
,
s
.
getCurrentVersion
());
m
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
MVMap
<
String
,
String
>
m0
=
s
.
openMap
(
"data0"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
m0
=
s
.
openMap
(
"data0"
);
MVMap
<
String
,
String
>
m2
=
s
.
openMap
(
"data2"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
m2
=
s
.
openMap
(
"data2"
);
m
.
put
(
"1"
,
"Hello"
);
m
.
put
(
"1"
,
"Hello"
);
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
m2
.
put
(
""
+
i
,
"Test"
);
m2
.
put
(
""
+
i
,
"Test"
);
...
@@ -716,7 +714,7 @@ public class TestMVStore extends TestBase {
...
@@ -716,7 +714,7 @@ public class TestMVStore extends TestBase {
long
v1
=
s
.
incrementVersion
();
long
v1
=
s
.
incrementVersion
();
assertEquals
(
1
,
v1
);
assertEquals
(
1
,
v1
);
assertEquals
(
1
,
s
.
getCurrentVersion
());
assertEquals
(
1
,
s
.
getCurrentVersion
());
MVMap
<
String
,
String
>
m1
=
s
.
openMap
(
"data1"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
m1
=
s
.
openMap
(
"data1"
);
assertEquals
(
"Test"
,
m2
.
get
(
"1"
));
assertEquals
(
"Test"
,
m2
.
get
(
"1"
));
m
.
put
(
"1"
,
"Hallo"
);
m
.
put
(
"1"
,
"Hallo"
);
m0
.
put
(
"1"
,
"Hallo"
);
m0
.
put
(
"1"
,
"Hallo"
);
...
@@ -742,7 +740,7 @@ public class TestMVStore extends TestBase {
...
@@ -742,7 +740,7 @@ public class TestMVStore extends TestBase {
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVMap
<
String
,
String
>
m
=
s
.
getMetaMap
();
MVMap
<
String
,
String
>
m
=
s
.
getMetaMap
();
MVMap
<
String
,
String
>
data
=
s
.
openMap
(
"data"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
data
=
s
.
openMap
(
"data"
);
data
.
put
(
"1"
,
"Hello"
);
data
.
put
(
"1"
,
"Hello"
);
data
.
put
(
"2"
,
"World"
);
data
.
put
(
"2"
,
"World"
);
s
.
store
();
s
.
store
();
...
@@ -751,15 +749,15 @@ public class TestMVStore extends TestBase {
...
@@ -751,15 +749,15 @@ public class TestMVStore extends TestBase {
assertFalse
(
m
.
containsKey
(
"chunk.2"
));
assertFalse
(
m
.
containsKey
(
"chunk.2"
));
String
id
=
s
.
getMetaMap
().
get
(
"name.data"
);
String
id
=
s
.
getMetaMap
().
get
(
"name.data"
);
assertEquals
(
"name:data"
,
m
.
get
(
"map."
+
id
));
assertEquals
(
"name:data
,key:o,value:o
"
,
m
.
get
(
"map."
+
id
));
assertTrue
(
m
.
containsKey
(
"chunk.1"
));
assertTrue
(
m
.
containsKey
(
"chunk.1"
));
assertEquals
(
"Hello"
,
data
.
put
(
"1"
,
"Hallo"
));
assertEquals
(
"Hello"
,
data
.
put
(
"1"
,
"Hallo"
));
s
.
store
();
s
.
store
();
assertEquals
(
"name:data"
,
m
.
get
(
"map."
+
id
));
assertEquals
(
"name:data
,key:o,value:o
"
,
m
.
get
(
"map."
+
id
));
assertTrue
(
m
.
get
(
"root.1"
).
length
()
>
0
);
assertTrue
(
m
.
get
(
"root.1"
).
length
()
>
0
);
assertTrue
(
m
.
containsKey
(
"chunk.1"
));
assertTrue
(
m
.
containsKey
(
"chunk.1"
));
assertEquals
(
"id:1,length:2
46,maxLength:224
,maxLengthLive:0,"
+
assertEquals
(
"id:1,length:2
60,maxLength:288
,maxLengthLive:0,"
+
"metaRoot:27487791092
2
,pageCount:2,"
+
"metaRoot:27487791092
4
,pageCount:2,"
+
"start:8192,time:0,version:1"
,
m
.
get
(
"chunk.1"
));
"start:8192,time:0,version:1"
,
m
.
get
(
"chunk.1"
));
assertTrue
(
m
.
containsKey
(
"chunk.2"
));
assertTrue
(
m
.
containsKey
(
"chunk.2"
));
...
@@ -782,7 +780,7 @@ public class TestMVStore extends TestBase {
...
@@ -782,7 +780,7 @@ public class TestMVStore extends TestBase {
int
len
=
100
;
int
len
=
100
;
// TreeMap<Integer, String> m = new TreeMap<Integer, String>();
// TreeMap<Integer, String> m = new TreeMap<Integer, String>();
// HashMap<Integer, String> m = New.hashMap();
// HashMap<Integer, String> m = New.hashMap();
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
// t = System.currentTimeMillis();
// t = System.currentTimeMillis();
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
assertNull
(
m
.
put
(
i
,
"Hello World"
));
assertNull
(
m
.
put
(
i
,
"Hello World"
));
...
@@ -813,16 +811,13 @@ public class TestMVStore extends TestBase {
...
@@ -813,16 +811,13 @@ public class TestMVStore extends TestBase {
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
// s.setCompressor(null);
// s.setCompressor(null);
s
.
setPageSize
(
40
);
s
.
setPageSize
(
40
);
MVMap
<
Integer
,
Object
[]>
m
=
new
MVMap
<
Integer
,
Object
[]>(
MVMap
<
Integer
,
Object
[]>
m
=
s
.
openMap
(
"data"
,
new
ObjectDataType
(),
new
MVMap
.
Builder
<
Integer
,
Object
[]>()
new
RowDataType
(
new
DataType
[]
{
.
valueType
(
new
RowDataType
(
new
DataType
[]
{
new
ObjectDataType
(),
new
ObjectDataType
(),
StringDataType
.
INSTANCE
,
StringDataType
.
INSTANCE
,
StringDataType
.
INSTANCE
StringDataType
.
INSTANCE
})));
})
);
m
=
s
.
openMap
(
"data"
,
m
);
// Profiler prof = new Profiler();
// Profiler prof = new Profiler();
// prof.startCollecting();
// prof.startCollecting();
// long t = System.currentTimeMillis();
// long t = System.currentTimeMillis();
...
@@ -852,7 +847,7 @@ public class TestMVStore extends TestBase {
...
@@ -852,7 +847,7 @@ public class TestMVStore extends TestBase {
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
int
count
=
2000
;
int
count
=
2000
;
// Profiler p = new Profiler();
// Profiler p = new Profiler();
// p.startCollecting();
// p.startCollecting();
...
@@ -878,7 +873,7 @@ public class TestMVStore extends TestBase {
...
@@ -878,7 +873,7 @@ public class TestMVStore extends TestBase {
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
assertNull
(
m
.
get
(
0
));
assertNull
(
m
.
get
(
0
));
for
(
int
i
=
1
;
i
<
count
;
i
++)
{
for
(
int
i
=
1
;
i
<
count
;
i
++)
{
assertEquals
(
"hello "
+
i
,
m
.
get
(
i
));
assertEquals
(
"hello "
+
i
,
m
.
get
(
i
));
...
@@ -901,7 +896,7 @@ public class TestMVStore extends TestBase {
...
@@ -901,7 +896,7 @@ public class TestMVStore extends TestBase {
for
(
int
j
=
0
;
j
<
20
;
j
++)
{
for
(
int
j
=
0
;
j
<
20
;
j
++)
{
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
s
.
setRetentionTime
(
0
);
s
.
setRetentionTime
(
0
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
m
.
put
(
j
+
i
,
"Hello "
+
j
);
m
.
put
(
j
+
i
,
"Hello "
+
j
);
}
}
...
@@ -919,7 +914,7 @@ public class TestMVStore extends TestBase {
...
@@ -919,7 +914,7 @@ public class TestMVStore extends TestBase {
// long len = FileUtils.size(fileName);
// long len = FileUtils.size(fileName);
// System.out.println("len0: " + len);
// System.out.println("len0: " + len);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
m
.
remove
(
i
);
m
.
remove
(
i
);
}
}
...
@@ -929,7 +924,7 @@ public class TestMVStore extends TestBase {
...
@@ -929,7 +924,7 @@ public class TestMVStore extends TestBase {
// len = FileUtils.size(fileName);
// len = FileUtils.size(fileName);
// System.out.println("len1: " + len);
// System.out.println("len1: " + len);
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
s
.
compact
(
80
);
s
.
compact
(
80
);
s
.
close
();
s
.
close
();
// len = FileUtils.size(fileName);
// len = FileUtils.size(fileName);
...
@@ -943,7 +938,7 @@ public class TestMVStore extends TestBase {
...
@@ -943,7 +938,7 @@ public class TestMVStore extends TestBase {
for
(
int
j
=
0
;
j
<
20
;
j
++)
{
for
(
int
j
=
0
;
j
<
20
;
j
++)
{
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
s
.
setRetentionTime
(
0
);
s
.
setRetentionTime
(
0
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
m
.
put
(
i
,
"Hello"
);
m
.
put
(
i
,
"Hello"
);
}
}
...
@@ -968,7 +963,7 @@ public class TestMVStore extends TestBase {
...
@@ -968,7 +963,7 @@ public class TestMVStore extends TestBase {
String
fileName
=
getBaseDir
()
+
"/testRandom.h3"
;
String
fileName
=
getBaseDir
()
+
"/testRandom.h3"
;
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVMap
<
Integer
,
Integer
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
Integer
.
class
);
MVMap
<
Integer
,
Integer
>
m
=
s
.
openMap
(
"data"
);
TreeMap
<
Integer
,
Integer
>
map
=
new
TreeMap
<
Integer
,
Integer
>();
TreeMap
<
Integer
,
Integer
>
map
=
new
TreeMap
<
Integer
,
Integer
>();
Random
r
=
new
Random
(
1
);
Random
r
=
new
Random
(
1
);
int
operationCount
=
1000
;
int
operationCount
=
1000
;
...
@@ -1031,24 +1026,24 @@ public class TestMVStore extends TestBase {
...
@@ -1031,24 +1026,24 @@ public class TestMVStore extends TestBase {
String
fileName
=
getBaseDir
()
+
"/testKeyValueClasses.h3"
;
String
fileName
=
getBaseDir
()
+
"/testKeyValueClasses.h3"
;
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVMap
<
Integer
,
String
>
is
=
s
.
openMap
(
"intString"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
is
=
s
.
openMap
(
"intString"
);
is
.
put
(
1
,
"Hello"
);
is
.
put
(
1
,
"Hello"
);
MVMap
<
Integer
,
Integer
>
ii
=
s
.
openMap
(
"intInt"
,
Integer
.
class
,
Integer
.
class
);
MVMap
<
Integer
,
Integer
>
ii
=
s
.
openMap
(
"intInt"
);
ii
.
put
(
1
,
10
);
ii
.
put
(
1
,
10
);
MVMap
<
String
,
Integer
>
si
=
s
.
openMap
(
"stringInt"
,
String
.
class
,
Integer
.
class
);
MVMap
<
String
,
Integer
>
si
=
s
.
openMap
(
"stringInt"
);
si
.
put
(
"Test"
,
10
);
si
.
put
(
"Test"
,
10
);
MVMap
<
String
,
String
>
ss
=
s
.
openMap
(
"stringString"
,
String
.
class
,
String
.
class
);
MVMap
<
String
,
String
>
ss
=
s
.
openMap
(
"stringString"
);
ss
.
put
(
"Hello"
,
"World"
);
ss
.
put
(
"Hello"
,
"World"
);
s
.
store
();
s
.
store
();
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
is
=
s
.
openMap
(
"intString"
,
Integer
.
class
,
String
.
class
);
is
=
s
.
openMap
(
"intString"
);
assertEquals
(
"Hello"
,
is
.
get
(
1
));
assertEquals
(
"Hello"
,
is
.
get
(
1
));
ii
=
s
.
openMap
(
"intInt"
,
Integer
.
class
,
Integer
.
class
);
ii
=
s
.
openMap
(
"intInt"
);
assertEquals
(
10
,
ii
.
get
(
1
).
intValue
());
assertEquals
(
10
,
ii
.
get
(
1
).
intValue
());
si
=
s
.
openMap
(
"stringInt"
,
String
.
class
,
Integer
.
class
);
si
=
s
.
openMap
(
"stringInt"
);
assertEquals
(
10
,
si
.
get
(
"Test"
).
intValue
());
assertEquals
(
10
,
si
.
get
(
"Test"
).
intValue
());
ss
=
s
.
openMap
(
"stringString"
,
String
.
class
,
String
.
class
);
ss
=
s
.
openMap
(
"stringString"
);
assertEquals
(
"World"
,
ss
.
get
(
"Hello"
));
assertEquals
(
"World"
,
ss
.
get
(
"Hello"
));
s
.
close
();
s
.
close
();
}
}
...
@@ -1057,7 +1052,7 @@ public class TestMVStore extends TestBase {
...
@@ -1057,7 +1052,7 @@ public class TestMVStore extends TestBase {
String
fileName
=
getBaseDir
()
+
"/testIterate.h3"
;
String
fileName
=
getBaseDir
()
+
"/testIterate.h3"
;
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
Iterator
<
Integer
>
it
=
m
.
keyIterator
(
null
);
Iterator
<
Integer
>
it
=
m
.
keyIterator
(
null
);
assertFalse
(
it
.
hasNext
());
assertFalse
(
it
.
hasNext
());
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
...
@@ -1090,7 +1085,7 @@ public class TestMVStore extends TestBase {
...
@@ -1090,7 +1085,7 @@ public class TestMVStore extends TestBase {
String
fileName
=
getBaseDir
()
+
"/testCloseTwice.h3"
;
String
fileName
=
getBaseDir
()
+
"/testCloseTwice.h3"
;
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
m
.
put
(
i
,
"hello "
+
i
);
m
.
put
(
i
,
"hello "
+
i
);
}
}
...
@@ -1104,7 +1099,7 @@ public class TestMVStore extends TestBase {
...
@@ -1104,7 +1099,7 @@ public class TestMVStore extends TestBase {
String
fileName
=
getBaseDir
()
+
"/testSimple.h3"
;
String
fileName
=
getBaseDir
()
+
"/testSimple.h3"
;
FileUtils
.
delete
(
fileName
);
FileUtils
.
delete
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVStore
s
=
openStore
(
fileName
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
MVMap
<
Integer
,
String
>
m
=
s
.
openMap
(
"data"
);
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
m
.
put
(
i
,
"hello "
+
i
);
m
.
put
(
i
,
"hello "
+
i
);
}
}
...
@@ -1119,7 +1114,7 @@ public class TestMVStore extends TestBase {
...
@@ -1119,7 +1114,7 @@ public class TestMVStore extends TestBase {
s
.
close
();
s
.
close
();
s
=
openStore
(
fileName
);
s
=
openStore
(
fileName
);
m
=
s
.
openMap
(
"data"
,
Integer
.
class
,
String
.
class
);
m
=
s
.
openMap
(
"data"
);
assertNull
(
m
.
get
(
0
));
assertNull
(
m
.
get
(
0
));
for
(
int
i
=
1
;
i
<
3
;
i
++)
{
for
(
int
i
=
1
;
i
<
3
;
i
++)
{
assertEquals
(
"hello "
+
i
,
m
.
get
(
i
));
assertEquals
(
"hello "
+
i
,
m
.
get
(
i
));
...
...
h2/src/test/org/h2/test/store/TestMVTableEngine.java
浏览文件 @
1397fe53
...
@@ -28,7 +28,7 @@ public class TestMVTableEngine extends TestBase {
...
@@ -28,7 +28,7 @@ public class TestMVTableEngine extends TestBase {
}
}
public
void
test
()
throws
Exception
{
public
void
test
()
throws
Exception
{
//
testCase();
testCase
();
testSimple
();
testSimple
();
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论