From 8c625cfd2cfe8c76e1598daad488939a93d5eb04 Mon Sep 17 00:00:00 2001 From: James Ahlborn Date: Tue, 22 Dec 2009 02:39:46 +0000 Subject: [PATCH] add support for index owned pages usage maps git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@422 f203690c-595d-4dc9-a70b-905162fa7fd2 --- .../com/healthmarketscience/jackcess/Index.java | 13 ++++++++++++- .../jackcess/IndexPageCache.java | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/java/com/healthmarketscience/jackcess/Index.java b/src/java/com/healthmarketscience/jackcess/Index.java index 5300fe6..2da1fc2 100644 --- a/src/java/com/healthmarketscience/jackcess/Index.java +++ b/src/java/com/healthmarketscience/jackcess/Index.java @@ -154,6 +154,8 @@ public abstract class Index implements Comparable { private byte _indexType; /** Index name */ private String _name; + /** Usage map of pages that this index owns */ + private UsageMap _ownedPages; /** true if the index entries have been initialized, false otherwise */ private boolean _initialized; @@ -277,6 +279,10 @@ public abstract class Index implements Comparable { return _maxPageEntrySize; } + void addOwnedPage(int pageNumber) throws IOException { + _ownedPages.addPageNumber(pageNumber); + } + /** * Returns the number of index entries in the index. Only called by unit * tests. @@ -353,7 +359,12 @@ public abstract class Index implements Comparable { _columns.add(newColumnDescriptor(idxCol, colFlags)); } } - tableBuffer.getInt(); //Forward past Unknown + + int umapRowNum = tableBuffer.get(); + int umapPageNum = ByteUtil.get3ByteInt(tableBuffer); + _ownedPages = UsageMap.read(getTable().getDatabase(), umapPageNum, + umapRowNum, false); + _rootPageNumber = tableBuffer.getInt(); tableBuffer.getInt(); //Forward past Unknown _indexFlags = tableBuffer.get(); diff --git a/src/java/com/healthmarketscience/jackcess/IndexPageCache.java b/src/java/com/healthmarketscience/jackcess/IndexPageCache.java index b9940ab..6f9b6a7 100644 --- a/src/java/com/healthmarketscience/jackcess/IndexPageCache.java +++ b/src/java/com/healthmarketscience/jackcess/IndexPageCache.java @@ -741,6 +741,9 @@ public class IndexPageCache // add to our page cache _dataPages.put(dpMain._pageNumber, dpMain); + // update owned pages cache + _index.addOwnedPage(dpMain._pageNumber); + // needs to be written out CacheDataPage cacheDataPage = new CacheDataPage(dpMain, dpExtra); setModified(cacheDataPage); -- 2.39.5