aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/healthmarketscience
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/healthmarketscience')
-rw-r--r--src/java/com/healthmarketscience/jackcess/Index.java13
-rw-r--r--src/java/com/healthmarketscience/jackcess/IndexPageCache.java3
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);