]> source.dussan.org Git - jackcess.git/commitdiff
fix sort order reading in v1997; set col sort order to db default when writing (if...
authorJames Ahlborn <jtahlborn@yahoo.com>
Tue, 5 Apr 2011 13:13:53 +0000 (13:13 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Tue, 5 Apr 2011 13:13:53 +0000 (13:13 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@547 f203690c-595d-4dc9-a70b-905162fa7fd2

src/java/com/healthmarketscience/jackcess/Column.java
src/java/com/healthmarketscience/jackcess/Database.java
src/java/com/healthmarketscience/jackcess/JetFormat.java

index 420c581cbea0d71e047eae69495e6ac924a0de4e..13954cd90ab27216450b862c70db296c9dc0fc1e 100644 (file)
@@ -1747,7 +1747,11 @@ public class Column implements Comparable<Column> {
                                  JetFormat format)
   {
     short value = buffer.getShort(position);
-    byte version = buffer.get(position + 3);
+    byte version = 0;
+    if(format.SIZE_SORT_ORDER == 4) {
+      version = buffer.get(position + 3);
+    }
+
     if(value == 0) {
       // probably a file we wrote, before handling sort order
       return format.DEFAULT_SORT_ORDER;
@@ -1773,8 +1777,10 @@ public class Column implements Comparable<Column> {
       sortOrder = format.DEFAULT_SORT_ORDER;
     }
     buffer.putShort(sortOrder.getValue());      
-    buffer.put((byte)0x00); // unknown
-    buffer.put(sortOrder.getVersion());
+    if(format.SIZE_SORT_ORDER == 4) {
+      buffer.put((byte)0x00); // unknown
+      buffer.put(sortOrder.getVersion());
+    }
   }
 
   /**
index 5c38561457d8af2aac1c9e0111018cfbb3481282..46a148d3e146b81e833a563b95985a44bd572d53 100644 (file)
@@ -1057,6 +1057,13 @@ public class Database
           _format.MAX_COLUMNS_PER_TABLE + " columns");
     }
     
+    Column.SortOrder dbSortOrder = null;
+    try {
+      dbSortOrder = getDefaultSortOrder();
+    } catch(IOException e) {
+      // ignored, just use the jet format default
+    }
+
     Set<String> colNames = new HashSet<String>();
     // next, validate the column definitions
     for(Column column : columns) {
@@ -1065,6 +1072,11 @@ public class Database
         throw new IllegalArgumentException("duplicate column name: " +
                                            column.getName());
       }
+
+      // set the sort order to the db default (if unspecified)
+      if(column.getType().isTextual() && (column.getTextSortOrder() == null)) {
+        column.setTextSortOrder(dbSortOrder);
+      }
     }
 
     List<Column> autoCols = Table.getAutoNumberColumns(columns);
index 173d96c41cbc1685a3b1607e960c98f505ba6657..d1041a56a32aab9236ad5ff1bc59ffaf822f6147 100644 (file)
@@ -176,6 +176,7 @@ public abstract class JetFormat {
   public final int OFFSET_PASSWORD;
   public final int SIZE_PASSWORD;
   public final int OFFSET_SORT_ORDER;
+  public final int SIZE_SORT_ORDER;
   public final int OFFSET_ENCODING_KEY;
   public final int OFFSET_NEXT_TABLE_DEF_PAGE;
   public final int OFFSET_NUM_ROWS;
@@ -303,6 +304,7 @@ public abstract class JetFormat {
     OFFSET_PASSWORD = defineOffsetPassword();
     SIZE_PASSWORD = defineSizePassword();
     OFFSET_SORT_ORDER = defineOffsetSortOrder();
+    SIZE_SORT_ORDER = defineSizeSortOrder();
     OFFSET_ENCODING_KEY = defineOffsetEncodingKey();
     OFFSET_NEXT_TABLE_DEF_PAGE = defineOffsetNextTableDefPage();
     OFFSET_NUM_ROWS = defineOffsetNumRows();
@@ -398,6 +400,7 @@ public abstract class JetFormat {
   protected abstract int defineOffsetPassword();
   protected abstract int defineSizePassword();
   protected abstract int defineOffsetSortOrder();
+  protected abstract int defineSizeSortOrder();
   protected abstract int defineOffsetEncodingKey();
   protected abstract int defineOffsetNextTableDefPage();
   protected abstract int defineOffsetNumRows();
@@ -528,6 +531,8 @@ public abstract class JetFormat {
     @Override
     protected int defineOffsetSortOrder() { return 58; }
     @Override
+    protected int defineSizeSortOrder() { return 2; }
+    @Override
     protected int defineOffsetEncodingKey() { return 62; }
     @Override
     protected int defineOffsetNextTableDefPage() { return 4; }
@@ -730,6 +735,8 @@ public abstract class JetFormat {
     @Override
     protected int defineOffsetSortOrder() { return 110; }
     @Override
+    protected int defineSizeSortOrder() { return 4; }
+    @Override
     protected int defineOffsetEncodingKey() { return 62; }
     @Override
     protected int defineOffsetNextTableDefPage() { return 4; }