mini_sql 0.2.2 → 1.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/.github/workflows/ci.yml +66 -0
- data/.rubocop-https---raw-githubusercontent-com-discourse-discourse-master--rubocop-yml +355 -0
- data/.rubocop.yml +8 -0
- data/CHANGELOG +22 -0
- data/Gemfile +3 -1
- data/Guardfile +2 -0
- data/README.md +90 -2
- data/Rakefile +3 -1
- data/bench/timestamp_perf.rb +22 -21
- data/bench/topic_mysql_perf.rb +304 -0
- data/bench/topic_perf.rb +175 -11
- data/bin/console +1 -0
- data/lib/mini_sql.rb +8 -0
- data/lib/mini_sql/builder.rb +10 -2
- data/lib/mini_sql/connection.rb +17 -3
- data/lib/mini_sql/decoratable.rb +22 -0
- data/lib/mini_sql/deserializer_cache.rb +2 -0
- data/lib/mini_sql/inline_param_encoder.rb +9 -9
- data/lib/mini_sql/mysql/connection.rb +67 -0
- data/lib/mini_sql/mysql/deserializer_cache.rb +57 -0
- data/lib/mini_sql/postgres/coders.rb +2 -0
- data/lib/mini_sql/postgres/connection.rb +80 -3
- data/lib/mini_sql/postgres/deserializer_cache.rb +33 -13
- data/lib/mini_sql/postgres_jdbc/connection.rb +6 -1
- data/lib/mini_sql/postgres_jdbc/deserializer_cache.rb +43 -43
- data/lib/mini_sql/result.rb +20 -0
- data/lib/mini_sql/serializer.rb +70 -0
- data/lib/mini_sql/sqlite/connection.rb +12 -4
- data/lib/mini_sql/sqlite/deserializer_cache.rb +11 -13
- data/lib/mini_sql/version.rb +2 -1
- data/mini_sql.gemspec +15 -3
- metadata +80 -13
- data/.travis.yml +0 -21
@@ -26,6 +26,10 @@ module MiniSql
|
|
26
26
|
r
|
27
27
|
end
|
28
28
|
|
29
|
+
def query_array(sql, *params)
|
30
|
+
run(sql, *params)
|
31
|
+
end
|
32
|
+
|
29
33
|
def exec(sql, *params)
|
30
34
|
|
31
35
|
start = raw_connection.total_changes
|
@@ -46,16 +50,20 @@ module MiniSql
|
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
53
|
+
def query_decorator(decorator, sql, *params)
|
54
|
+
run(sql, *params) do |set|
|
55
|
+
deserializer_cache.materialize(set, decorator)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
49
59
|
def escape_string(str)
|
50
|
-
str.gsub("'","''")
|
60
|
+
str.gsub("'", "''")
|
51
61
|
end
|
52
62
|
|
53
63
|
private
|
54
64
|
|
55
65
|
def run(sql, *params)
|
56
|
-
|
57
|
-
sql = param_encoder.encode(sql, *params)
|
58
|
-
end
|
66
|
+
sql = param_encoder.encode(sql, *params)
|
59
67
|
if block_given?
|
60
68
|
stmt = SQLite3::Statement.new(raw_connection, sql)
|
61
69
|
yield stmt.execute
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MiniSql
|
2
4
|
module Sqlite
|
3
5
|
class DeserializerCache
|
@@ -9,7 +11,7 @@ module MiniSql
|
|
9
11
|
@max_size = max_size || DEFAULT_MAX_SIZE
|
10
12
|
end
|
11
13
|
|
12
|
-
def materialize(result)
|
14
|
+
def materialize(result, decorator_module = nil)
|
13
15
|
|
14
16
|
key = result.columns
|
15
17
|
|
@@ -22,6 +24,10 @@ module MiniSql
|
|
22
24
|
@cache.shift if @cache.length > @max_size
|
23
25
|
end
|
24
26
|
|
27
|
+
if decorator_module
|
28
|
+
materializer = materializer.decorated(decorator_module)
|
29
|
+
end
|
30
|
+
|
25
31
|
r = []
|
26
32
|
# quicker loop
|
27
33
|
while !result.eof?
|
@@ -39,23 +45,15 @@ module MiniSql
|
|
39
45
|
fields = result.columns
|
40
46
|
|
41
47
|
Class.new do
|
42
|
-
|
48
|
+
extend MiniSql::Decoratable
|
49
|
+
include MiniSql::Result
|
43
50
|
|
44
|
-
|
45
|
-
alias :read_attribute_for_serialization :send
|
46
|
-
|
47
|
-
def to_h
|
48
|
-
r = {}
|
49
|
-
instance_variables.each do |f|
|
50
|
-
r[f.to_s.sub('@','').to_sym] = instance_variable_get(f)
|
51
|
-
end
|
52
|
-
r
|
53
|
-
end
|
51
|
+
attr_accessor(*fields)
|
54
52
|
|
55
53
|
instance_eval <<~RUBY
|
56
54
|
def materialize(data)
|
57
55
|
r = self.new
|
58
|
-
#{col
|
56
|
+
#{col = -1; fields.map { |f| "r.#{f} = data[#{col += 1}]" }.join("; ")}
|
59
57
|
r
|
60
58
|
end
|
61
59
|
RUBY
|
data/lib/mini_sql/version.rb
CHANGED
data/mini_sql.gemspec
CHANGED
@@ -12,29 +12,41 @@ Gem::Specification.new do |spec|
|
|
12
12
|
|
13
13
|
spec.summary = %q{A fast, safe, simple direct SQL executor}
|
14
14
|
spec.description = %q{A fast, safe, simple direct SQL executor for PG}
|
15
|
-
spec.homepage = "https://discourse
|
15
|
+
spec.homepage = "https://github.com/discourse/mini_sql"
|
16
16
|
spec.license = "MIT"
|
17
17
|
|
18
|
+
spec.metadata = {
|
19
|
+
"bug_tracker_uri" => "https://github.com/discourse/mini_sql/issues",
|
20
|
+
"source_code_uri" => "https://github.com/discourse/mini_sql",
|
21
|
+
"changelog_uri" => "https://github.com/discourse/mini_sql/blob/master/CHANGELOG"
|
22
|
+
}
|
23
|
+
|
18
24
|
spec.platform = 'java' if RUBY_ENGINE == 'jruby'
|
19
25
|
|
20
26
|
# Specify which files should be added to the gem when it is released.
|
21
27
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
22
|
-
|
28
|
+
# rubocop:disable Discourse/NoChdir
|
29
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
23
30
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
24
31
|
end
|
32
|
+
# rubocop:enable Discourse/NoChdir
|
25
33
|
spec.require_paths = ["lib"]
|
26
34
|
|
27
35
|
spec.add_development_dependency "bundler", "> 1.16"
|
28
|
-
spec.add_development_dependency "rake", "
|
36
|
+
spec.add_development_dependency "rake", "> 10"
|
29
37
|
spec.add_development_dependency "minitest", "~> 5.0"
|
30
38
|
spec.add_development_dependency "guard", "~> 2.14"
|
31
39
|
spec.add_development_dependency "guard-minitest", "~> 2.4"
|
32
40
|
spec.add_development_dependency "activesupport", "~> 5.2"
|
41
|
+
spec.add_development_dependency 'rubocop', '~> 1.4.0'
|
42
|
+
spec.add_development_dependency 'rubocop-discourse', '~> 2.4.1'
|
43
|
+
spec.add_development_dependency 'm', '~> 1.5.1'
|
33
44
|
|
34
45
|
if RUBY_ENGINE == 'jruby'
|
35
46
|
spec.add_development_dependency "activerecord-jdbcpostgresql-adapter", "~> 52.2"
|
36
47
|
else
|
37
48
|
spec.add_development_dependency "pg", "> 1"
|
49
|
+
spec.add_development_dependency "mysql2"
|
38
50
|
spec.add_development_dependency "sqlite3", "~> 1.3"
|
39
51
|
end
|
40
52
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_sql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0
|
4
|
+
version: '1.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '10
|
33
|
+
version: '10'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '10
|
40
|
+
version: '10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,48 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '5.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.4.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.4.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-discourse
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.4.1
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.4.1
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: m
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.5.1
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 1.5.1
|
97
139
|
- !ruby/object:Gem::Dependency
|
98
140
|
name: pg
|
99
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +150,20 @@ dependencies:
|
|
108
150
|
- - ">"
|
109
151
|
- !ruby/object:Gem::Version
|
110
152
|
version: '1'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: mysql2
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
111
167
|
- !ruby/object:Gem::Dependency
|
112
168
|
name: sqlite3
|
113
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,8 +185,10 @@ executables: []
|
|
129
185
|
extensions: []
|
130
186
|
extra_rdoc_files: []
|
131
187
|
files:
|
188
|
+
- ".github/workflows/ci.yml"
|
132
189
|
- ".gitignore"
|
133
|
-
- ".
|
190
|
+
- ".rubocop-https---raw-githubusercontent-com-discourse-discourse-master--rubocop-yml"
|
191
|
+
- ".rubocop.yml"
|
134
192
|
- CHANGELOG
|
135
193
|
- CODE_OF_CONDUCT.md
|
136
194
|
- Gemfile
|
@@ -139,28 +197,37 @@ files:
|
|
139
197
|
- README.md
|
140
198
|
- Rakefile
|
141
199
|
- bench/timestamp_perf.rb
|
200
|
+
- bench/topic_mysql_perf.rb
|
142
201
|
- bench/topic_perf.rb
|
143
202
|
- bin/console
|
144
203
|
- bin/setup
|
145
204
|
- lib/mini_sql.rb
|
146
205
|
- lib/mini_sql/builder.rb
|
147
206
|
- lib/mini_sql/connection.rb
|
207
|
+
- lib/mini_sql/decoratable.rb
|
148
208
|
- lib/mini_sql/deserializer_cache.rb
|
149
209
|
- lib/mini_sql/inline_param_encoder.rb
|
210
|
+
- lib/mini_sql/mysql/connection.rb
|
211
|
+
- lib/mini_sql/mysql/deserializer_cache.rb
|
150
212
|
- lib/mini_sql/postgres/coders.rb
|
151
213
|
- lib/mini_sql/postgres/connection.rb
|
152
214
|
- lib/mini_sql/postgres/deserializer_cache.rb
|
153
215
|
- lib/mini_sql/postgres_jdbc/connection.rb
|
154
216
|
- lib/mini_sql/postgres_jdbc/deserializer_cache.rb
|
217
|
+
- lib/mini_sql/result.rb
|
218
|
+
- lib/mini_sql/serializer.rb
|
155
219
|
- lib/mini_sql/sqlite/connection.rb
|
156
220
|
- lib/mini_sql/sqlite/deserializer_cache.rb
|
157
221
|
- lib/mini_sql/version.rb
|
158
222
|
- mini_sql.gemspec
|
159
|
-
homepage: https://discourse
|
223
|
+
homepage: https://github.com/discourse/mini_sql
|
160
224
|
licenses:
|
161
225
|
- MIT
|
162
|
-
metadata:
|
163
|
-
|
226
|
+
metadata:
|
227
|
+
bug_tracker_uri: https://github.com/discourse/mini_sql/issues
|
228
|
+
source_code_uri: https://github.com/discourse/mini_sql
|
229
|
+
changelog_uri: https://github.com/discourse/mini_sql/blob/master/CHANGELOG
|
230
|
+
post_install_message:
|
164
231
|
rdoc_options: []
|
165
232
|
require_paths:
|
166
233
|
- lib
|
@@ -175,8 +242,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
242
|
- !ruby/object:Gem::Version
|
176
243
|
version: '0'
|
177
244
|
requirements: []
|
178
|
-
rubygems_version: 3.
|
179
|
-
signing_key:
|
245
|
+
rubygems_version: 3.2.3
|
246
|
+
signing_key:
|
180
247
|
specification_version: 4
|
181
248
|
summary: A fast, safe, simple direct SQL executor
|
182
249
|
test_files: []
|
data/.travis.yml
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.5.1
|
4
|
-
- ruby-head
|
5
|
-
|
6
|
-
before_install:
|
7
|
-
- gem install bundler
|
8
|
-
|
9
|
-
cache: bundler
|
10
|
-
sudo: false
|
11
|
-
|
12
|
-
addons:
|
13
|
-
postgresql: 9.6
|
14
|
-
|
15
|
-
install:
|
16
|
-
- createdb test_mini_sql
|
17
|
-
- bundle install
|
18
|
-
|
19
|
-
matrix:
|
20
|
-
allow_failures:
|
21
|
-
- rvm: ruby-head
|