Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
5799af16
提交
5799af16
authored
16 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
New experimental page store.
上级
edce6934
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
151 行增加
和
87 行删除
+151
-87
PageScanIndex.java
h2/src/main/org/h2/index/PageScanIndex.java
+13
-4
LogSystem.java
h2/src/main/org/h2/log/LogSystem.java
+11
-1
PageInputStream.java
h2/src/main/org/h2/store/PageInputStream.java
+1
-1
PageLog.java
h2/src/main/org/h2/store/PageLog.java
+24
-2
PageOutputStream.java
h2/src/main/org/h2/store/PageOutputStream.java
+4
-0
PageStore.java
h2/src/main/org/h2/store/PageStore.java
+98
-79
没有找到文件。
h2/src/main/org/h2/index/PageScanIndex.java
浏览文件 @
5799af16
...
...
@@ -54,12 +54,16 @@ public class PageScanIndex extends BaseIndex implements RowIndex {
int
todo
;
return
;
}
this
.
store
=
database
.
getPageStor
ag
e
();
if
(
headPos
==
Index
.
EMPTY_HEAD
||
store
.
isNew
()
)
{
// new table
, or the system table for a new database
this
.
store
=
database
.
getPageStore
();
if
(
headPos
==
Index
.
EMPTY_HEAD
)
{
// new table
headPos
=
store
.
allocatePage
();
PageDataLeaf
root
=
new
PageDataLeaf
(
this
,
headPos
,
Page
.
ROOT
,
store
.
createDataPage
());
store
.
updateRecord
(
root
,
root
.
data
);
}
else
if
(
store
.
isNew
())
{
// the system table for a new database
PageDataLeaf
root
=
new
PageDataLeaf
(
this
,
headPos
,
Page
.
ROOT
,
store
.
createDataPage
());
store
.
updateRecord
(
root
,
root
.
data
);
}
else
{
lastKey
=
getPage
(
headPos
).
getLastKey
();
rowCount
=
getPage
(
headPos
).
getRowCount
();
...
...
@@ -100,6 +104,8 @@ public class PageScanIndex extends BaseIndex implements RowIndex {
root
=
newRoot
;
}
rowCount
++;
int
todo
;
// store.getLog().addRow(headPos, row);
}
/**
...
...
@@ -125,6 +131,9 @@ public class PageScanIndex extends BaseIndex implements RowIndex {
case
Page
.
TYPE_DATA_NODE
:
result
=
new
PageDataNode
(
this
,
id
,
parentPageId
,
data
);
break
;
case
Page
.
TYPE_EMPTY
:
PageDataLeaf
empty
=
new
PageDataLeaf
(
this
,
id
,
parentPageId
,
data
);
return
empty
;
default
:
throw
Message
.
getSQLException
(
ErrorCode
.
FILE_CORRUPTED_1
,
"page="
+
id
+
" type="
+
type
);
}
...
...
@@ -229,8 +238,8 @@ public class PageScanIndex extends BaseIndex implements RowIndex {
}
private
void
trace
(
String
message
)
{
int
todoSometimeSlow
;
if
(
headPos
!=
1
)
{
int
test
;
// System.out.println(message);
}
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/log/LogSystem.java
浏览文件 @
5799af16
...
...
@@ -18,6 +18,8 @@ import org.h2.message.Message;
import
org.h2.message.Trace
;
import
org.h2.store.DataPage
;
import
org.h2.store.DiskFile
;
import
org.h2.store.PageLog
;
import
org.h2.store.PageStore
;
import
org.h2.store.Record
;
import
org.h2.store.Storage
;
import
org.h2.util.FileUtils
;
...
...
@@ -61,6 +63,7 @@ public class LogSystem {
private
int
keepFiles
;
private
boolean
closed
;
private
String
accessMode
;
private
PageLog
pageLog
;
/**
* Create new transaction log object. This will not open or create files
...
...
@@ -70,9 +73,13 @@ public class LogSystem {
* @param fileNamePrefix the name of the database file
* @param readOnly if the log should be opened in read-only mode
* @param accessMode the file access mode (r, rw, rws, rwd)
* @param pageStore
*/
public
LogSystem
(
Database
database
,
String
fileNamePrefix
,
boolean
readOnly
,
String
accessMode
)
{
public
LogSystem
(
Database
database
,
String
fileNamePrefix
,
boolean
readOnly
,
String
accessMode
,
PageStore
pageStore
)
{
this
.
database
=
database
;
if
(
pageStore
!=
null
)
{
this
.
pageLog
=
pageStore
.
getLog
();
}
this
.
readOnly
=
readOnly
;
this
.
accessMode
=
accessMode
;
closed
=
true
;
...
...
@@ -465,6 +472,9 @@ public class LogSystem {
if
(
closed
)
{
return
;
}
if
(
pageLog
!=
null
)
{
pageLog
.
commit
(
session
);
}
currentLog
.
commit
(
session
);
session
.
setAllCommitted
();
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/PageInputStream.java
浏览文件 @
5799af16
...
...
@@ -18,7 +18,7 @@ import org.h2.message.Message;
* The format is:
* <ul><li>0-3: parent page id
* </li><li>4-4: page type
* </li><li>5-8: the next page (if there
are mor
e) or length
* </li><li>5-8: the next page (if there
is on
e) or length
* </li><li>9-remainder: data
* </li></ul>
*/
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/PageLog.java
浏览文件 @
5799af16
...
...
@@ -10,6 +10,7 @@ import java.io.DataInputStream;
import
java.io.DataOutputStream
;
import
java.io.IOException
;
import
java.sql.SQLException
;
import
org.h2.engine.Session
;
import
org.h2.index.Page
;
import
org.h2.message.Message
;
import
org.h2.util.BitField
;
...
...
@@ -17,7 +18,7 @@ import org.h2.util.BitField;
/**
* Transaction log mechanism.
* The data format is:
* <ul><li>0-0: type (0: undo)
* <ul><li>0-0: type (0: undo
,...
)
* </li><li>1-4: page id
* </li><li>5-: data
* </li></ul>
...
...
@@ -25,6 +26,7 @@ import org.h2.util.BitField;
public
class
PageLog
{
private
static
final
int
UNDO
=
0
;
private
static
final
int
COMMIT
=
1
;
private
PageStore
store
;
private
BitField
undo
=
new
BitField
();
private
DataOutputStream
out
;
...
...
@@ -57,13 +59,17 @@ public class PageLog {
}
if
(
x
==
UNDO
)
{
int
pageId
=
in
.
readInt
();
int
test
;
System
.
out
.
println
(
"redo "
+
pageId
);
in
.
read
(
data
.
getBytes
(),
0
,
store
.
getPageSize
());
store
.
writePage
(
pageId
,
data
);
}
}
}
catch
(
IOException
e
)
{
throw
Message
.
convertIOException
(
e
,
"recovering"
);
int
todoSomeExceptionAreOkSomeNot
;
// throw Message.convertIOException(e, "recovering");
}
int
todoDeleteAfterRecovering
;
}
/**
...
...
@@ -78,6 +84,8 @@ public class PageLog {
if
(
undo
.
get
(
pageId
))
{
return
;
}
int
test
;
System
.
out
.
println
(
"undo "
+
pageId
);
out
.
write
(
UNDO
);
out
.
writeInt
(
pageId
);
out
.
write
(
page
.
getBytes
(),
0
,
store
.
getPageSize
());
...
...
@@ -87,4 +95,18 @@ public class PageLog {
}
}
/**
* Mark a committed transaction.
*
* @param session the session
*/
public
void
commit
(
Session
session
)
throws
SQLException
{
try
{
out
.
write
(
COMMIT
);
out
.
writeInt
(
session
.
getId
());
}
catch
(
IOException
e
)
{
throw
Message
.
convertIOException
(
e
,
"recovering"
);
}
}
}
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/PageOutputStream.java
浏览文件 @
5799af16
...
...
@@ -98,6 +98,10 @@ public class PageOutputStream extends OutputStream {
store
=
null
;
}
public
void
flush
()
throws
IOException
{
int
todo
;
}
// public void write(byte[] buff, int off, int len) throws IOException {
// if (len > 0) {
// try {
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/PageStore.java
浏览文件 @
5799af16
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论