summaryrefslogtreecommitdiffstats
path: root/src/java/com/healthmarketscience/jackcess/Column.java
diff options
context:
space:
mode:
authorJames Ahlborn <jtahlborn@yahoo.com>2009-11-17 03:39:11 +0000
committerJames Ahlborn <jtahlborn@yahoo.com>2009-11-17 03:39:11 +0000
commitc190f7216c07da257eebad77d587ee7a21654899 (patch)
tree3fb7857a233336cc27150b56581b6478b296fbcc /src/java/com/healthmarketscience/jackcess/Column.java
parentefca0b593bc32e274b0923b87ecba989ca0406b4 (diff)
downloadjackcess-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.java36
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;
+ }
}
}