Class: SQLRunner::Adapters::SQLite
- Inherits:
-
Object
- Object
- SQLRunner::Adapters::SQLite
- Defined in:
- lib/sql_runner/adapters/sqlite.rb
Direct Known Subclasses
Constant Summary collapse
- InvalidPreparedStatement =
Class.new(StandardError)
Class Method Summary collapse
Instance Method Summary collapse
- #active? ⇒ Boolean
- #connect ⇒ Object
- #disconnect ⇒ Object
- #execute(query, **bind_vars) ⇒ Object
-
#initialize(connection_string) ⇒ SQLite
constructor
A new instance of SQLite.
- #inspect ⇒ Object
- #parse(query, bind_vars) ⇒ Object
- #reconnect ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(connection_string) ⇒ SQLite
Returns a new instance of SQLite.
20 21 22 23 24 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 20 def initialize(connection_string) @connection_string = connection_string @uri = URI(connection_string) connect end |
Class Method Details
.create_connection_pool(timeout:, size:, connection_string:) ⇒ Object
14 15 16 17 18 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 14 def self.create_connection_pool(timeout:, size:, connection_string:) ConnectionPool.new(timeout:, size:) do new(connection_string) end end |
.load ⇒ Object
8 9 10 11 12 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 8 def self.load require "sqlite3" rescue LoadError raise MissingDependency, "make sure the `sqlite3` gem is available" end |
Instance Method Details
#active? ⇒ Boolean
49 50 51 52 53 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 49 def active? !@connection&.closed? rescue SQLite3::Exception false end |
#connect ⇒ Object
26 27 28 29 30 31 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 26 def connect @connection = SQLite3::Database.new( @uri.hostname || @uri.opaque, results_as_hash: true ) end |
#disconnect ⇒ Object
33 34 35 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 33 def disconnect @connection&.close && (@connection = nil) end |
#execute(query, **bind_vars) ⇒ Object
42 43 44 45 46 47 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 42 def execute(query, **bind_vars) _, _, names = parse(query, bind_vars) validate_bindings(query, bind_vars, names) @connection.execute(query, **bind_vars) end |
#inspect ⇒ Object
59 60 61 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 59 def inspect to_s end |
#parse(query, bind_vars) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 63 def parse(query, bind_vars) bindings = [] names = [] parsed_query = query.gsub(/(:?):([a-zA-Z]\w*)/) do |match| next match if Regexp.last_match(1) == ":" # skip type casting name = match[1..-1] sym_name = name.to_sym names << sym_name bindings << bind_vars[sym_name] "?" end [parsed_query, bindings, names] end |
#reconnect ⇒ Object
37 38 39 40 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 37 def reconnect disconnect connect end |
#to_s ⇒ Object
55 56 57 |
# File 'lib/sql_runner/adapters/sqlite.rb', line 55 def to_s %[#<#{self.class.name} #{format('0x00%x', (object_id << 1))}>] end |