]> source.dussan.org Git - jackcess.git/commitdiff
add some methods to approximate table size
authorJames Ahlborn <jtahlborn@yahoo.com>
Sat, 16 Jul 2011 02:39:50 +0000 (02:39 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Sat, 16 Jul 2011 02:39:50 +0000 (02:39 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@569 f203690c-595d-4dc9-a70b-905162fa7fd2

src/changes/changes.xml
src/java/com/healthmarketscience/jackcess/IndexData.java
src/java/com/healthmarketscience/jackcess/Table.java
src/java/com/healthmarketscience/jackcess/UsageMap.java

index 3f868875e225b3ce54f88417466bed6b912a5ee0..564cee42f0126f379f630ca4060ec96b555b9e4f 100644 (file)
@@ -15,6 +15,9 @@
       <action dev="jahlborn" type="update">
         Enable basic handling of unsupported data types as binary content.
       </action>
+      <action dev="jahlborn" type="update">
+        Add methods to approximate table size.
+      </action>
     </release>
     <release version="1.2.4" date="2011-05-14">
       <action dev="jahlborn" type="update">
index 93f4ad58b471f5fa34e976f83cd3399e670deb26..11b7b0a35098eed1bd8d6922dab2cc90e266bafa 100644 (file)
@@ -330,6 +330,13 @@ public abstract class IndexData {
     return _maxPageEntrySize;
   }
 
+  /**
+   * Returns the number of database pages owned by this index data.
+   */
+  public int getOwnedPageCount() {
+    return _ownedPages.getPageCount();
+  }
+  
   void addOwnedPage(int pageNumber) throws IOException {
     _ownedPages.addPageNumber(pageNumber);
   }
index 34b3c275ce5a1f7069d58089c3789e8ef97cf9c9..b00775318057a356a404943378d7b67114393ca0 100644 (file)
@@ -289,6 +289,29 @@ public class Table
   protected UsageMap.PageCursor getOwnedPagesCursor() {
     return _ownedPages.cursor();
   }
+
+  /**
+   * Returns the <i>approximate</i> number of database pages owned by this
+   * table and all related indexes (this number does <i>not</i> take into
+   * account pages used for large OLE/MEMO fields).
+   * <p>
+   * To calculate the approximate number of bytes owned by a table:
+   * <code>
+   * int approxTableBytes = (table.getApproximateOwnedPageCount() *
+   *                         table.getFormat().PAGE_SIZE);
+   * </code>
+   */
+  public int getApproximateOwnedPageCount() {
+    // add a page for the table def (although that might actually be more than
+    // one page)
+    int count = _ownedPages.getPageCount() + 1;
+    // note, we count owned pages from _physical_ indexes, not logical indexes
+    // (otherwise we could double count pages)
+    for(IndexData indexData : _indexDatas) {
+      count += indexData.getOwnedPageCount();
+    }
+    return count;
+  }
   
   protected TempPageHolder getLongValueBuffer() {
     return _longValueBufferH;
index d60141ed3515f6413038a6eeaf6e7999445d0321..931891e529878983ed1cfd4790cec96606aabe6f 100644 (file)
@@ -150,6 +150,10 @@ public class UsageMap
     return new PageCursor();
   }
 
+  public int getPageCount() {
+    return _pageNumbers.cardinality();
+  }
+  
   protected short getRowStart() {
     return _rowStart;
   }