]> source.dussan.org Git - jackcess.git/commitdiff
fix creation of tables with auto-number columns
authorJames Ahlborn <jtahlborn@yahoo.com>
Fri, 14 Mar 2008 19:34:14 +0000 (19:34 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Fri, 14 Mar 2008 19:34:14 +0000 (19:34 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@273 f203690c-595d-4dc9-a70b-905162fa7fd2

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

index e9826154198b97d2c1a7b45a42350aebaa4d5c04..4e76361386b799e4cbf1c08a544524e39f7c7eb0 100644 (file)
@@ -28,6 +28,9 @@
       <action dev="jahlborn" type="update">
         Add support for reading table relationships.
       </action>
+      <action dev="jahlborn" type="fix">
+        Fix creation of tables with auto-number columns.
+      </action>
     </release>
     <release version="1.1.12" date="2008-02-27">
       <action dev="jahlborn" type="fix">
index 311f0adcc7e9bfa78d8cf41d9ca347d3c1a48db5..0c30d79c81e5858efd68d35d96724f7eaaa37e6f 100644 (file)
@@ -735,7 +735,12 @@ public class Table
     buffer.putShort((short) 0); //Unknown
     buffer.putInt(0);  //Number of rows
     buffer.putInt(0); //Last Autonumber
-    for (int i = 0; i < 16; i++) {  //Unknown
+    if(countAutoNumberColumns(columns) > 0) {
+      buffer.put((byte) 1);
+    } else {
+      buffer.put((byte) 0);
+    }
+    for (int i = 0; i < 15; i++) {  //Unknown
       buffer.put((byte) 0);
     }
     buffer.put(Table.TYPE_USER); //Table type
@@ -1310,6 +1315,11 @@ public class Table
     return ++_lastAutoNumber;
   }
 
+  int getLastAutoNumber() {
+    // gets the last used auto number (does not modify)
+    return _lastAutoNumber;
+  }
+  
   @Override
   public String toString() {
     StringBuilder rtn = new StringBuilder();
@@ -1491,6 +1501,20 @@ public class Table
     return rowSize + format.SIZE_ROW_LOCATION;
   }
 
+  /**
+   * @return the number of "AutoNumber" columns in the given collection of
+   *         columns.
+   */
+  public static int countAutoNumberColumns(Collection<Column> columns) {
+    int numAutoNumCols = 0;
+    for(Column c : columns) {
+      if(c.isAutoNumber()) {
+        ++numAutoNumCols;
+      }
+    }
+    return numAutoNumCols;
+  }
+  
   /** various statuses for the row data */
   private enum RowStatus {
     INIT, INVALID_PAGE, INVALID_ROW, VALID, DELETED, NORMAL, OVERFLOW;