case MySQLConstants.TYPE_STRING:
type = meta0;
length = meta1;
break;
default:
throw new NestableRuntimeException("assertion failed, unknown column type: " + type);
}
}
}
//
if(!usedColumns.get(i)) {
unusedColumnCount++;
continue;
} else if(nullColumns.get(i - unusedColumnCount)) {
columns.add(NullColumn.valueOf(type));
continue;
}
//
switch(type) {
case MySQLConstants.TYPE_TINY: columns.add(TinyColumn.valueOf(is.readInt(1))); break;
case MySQLConstants.TYPE_SHORT: columns.add(ShortColumn.valueOf(is.readInt(2))); break;
case MySQLConstants.TYPE_INT24: columns.add(Int24Column.valueOf(is.readInt(3))); break;
case MySQLConstants.TYPE_LONG: columns.add(LongColumn.valueOf(is.readInt(4))); break;
case MySQLConstants.TYPE_LONGLONG: columns.add(LongLongColumn.valueOf(is.readLong(8))); break;
case MySQLConstants.TYPE_FLOAT: columns.add(FloatColumn.valueOf(Float.intBitsToFloat(is.readInt(4)))); break;
case MySQLConstants.TYPE_DOUBLE: columns.add(DoubleColumn.valueOf(Double.longBitsToDouble(is.readLong(8)))); break;
case MySQLConstants.TYPE_YEAR: columns.add(YearColumn.valueOf(MySQLUtils.toYear(is.readInt(1)))); break;
case MySQLConstants.TYPE_DATE: columns.add(DateColumn.valueOf(MySQLUtils.toDate(is.readInt(3)))); break;
case MySQLConstants.TYPE_TIME: columns.add(TimeColumn.valueOf(MySQLUtils.toTime(is.readInt(3)))); break;
case MySQLConstants.TYPE_TIMESTAMP: columns.add(TimestampColumn.valueOf(MySQLUtils.toTimestamp(is.readLong(4)))); break;
case MySQLConstants.TYPE_DATETIME: columns.add(DatetimeColumn.valueOf(MySQLUtils.toDatetime(is.readLong(8)))); break;
case MySQLConstants.TYPE_ENUM: columns.add(EnumColumn.valueOf(is.readInt(length))); break;
case MySQLConstants.TYPE_SET: columns.add(SetColumn.valueOf(is.readLong(length))); break;
case MySQLConstants.TYPE_STRING:
final int stringLength = length < 256 ? is.readInt(1) : is.readInt(2);
columns.add(is.readFixedLengthString(stringLength));
break;
case MySQLConstants.TYPE_BIT:
final int bitLength = (meta >> 8) * 8 + (meta & 0xFF);
columns.add(is.readBit(bitLength, false));
break;
case MySQLConstants.TYPE_NEWDECIMAL:
final int precision = meta & 0xFF;
final int scale = meta >> 8;
final int decimalLength = MySQLUtils.getDecimalBinarySize(precision, scale);
columns.add(DecimalColumn.valueOf(MySQLUtils.toDecimal(precision, scale, is.readBytes(decimalLength)), precision, scale));
break;
case MySQLConstants.TYPE_BLOB:
final int blobLength = is.readInt(meta);
columns.add(BlobColumn.valueOf(is.readBytes(blobLength)));
break;
case MySQLConstants.TYPE_VARCHAR:
case MySQLConstants.TYPE_VAR_STRING:
final int varcharLength = meta < 256 ? is.readInt(1) : is.readInt(2);
columns.add(is.readFixedLengthString(varcharLength));
break;
default:
throw new NestableRuntimeException("assertion failed, unknown column type: " + type);
}
}
return new Row(columns);
}