diff options
3 files changed, 35 insertions, 16 deletions
diff --git a/src/changes/changes.xml b/src/changes/changes.xml index bac4092..7fbba3e 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -4,6 +4,11 @@ <author email="javajedi@users.sf.net">Tim McCune</author> </properties> <body> + <release version="4.0.1" date="TBD"> + <action dev="jahlborn" type="fix"> + Ignore trailing spaces when creating text index entries. + </action> + </release> <release version="4.0.0" date="2021-01-20"> <action dev="jahlborn" type="update"> Add Automatic-Module-Name in order to make Jackcess safe to use in the diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/General97IndexCodes.java b/src/main/java/com/healthmarketscience/jackcess/impl/General97IndexCodes.java index 6b68aea..77ebb67 100644 --- a/src/main/java/com/healthmarketscience/jackcess/impl/General97IndexCodes.java +++ b/src/main/java/com/healthmarketscience/jackcess/impl/General97IndexCodes.java @@ -99,14 +99,8 @@ public class General97IndexCodes extends GeneralLegacyIndexCodes Object value, ByteStream bout, boolean isAscending) throws IOException { - // first, convert to string - String str = ColumnImpl.toCharSequence(value).toString(); - - // all text columns (including memos) are only indexed up to the max - // number of chars in a VARCHAR column - if(str.length() > MAX_TEXT_INDEX_CHAR_LENGTH) { - str = str.substring(0, MAX_TEXT_INDEX_CHAR_LENGTH); - } + // convert to string + String str = toIndexCharSequence(value); // record previous entry length so we can do any post-processing // necessary for this entry (handling descending) diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/GeneralLegacyIndexCodes.java b/src/main/java/com/healthmarketscience/jackcess/impl/GeneralLegacyIndexCodes.java index d8d763d..0d151e0 100644 --- a/src/main/java/com/healthmarketscience/jackcess/impl/GeneralLegacyIndexCodes.java +++ b/src/main/java/com/healthmarketscience/jackcess/impl/GeneralLegacyIndexCodes.java @@ -511,14 +511,8 @@ public class GeneralLegacyIndexCodes { Object value, ByteStream bout, boolean isAscending) throws IOException { - // first, convert to string - String str = ColumnImpl.toCharSequence(value).toString(); - - // all text columns (including memos) are only indexed up to the max - // number of chars in a VARCHAR column - if(str.length() > MAX_TEXT_INDEX_CHAR_LENGTH) { - str = str.substring(0, MAX_TEXT_INDEX_CHAR_LENGTH); - } + // convert to string + String str = toIndexCharSequence(value); // record previous entry length so we can do any post-processing // necessary for this entry (handling descending) @@ -641,6 +635,32 @@ public class GeneralLegacyIndexCodes { bout.write(END_EXTRA_TEXT); } + protected static String toIndexCharSequence(Object value) + throws IOException { + + // first, convert to string + String str = ColumnImpl.toCharSequence(value).toString(); + + // all text columns (including memos) are only indexed up to the max + // number of chars in a VARCHAR column + int len = str.length(); + if(len > MAX_TEXT_INDEX_CHAR_LENGTH) { + str = str.substring(0, MAX_TEXT_INDEX_CHAR_LENGTH); + len = MAX_TEXT_INDEX_CHAR_LENGTH; + } + + // trailing spaces are ignored for text index entries + if((len > 0) && (str.charAt(len - 1) == ' ')) { + do { + --len; + } while((len > 0) && (str.charAt(len - 1) == ' ')); + + str = str.substring(0, len); + } + + return str; + } + /** * Encodes the given extra code info in the given stream. */ |