decodeRows static method
Decodes a columnar buffer into row-oriented data.
Converts columnar format (data organized by columns) into row-oriented format (list of rows, each row is a list of values).
Decompresses column data if necessary.
Returns a list of rows, where each row is a list of dynamic values.
Implementation
static List<List<dynamic>> decodeRows(ParsedColumnarBuffer buffer) {
final rows = <List<dynamic>>[];
for (var rowIdx = 0; rowIdx < buffer.rowCount; rowIdx++) {
rows.add(<dynamic>[]);
}
for (final column in buffer.columns) {
final data = column.compressed
? _decompress(column.data, column.compressionType)
: column.data;
final reader = _BufferReader(data);
for (var rowIdx = 0; rowIdx < buffer.rowCount; rowIdx++) {
final isNull = reader.readUint8() != 0;
if (isNull) {
rows[rowIdx].add(null);
} else {
switch (column.odbcType) {
case 2:
final value = reader.readInt32();
rows[rowIdx].add(value);
case 3:
final value = reader.readInt64();
rows[rowIdx].add(value);
default:
final len = reader.readUint32();
final bytes = reader.readBytes(len);
rows[rowIdx].add(String.fromCharCodes(bytes));
}
}
}
}
return rows;
}