diff options
author | James Ahlborn <jtahlborn@yahoo.com> | 2009-11-17 03:39:11 +0000 |
---|---|---|
committer | James Ahlborn <jtahlborn@yahoo.com> | 2009-11-17 03:39:11 +0000 |
commit | c190f7216c07da257eebad77d587ee7a21654899 (patch) | |
tree | 3fb7857a233336cc27150b56581b6478b296fbcc /src/java/com/healthmarketscience/jackcess/Column.java | |
parent | efca0b593bc32e274b0923b87ecba989ca0406b4 (diff) | |
download | jackcess-c190f7216c07da257eebad77d587ee7a21654899.tar.gz jackcess-c190f7216c07da257eebad77d587ee7a21654899.zip |
support reading/writing fixed length text columns (fixe #2886370)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@411 f203690c-595d-4dc9-a70b-905162fa7fd2
Diffstat (limited to 'src/java/com/healthmarketscience/jackcess/Column.java')
-rw-r--r-- | src/java/com/healthmarketscience/jackcess/Column.java | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/java/com/healthmarketscience/jackcess/Column.java b/src/java/com/healthmarketscience/jackcess/Column.java index a41b450..85ebde0 100644 --- a/src/java/com/healthmarketscience/jackcess/Column.java +++ b/src/java/com/healthmarketscience/jackcess/Column.java @@ -345,6 +345,12 @@ public class Column implements Comparable<Column> { return; } + if((_autoNumberGenerator != null) && + (_autoNumberGenerator.getType() == _type)) { + // keep existing + return; + } + switch(_type) { case LONG: _autoNumberGenerator = new LongAutoNumberGenerator(); @@ -1098,7 +1104,7 @@ public class Column implements Comparable<Column> { public ByteBuffer writeFixedLengthField(Object obj, ByteOrder order) throws IOException { - int size = getType().getFixedSize(); + int size = getType().getFixedSize(_columnLength); // create buffer for data ByteBuffer buffer = getPageChannel().createBuffer(size, order); @@ -1132,6 +1138,19 @@ public class Column implements Comparable<Column> { case MONEY: writeCurrencyValue(buffer, obj); break; + case TEXT: + // apparently text numeric values are also occasionally written as fixed + // length... + CharSequence text = toCharSequence(obj); + int numChars = getLengthInUnits(); + if (text.length() != numChars) { + throw new IOException( + "Text is invalid for fixed length column, length " + numChars + + ", got " + text.length()); + } + // force uncompressed encoding for fixed length text + buffer.put(encodeUncompressedText(text, getFormat())); + break; case GUID: writeGUIDValue(buffer, obj, order); break; @@ -1538,6 +1557,11 @@ public class Column implements Comparable<Column> { * Returns the flags used when writing this column. */ public abstract int getColumnFlags(); + + /** + * Returns the type of values generated by this generator. + */ + public abstract DataType getType(); } private final class LongAutoNumberGenerator extends AutoNumberGenerator @@ -1560,6 +1584,11 @@ public class Column implements Comparable<Column> { public int getColumnFlags() { return AUTO_NUMBER_FLAG_MASK; } + + @Override + public DataType getType() { + return DataType.LONG; + } } private final class GuidAutoNumberGenerator extends AutoNumberGenerator @@ -1584,6 +1613,11 @@ public class Column implements Comparable<Column> { public int getColumnFlags() { return AUTO_NUMBER_GUID_FLAG_MASK; } + + @Override + public DataType getType() { + return DataType.GUID; + } } } |