sql_runner 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/sql_runner/adapters/active_record.rb +17 -1
- data/lib/sql_runner/adapters/sqlite.rb +91 -0
- data/lib/sql_runner/adapters.rb +1 -0
- data/lib/sql_runner/version.rb +1 -1
- data/lib/sql_runner.rb +2 -0
- data/sql_runner.gemspec +1 -0
- metadata +16 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8ae856dccc72baadf453eab3f66fc6b375757e81d042e309de58b80a3794c22
|
4
|
+
data.tar.gz: bc6cdefb9735e36c972e0ae23fc062e746c6ca44f981444fb604fd9e3db388d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1651fa64b28884dc534d878114bfab992f7d592b30c4b86cb518c24bfb63685795b61bb792db072ce07f7ea9495310b73196d5763b4250f3ea6d2fe7346efb3f
|
7
|
+
data.tar.gz: b660ace92f4e0446c8f583505a4d2da82f4854b53cdce460202d83086dd968e5a2a89af8953c484a12dfa023e12dfaa4ac68c38bb9ddb4e78f3144e27bf703bf
|
data/.gitignore
CHANGED
@@ -27,6 +27,18 @@ module SQLRunner
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
class SQLite < SQLRunner::Adapters::SQLite
|
31
|
+
def initialize(connection) # rubocop:disable Lint/MissingSuper
|
32
|
+
@connection = connection
|
33
|
+
end
|
34
|
+
|
35
|
+
def connect(*)
|
36
|
+
end
|
37
|
+
|
38
|
+
def disconnect(*)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
30
42
|
class ConnectionPool
|
31
43
|
def with
|
32
44
|
::ActiveRecord::Base.connection_pool.with_connection do |connection|
|
@@ -37,8 +49,12 @@ module SQLRunner
|
|
37
49
|
PostgreSQL.new(connection)
|
38
50
|
when "Mysql2::Client"
|
39
51
|
MySQL.new(connection)
|
52
|
+
when "SQLite3::Database"
|
53
|
+
SQLite.new(connection)
|
40
54
|
else
|
41
|
-
raise UnsupportedDatabase
|
55
|
+
raise UnsupportedDatabase,
|
56
|
+
"#{connection.class.name} is not yet supported " \
|
57
|
+
"by the SQLRunner's ActiveRecord adapter"
|
42
58
|
end
|
43
59
|
|
44
60
|
yield(adapter)
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SQLRunner
|
4
|
+
module Adapters
|
5
|
+
class SQLite
|
6
|
+
InvalidPreparedStatement = Class.new(StandardError)
|
7
|
+
|
8
|
+
def self.load
|
9
|
+
require "sqlite3"
|
10
|
+
rescue LoadError
|
11
|
+
raise MissingDependency, "make sure the `sqlite3` gem is available"
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.create_connection_pool(timeout:, size:, connection_string:)
|
15
|
+
ConnectionPool.new(timeout: timeout, size: size) do
|
16
|
+
new(connection_string)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(connection_string)
|
21
|
+
@connection_string = connection_string
|
22
|
+
@uri = URI(connection_string)
|
23
|
+
connect
|
24
|
+
end
|
25
|
+
|
26
|
+
def connect
|
27
|
+
@connection = SQLite3::Database.new(
|
28
|
+
@uri.hostname || @uri.opaque,
|
29
|
+
results_as_hash: true
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def disconnect
|
34
|
+
@connection&.close && (@connection = nil)
|
35
|
+
end
|
36
|
+
|
37
|
+
def reconnect
|
38
|
+
disconnect
|
39
|
+
connect
|
40
|
+
end
|
41
|
+
|
42
|
+
def execute(query, **bind_vars)
|
43
|
+
_, _, names = parse(query, bind_vars)
|
44
|
+
validate_bindings(query, bind_vars, names)
|
45
|
+
|
46
|
+
@connection.execute(query, **bind_vars)
|
47
|
+
end
|
48
|
+
|
49
|
+
def active?
|
50
|
+
!@connection&.closed?
|
51
|
+
rescue SQLite3::Exception
|
52
|
+
false
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_s
|
56
|
+
%[#<#{self.class.name} #{format('0x00%x', (object_id << 1))}>]
|
57
|
+
end
|
58
|
+
|
59
|
+
def inspect
|
60
|
+
to_s
|
61
|
+
end
|
62
|
+
|
63
|
+
def parse(query, bind_vars)
|
64
|
+
bindings = []
|
65
|
+
names = []
|
66
|
+
|
67
|
+
parsed_query = query.gsub(/(:?):([a-zA-Z]\w*)/) do |match|
|
68
|
+
next match if Regexp.last_match(1) == ":" # skip type casting
|
69
|
+
|
70
|
+
name = match[1..-1]
|
71
|
+
sym_name = name.to_sym
|
72
|
+
names << sym_name
|
73
|
+
bindings << bind_vars[sym_name]
|
74
|
+
|
75
|
+
"?"
|
76
|
+
end
|
77
|
+
|
78
|
+
[parsed_query, bindings, names]
|
79
|
+
end
|
80
|
+
|
81
|
+
private def validate_bindings(query, bind_vars, names)
|
82
|
+
names.each do |name|
|
83
|
+
next if bind_vars.key?(name)
|
84
|
+
|
85
|
+
raise InvalidPreparedStatement,
|
86
|
+
"missing value for :#{name} in #{query}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/sql_runner/adapters.rb
CHANGED
data/lib/sql_runner/version.rb
CHANGED
data/lib/sql_runner.rb
CHANGED
@@ -22,6 +22,8 @@ module SQLRunner
|
|
22
22
|
Adapters.register("postgresql", Adapters::PostgreSQL)
|
23
23
|
Adapters.register("mysql", Adapters::MySQL)
|
24
24
|
Adapters.register("mysql2", Adapters::MySQL)
|
25
|
+
Adapters.register("sqlite", Adapters::SQLite)
|
26
|
+
Adapters.register("sqlite3", Adapters::SQLite)
|
25
27
|
|
26
28
|
Query.register_plugin :one, Query::One
|
27
29
|
Query.register_plugin :many, Query::Many
|
data/sql_runner.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sql_runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: sqlite3
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
181
195
|
description: SQLRunner allows you to load your queries out of SQL files, without using
|
182
196
|
ORMs.
|
183
197
|
email:
|
@@ -211,6 +225,7 @@ files:
|
|
211
225
|
- lib/sql_runner/adapters/active_record.rb
|
212
226
|
- lib/sql_runner/adapters/mysql.rb
|
213
227
|
- lib/sql_runner/adapters/postgresql.rb
|
228
|
+
- lib/sql_runner/adapters/sqlite.rb
|
214
229
|
- lib/sql_runner/configuration.rb
|
215
230
|
- lib/sql_runner/connection.rb
|
216
231
|
- lib/sql_runner/query.rb
|