]> source.dussan.org Git - jackcess.git/commitdiff
add new sort order for legacy 97 collation order
authorJames Ahlborn <jtahlborn@yahoo.com>
Tue, 6 Aug 2019 21:34:01 +0000 (21:34 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Tue, 6 Aug 2019 21:34:01 +0000 (21:34 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/a97_indexes@1308 f203690c-595d-4dc9-a70b-905162fa7fd2

src/main/java/com/healthmarketscience/jackcess/impl/ColumnImpl.java
src/main/java/com/healthmarketscience/jackcess/impl/JetFormat.java

index 212b912917c1ea9db083ec9c3b4b50cf4d0abebc..07c798b85e396033902cda82f80ff79b5ff84c11 100644 (file)
@@ -159,19 +159,26 @@ public class ColumnImpl implements Column, Comparable<ColumnImpl>, DateTimeConte
   /** the value for the "general" sort order */
   private static final short GENERAL_SORT_ORDER_VALUE = 1033;
 
+  /**
+   * the "general" text sort order, version (access 1997)
+   * @usage _intermediate_field_
+   */
+  public static final SortOrder GENERAL_97_SORT_ORDER =
+    new SortOrder(GENERAL_SORT_ORDER_VALUE, (short)-1);
+
   /**
    * the "general" text sort order, legacy version (access 2000-2007)
    * @usage _intermediate_field_
    */
   public static final SortOrder GENERAL_LEGACY_SORT_ORDER =
-    new SortOrder(GENERAL_SORT_ORDER_VALUE, (byte)0);
+    new SortOrder(GENERAL_SORT_ORDER_VALUE, (short)0);
 
   /**
    * the "general" text sort order, latest version (access 2010+)
    * @usage _intermediate_field_
    */
   public static final SortOrder GENERAL_SORT_ORDER =
-    new SortOrder(GENERAL_SORT_ORDER_VALUE, (byte)1);
+    new SortOrder(GENERAL_SORT_ORDER_VALUE, (short)1);
 
   /** pattern matching textual guid strings (allows for optional surrounding
       '{' and '}') */
@@ -2077,22 +2084,26 @@ public class ColumnImpl implements Column, Comparable<ColumnImpl>, DateTimeConte
                                  JetFormat format)
   {
     short value = buffer.getShort(position);
-    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;
     }
 
+    short version = format.DEFAULT_SORT_ORDER.getVersion();
+    if(format.SIZE_SORT_ORDER == 4) {
+      version = buffer.get(position + 3);
+    }
+
     if(value == GENERAL_SORT_ORDER_VALUE) {
+      if(version == GENERAL_SORT_ORDER.getVersion()) {
+        return GENERAL_SORT_ORDER;
+      }
       if(version == GENERAL_LEGACY_SORT_ORDER.getVersion()) {
         return GENERAL_LEGACY_SORT_ORDER;
       }
-      if(version == GENERAL_SORT_ORDER.getVersion()) {
-        return GENERAL_SORT_ORDER;
+      if(version == GENERAL_97_SORT_ORDER.getVersion()) {
+        return GENERAL_97_SORT_ORDER;
       }
     }
     return new SortOrder(value, version);
@@ -2128,7 +2139,7 @@ public class ColumnImpl implements Column, Comparable<ColumnImpl>, DateTimeConte
     buffer.putShort(sortOrder.getValue());
     if(format.SIZE_SORT_ORDER == 4) {
       buffer.put((byte)0x00); // unknown
-      buffer.put(sortOrder.getVersion());
+      buffer.put((byte)sortOrder.getVersion());
     }
   }
 
@@ -2563,9 +2574,9 @@ public class ColumnImpl implements Column, Comparable<ColumnImpl>, DateTimeConte
   public static final class SortOrder
   {
     private final short _value;
-    private final byte _version;
+    private final short _version;
 
-    public SortOrder(short value, byte version) {
+    public SortOrder(short value, short version) {
       _value = value;
       _version = version;
     }
@@ -2574,7 +2585,7 @@ public class ColumnImpl implements Column, Comparable<ColumnImpl>, DateTimeConte
       return _value;
     }
 
-    public byte getVersion() {
+    public short getVersion() {
       return _version;
     }
 
index 6ca0dd16fce9557bcc27068610358874c4b40c3c..2d2f0af80f6a74f77524d38d992da9a33a4cdc5e 100644 (file)
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
@@ -544,7 +545,7 @@ public abstract class JetFormat {
     protected boolean defineReadOnly() { return true; }
 
     @Override
-    protected boolean defineIndexesSupported() { return false; }
+    protected boolean defineIndexesSupported() { return true; }
 
     @Override
     protected CodecType defineCodecType() {
@@ -740,7 +741,7 @@ public abstract class JetFormat {
 
     @Override
     protected ColumnImpl.SortOrder defineDefaultSortOrder() {
-      return ColumnImpl.GENERAL_LEGACY_SORT_ORDER;
+      return ColumnImpl.GENERAL_97_SORT_ORDER;
     }
 
     @Override
@@ -973,7 +974,7 @@ public abstract class JetFormat {
     protected boolean defineLegacyNumericIndexes() { return true; }
 
     @Override
-    protected Charset defineCharset() { return Charset.forName("UTF-16LE"); }
+    protected Charset defineCharset() { return StandardCharsets.UTF_16LE; }
 
     @Override
     protected ColumnImpl.SortOrder defineDefaultSortOrder() {