]> source.dussan.org Git - jackcess.git/commitdiff
do not unicode compress strings which are longer than 1024 chars
authorJames Ahlborn <jtahlborn@yahoo.com>
Fri, 3 May 2013 02:37:20 +0000 (02:37 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Fri, 3 May 2013 02:37:20 +0000 (02:37 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@709 f203690c-595d-4dc9-a70b-905162fa7fd2

src/changes/changes.xml
src/java/com/healthmarketscience/jackcess/Column.java
src/java/com/healthmarketscience/jackcess/JetFormat.java

index cd9cac97b3d5d6b8296241c87eceabca16638a4b..c780507653e72782ccef61f042f1d6c5c8841940 100644 (file)
@@ -4,6 +4,11 @@
     <author email="javajedi@users.sf.net">Tim McCune</author>
   </properties>
   <body>
+    <release version="1.2.11" date="TBD">
+      <action dev="jahlborn" type="fix" system="SourceForge2" issue="94">
+        Do not unicode compress strings which are longer than 1024 chars.
+      </action>
+    </release>
     <release version="1.2.10" date="2013-02-18">
       <action dev="jahlborn" type="update">
         Add info to the Column to support MEMO columns which are HYPERLINKS.
index 57df40e2c2f5edcf41b90b272ddd60a317f6adbc..835acbde04b5f512d01c4bfe8446abd6641ad130 100644 (file)
@@ -1723,7 +1723,8 @@ public class Column implements Comparable<Column> {
     }
     
     // may only compress if column type allows it
-    if(!forceUncompressed && isCompressedUnicode()) {
+    if(!forceUncompressed && isCompressedUnicode() &&
+       (text.length() <= getFormat().MAX_COMPRESSED_UNICODE_SIZE)) {
 
       // for now, only do very simple compression (only compress text which is
       // all ascii text)
index 2a371206f31c0840c1bdf097d25edeed93ad7787..e3a8af8a3081484519ff42bed89087020dacb897 100644 (file)
@@ -235,6 +235,7 @@ public abstract class JetFormat {
   public final int SIZE_LONG_VALUE_DEF;
   public final int MAX_INLINE_LONG_VALUE_SIZE;
   public final int MAX_LONG_VALUE_ROW_SIZE;
+  public final int MAX_COMPRESSED_UNICODE_SIZE;
   public final int SIZE_TDEF_HEADER;
   public final int SIZE_TDEF_TRAILER;
   public final int SIZE_COLUMN_DEF_BLOCK;
@@ -368,6 +369,7 @@ public abstract class JetFormat {
     SIZE_LONG_VALUE_DEF = defineSizeLongValueDef();
     MAX_INLINE_LONG_VALUE_SIZE = defineMaxInlineLongValueSize();
     MAX_LONG_VALUE_ROW_SIZE = defineMaxLongValueRowSize();
+    MAX_COMPRESSED_UNICODE_SIZE = defineMaxCompressedUnicodeSize();
     SIZE_TDEF_HEADER = defineSizeTdefHeader();
     SIZE_TDEF_TRAILER = defineSizeTdefTrailer();
     SIZE_COLUMN_DEF_BLOCK = defineSizeColumnDefBlock();
@@ -469,6 +471,7 @@ public abstract class JetFormat {
   protected abstract int defineSizeLongValueDef();
   protected abstract int defineMaxInlineLongValueSize();
   protected abstract int defineMaxLongValueRowSize();
+  protected abstract int defineMaxCompressedUnicodeSize();
   protected abstract int defineSizeTdefHeader();
   protected abstract int defineSizeTdefTrailer();
   protected abstract int defineSizeColumnDefBlock();
@@ -657,6 +660,8 @@ public abstract class JetFormat {
     @Override
     protected int defineMaxLongValueRowSize() { return 2032; }
     @Override
+    protected int defineMaxCompressedUnicodeSize() { return 1024; }
+    @Override
     protected int defineSizeTdefHeader() { return 63; }
     @Override
     protected int defineSizeTdefTrailer() { return 2; }
@@ -875,6 +880,8 @@ public abstract class JetFormat {
     @Override
     protected int defineMaxLongValueRowSize() { return 4076; }
     @Override
+    protected int defineMaxCompressedUnicodeSize() { return 1024; }
+    @Override
     protected int defineSizeTdefHeader() { return 63; }
     @Override
     protected int defineSizeTdefTrailer() { return 2; }