Sha256: 96b434fe0257a1eaa9678f5229d8fca61dca9063663c7c92da8e49ff422be71f

Contents?: true

Size: 929 Bytes

Versions: 1

Compression:

Stored size: 929 Bytes

Contents

module PgStream
  class Stream
    def initialize(db_conn, body)
      @db_conn = db_conn
      @db_conn.send_query(body)
      @db_conn.set_single_row_mode
    end

    def headers
      @headers ||= get_headers
    end

    def each_row(&block)
      headers # ensure that headers has been called so we have the first row
      return unless @first_row # dont yield any rows if the query returns no results
      yield(@first_row)

      loop do
        res = @db_conn.get_result || break
        res.check
        res.each_row do |row|
          yield(row)
        end
      end
    end

    private

    def get_headers
      first_row_result = @db_conn.get_result
      first_row_result.check

      # values is method on the result object, which can have many rows,
      # but which will only return one row in single_row_mode
      @first_row = first_row_result.values[0]

      first_row_result.fields
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pg_stream-0.1.0 lib/pg_stream/stream.rb