提交 b7cfb793 authored 作者: Thomas Mueller's avatar Thomas Mueller

The Recover tool did not work with .data.db files of the wrong size.

上级 2229acfd
...@@ -801,7 +801,8 @@ public class Recover extends Tool implements DataHandler { ...@@ -801,7 +801,8 @@ public class Recover extends Tool implements DataHandler {
writer.println("-- page " + page + ": data node " + (last ? "(last)" : "")); writer.println("-- page " + page + ": data node " + (last ? "(last)" : ""));
break; break;
case Page.TYPE_DATA_LEAF: case Page.TYPE_DATA_LEAF:
writer.println("-- page " + page + ": data leaf " + (last ? "(last)" : "")); setStorage(s.readInt());
writer.println("-- page " + page + ": data leaf " + (last ? "(last)" : "") + " table: " + storageId);
dumpPageDataLeaf(store, pageSize, writer, s, last, page); dumpPageDataLeaf(store, pageSize, writer, s, last, page);
break; break;
case Page.TYPE_BTREE_NODE: case Page.TYPE_BTREE_NODE:
...@@ -811,7 +812,8 @@ public class Recover extends Tool implements DataHandler { ...@@ -811,7 +812,8 @@ public class Recover extends Tool implements DataHandler {
} }
break; break;
case Page.TYPE_BTREE_LEAF: case Page.TYPE_BTREE_LEAF:
writer.println("-- page " + page + ": btree leaf " + (last ? "(last)" : "")); setStorage(s.readInt());
writer.println("-- page " + page + ": btree leaf " + (last ? "(last)" : "") + " table: " + storageId);
if (trace) { if (trace) {
dumpPageBtreeLeaf(writer, s); dumpPageBtreeLeaf(writer, s);
} }
...@@ -1039,7 +1041,6 @@ public class Recover extends Tool implements DataHandler { ...@@ -1039,7 +1041,6 @@ public class Recover extends Tool implements DataHandler {
} }
private void dumpPageBtreeLeaf(PrintWriter writer, DataPage s) { private void dumpPageBtreeLeaf(PrintWriter writer, DataPage s) {
s.readInt();
int entryCount = s.readShortInt(); int entryCount = s.readShortInt();
int[] offsets = new int[entryCount]; int[] offsets = new int[entryCount];
for (int i = 0; i < entryCount; i++) { for (int i = 0; i < entryCount; i++) {
...@@ -1061,7 +1062,6 @@ public class Recover extends Tool implements DataHandler { ...@@ -1061,7 +1062,6 @@ public class Recover extends Tool implements DataHandler {
} }
private void dumpPageDataLeaf(FileStore store, int pageSize, PrintWriter writer, DataPage s, boolean last, long pageId) throws SQLException { private void dumpPageDataLeaf(FileStore store, int pageSize, PrintWriter writer, DataPage s, boolean last, long pageId) throws SQLException {
setStorage(s.readInt());
int entryCount = s.readShortInt(); int entryCount = s.readShortInt();
int[] keys = new int[entryCount]; int[] keys = new int[entryCount];
int[] offsets = new int[entryCount]; int[] offsets = new int[entryCount];
...@@ -1223,12 +1223,18 @@ public class Recover extends Tool implements DataHandler { ...@@ -1223,12 +1223,18 @@ public class Recover extends Tool implements DataHandler {
int blockSize = DiskFile.BLOCK_SIZE; int blockSize = DiskFile.BLOCK_SIZE;
int blocks = (int) (length / blockSize); int blocks = (int) (length / blockSize);
blockCount = 1; blockCount = 1;
int[] pageOwners = new int[blocks / DiskFile.BLOCKS_PER_PAGE]; int pageCount = blocks / DiskFile.BLOCKS_PER_PAGE;
int[] pageOwners = new int[pageCount + 1];
for (block = 0; block < blocks; block += blockCount) { for (block = 0; block < blocks; block += blockCount) {
store.seek(offset + (long) block * blockSize); store.seek(offset + (long) block * blockSize);
byte[] buff = new byte[blockSize]; byte[] buff = new byte[blockSize];
DataPage s = DataPage.create(this, buff); DataPage s = DataPage.create(this, buff);
store.readFully(buff, 0, blockSize); try {
store.readFully(buff, 0, blockSize);
} catch (SQLException e) {
writer.println("-- ERROR: can not read: " + e);
break;
}
blockCount = s.readInt(); blockCount = s.readInt();
setStorage(-1); setStorage(-1);
recordLength = -1; recordLength = -1;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论