Class: DataObject::Sqlite3::Reader

Inherits:
Reader
  • Object
show all
Defined in:
lib/do_sqlite3.rb

Instance Method Summary collapse

Constructor Details

#initialize(db, reader) ⇒ Reader

Returns a new instance of Reader.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/do_sqlite3.rb', line 45

def initialize(db, reader)
  @reader = reader
  result = Sqlite3_c.sqlite3_step(reader)        
  rows_affected, field_count = Sqlite3_c.sqlite3_changes(db), Sqlite3_c.sqlite3_column_count(reader)
  if field_count == 0
    @records_affected = rows_affected
    close
  else
    @field_count = field_count
    @fields, @field_types = [], []
    i = 0
    while(i < @field_count)
      @field_types.push(Sqlite3_c.sqlite3_column_type(reader, i))
      @fields.push(Sqlite3_c.sqlite3_column_name(reader, i))
      i += 1
    end
    case result
    when Sqlite3_c::SQLITE_BUSY, Sqlite3_c::SQLITE_ERROR, Sqlite3_c::SQLITE_MISUSE
      raise ReaderError, "An error occurred while trying to get the next row\n#{Sqlite3_c.sqlite3_errmsg(db)}"
    else
      @has_rows = result == Sqlite3_c::SQLITE_ROW
      @state = STATE_OPEN
      close unless @has_rows
    end
  end
end

Instance Method Details

#eachObject



103
104
105
106
107
108
109
110
# File 'lib/do_sqlite3.rb', line 103

def each
  return unless has_rows?
  
  while(true) do
    yield
    break unless Sqlite3_c.sqlite3_step(@reader) == Sqlite3_c::SQLITE_ROW
  end
end

#get_index(name) ⇒ Object



81
82
83
84
# File 'lib/do_sqlite3.rb', line 81

def get_index(name)
  super
  @fields.index(name)
end

#item(idx) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
# File 'lib/do_sqlite3.rb', line 91

def item(idx)
  super
  case @field_types[idx]
  when 1 # SQLITE_INTEGER
    Sqlite3_c.sqlite3_column_int(@reader, idx).to_i
  when 2 # SQLITE_FLOAT
    Sqlite3_c.sqlite3_column_double(@reader, idx)
  else
    Sqlite3_c.sqlite3_column_text(@reader, idx)
  end
end

#name(idx) ⇒ Object



76
77
78
79
# File 'lib/do_sqlite3.rb', line 76

def name(idx)
  super
  @fields[idx]
end

#null?(idx) ⇒ Boolean

Returns:

  • (Boolean)


86
87
88
89
# File 'lib/do_sqlite3.rb', line 86

def null?(idx)
  super
  item(idx).nil?
end

#real_closeObject



72
73
74
# File 'lib/do_sqlite3.rb', line 72

def real_close
  Sqlite3_c.sqlite3_finalize(@reader)
end