Sha256: 24ab90dbc0d9c0fd63f4ed72dab3ace5eeae5b46bb7aebd2929e01ff4a18713e

Contents?: true

Size: 1.65 KB

Versions: 6

Compression:

Stored size: 1.65 KB

Contents

module DuckDB
  # The Result class encapsulates a execute result of DuckDB database.
  #
  # The usage is as follows:
  #
  #   require 'duckdb'
  #
  #   db = DuckDB::Database.open # database in memory
  #   con = db.connect
  #
  #   con.execute('CREATE TABLE users (id INTEGER, name VARCHAR(30))')
  #
  #   con.execute("INSERT into users VALUES(1, 'Alice')")
  #   con.execute("INSERT into users VALUES(2, 'Bob')")
  #   con.execute("INSERT into users VALUES(3, 'Cathy')")
  #
  #   result = con.execute('SELECT * from users')
  #   result.each do |row|
  #     p row
  #   end
  class Result
    include Enumerable

    ToRuby = {
      1 => :_to_boolean,
      3 => :_to_smallint,
      4 => :_to_integer,
      5 => :_to_bigint,
      10 => :_to_float,
      11 => :_to_double,
      16 => :_to_hugeint,
      18 => :_to_blob,
    }

    ToRuby.default = :_to_string

    alias column_size column_count
    alias row_size row_count

    def each
      return to_enum { row_size } unless block_given?

      row_count.times do |row_index|
        yield row(row_index)
      end
    end

    def row(row_index)
      row = []
      column_count.times do |col_index|
        row << (_null?(row_index, col_index) ? nil : to_value(row_index, col_index))
      end
      row
    end

    def to_value(row_index, col_index)
      send(ToRuby[_column_type(col_index)], row_index, col_index)
    end

    def enum_dictionary_values(col_index)
      values = []
      _enum_dictionary_size(col_index).times do |i|
        values << _enum_dictionary_value(col_index, i)
      end
      values
    end

    private

    def _to_hugeint(row, col)
      _to_string(row, col).to_i
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
duckdb-0.7.1 lib/duckdb/result.rb
duckdb-0.7.0 lib/duckdb/result.rb
duckdb-0.6.1 lib/duckdb/result.rb
duckdb-0.5.1.1 lib/duckdb/result.rb
duckdb-0.5.1 lib/duckdb/result.rb
duckdb-0.5.0 lib/duckdb/result.rb