From 48404ab2d688d5fb9af63166e049a0a5c95800cd Mon Sep 17 00:00:00 2001 From: James Ahlborn Date: Thu, 17 Jul 2008 02:46:42 +0000 Subject: Reserve minimum space for memo/ole fields so that greedy inline row usage does not cause spurious write failures for wide tables. git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@358 f203690c-595d-4dc9-a70b-905162fa7fd2 --- src/changes/changes.xml | 6 ++++++ src/java/com/healthmarketscience/jackcess/Table.java | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/changes/changes.xml b/src/changes/changes.xml index e30d7f2..e577cda 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -5,6 +5,12 @@ James Ahlborn + + + Reserve minimum space for memo/ole fields so that greedy inline row + usage does not cause spurious write failures for wide tables. + + Fix writing of large memo/ole fields. Apparently Access does not like diff --git a/src/java/com/healthmarketscience/jackcess/Table.java b/src/java/com/healthmarketscience/jackcess/Table.java index c4976ba..5007f3d 100644 --- a/src/java/com/healthmarketscience/jackcess/Table.java +++ b/src/java/com/healthmarketscience/jackcess/Table.java @@ -1374,7 +1374,17 @@ public class Table maxRowSize -= buffer.position(); // now, account for trailer space maxRowSize -= (nullMask.byteSize() + 4 + (_maxVarColumnCount * 2)); - + + // for each non-null long value column we need to reserve a small + // amount of space so that we don't end up running out of row space + // later by being too greedy + for (Column varCol : _varColumns) { + if((varCol.getType().isLongValue()) && + (rowArray[varCol.getColumnIndex()] != null)) { + maxRowSize -= getFormat().SIZE_LONG_VALUE_DEF; + } + } + //Now write out variable length column data short[] varColumnOffsets = new short[_maxVarColumnCount]; int varColumnOffsetsIndex = 0; -- cgit v1.2.3