Class: ActiveRecord::ConnectionAdapters::SQLite3WasmAdapter::Statement

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(interface, sql) ⇒ Statement

Returns a new instance of Statement.



106
107
108
109
110
111
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 106

def initialize(interface, sql)
  @interface = interface
  @sql = sql
  @columns = nil
  @rows = nil
end

Instance Attribute Details

#interfaceObject (readonly)

Returns the value of attribute interface.



104
105
106
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 104

def interface
  @interface
end

#sqlObject (readonly)

Returns the value of attribute sql.



104
105
106
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 104

def sql
  @sql
end

Instance Method Details

#closeObject



113
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 113

def close = nil

#column_countObject



130
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 130

def column_count = columns.size

#columnsObject



115
116
117
118
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 115

def columns
  execute
  @columns
end

#executeObject



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 132

def execute
  return if @rows

  res = interface.exec(sql)
  # unwrap column names
  cols = res[:cols].to_a.map(&:to_s)
  # unwrap row values
  rows = res[:rows].to_a.map do |row|
    row.to_a.map do |val|
      str_val = val.to_s
      next str_val if val.typeof == "string"
      next str_val == "true" if val.typeof == "boolean"
      next nil if str_val == "null"

      # handle integers and floats
      next str_val.include?(".") ? val.to_f : val.to_i if val.typeof == "number"

      str_val
    end
  end

  @columns = cols
  @rows = rows
end

#reset!Object



157
158
159
160
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 157

def reset!
  @rows = nil
  @columns = nil
end

#resultObject



120
121
122
123
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 120

def result
  execute
  @rows.map { @columns.zip(_1).to_h }.freeze
end

#to_aObject



125
126
127
128
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 125

def to_a
  execute
  @rows
end