diff options
Diffstat (limited to 'src/java/com/healthmarketscience')
-rw-r--r-- | src/java/com/healthmarketscience/jackcess/Index.java | 13 | ||||
-rw-r--r-- | src/java/com/healthmarketscience/jackcess/IndexPageCache.java | 3 |
2 files changed, 15 insertions, 1 deletions
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<Index> { private byte _indexType; /** Index name */ private String _name; + /** Usage map of pages that this index owns */ + private UsageMap _ownedPages; /** <code>true</code> if the index entries have been initialized, <code>false</code> otherwise */ private boolean _initialized; @@ -277,6 +279,10 @@ public abstract class Index implements Comparable<Index> { 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<Index> { _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); |