decodeRows static method

List<List> decodeRows(
  1. ParsedColumnarBuffer buffer
)

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