Browse Source

implement GUID reading using patch from joniles, 1445653; replace StringBuffer from StringBuilder


git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@38 f203690c-595d-4dc9-a70b-905162fa7fd2
tags/rel_1_1_4
James Ahlborn 18 years ago
parent
commit
9c8332a326

+ 32
- 12
src/java/com/healthmarketscience/jackcess/ByteUtil.java View File

* @return The display String * @return The display String
*/ */
public static String toHexString(ByteBuffer buffer, int offset, int size) { public static String toHexString(ByteBuffer buffer, int offset, int size) {
StringBuffer rtn = new StringBuffer();
return toHexString(buffer, offset, size, true);
}

/**
* Convert a byte buffer to a hexadecimal string for display
* @param buffer Buffer to display, starting at offset 0
* @param offset Offset at which to start reading the buffer
* @param size Number of bytes to read from the buffer
* @param formatted flag indicating if formatting is required
* @return The display String
*/
public static String toHexString(ByteBuffer buffer,
int offset, int size, boolean formatted) {

StringBuilder rtn = new StringBuilder();
int position = buffer.position(); int position = buffer.position();
buffer.position(offset); buffer.position(offset);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
byte b = buffer.get(); byte b = buffer.get();
byte h = (byte) (b & 0xF0); byte h = (byte) (b & 0xF0);
h = (byte) (h >>> 4); h = (byte) (h >>> 4);
h = (byte) (h & 0x0F);
h = (byte) (h & 0x0F);
rtn.append(HEX_CHARS[(int) h]);
h = (byte) (b & 0x0F);
rtn.append(HEX_CHARS[(int) h]); rtn.append(HEX_CHARS[(int) h]);
h = (byte) (b & 0x0F);
rtn.append(HEX_CHARS[(int) h] + " ");
if ((i + 1) % 4 == 0) {
if (formatted == true)
{
rtn.append(" "); rtn.append(" ");
}
if ((i + 1) % 24 == 0) {
rtn.append("\n");

if ((i + 1) % 4 == 0) {
rtn.append(" ");
}
if ((i + 1) % 24 == 0) {
rtn.append("\n");
}
} }
} }
buffer.position(position); buffer.position(position);
return rtn.toString(); return rtn.toString();
}
}

} }

+ 27
- 3
src/java/com/healthmarketscience/jackcess/Column.java View File

