extralite-bundle 2.11 → 2.13
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/CHANGELOG.md +9 -0
- data/README.md +26 -18
- data/ext/extralite/common.c +26 -12
- data/ext/extralite/database.c +39 -9
- data/ext/extralite/extralite.h +6 -1
- data/ext/extralite/query.c +49 -28
- data/ext/sqlite3/sqlite3.c +3101 -1654
- data/ext/sqlite3/sqlite3.h +188 -128
- data/lib/extralite/version.rb +1 -1
- data/test/perf_array.rb +1 -1
- data/test/perf_hash.rb +1 -1
- data/test/perf_hash_prepared.rb +1 -1
- data/test/perf_polyphony.rb +1 -1
- data/test/perf_splat.rb +1 -1
- data/test/test_database.rb +3 -13
- data/test/test_trace.rb +189 -0
- metadata +4 -3
data/lib/extralite/version.rb
CHANGED
data/test/perf_array.rb
CHANGED
data/test/perf_hash.rb
CHANGED
data/test/perf_hash_prepared.rb
CHANGED
data/test/perf_polyphony.rb
CHANGED
@@ -20,7 +20,7 @@ $db2 = Extralite::Database.new(DB_PATH, gvl_release_threshold: 0)
|
|
20
20
|
$db3 = Extralite::Database.new(DB_PATH)
|
21
21
|
|
22
22
|
$snooze_count = 0
|
23
|
-
$db3.on_progress(
|
23
|
+
$db3.on_progress(tick: 50, period: 100, mode: :at_least_once) { $snooze_count += 1; snooze }
|
24
24
|
|
25
25
|
def prepare_database(count)
|
26
26
|
$db1.execute('create table if not exists foo ( a integer primary key, b text )')
|
data/test/perf_splat.rb
CHANGED
data/test/test_database.rb
CHANGED
@@ -1221,6 +1221,8 @@ class ScenarioTest < Minitest::Test
|
|
1221
1221
|
t2&.kill
|
1222
1222
|
end
|
1223
1223
|
|
1224
|
+
# Note: more comprehensive testing of the trace functionality is done in
|
1225
|
+
# test_trace.rb
|
1224
1226
|
def test_database_trace
|
1225
1227
|
sqls = []
|
1226
1228
|
@db.trace { |sql| sqls << sql }
|
@@ -1245,18 +1247,6 @@ class ScenarioTest < Minitest::Test
|
|
1245
1247
|
@db.query('select 4')
|
1246
1248
|
assert_equal ['select 1', 'select 2', 'select 3'], sqls
|
1247
1249
|
end
|
1248
|
-
|
1249
|
-
def test_database_trace_expanded_sql
|
1250
|
-
sqls = []
|
1251
|
-
@db.trace { |sql| sqls << sql }
|
1252
|
-
|
1253
|
-
@db.query('select ?, ?, ?', 1, '2', 3)
|
1254
|
-
assert_equal ["select 1, '2', 3"], sqls
|
1255
|
-
|
1256
|
-
sqls = []
|
1257
|
-
@db.query('select :x, :y, :z', x: 42, y: '43')
|
1258
|
-
assert_equal ["select 42, '43', NULL"], sqls
|
1259
|
-
end
|
1260
1250
|
end
|
1261
1251
|
|
1262
1252
|
class BackupTest < Minitest::Test
|
@@ -1337,7 +1327,7 @@ class ConcurrencyTest < Minitest::Test
|
|
1337
1327
|
t2.join
|
1338
1328
|
t1.join
|
1339
1329
|
|
1340
|
-
|
1330
|
+
assert_in_range 4.., delays.size
|
1341
1331
|
assert_equal 0, delays.select { |d| d > 0.15 }.size
|
1342
1332
|
ensure
|
1343
1333
|
t1&.kill
|
data/test/test_trace.rb
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'helper'
|
4
|
+
require 'date'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
class DatabaseTraceTest < Minitest::Test
|
8
|
+
def setup
|
9
|
+
@db = Extralite::Database.new(':memory:')
|
10
|
+
|
11
|
+
@trace_buf = []
|
12
|
+
@db.trace { |sql, *args| @trace_buf << { sql: sql, args: args } }
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_trace_database_query
|
16
|
+
@db.query('select 1')
|
17
|
+
@db.query('select ?', 2)
|
18
|
+
@db.query('select ?, ?, ?', 3, 4, 5)
|
19
|
+
@db.query('select :x, :y, :z', x: 6, y: 7)
|
20
|
+
|
21
|
+
assert_equal [
|
22
|
+
{ sql: 'select 1', args: [] },
|
23
|
+
{ sql: 'select ?', args: [2] },
|
24
|
+
{ sql: 'select ?, ?, ?', args: [3, 4, 5] },
|
25
|
+
{ sql: 'select :x, :y, :z', args: [{ x: 6, y: 7 }] }
|
26
|
+
], @trace_buf
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_trace_database_execute
|
30
|
+
@db.execute('select 1')
|
31
|
+
@db.execute('select ?', 2)
|
32
|
+
@db.execute('select ?, ?, ?', 3, 4, 5)
|
33
|
+
@db.execute('select :x, :y, :z', x: 6, y: 7)
|
34
|
+
|
35
|
+
assert_equal [
|
36
|
+
{ sql: 'select 1', args: [] },
|
37
|
+
{ sql: 'select ?', args: [2] },
|
38
|
+
{ sql: 'select ?, ?, ?', args: [3, 4, 5] },
|
39
|
+
{ sql: 'select :x, :y, :z', args: [{ x: 6, y: 7 }] }
|
40
|
+
], @trace_buf
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_trace_database_query_xxx
|
44
|
+
@db.query_single('select 1')
|
45
|
+
@db.query_array('select ?', 2)
|
46
|
+
@db.query_splat('select ?, ?, ?', 3, 4, 5)
|
47
|
+
@db.query_single_array('select :x, :y, :z', x: 6, y: 7)
|
48
|
+
|
49
|
+
assert_equal [
|
50
|
+
{ sql: 'select 1', args: [] },
|
51
|
+
{ sql: 'select ?', args: [2] },
|
52
|
+
{ sql: 'select ?, ?, ?', args: [3, 4, 5] },
|
53
|
+
{ sql: 'select :x, :y, :z', args: [{ x: 6, y: 7 }] }
|
54
|
+
], @trace_buf
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_trace_database_batch_execute
|
58
|
+
@db.batch_execute('select ?', [1, 2, 3])
|
59
|
+
@db.batch_execute('select ?, ?', [[44, 55], [66, 77]])
|
60
|
+
@db.batch_execute('select :x, :y', [{ x: 5, y: 6 }, { x: 7, y: 8 }])
|
61
|
+
|
62
|
+
assert_equal [
|
63
|
+
{ sql: 'select ?', args: [1] },
|
64
|
+
{ sql: 'select ?', args: [2] },
|
65
|
+
{ sql: 'select ?', args: [3] },
|
66
|
+
{ sql: 'select ?, ?', args: [44, 55] },
|
67
|
+
{ sql: 'select ?, ?', args: [66, 77] },
|
68
|
+
{ sql: 'select :x, :y', args: [{ x: 5, y: 6 }] },
|
69
|
+
{ sql: 'select :x, :y', args: [{ x: 7, y: 8 }] }
|
70
|
+
], @trace_buf
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_trace_database_batch_query
|
74
|
+
@db.batch_query('select ?', [1, 2, 3])
|
75
|
+
@db.batch_query('select ?, ?', [[44, 55], [66, 77]])
|
76
|
+
@db.batch_query('select :x, :y', [{ x: 5, y: 6 }, { x: 7, y: 8 }])
|
77
|
+
|
78
|
+
assert_equal [
|
79
|
+
{ sql: 'select ?', args: [1] },
|
80
|
+
{ sql: 'select ?', args: [2] },
|
81
|
+
{ sql: 'select ?', args: [3] },
|
82
|
+
{ sql: 'select ?, ?', args: [44, 55] },
|
83
|
+
{ sql: 'select ?, ?', args: [66, 77] },
|
84
|
+
{ sql: 'select :x, :y', args: [{ x: 5, y: 6 }] },
|
85
|
+
{ sql: 'select :x, :y', args: [{ x: 7, y: 8 }] }
|
86
|
+
], @trace_buf
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_trace_database_batch_query_with_enumerable
|
90
|
+
@db.batch_query('select ?', 1..3)
|
91
|
+
|
92
|
+
assert_equal [
|
93
|
+
{ sql: 'select ?', args: [1] },
|
94
|
+
{ sql: 'select ?', args: [2] },
|
95
|
+
{ sql: 'select ?', args: [3] }
|
96
|
+
], @trace_buf
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_trace_database_batch_query_with_proc
|
100
|
+
values = [4, 5, 6]
|
101
|
+
|
102
|
+
@db.batch_query('select ?', -> { values.shift })
|
103
|
+
|
104
|
+
assert_equal [
|
105
|
+
{ sql: 'select ?', args: [4] },
|
106
|
+
{ sql: 'select ?', args: [5] },
|
107
|
+
{ sql: 'select ?', args: [6] }
|
108
|
+
], @trace_buf
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
class QueryTraceTest < Minitest::Test
|
113
|
+
def setup
|
114
|
+
@db = Extralite::Database.new(':memory:')
|
115
|
+
|
116
|
+
@query = @db.prepare('select ?')
|
117
|
+
|
118
|
+
@trace_buf = []
|
119
|
+
@db.trace { |sql, *args| @trace_buf << { sql: sql, args: args } }
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_trace_query_iteration
|
123
|
+
assert_equal [], @trace_buf
|
124
|
+
|
125
|
+
@query.bind(42)
|
126
|
+
assert_equal [], @trace_buf
|
127
|
+
|
128
|
+
@query.to_a
|
129
|
+
assert_equal [
|
130
|
+
{ sql: 'select ?', args: [42] },
|
131
|
+
], @trace_buf
|
132
|
+
|
133
|
+
@query.to_a
|
134
|
+
assert_equal [
|
135
|
+
{ sql: 'select ?', args: [42] },
|
136
|
+
{ sql: 'select ?', args: [42] }
|
137
|
+
], @trace_buf
|
138
|
+
|
139
|
+
@query.bind(44)
|
140
|
+
assert_equal [
|
141
|
+
{ sql: 'select ?', args: [42] },
|
142
|
+
{ sql: 'select ?', args: [42] }
|
143
|
+
], @trace_buf
|
144
|
+
|
145
|
+
@query.reset
|
146
|
+
assert_equal [
|
147
|
+
{ sql: 'select ?', args: [42] },
|
148
|
+
{ sql: 'select ?', args: [42] },
|
149
|
+
{ sql: 'select ?', args: [44] }
|
150
|
+
], @trace_buf
|
151
|
+
|
152
|
+
@trace_buf = []
|
153
|
+
@query.bind(46)
|
154
|
+
assert_equal [], @trace_buf
|
155
|
+
|
156
|
+
@query.each { }
|
157
|
+
assert_equal [
|
158
|
+
{ sql: 'select ?', args: [46] }
|
159
|
+
], @trace_buf
|
160
|
+
|
161
|
+
@trace_buf = []
|
162
|
+
@query.bind(48)
|
163
|
+
assert_equal [], @trace_buf
|
164
|
+
|
165
|
+
e = @query.each
|
166
|
+
e.to_a
|
167
|
+
assert_equal [
|
168
|
+
{ sql: 'select ?', args: [48] }
|
169
|
+
], @trace_buf
|
170
|
+
|
171
|
+
e.map {}
|
172
|
+
assert_equal [
|
173
|
+
{ sql: 'select ?', args: [48] },
|
174
|
+
{ sql: 'select ?', args: [48] }
|
175
|
+
], @trace_buf
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_trace_query_batch_execute
|
179
|
+
assert_equal [], @trace_buf
|
180
|
+
|
181
|
+
@query.batch_execute([42, 43, 44])
|
182
|
+
assert_equal [
|
183
|
+
{ sql: 'select ?', args: [42] },
|
184
|
+
{ sql: 'select ?', args: [43] },
|
185
|
+
{ sql: 'select ?', args: [44] },
|
186
|
+
], @trace_buf
|
187
|
+
|
188
|
+
end
|
189
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extralite-bundle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '2.
|
4
|
+
version: '2.13'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: rake-compiler
|
@@ -146,6 +146,7 @@ files:
|
|
146
146
|
- test/test_iterator.rb
|
147
147
|
- test/test_query.rb
|
148
148
|
- test/test_sequel.rb
|
149
|
+
- test/test_trace.rb
|
149
150
|
homepage: https://github.com/digital-fabric/extralite
|
150
151
|
licenses:
|
151
152
|
- MIT
|
@@ -171,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
172
|
- !ruby/object:Gem::Version
|
172
173
|
version: '0'
|
173
174
|
requirements: []
|
174
|
-
rubygems_version: 3.6.
|
175
|
+
rubygems_version: 3.6.8
|
175
176
|
specification_version: 4
|
176
177
|
summary: Extra-lightweight SQLite3 wrapper for Ruby with bundled SQLite3
|
177
178
|
test_files: []
|