]> source.dussan.org Git - jackcess.git/commitdiff
ignore trailing spaces when creating text index entries
authorJames Ahlborn <jtahlborn@yahoo.com>
Sun, 24 Jan 2021 17:48:25 +0000 (17:48 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Sun, 24 Jan 2021 17:48:25 +0000 (17:48 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@1361 f203690c-595d-4dc9-a70b-905162fa7fd2

src/changes/changes.xml
src/main/java/com/healthmarketscience/jackcess/impl/General97IndexCodes.java
src/main/java/com/healthmarketscience/jackcess/impl/GeneralLegacyIndexCodes.java

index bac4092a80ce68c422a12f6f646e5b5ab010d6b0..7fbba3efe23282cb3dae36173bfc96a171cd4583 100644 (file)
@@ -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
index 6b68aeaf02c75c5619253add5c6dfed3397cd87a..77ebb67d6490c4ad6e3c112ca23b885cc13d8fab 100644 (file)
@@ -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)
index d8d763db0422d1b09af9f26e018fd4d46131339a..0d151e06c5b4a71f41a0a0902673ef4c13c20bad 100644 (file)
@@ -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.
    */