extralite 2.7.1 → 2.8.1
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/test.yml +1 -1
- data/CHANGELOG.md +17 -4
- data/README.md +79 -42
- data/examples/kv_store.rb +1 -1
- data/examples/pubsub_store_polyphony.rb +7 -7
- data/examples/pubsub_store_threads.rb +3 -3
- data/ext/extralite/changeset.c +1 -1
- data/ext/extralite/common.c +27 -27
- data/ext/extralite/database.c +134 -61
- data/ext/extralite/extralite.h +10 -17
- data/ext/extralite/query.c +17 -17
- data/gemspec.rb +1 -1
- data/lib/extralite/version.rb +1 -1
- data/lib/extralite.rb +158 -3
- data/test/{perf_ary.rb → perf_array.rb} +1 -1
- data/test/perf_splat.rb +63 -0
- data/test/{perf_argv_transform.rb → perf_splat_transform.rb} +7 -7
- data/test/test_database.rb +193 -120
- data/test/test_iterator.rb +12 -12
- data/test/test_query.rb +92 -92
- metadata +7 -7
- data/lib/extralite/sqlite3_constants.rb +0 -157
data/test/test_iterator.rb
CHANGED
@@ -30,8 +30,8 @@ class IteratorTest < Minitest::Test
|
|
30
30
|
assert_equal [{x: 1, y: 2, z: 3},{ x: 4, y: 5, z: 6 }, { x: 7, y: 8, z: 9 }], buf
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
@query.mode = :
|
33
|
+
def test_iterator_splat
|
34
|
+
@query.mode = :splat
|
35
35
|
iter = @query.each
|
36
36
|
assert_kind_of Extralite::Iterator, iter
|
37
37
|
|
@@ -41,8 +41,8 @@ class IteratorTest < Minitest::Test
|
|
41
41
|
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], buf
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
45
|
-
@query.mode = :
|
44
|
+
def test_iterator_array
|
45
|
+
@query.mode = :array
|
46
46
|
iter = @query.each
|
47
47
|
assert_kind_of Extralite::Iterator, iter
|
48
48
|
|
@@ -53,7 +53,7 @@ class IteratorTest < Minitest::Test
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def test_iterator_single_column
|
56
|
-
query = @db.
|
56
|
+
query = @db.prepare_splat('select x from t')
|
57
57
|
iter = query.each
|
58
58
|
assert_kind_of Extralite::Iterator, iter
|
59
59
|
|
@@ -71,7 +71,7 @@ class IteratorTest < Minitest::Test
|
|
71
71
|
assert_nil iter.next
|
72
72
|
assert_nil iter.next
|
73
73
|
|
74
|
-
@query.mode = :
|
74
|
+
@query.mode = :array
|
75
75
|
@query.reset
|
76
76
|
assert_equal([1, 2, 3], iter.next)
|
77
77
|
assert_equal([4, 5, 6], iter.next)
|
@@ -79,7 +79,7 @@ class IteratorTest < Minitest::Test
|
|
79
79
|
assert_nil iter.next
|
80
80
|
assert_nil iter.next
|
81
81
|
|
82
|
-
iter = @db.
|
82
|
+
iter = @db.prepare_splat('select y from t').each
|
83
83
|
assert_equal(2, iter.next)
|
84
84
|
assert_equal(5, iter.next)
|
85
85
|
assert_equal(8, iter.next)
|
@@ -91,10 +91,10 @@ class IteratorTest < Minitest::Test
|
|
91
91
|
iter = @query.each
|
92
92
|
assert_equal [{x: 1, y: 2, z: 3},{ x: 4, y: 5, z: 6 }, { x: 7, y: 8, z: 9 }], iter.to_a
|
93
93
|
|
94
|
-
@query.mode = :
|
94
|
+
@query.mode = :array
|
95
95
|
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], iter.to_a
|
96
96
|
|
97
|
-
iter = @db.
|
97
|
+
iter = @db.prepare_splat('select x from t').each
|
98
98
|
assert_equal [1, 4, 7], iter.to_a
|
99
99
|
end
|
100
100
|
|
@@ -102,17 +102,17 @@ class IteratorTest < Minitest::Test
|
|
102
102
|
mapped = @query.each.map { |row| row[:x] * 10 }
|
103
103
|
assert_equal [10, 40, 70], mapped
|
104
104
|
|
105
|
-
@query.mode = :
|
105
|
+
@query.mode = :array
|
106
106
|
mapped = @query.each.map { |row| row[1] * 10 }
|
107
107
|
assert_equal [20, 50, 80], mapped
|
108
108
|
|
109
|
-
query = @db.
|
109
|
+
query = @db.prepare_splat('select z from t')
|
110
110
|
mapped = query.each.map { |v| v * 10 }
|
111
111
|
assert_equal [30, 60, 90], mapped
|
112
112
|
end
|
113
113
|
|
114
114
|
def test_iterator_inspect
|
115
|
-
@query.mode = :
|
115
|
+
@query.mode = :array
|
116
116
|
i = @query.each
|
117
117
|
assert_match(/^\#\<Extralite::Iterator:0x[0-9a-f]+\>$/, i.inspect)
|
118
118
|
end
|
data/test/test_query.rb
CHANGED
@@ -28,35 +28,35 @@ class QueryTest < Minitest::Test
|
|
28
28
|
query = @db.prepare('select 1')
|
29
29
|
assert_equal :hash, query.mode
|
30
30
|
|
31
|
-
query.mode = :
|
32
|
-
assert_equal :
|
31
|
+
query.mode = :splat
|
32
|
+
assert_equal :splat, query.mode
|
33
33
|
|
34
|
-
query.mode = :
|
35
|
-
assert_equal :
|
34
|
+
query.mode = :array
|
35
|
+
assert_equal :array, query.mode
|
36
36
|
|
37
37
|
assert_raises(Extralite::Error) { query.mode = :foo }
|
38
|
-
assert_equal :
|
38
|
+
assert_equal :array, query.mode
|
39
39
|
|
40
40
|
query.mode = :hash
|
41
41
|
assert_equal :hash, query.mode
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
45
|
-
query = @db.
|
46
|
-
assert_equal :
|
44
|
+
def test_prepare_splat
|
45
|
+
query = @db.prepare_splat('select 1')
|
46
|
+
assert_equal :splat, query.mode
|
47
47
|
|
48
48
|
assert_equal 1, query.next
|
49
49
|
end
|
50
50
|
|
51
|
-
def
|
52
|
-
q = @db.
|
51
|
+
def test_prepare_splat_with_too_many_columns
|
52
|
+
q = @db.prepare_splat('select 1, 2, 3, 4, 5, 6, 7, 8, 9')
|
53
53
|
|
54
54
|
assert_raises(Extralite::Error) { q.next }
|
55
55
|
end
|
56
56
|
|
57
|
-
def
|
58
|
-
query = @db.
|
59
|
-
assert_equal :
|
57
|
+
def test_prepare_array
|
58
|
+
query = @db.prepare_array('select 1')
|
59
|
+
assert_equal :array, query.mode
|
60
60
|
|
61
61
|
assert_equal [1], query.next
|
62
62
|
end
|
@@ -71,7 +71,7 @@ class QueryTest < Minitest::Test
|
|
71
71
|
def test_bind
|
72
72
|
@db.query("insert into t values ('a', 'b', 'c')")
|
73
73
|
|
74
|
-
q = @db.
|
74
|
+
q = @db.prepare_array('select * from t where `z` = :foo')
|
75
75
|
results = q.bind(foo: 'c').to_a
|
76
76
|
|
77
77
|
assert_equal [['a', 'b', 'c']], results
|
@@ -158,8 +158,8 @@ class QueryTest < Minitest::Test
|
|
158
158
|
assert_equal [], buf
|
159
159
|
end
|
160
160
|
|
161
|
-
def
|
162
|
-
query = @db.
|
161
|
+
def test_query_next_array
|
162
|
+
query = @db.prepare_array('select * from t')
|
163
163
|
v = query.next
|
164
164
|
assert_equal([1, 2, 3], v)
|
165
165
|
|
@@ -176,8 +176,8 @@ class QueryTest < Minitest::Test
|
|
176
176
|
assert_nil v
|
177
177
|
end
|
178
178
|
|
179
|
-
def
|
180
|
-
query = @db.
|
179
|
+
def test_query_next_array_with_row_count
|
180
|
+
query = @db.prepare_array('select * from t')
|
181
181
|
v = query.next(1)
|
182
182
|
assert_equal([[1, 2, 3]], v)
|
183
183
|
|
@@ -191,8 +191,8 @@ class QueryTest < Minitest::Test
|
|
191
191
|
assert_nil v
|
192
192
|
end
|
193
193
|
|
194
|
-
def
|
195
|
-
query = @db.
|
194
|
+
def test_query_next_array_with_block
|
195
|
+
query = @db.prepare_array('select * from t')
|
196
196
|
buf = []
|
197
197
|
v = query.next { |r| buf << r }
|
198
198
|
assert_equal query, v
|
@@ -209,8 +209,8 @@ class QueryTest < Minitest::Test
|
|
209
209
|
assert_equal [], buf
|
210
210
|
end
|
211
211
|
|
212
|
-
def
|
213
|
-
query = @db.
|
212
|
+
def test_query_next_splat_single_column
|
213
|
+
query = @db.prepare_splat('select x from t')
|
214
214
|
v = query.next
|
215
215
|
assert_equal(1, v)
|
216
216
|
|
@@ -224,8 +224,8 @@ class QueryTest < Minitest::Test
|
|
224
224
|
assert_nil v
|
225
225
|
end
|
226
226
|
|
227
|
-
def
|
228
|
-
query = @db.
|
227
|
+
def test_query_next_splat_multi_column
|
228
|
+
query = @db.prepare_splat('select x, y from t')
|
229
229
|
v = query.next
|
230
230
|
assert_equal([1, 2], v)
|
231
231
|
|
@@ -239,8 +239,8 @@ class QueryTest < Minitest::Test
|
|
239
239
|
assert_nil v
|
240
240
|
end
|
241
241
|
|
242
|
-
def
|
243
|
-
query = @db.
|
242
|
+
def test_query_next_splat_with_row_count
|
243
|
+
query = @db.prepare_splat('select x from t')
|
244
244
|
v = query.next(1)
|
245
245
|
assert_equal([1], v)
|
246
246
|
|
@@ -251,8 +251,8 @@ class QueryTest < Minitest::Test
|
|
251
251
|
assert_nil v
|
252
252
|
end
|
253
253
|
|
254
|
-
def
|
255
|
-
query = @db.
|
254
|
+
def test_query_next_splat_with_block
|
255
|
+
query = @db.prepare_splat('select x, y from t')
|
256
256
|
buf = []
|
257
257
|
v = query.next { |x, y| buf << [x, y] }
|
258
258
|
assert_equal query, v
|
@@ -273,12 +273,12 @@ class QueryTest < Minitest::Test
|
|
273
273
|
assert_equal [{ x: 1, y: 2, z: 3 }], @query.bind(1).to_a
|
274
274
|
assert_equal [{ x: 4, y: 5, z: 6 }], @query.bind(4).to_a
|
275
275
|
|
276
|
-
@query.mode = :
|
276
|
+
@query.mode = :array
|
277
277
|
|
278
278
|
assert_equal [[1, 2, 3]], @query.bind(1).to_a
|
279
279
|
assert_equal [[4, 5, 6]], @query.bind(4).to_a
|
280
280
|
|
281
|
-
query = @db.
|
281
|
+
query = @db.prepare_splat('select y from t')
|
282
282
|
assert_equal [2, 5, 8], query.to_a
|
283
283
|
end
|
284
284
|
|
@@ -322,9 +322,9 @@ class QueryTest < Minitest::Test
|
|
322
322
|
assert_equal [{x: 1, y: 2, z: 3},{ x: 4, y: 5, z: 6 }, { x: 7, y: 8, z: 9 }], buf
|
323
323
|
end
|
324
324
|
|
325
|
-
def
|
325
|
+
def test_query_each_array
|
326
326
|
buf = []
|
327
|
-
@query.mode = :
|
327
|
+
@query.mode = :array
|
328
328
|
@query.bind(1).each { |r| buf << r }
|
329
329
|
assert_equal [[1, 2, 3]], buf
|
330
330
|
|
@@ -333,14 +333,14 @@ class QueryTest < Minitest::Test
|
|
333
333
|
@query.each { |r| buf << r }
|
334
334
|
assert_equal [[1, 2, 3]], buf
|
335
335
|
|
336
|
-
query = @db.
|
336
|
+
query = @db.prepare_array('select * from t')
|
337
337
|
buf = []
|
338
338
|
query.each { |r| buf << r }
|
339
339
|
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], buf
|
340
340
|
end
|
341
341
|
|
342
|
-
def
|
343
|
-
query = @db.
|
342
|
+
def test_query_each_array_without_block
|
343
|
+
query = @db.prepare_array('select * from t')
|
344
344
|
iter = query.each
|
345
345
|
assert_kind_of Extralite::Iterator, iter
|
346
346
|
|
@@ -350,9 +350,9 @@ class QueryTest < Minitest::Test
|
|
350
350
|
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], buf
|
351
351
|
end
|
352
352
|
|
353
|
-
def
|
353
|
+
def test_query_each_splat
|
354
354
|
buf = []
|
355
|
-
@query.mode = :
|
355
|
+
@query.mode = :splat
|
356
356
|
@query.bind(1).each { |a, b, c| buf << [a, b, c] }
|
357
357
|
assert_equal [[1, 2, 3]], buf
|
358
358
|
|
@@ -361,14 +361,14 @@ class QueryTest < Minitest::Test
|
|
361
361
|
@query.each { |a, b, c| buf << [a, b, c] }
|
362
362
|
assert_equal [[1, 2, 3]], buf
|
363
363
|
|
364
|
-
query = @db.
|
364
|
+
query = @db.prepare_splat('select * from t')
|
365
365
|
buf = []
|
366
366
|
query.each { |a, b, c| buf << [a, b, c] }
|
367
367
|
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], buf
|
368
368
|
end
|
369
369
|
|
370
|
-
def
|
371
|
-
query = @db.
|
370
|
+
def test_query_each_splat_without_block
|
371
|
+
query = @db.prepare_splat('select * from t')
|
372
372
|
iter = query.each
|
373
373
|
assert_kind_of Extralite::Iterator, iter
|
374
374
|
|
@@ -378,8 +378,8 @@ class QueryTest < Minitest::Test
|
|
378
378
|
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], buf
|
379
379
|
end
|
380
380
|
|
381
|
-
def
|
382
|
-
query = @db.
|
381
|
+
def test_query_each_splat_single_column
|
382
|
+
query = @db.prepare_splat('select x from t where x = ?')
|
383
383
|
buf = []
|
384
384
|
query.bind(1).each { |r| buf << r }
|
385
385
|
assert_equal [1], buf
|
@@ -389,14 +389,14 @@ class QueryTest < Minitest::Test
|
|
389
389
|
query.each { |r| buf << r }
|
390
390
|
assert_equal [1], buf
|
391
391
|
|
392
|
-
query = @db.
|
392
|
+
query = @db.prepare_splat('select x from t')
|
393
393
|
buf = []
|
394
394
|
query.each { |r| buf << r }
|
395
395
|
assert_equal [1, 4, 7], buf
|
396
396
|
end
|
397
397
|
|
398
|
-
def
|
399
|
-
query = @db.
|
398
|
+
def test_query_each_splat_single_column_without_block
|
399
|
+
query = @db.prepare_splat('select x from t')
|
400
400
|
iter = query.each
|
401
401
|
assert_kind_of Extralite::Iterator, iter
|
402
402
|
|
@@ -484,24 +484,24 @@ class QueryTest < Minitest::Test
|
|
484
484
|
class Foo; end
|
485
485
|
|
486
486
|
def test_parameter_binding_from_hash
|
487
|
-
assert_equal 42, @db.
|
488
|
-
assert_equal 42, @db.
|
489
|
-
assert_equal 42, @db.
|
490
|
-
assert_nil @db.
|
487
|
+
assert_equal 42, @db.prepare_splat('select :bar').bind(foo: 41, bar: 42).next
|
488
|
+
assert_equal 42, @db.prepare_splat('select :bar').bind('foo' => 41, 'bar' => 42).next
|
489
|
+
assert_equal 42, @db.prepare_splat('select ?8').bind(7 => 41, 8 => 42).next
|
490
|
+
assert_nil @db.prepare_splat('select :bar').bind(foo: 41).next
|
491
491
|
|
492
|
-
error = assert_raises(Extralite::ParameterError) { @db.
|
492
|
+
error = assert_raises(Extralite::ParameterError) { @db.prepare_splat('select ?').bind(Foo.new => 42).next }
|
493
493
|
assert_equal error.message, 'Cannot bind parameter with a key of type QueryTest::Foo'
|
494
494
|
|
495
|
-
error = assert_raises(Extralite::ParameterError) { @db.
|
495
|
+
error = assert_raises(Extralite::ParameterError) { @db.prepare_splat('select ?').bind(%w[a b] => 42).next }
|
496
496
|
assert_equal error.message, 'Cannot bind parameter with a key of type Array'
|
497
497
|
end
|
498
498
|
|
499
499
|
def test_parameter_binding_from_struct
|
500
500
|
foo_bar = Struct.new(:':foo', :bar)
|
501
501
|
value = foo_bar.new(41, 42)
|
502
|
-
assert_equal 41, @db.
|
503
|
-
assert_equal 42, @db.
|
504
|
-
assert_nil @db.
|
502
|
+
assert_equal 41, @db.prepare_splat('select :foo').bind(value).next
|
503
|
+
assert_equal 42, @db.prepare_splat('select :bar').bind(value).next
|
504
|
+
assert_nil @db.prepare_splat('select :baz').bind(value).next
|
505
505
|
end
|
506
506
|
|
507
507
|
def test_parameter_binding_from_data_class
|
@@ -509,8 +509,8 @@ class QueryTest < Minitest::Test
|
|
509
509
|
|
510
510
|
foo_bar = Data.define(:':foo', :bar)
|
511
511
|
value = foo_bar.new(':foo': 41, bar: 42)
|
512
|
-
assert_equal 42, @db.
|
513
|
-
assert_nil @db.
|
512
|
+
assert_equal 42, @db.prepare_splat('select :bar').bind(value).next
|
513
|
+
assert_nil @db.prepare_splat('select :baz').bind(value).next
|
514
514
|
end
|
515
515
|
|
516
516
|
def test_query_columns
|
@@ -519,7 +519,7 @@ class QueryTest < Minitest::Test
|
|
519
519
|
end
|
520
520
|
|
521
521
|
def test_query_columns_with_parameterized_sql
|
522
|
-
q = @db.
|
522
|
+
q = @db.prepare_array('select * from t where z = :z')
|
523
523
|
q.bind(z: 9)
|
524
524
|
assert_equal [:x, :y, :z], q.columns
|
525
525
|
assert_equal [[7, 8, 9]], q.to_a
|
@@ -542,13 +542,13 @@ class QueryTest < Minitest::Test
|
|
542
542
|
def test_query_execute
|
543
543
|
q = @db.prepare('update t set x = 42')
|
544
544
|
assert_equal 3, q.execute
|
545
|
-
assert_equal [[42, 2, 3], [42, 5, 6], [42, 8, 9]], @db.
|
545
|
+
assert_equal [[42, 2, 3], [42, 5, 6], [42, 8, 9]], @db.query_array('select * from t order by z')
|
546
546
|
end
|
547
547
|
|
548
548
|
def test_query_execute_with_params
|
549
549
|
q = @db.prepare('update t set x = ? where z = ?')
|
550
550
|
assert_equal 1, q.execute(42, 9)
|
551
|
-
assert_equal [[1, 2, 3], [4, 5, 6], [42, 8, 9]], @db.
|
551
|
+
assert_equal [[1, 2, 3], [4, 5, 6], [42, 8, 9]], @db.query_array('select * from t order by z')
|
552
552
|
end
|
553
553
|
|
554
554
|
def test_query_execute_with_mixed_params
|
@@ -559,13 +559,13 @@ class QueryTest < Minitest::Test
|
|
559
559
|
q.execute([4, 5], 6)
|
560
560
|
q.execute([7], 8, [9])
|
561
561
|
|
562
|
-
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], @db.
|
562
|
+
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], @db.query_array('select * from t order by z')
|
563
563
|
end
|
564
564
|
|
565
565
|
def test_query_chverons
|
566
566
|
q = @db.prepare('update t set x = ? where z = ?')
|
567
567
|
assert_equal q, (q << [42, 9])
|
568
|
-
assert_equal [[1, 2, 3], [4, 5, 6], [42, 8, 9]], @db.
|
568
|
+
assert_equal [[1, 2, 3], [4, 5, 6], [42, 8, 9]], @db.query_array('select * from t order by z')
|
569
569
|
end
|
570
570
|
|
571
571
|
|
@@ -626,7 +626,7 @@ class QueryTest < Minitest::Test
|
|
626
626
|
assert_equal [], @db.query('select * from foo')
|
627
627
|
|
628
628
|
data = [5, 4, 3]
|
629
|
-
results = @db.
|
629
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
630
630
|
assert_equal [
|
631
631
|
[[1, 5]],
|
632
632
|
[[2, 4]],
|
@@ -657,7 +657,7 @@ class QueryTest < Minitest::Test
|
|
657
657
|
assert_equal [], @db.query('select * from foo')
|
658
658
|
|
659
659
|
data = [5, 4, 3]
|
660
|
-
results = @db.
|
660
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
661
661
|
assert_equal [
|
662
662
|
[[1, 5]],
|
663
663
|
[[2, 4]],
|
@@ -692,7 +692,7 @@ class QueryTest < Minitest::Test
|
|
692
692
|
assert_equal [], @db.query('select * from foo')
|
693
693
|
|
694
694
|
data = [5, 4, 3]
|
695
|
-
results = @db.
|
695
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
696
696
|
assert_equal [
|
697
697
|
[[1, 5]],
|
698
698
|
[[2, 4]],
|
@@ -720,19 +720,19 @@ class QueryTest < Minitest::Test
|
|
720
720
|
], array
|
721
721
|
end
|
722
722
|
|
723
|
-
def
|
723
|
+
def test_query_batch_query_array_with_array
|
724
724
|
@db.query('create table foo (a integer primary key, b)')
|
725
725
|
assert_equal [], @db.query('select * from foo')
|
726
726
|
|
727
727
|
data = [5, 4, 3]
|
728
|
-
results = @db.
|
728
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
729
729
|
assert_equal [
|
730
730
|
[[1, 5]],
|
731
731
|
[[2, 4]],
|
732
732
|
[[3, 3]]
|
733
733
|
], results
|
734
734
|
|
735
|
-
q = @db.
|
735
|
+
q = @db.prepare_array('update foo set b = ? returning *')
|
736
736
|
|
737
737
|
results = q.batch_query([42, 43])
|
738
738
|
assert_equal [
|
@@ -751,19 +751,19 @@ class QueryTest < Minitest::Test
|
|
751
751
|
], array
|
752
752
|
end
|
753
753
|
|
754
|
-
def
|
754
|
+
def test_query_batch_query_array_with_enumerable
|
755
755
|
@db.query('create table foo (a integer primary key, b)')
|
756
756
|
assert_equal [], @db.query('select * from foo')
|
757
757
|
|
758
758
|
data = [5, 4, 3]
|
759
|
-
results = @db.
|
759
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
760
760
|
assert_equal [
|
761
761
|
[[1, 5]],
|
762
762
|
[[2, 4]],
|
763
763
|
[[3, 3]]
|
764
764
|
], results
|
765
765
|
|
766
|
-
q = @db.
|
766
|
+
q = @db.prepare_array('update foo set b = ? returning *')
|
767
767
|
|
768
768
|
results = q.batch_query(42..43)
|
769
769
|
assert_equal [
|
@@ -782,19 +782,19 @@ class QueryTest < Minitest::Test
|
|
782
782
|
], array
|
783
783
|
end
|
784
784
|
|
785
|
-
def
|
785
|
+
def test_query_batch_query_array_with_proc
|
786
786
|
@db.query('create table foo (a integer primary key, b)')
|
787
787
|
assert_equal [], @db.query('select * from foo')
|
788
788
|
|
789
789
|
data = [5, 4, 3]
|
790
|
-
results = @db.
|
790
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
791
791
|
assert_equal [
|
792
792
|
[[1, 5]],
|
793
793
|
[[2, 4]],
|
794
794
|
[[3, 3]]
|
795
795
|
], results
|
796
796
|
|
797
|
-
q = @db.
|
797
|
+
q = @db.prepare_array('update foo set b = ? returning *')
|
798
798
|
|
799
799
|
pr = parameter_source_proc([42, 43])
|
800
800
|
results = q.batch_query(pr)
|
@@ -820,14 +820,14 @@ class QueryTest < Minitest::Test
|
|
820
820
|
assert_equal [], @db.query('select * from foo')
|
821
821
|
|
822
822
|
data = [5, 4, 3]
|
823
|
-
results = @db.
|
823
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
824
824
|
assert_equal [
|
825
825
|
[[1, 5]],
|
826
826
|
[[2, 4]],
|
827
827
|
[[3, 3]]
|
828
828
|
], results
|
829
829
|
|
830
|
-
q = @db.
|
830
|
+
q = @db.prepare_splat('update foo set b = ? returning b * 10 + a')
|
831
831
|
|
832
832
|
results = q.batch_query([42, 43])
|
833
833
|
assert_equal [
|
@@ -851,14 +851,14 @@ class QueryTest < Minitest::Test
|
|
851
851
|
assert_equal [], @db.query('select * from foo')
|
852
852
|
|
853
853
|
data = [5, 4, 3]
|
854
|
-
results = @db.
|
854
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
855
855
|
assert_equal [
|
856
856
|
[[1, 5]],
|
857
857
|
[[2, 4]],
|
858
858
|
[[3, 3]]
|
859
859
|
], results
|
860
860
|
|
861
|
-
q = @db.
|
861
|
+
q = @db.prepare_splat('update foo set b = ? returning b * 10 + a')
|
862
862
|
|
863
863
|
results = q.batch_query(42..43)
|
864
864
|
assert_equal [
|
@@ -882,14 +882,14 @@ class QueryTest < Minitest::Test
|
|
882
882
|
assert_equal [], @db.query('select * from foo')
|
883
883
|
|
884
884
|
data = [5, 4, 3]
|
885
|
-
results = @db.
|
885
|
+
results = @db.batch_query_array('insert into foo (b) values (?) returning *', data)
|
886
886
|
assert_equal [
|
887
887
|
[[1, 5]],
|
888
888
|
[[2, 4]],
|
889
889
|
[[3, 3]]
|
890
890
|
], results
|
891
891
|
|
892
|
-
q = @db.
|
892
|
+
q = @db.prepare_splat('update foo set b = ? returning b * 10 + a')
|
893
893
|
|
894
894
|
pr = parameter_source_proc([42, 43])
|
895
895
|
results = q.batch_query(pr)
|
@@ -936,7 +936,7 @@ class QueryTest < Minitest::Test
|
|
936
936
|
end
|
937
937
|
|
938
938
|
def test_query_eof
|
939
|
-
query = @db.
|
939
|
+
query = @db.prepare_splat('select x from t')
|
940
940
|
assert_equal false, query.eof?
|
941
941
|
|
942
942
|
query.next
|
@@ -985,18 +985,18 @@ class QueryTest < Minitest::Test
|
|
985
985
|
assert_equal q1.sql, q2.sql
|
986
986
|
refute_same q1, q2
|
987
987
|
|
988
|
-
q1 = @db.
|
988
|
+
q1 = @db.prepare_splat('select x from t')
|
989
989
|
q2 = q1.dup
|
990
990
|
|
991
991
|
assert_kind_of Extralite::Query, q2
|
992
992
|
assert_equal @db, q2.database
|
993
993
|
assert_equal q1.sql, q2.sql
|
994
994
|
refute_same q1, q2
|
995
|
-
assert_equal :
|
995
|
+
assert_equal :splat, q2.mode
|
996
996
|
end
|
997
997
|
|
998
998
|
def test_query_dup_with_transform
|
999
|
-
q1 = @db.
|
999
|
+
q1 = @db.prepare_array('select x, y from t') { |a| a * 2 }
|
1000
1000
|
q2 = q1.dup
|
1001
1001
|
|
1002
1002
|
assert_equal [
|
@@ -1012,8 +1012,8 @@ class QueryTransformTest < Minitest::Test
|
|
1012
1012
|
@db = Extralite::Database.new(':memory:')
|
1013
1013
|
@db.query('create table t (a, b, c)')
|
1014
1014
|
|
1015
|
-
@q1 = @db.
|
1016
|
-
@q2 = @db.
|
1015
|
+
@q1 = @db.prepare_splat('select c from t where a = ?')
|
1016
|
+
@q2 = @db.prepare_splat('select c from t order by a')
|
1017
1017
|
|
1018
1018
|
@q3 = @db.prepare('select * from t where a = ?')
|
1019
1019
|
@q4 = @db.prepare('select * from t order by a')
|
@@ -1068,8 +1068,8 @@ class QueryTransformTest < Minitest::Test
|
|
1068
1068
|
], buf
|
1069
1069
|
end
|
1070
1070
|
|
1071
|
-
def
|
1072
|
-
@q5.mode = :
|
1071
|
+
def test_transform_array
|
1072
|
+
@q5.mode = :array
|
1073
1073
|
q = @q5.transform { |h| MyModel.new(h) }
|
1074
1074
|
assert_equal @q5, q
|
1075
1075
|
|
@@ -1086,7 +1086,7 @@ class QueryTransformTest < Minitest::Test
|
|
1086
1086
|
[[4, 5]]
|
1087
1087
|
], @q5.batch_query([[1], [4]]).map { |a| a.map(&:values) }
|
1088
1088
|
|
1089
|
-
@q6.mode = :
|
1089
|
+
@q6.mode = :array
|
1090
1090
|
@q6.transform { |h| MyModel.new(h) }
|
1091
1091
|
assert_equal [
|
1092
1092
|
[1, 2],
|
@@ -1101,7 +1101,7 @@ class QueryTransformTest < Minitest::Test
|
|
1101
1101
|
], buf
|
1102
1102
|
end
|
1103
1103
|
|
1104
|
-
def
|
1104
|
+
def test_transform_splat_single_column
|
1105
1105
|
q = @q1.transform { |c| JSON.parse(c, symbolize_names: true) }
|
1106
1106
|
assert_equal @q1, q
|
1107
1107
|
|
@@ -1127,8 +1127,8 @@ class QueryTransformTest < Minitest::Test
|
|
1127
1127
|
], buf
|
1128
1128
|
end
|
1129
1129
|
|
1130
|
-
def
|
1131
|
-
@q3.mode = :
|
1130
|
+
def test_transform_splat_multi_column
|
1131
|
+
@q3.mode = :splat
|
1132
1132
|
q = @q3.transform { |a, b, c| { a: a, b: b, c: JSON.parse(c, symbolize_names: true) } }
|
1133
1133
|
assert_equal @q3, q
|
1134
1134
|
|
@@ -1140,7 +1140,7 @@ class QueryTransformTest < Minitest::Test
|
|
1140
1140
|
[{ a: 4, b: 5, c: { foo: 45, bar: 46 }}]
|
1141
1141
|
], @q3.batch_query([[1], [4]])
|
1142
1142
|
|
1143
|
-
@q4.mode = :
|
1143
|
+
@q4.mode = :splat
|
1144
1144
|
@q4.transform { |a, b, c| { a: a, b: b, c: JSON.parse(c, symbolize_names: true) } }
|
1145
1145
|
assert_equal [
|
1146
1146
|
{ a: 1, b: 2, c: { foo: 42, bar: 43 }},
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extralite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 5.
|
33
|
+
version: 5.22.2
|
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: 5.
|
40
|
+
version: 5.22.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,7 +121,6 @@ files:
|
|
121
121
|
- extralite.gemspec
|
122
122
|
- gemspec.rb
|
123
123
|
- lib/extralite.rb
|
124
|
-
- lib/extralite/sqlite3_constants.rb
|
125
124
|
- lib/extralite/version.rb
|
126
125
|
- lib/sequel/adapters/extralite.rb
|
127
126
|
- test/extensions/text.dylib
|
@@ -131,12 +130,13 @@ files:
|
|
131
130
|
- test/issue-38.rb
|
132
131
|
- test/issue-54.rb
|
133
132
|
- test/issue-59.rb
|
134
|
-
- test/
|
135
|
-
- test/perf_ary.rb
|
133
|
+
- test/perf_array.rb
|
136
134
|
- test/perf_hash.rb
|
137
135
|
- test/perf_hash_prepared.rb
|
138
136
|
- test/perf_hash_transform.rb
|
139
137
|
- test/perf_polyphony.rb
|
138
|
+
- test/perf_splat.rb
|
139
|
+
- test/perf_splat_transform.rb
|
140
140
|
- test/run.rb
|
141
141
|
- test/test_changeset.rb
|
142
142
|
- test/test_database.rb
|