From a680b8e33654c3509da88cd5c8383c8cbd184696 Mon Sep 17 00:00:00 2001 From: James Ahlborn Date: Thu, 21 Feb 2008 21:03:25 +0000 Subject: do not inline memo/ole fields longer than 64 bytes (fix #1899076) git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@230 f203690c-595d-4dc9-a70b-905162fa7fd2 --- src/java/com/healthmarketscience/jackcess/Column.java | 3 ++- src/java/com/healthmarketscience/jackcess/JetFormat.java | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/java') diff --git a/src/java/com/healthmarketscience/jackcess/Column.java b/src/java/com/healthmarketscience/jackcess/Column.java index 73fa511..1de4b16 100644 --- a/src/java/com/healthmarketscience/jackcess/Column.java +++ b/src/java/com/healthmarketscience/jackcess/Column.java @@ -736,7 +736,8 @@ public class Column implements Comparable { // determine which type to write byte type = 0; int lvalDefLen = getFormat().SIZE_LONG_VALUE_DEF; - if((getFormat().SIZE_LONG_VALUE_DEF + value.length) <= remainingRowLength) { + if(((getFormat().SIZE_LONG_VALUE_DEF + value.length) <= remainingRowLength) + && (value.length <= getFormat().MAX_INLINE_LONG_VALUE_SIZE)) { type = LONG_VALUE_TYPE_THIS_PAGE; lvalDefLen += value.length; } else if(Table.getRowSpaceUsage(value.length, getFormat()) <= diff --git a/src/java/com/healthmarketscience/jackcess/JetFormat.java b/src/java/com/healthmarketscience/jackcess/JetFormat.java index 4e7fd69..a9e96da 100644 --- a/src/java/com/healthmarketscience/jackcess/JetFormat.java +++ b/src/java/com/healthmarketscience/jackcess/JetFormat.java @@ -113,6 +113,7 @@ public abstract class JetFormat { public final int SIZE_COLUMN_HEADER; public final int SIZE_ROW_LOCATION; public final int SIZE_LONG_VALUE_DEF; + public final int MAX_INLINE_LONG_VALUE_SIZE; public final int SIZE_TDEF_HEADER; public final int SIZE_TDEF_TRAILER; public final int SIZE_COLUMN_DEF_BLOCK; @@ -197,6 +198,7 @@ public abstract class JetFormat { SIZE_COLUMN_HEADER = defineSizeColumnHeader(); SIZE_ROW_LOCATION = defineSizeRowLocation(); SIZE_LONG_VALUE_DEF = defineSizeLongValueDef(); + MAX_INLINE_LONG_VALUE_SIZE = defineMaxInlineLongValueSize(); SIZE_TDEF_HEADER = defineSizeTdefHeader(); SIZE_TDEF_TRAILER = defineSizeTdefTrailer(); SIZE_COLUMN_DEF_BLOCK = defineSizeColumnDefBlock(); @@ -259,6 +261,7 @@ public abstract class JetFormat { protected abstract int defineSizeColumnHeader(); protected abstract int defineSizeRowLocation(); protected abstract int defineSizeLongValueDef(); + protected abstract int defineMaxInlineLongValueSize(); protected abstract int defineSizeTdefHeader(); protected abstract int defineSizeTdefTrailer(); protected abstract int defineSizeColumnDefBlock(); @@ -376,6 +379,8 @@ public abstract class JetFormat { @Override protected int defineSizeLongValueDef() { return 12; } @Override + protected int defineMaxInlineLongValueSize() { return 64; } + @Override protected int defineSizeTdefHeader() { return 63; } @Override protected int defineSizeTdefTrailer() { return 2; } -- cgit v1.2.3