summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJames Ahlborn <jtahlborn@yahoo.com>2008-07-17 02:46:42 +0000
committerJames Ahlborn <jtahlborn@yahoo.com>2008-07-17 02:46:42 +0000
commit48404ab2d688d5fb9af63166e049a0a5c95800cd (patch)
tree92bb259913b8018c21bbd681012c93eebda04ede /src
parent506b7c28ee353058c8d3fdedba3098c60dfaabb3 (diff)
downloadjackcess-48404ab2d688d5fb9af63166e049a0a5c95800cd.tar.gz
jackcess-48404ab2d688d5fb9af63166e049a0a5c95800cd.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/changes/changes.xml6
-rw-r--r--src/java/com/healthmarketscience/jackcess/Table.java12
2 files changed, 17 insertions, 1 deletions
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 @@
<author email="jahlborn@users.sf.net">James Ahlborn</author>
</properties>
<body>
+ <release version="1.1.16" date="TBD">
+ <action dev="jahlborn" type="fix" issue="2019244">
+ Reserve minimum space for memo/ole fields so that greedy inline row
+ usage does not cause spurious write failures for wide tables.
+ </action>
+ </release>
<release version="1.1.15" date="2008-06-27">
<action dev="jahlborn" type="fix" issue="1998225">
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;