Class: Impala::Cursor

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/impala/cursor.rb

Overview

Cursors are used to iterate over result sets without loading them all into memory at once. This can be useful if you’re dealing with lots of rows. It implements Enumerable, so you can use each/select/map/etc.

Instance Method Summary collapse

Constructor Details

#initialize(handle, service, buffer_length = 1024) ⇒ Cursor

Returns a new instance of Cursor.



8
9
10
11
12
13
14
15
16
17
# File 'lib/impala/cursor.rb', line 8

def initialize(handle, service, buffer_length=1024)
  @handle = handle
  @service = service

  @buffer_length = buffer_length
  @row_buffer = []

  @done = false
  @open = true
end

Instance Method Details

#closeObject

Close the cursor on the remote server. Once a cursor is closed, you can no longer fetch any rows from it.



56
57
58
59
# File 'lib/impala/cursor.rb', line 56

def close
  @open = false
  @service.close(@handle)
end

#eachObject



23
24
25
26
27
# File 'lib/impala/cursor.rb', line 23

def each
  while row = fetch_row
    yield row
  end
end

#fetch_allArray<Hash>

Returns all the remaining rows in the result set.

Returns:

  • (Array<Hash>)

    the remaining rows in the result set

See Also:

  • #fetch_one


50
51
52
# File 'lib/impala/cursor.rb', line 50

def fetch_all
  self.to_a
end

#fetch_rowHash?

Returns the next available row as a hash, or nil if there are none left.

Returns:

  • (Hash, nil)

    the next available row, or nil if there are none left

Raises:

See Also:



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/impala/cursor.rb', line 33

def fetch_row
  raise CursorError.new("Cursor has expired or been closed") unless @open

  if @row_buffer.empty?
    if @done
      return nil
    else
      fetch_more
    end
  end

  @row_buffer.shift
end

#has_more?Boolean

Returns true if there are any more rows to fetch.

Returns:

  • (Boolean)


67
68
69
# File 'lib/impala/cursor.rb', line 67

def has_more?
  !@done || !@row_buffer.empty?
end

#inspectObject



19
20
21
# File 'lib/impala/cursor.rb', line 19

def inspect
  "#<#{self.class}#{open? ? '' : ' (CLOSED)'}>"
end

#open?Boolean

Returns true if the cursor is still open.

Returns:

  • (Boolean)


62
63
64
# File 'lib/impala/cursor.rb', line 62

def open?
  @open
end