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.

Constant Summary collapse

BUFFER_SIZE =
1024

Instance Method Summary collapse

Constructor Details

#initialize(handle, service) ⇒ Cursor

Returns a new instance of Cursor.



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

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


  @row_buffer = []
  @done = false
  @open = true

  fetch_more
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.



58
59
60
61
# File 'lib/impala/cursor.rb', line 58

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

#eachObject



25
26
27
28
29
# File 'lib/impala/cursor.rb', line 25

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


52
53
54
# File 'lib/impala/cursor.rb', line 52

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:



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

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)


69
70
71
# File 'lib/impala/cursor.rb', line 69

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

#inspectObject



21
22
23
# File 'lib/impala/cursor.rb', line 21

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

#open?Boolean

Returns true if the cursor is still open.

Returns:

  • (Boolean)


64
65
66
# File 'lib/impala/cursor.rb', line 64

def open?
  @open
end