Class: DataObject::Sqlite3::Reader
- Inherits:
-
Reader
- Object
- Reader
- DataObject::Sqlite3::Reader
- Defined in:
- lib/do_sqlite3.rb
Instance Method Summary collapse
- #each ⇒ Object
- #get_index(name) ⇒ Object
-
#initialize(db, reader) ⇒ Reader
constructor
A new instance of Reader.
- #item(idx) ⇒ Object
- #name(idx) ⇒ Object
- #null?(idx) ⇒ Boolean
- #real_close ⇒ Object
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
#each ⇒ Object
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
86 87 88 89 |
# File 'lib/do_sqlite3.rb', line 86 def null?(idx) super item(idx).nil? end |
#real_close ⇒ Object
72 73 74 |
# File 'lib/do_sqlite3.rb', line 72 def real_close Sqlite3_c.sqlite3_finalize(@reader) end |