1273712
where writing null values into fixed-length columns wasn't working.
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@25 f203690c-595d-4dc9-a70b-905162fa7fd2tags/rel_1_1_2
maven.sourceforge.username=javajedi | maven.sourceforge.username=javajedi | ||||
maven.test.source=1.5 | maven.test.source=1.5 | ||||
maven.username=javajedi | maven.username=javajedi | ||||
log4j.configuration=com/hmsonline/common/access/log4j.properties | |||||
log4j.configuration=com/healthmarketscience/jackcess/log4j.properties | |||||
statcvs.include=**/*.java;**/*.xml | statcvs.include=**/*.java;**/*.xml |
<pomVersion>1</pomVersion> | <pomVersion>1</pomVersion> | ||||
<id>jackcess</id> | <id>jackcess</id> | ||||
<name>Jackcess</name> | <name>Jackcess</name> | ||||
<currentVersion>1.1.1</currentVersion> | |||||
<currentVersion>1.1.2</currentVersion> | |||||
<organization> | <organization> | ||||
<name>Health Market Science, Inc.</name> | <name>Health Market Science, Inc.</name> | ||||
<url>http://www.healthmarketscience.com</url> | <url>http://www.healthmarketscience.com</url> |
if (_type == DataType.BOOLEAN) { | if (_type == DataType.BOOLEAN) { | ||||
//Do nothing | //Do nothing | ||||
} else if (_type == DataType.BYTE) { | } else if (_type == DataType.BYTE) { | ||||
buffer.put(((Number) obj).byteValue()); | |||||
buffer.put(obj != null ? ((Number) obj).byteValue() : (byte) 0); | |||||
} else if (_type == DataType.INT) { | } else if (_type == DataType.INT) { | ||||
buffer.putShort(((Number) obj).shortValue()); | |||||
buffer.putShort(obj != null ? ((Number) obj).shortValue() : (short) 0); | |||||
} else if (_type == DataType.LONG) { | } else if (_type == DataType.LONG) { | ||||
buffer.putInt(((Number) obj).intValue()); | |||||
buffer.putInt(obj != null ? ((Number) obj).intValue() : 0); | |||||
} else if (_type == DataType.DOUBLE) { | } else if (_type == DataType.DOUBLE) { | ||||
buffer.putDouble(((Number) obj).doubleValue()); | |||||
buffer.putDouble(obj != null ? ((Number) obj).doubleValue() : (double) 0); | |||||
} else if (_type == DataType.FLOAT) { | } else if (_type == DataType.FLOAT) { | ||||
buffer.putFloat(((Number) obj).floatValue()); | |||||
buffer.putFloat(obj != null ? ((Number) obj).floatValue() : (float) 0); | |||||
} else if (_type == DataType.SHORT_DATE_TIME) { | } else if (_type == DataType.SHORT_DATE_TIME) { | ||||
Calendar cal = Calendar.getInstance(); | |||||
cal.setTime((Date) obj); | |||||
long ms = cal.getTimeInMillis(); | |||||
ms += (long) TimeZone.getDefault().getOffset(ms); | |||||
buffer.putDouble((double) ms / MILLISECONDS_PER_DAY + | |||||
DAYS_BETWEEN_EPOCH_AND_1900); | |||||
if (obj instanceof Date) { | |||||
Calendar cal = Calendar.getInstance(); | |||||
cal.setTime((Date) obj); | |||||
long ms = cal.getTimeInMillis(); | |||||
ms += (long) TimeZone.getDefault().getOffset(ms); | |||||
buffer.putDouble((double) ms / MILLISECONDS_PER_DAY + | |||||
DAYS_BETWEEN_EPOCH_AND_1900); | |||||
} else { | |||||
buffer.putDouble(0d); | |||||
} | |||||
} else if (_type == DataType.BINARY) { | } else if (_type == DataType.BINARY) { | ||||
buffer.put((byte[]) obj); | buffer.put((byte[]) obj); | ||||
} else if (_type == DataType.TEXT) { | } else if (_type == DataType.TEXT) { |
//Now read in the fixed length columns and populate the columnData array | //Now read in the fixed length columns and populate the columnData array | ||||
//with the combination of fixed length and variable length data. | //with the combination of fixed length and variable length data. | ||||
byte[] columnData; | |||||
byte[] columnData = null; | |||||
for (Iterator iter = _columns.iterator(); iter.hasNext(); columnNumber++) { | for (Iterator iter = _columns.iterator(); iter.hasNext(); columnNumber++) { | ||||
Column column = (Column) iter.next(); | Column column = (Column) iter.next(); | ||||
boolean isNull = nullMask.isNull(columnNumber); | boolean isNull = nullMask.isNull(columnNumber); | ||||
Object value = null; | Object value = null; | ||||
if (column.getType() == DataType.BOOLEAN) { | if (column.getType() == DataType.BOOLEAN) { | ||||
value = new Boolean(!isNull); //Boolean values are stored in the null mask | value = new Boolean(!isNull); //Boolean values are stored in the null mask | ||||
} else if (!isNull) { | |||||
} else { | |||||
if (!column.isVariableLength()) { | if (!column.isVariableLength()) { | ||||
//Read in fixed length column data | //Read in fixed length column data | ||||
columnData = new byte[column.size()]; | columnData = new byte[column.size()]; | ||||
_buffer.get(columnData); | _buffer.get(columnData); | ||||
} else { | |||||
} else if (!isNull) { | |||||
//Refer to already-read-in variable length data | //Refer to already-read-in variable length data | ||||
columnData = varColumnData[varColumnDataIndex--]; | columnData = varColumnData[varColumnDataIndex--]; | ||||
} | } | ||||
if (columnNames == null || columnNames.contains(column.getName())) { | |||||
if (!isNull && columnData != null && | |||||
(columnNames == null || columnNames.contains(column.getName()))) | |||||
{ | |||||
//Add the value if we are interested in it. | //Add the value if we are interested in it. | ||||
value = column.read(columnData); | value = column.read(columnData); | ||||
} | } | ||||
col = (Column) iter.next(); | col = (Column) iter.next(); | ||||
if (!col.isVariableLength()) { | if (!col.isVariableLength()) { | ||||
//Fixed length column data comes first | //Fixed length column data comes first | ||||
if (row.get(index) != null) { | |||||
buffer.put(col.write(row.get(index))); | |||||
} | |||||
buffer.put(col.write(row.get(index))); | |||||
} | } | ||||
if (col.getType() == DataType.BOOLEAN) { | if (col.getType() == DataType.BOOLEAN) { | ||||
if (row.get(index) != null) { | if (row.get(index) != null) { |
private Database create() throws Exception { | private Database create() throws Exception { | ||||
File tmp = File.createTempFile("databaseTest", ".mdb"); | File tmp = File.createTempFile("databaseTest", ".mdb"); | ||||
//tmp.deleteOnExit(); | |||||
tmp.deleteOnExit(); | |||||
return Database.create(tmp); | return Database.create(tmp); | ||||
} | } | ||||
row[0] = "Tim"; | row[0] = "Tim"; | ||||
row[1] = "R"; | row[1] = "R"; | ||||
row[2] = "McCune"; | row[2] = "McCune"; | ||||
row[3] = new Integer(1234); | |||||
row[3] = null; | |||||
row[4] = new Byte((byte) 0xad); | row[4] = new Byte((byte) 0xad); | ||||
row[5] = new Double(555.66d); | row[5] = new Double(555.66d); | ||||
row[6] = new Float(777.88d); | row[6] = new Float(777.88d); |