intVal = intVal.negate(); intVal = intVal.negate();
} }
return new BigDecimal(intVal, getScale()); return new BigDecimal(intVal, getScale());

} else if (_type == DataType.GUID) {
StringBuilder sb = new StringBuilder(22);
sb.append("{");
sb.append(ByteUtil.toHexString(buffer, 0, 4,
false));
sb.append("-");
sb.append(ByteUtil.toHexString(buffer, 4, 2,
false));
sb.append("-");
sb.append(ByteUtil.toHexString(buffer, 6, 2,
false));
sb.append("-");
sb.append(ByteUtil.toHexString(buffer, 8, 2,
false));
sb.append("-");
sb.append(ByteUtil.toHexString(buffer, 10, 6,
false));
sb.append("}");
return (sb.toString());
} else if (_type == DataType.UNKNOWN_0D) {
} else if (_type == DataType.UNKNOWN_0D || _type == DataType.GUID) {
return null; return null;
} else { } else {
throw new IOException("Unrecognized data type: " + _type); throw new IOException("Unrecognized data type: " + _type);
return _format.SIZE_LONG_VALUE_DEF; return _format.SIZE_LONG_VALUE_DEF;
} else if (_type == DataType.NUMERIC) { } else if (_type == DataType.NUMERIC) {
return 17; return 17;
} else if (_type == DataType.UNKNOWN_0D || _type == DataType.GUID) {
} else if (_type == DataType.GUID) {
return 16;
} else if (_type == DataType.UNKNOWN_0D) {
throw new IllegalArgumentException("FIX ME"); throw new IllegalArgumentException("FIX ME");
} else { } else {
throw new IllegalArgumentException("Unrecognized data type: " + _type); throw new IllegalArgumentException("Unrecognized data type: " + _type);
} }
public String toString() { public String toString() {
StringBuffer rtn = new StringBuffer();
StringBuilder rtn = new StringBuilder();
rtn.append("\tName: " + _name); rtn.append("\tName: " + _name);
rtn.append("\n\tType: 0x" + Integer.toHexString((int)_type.getValue())); rtn.append("\n\tType: 0x" + Integer.toHexString((int)_type.getValue()));
rtn.append("\n\tNumber: " + _columnNumber); rtn.append("\n\tNumber: " + _columnNumber);

+ 5
- 4
src/java/com/healthmarketscience/jackcess/DataType.java View File

OLE((byte) 0x0B, Types.LONGVARBINARY, 12), OLE((byte) 0x0B, Types.LONGVARBINARY, 12),
MEMO((byte) 0x0C, Types.LONGVARCHAR, 12), MEMO((byte) 0x0C, Types.LONGVARCHAR, 12),
UNKNOWN_0D((byte) 0x0D), UNKNOWN_0D((byte) 0x0D),
GUID((byte) 0x0F),
GUID((byte) 0x0F, null, 16),
NUMERIC((byte) 0x10, Types.NUMERIC, 17); NUMERIC((byte) 0x10, Types.NUMERIC, 17);


/** Map of SQL types to Access data types */ /** Map of SQL types to Access data types */
/** SQL type equivalent, or null if none defined */ /** SQL type equivalent, or null if none defined */
private Integer _sqlType; private Integer _sqlType;
DataType(byte value) {
private DataType(byte value) {
_value = value; _value = value;
} }
DataType(byte value, int sqlType, int size) {
private DataType(byte value, Integer sqlType, Integer size) {
this(value); this(value);
_sqlType = sqlType; _sqlType = sqlType;
_size = size; _size = size;
} }
DataType(byte value, int sqlType, int size, boolean variableLength) {
private DataType(byte value, Integer sqlType, Integer size,
boolean variableLength) {
this(value, sqlType, size); this(value, sqlType, size);
_variableLength = variableLength; _variableLength = variableLength;
} }

+ 2
- 2
src/java/com/healthmarketscience/jackcess/Index.java View File

} }
public String toString() { public String toString() {
StringBuffer rtn = new StringBuffer();
StringBuilder rtn = new StringBuilder();
rtn.append("\tName: " + _name); rtn.append("\tName: " + _name);
rtn.append("\n\tNumber: " + _indexNumber); rtn.append("\n\tNumber: " + _indexNumber);
rtn.append("\n\tPage number: " + _pageNumber); rtn.append("\n\tPage number: " + _pageNumber);
byte flag = buffer.get(); byte flag = buffer.get();
if (flag != (byte) 0) { if (flag != (byte) 0) {
if (col.getType() == DataType.TEXT) { if (col.getType() == DataType.TEXT) {
StringBuffer sb = new StringBuffer();
StringBuilder sb = new StringBuilder();
byte b; byte b;
while ( (b = buffer.get()) != (byte) 1) { while ( (b = buffer.get()) != (byte) 1) {
if ((int) b == 43) { if ((int) b == 43) {

+ 2
- 2
src/java/com/healthmarketscience/jackcess/Table.java View File

} }
public String toString() { public String toString() {
StringBuffer rtn = new StringBuffer();
StringBuilder rtn = new StringBuilder();
rtn.append("Type: " + _tableType); rtn.append("Type: " + _tableType);
rtn.append("\nRow count: " + _rowCount); rtn.append("\nRow count: " + _rowCount);
rtn.append("\nColumn count: " + _columnCount); rtn.append("\nColumn count: " + _columnCount);
*/ */
public String display(long limit) throws IOException { public String display(long limit) throws IOException {
reset(); reset();
StringBuffer rtn = new StringBuffer();
StringBuilder rtn = new StringBuilder();
Iterator iter = _columns.iterator(); Iterator iter = _columns.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
Column col = (Column) iter.next(); Column col = (Column) iter.next();

Loading…
Cancel
Save