ソースを参照

Fixed bug 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-905162fa7fd2
tags/rel_1_1_2
Tim McCune 19年前
コミット
f109d76b19

+ 1
- 1
project.properties ファイルの表示

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

+ 1
- 1
project.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>

+ 15
- 11
src/java/com/healthmarketscience/jackcess/Column.java ファイルの表示

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) {

+ 7
- 7
src/java/com/healthmarketscience/jackcess/Table.java ファイルの表示

//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) {

+ 2
- 2
test/src/java/com/healthmarketscience/jackcess/DatabaseTest.java ファイルの表示

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);

読み込み中…
キャンセル
保存