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.



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

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

Instance Attribute Details

#interfaceObject (readonly)

Returns the value of attribute interface.



100
101
102
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 100

def interface
  @interface
end

#sqlObject (readonly)

Returns the value of attribute sql.



100
101
102
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 100

def sql
  @sql
end

Instance Method Details

#closeObject



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

def close = nil

#column_countObject



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

def column_count = columns.size

#columnsObject



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

def columns
  execute
  @columns
end

#executeObject



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

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



153
154
155
156
# File 'lib/active_record/connection_adapters/sqlite3_wasm_adapter.rb', line 153

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

#resultObject



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

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

#to_aObject



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

def to_a
  execute
  @rows
end