Browse Source

add new sort order for legacy 97 collation order

git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/a97_indexes@1308 f203690c-595d-4dc9-a70b-905162fa7fd2
tags/jackcess-3.5.0
James Ahlborn 4 years ago
parent
commit
4de2801130

+ 23
- 12
src/main/java/com/healthmarketscience/jackcess/impl/ColumnImpl.java View 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;
}


+ 4
- 3
src/main/java/com/healthmarketscience/jackcess/impl/JetFormat.java View 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() {

Loading…
Cancel
Save