Sha256: ee2810e53eb22a312a199fa7f7506870e1fe85fb83a6734eb8c49a72b86cbdcf

Contents?: true

Size: 1.84 KB

Versions: 9

Compression:

Stored size: 1.84 KB

Contents

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

    class << self
      ##
      # Opens database.
      # The first argument is DuckDB database file path to open.
      # If there is no argument, the method opens DuckDB database in memory.
      # The method yields block if block is given.
      #
      #   DuckDB::Database.open('duckdb_database.db') #=> DuckDB::Database
      #
      #   DuckDB::Database.open #=> opens DuckDB::Database in memory.
      #
      #   DuckDB::Database.open do |db|
      #     con = db.connect
      #     con.query('CREATE TABLE users (id INTEGER, name VARCHAR(30))')
      #   end
      #
      def open(*args)
        db = _open(*args)
        return db unless block_given?

        begin
          yield db
        ensure
          db.close
        end
      end
    end

    ##
    # connects database.
    #
    # The method yields block and disconnects the database if block given
    #
    #   db = DuckDB::Database.open
    #
    #   con = db.connect # => DuckDB::Connection
    #
    #   db.connect do |con|
    #     con.query('CREATE TABLE users (id INTEGER, name VARCHAR(30))')
    #   end
    #
    def connect
      conn = _connect
      return conn unless block_given?

      begin
        yield conn
      ensure
        conn.disconnect
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
duckdb-0.2.7.0 lib/duckdb/database.rb
duckdb-0.2.6.1 lib/duckdb/database.rb
duckdb-0.2.6.0 lib/duckdb/database.rb
duckdb-0.0.12 lib/duckdb/database.rb
duckdb-0.0.11 lib/duckdb/database.rb
duckdb-0.0.10 lib/duckdb/database.rb
duckdb-0.0.9 lib/duckdb/database.rb
duckdb-0.0.8.1 lib/duckdb/database.rb
duckdb-0.0.8 lib/duckdb/database.rb