getColumnInfo method

Future<List<ColumnInfo>> getColumnInfo()

Get column information

Implementation

Future<List<ColumnInfo>> getColumnInfo() async {
  _ensureExecuted();

  final columns = <ColumnInfo>[];
  final numColumns = _columnCount ?? 0;

  for (var i = 1; i <= numColumns; i++) {
    final queryInfo = _memoryManager.allocate<dpiQueryInfo>(sizeOf<dpiQueryInfo>());

    final result = _dpiOracle.dpiStmt_getQueryInfo(
      _statementPtr.value,
      i,
      queryInfo,
    );

    if (result == DPI_FAILURE) {
      throw OracleStatementException(
        'Failed to get column info for column $i',
        sql: _sql,
      );
    }

    final name = StringUtils.fromNativeUtf8(queryInfo.ref.name.cast<Char>());
    final typeInfo = queryInfo.ref.typeInfo;

    columns.add(ColumnInfo(
      name: name,
      position: i,
      oracleType: typeInfo.oracleTypeNum,
      defaultNativeType: typeInfo.defaultNativeTypeNum,
      size: typeInfo.dbSizeInBytes,
      precision: typeInfo.precision,
      scale: typeInfo.scale,
      isNullable: typeInfo.sizeInChars == 1,
    ));
  }

  return columns;
}