extralite 2.3 → 2.5
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/.editorconfig +6 -0
- data/.github/workflows/test-bundle.yml +30 -0
- data/.github/workflows/test.yml +7 -3
- data/.gitignore +3 -0
- data/CHANGELOG.md +44 -3
- data/Gemfile-bundle +5 -0
- data/Gemfile.lock +3 -3
- data/README.md +106 -13
- data/TODO.md +0 -3
- data/bin/update_sqlite_source +10 -3
- data/ext/extralite/common.c +288 -37
- data/ext/extralite/database.c +256 -39
- data/ext/extralite/extralite.h +20 -9
- data/ext/extralite/extralite_ext.c +4 -0
- data/ext/extralite/iterator.c +5 -5
- data/ext/extralite/query.c +250 -41
- data/gemspec.rb +1 -1
- data/lib/extralite/version.rb +1 -1
- data/lib/extralite.rb +41 -6
- data/test/fixtures/image.png +0 -0
- data/test/helper.rb +3 -0
- data/test/issue-38.rb +80 -0
- data/test/issue-54.rb +21 -0
- data/test/issue-59.rb +70 -0
- data/test/perf_ary.rb +6 -3
- data/test/perf_hash.rb +7 -4
- data/test/test_database.rb +726 -15
- data/test/test_iterator.rb +2 -1
- data/test/test_query.rb +402 -6
- metadata +10 -3
data/test/test_iterator.rb
CHANGED
@@ -103,7 +103,8 @@ class IteratorTest < MiniTest::Test
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def test_return_from_block_issue_26
|
106
|
-
|
106
|
+
fn = Tempfile.new('extralite_test_return_from_block_issue_26').path
|
107
|
+
db = Extralite::Database.new(fn)
|
107
108
|
|
108
109
|
λ = ->(sql) {
|
109
110
|
db.prepare(sql).each { |r| r.each { |_, v| return v } }
|
data/test/test_query.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'helper'
|
4
|
+
require 'date'
|
4
5
|
|
5
6
|
class QueryTest < MiniTest::Test
|
6
7
|
def setup
|
@@ -267,7 +268,7 @@ class QueryTest < MiniTest::Test
|
|
267
268
|
end
|
268
269
|
|
269
270
|
def test_query_each_without_block
|
270
|
-
query = @db.prepare('select * from t')
|
271
|
+
query = @db.prepare('select * from t')
|
271
272
|
iter = query.each
|
272
273
|
assert_kind_of Extralite::Iterator, iter
|
273
274
|
|
@@ -294,7 +295,7 @@ class QueryTest < MiniTest::Test
|
|
294
295
|
end
|
295
296
|
|
296
297
|
def test_query_each_ary_without_block
|
297
|
-
query = @db.prepare('select * from t')
|
298
|
+
query = @db.prepare('select * from t')
|
298
299
|
iter = query.each_ary
|
299
300
|
assert_kind_of Extralite::Iterator, iter
|
300
301
|
|
@@ -322,7 +323,7 @@ class QueryTest < MiniTest::Test
|
|
322
323
|
end
|
323
324
|
|
324
325
|
def test_query_each_single_column_without_block
|
325
|
-
query = @db.prepare('select x from t')
|
326
|
+
query = @db.prepare('select x from t')
|
326
327
|
iter = query.each_single_column
|
327
328
|
assert_kind_of Extralite::Iterator, iter
|
328
329
|
|
@@ -375,6 +376,9 @@ class QueryTest < MiniTest::Test
|
|
375
376
|
def test_query_parameter_binding_simple
|
376
377
|
r = @db.prepare('select x, y, z from t where x = ?').bind(1).next
|
377
378
|
assert_equal({ x: 1, y: 2, z: 3 }, r)
|
379
|
+
|
380
|
+
error = assert_raises(Extralite::ParameterError) { @db.prepare('select ?').bind(Date.today).next }
|
381
|
+
assert_equal error.message, 'Cannot bind parameter at position 1 of type Date'
|
378
382
|
end
|
379
383
|
|
380
384
|
def test_query_parameter_binding_with_index
|
@@ -404,6 +408,38 @@ class QueryTest < MiniTest::Test
|
|
404
408
|
assert_equal({ x: 4, y: 5, z: 6 }, r)
|
405
409
|
end
|
406
410
|
|
411
|
+
class Foo; end
|
412
|
+
|
413
|
+
def test_parameter_binding_from_hash
|
414
|
+
assert_equal 42, @db.prepare('select :bar').bind(foo: 41, bar: 42).next_single_column
|
415
|
+
assert_equal 42, @db.prepare('select :bar').bind('foo' => 41, 'bar' => 42).next_single_column
|
416
|
+
assert_equal 42, @db.prepare('select ?8').bind(7 => 41, 8 => 42).next_single_column
|
417
|
+
assert_nil @db.prepare('select :bar').bind(foo: 41).next_single_column
|
418
|
+
|
419
|
+
error = assert_raises(Extralite::ParameterError) { @db.prepare('select ?').bind(Foo.new => 42).next_single_column }
|
420
|
+
assert_equal error.message, 'Cannot bind parameter with a key of type QueryTest::Foo'
|
421
|
+
|
422
|
+
error = assert_raises(Extralite::ParameterError) { @db.prepare('select ?').bind(%w[a b] => 42).next_single_column }
|
423
|
+
assert_equal error.message, 'Cannot bind parameter with a key of type Array'
|
424
|
+
end
|
425
|
+
|
426
|
+
def test_parameter_binding_from_struct
|
427
|
+
foo_bar = Struct.new(:":foo", :bar)
|
428
|
+
value = foo_bar.new(41, 42)
|
429
|
+
assert_equal 41, @db.prepare('select :foo').bind(value).next_single_column
|
430
|
+
assert_equal 42, @db.prepare('select :bar').bind(value).next_single_column
|
431
|
+
assert_nil @db.prepare('select :baz').bind(value).next_single_column
|
432
|
+
end
|
433
|
+
|
434
|
+
def test_parameter_binding_from_data_class
|
435
|
+
skip "Data isn't supported in Ruby < 3.2" if RUBY_VERSION < '3.2'
|
436
|
+
|
437
|
+
foo_bar = Data.define(:":foo", :bar)
|
438
|
+
value = foo_bar.new(":foo": 41, bar: 42)
|
439
|
+
assert_equal 42, @db.prepare('select :bar').bind(value).next_single_column
|
440
|
+
assert_nil @db.prepare('select :baz').bind(value).next_single_column
|
441
|
+
end
|
442
|
+
|
407
443
|
def test_query_columns
|
408
444
|
r = @db.prepare("select 'abc' as a, 'def' as b").columns
|
409
445
|
assert_equal [:a, :b], r
|
@@ -442,7 +478,25 @@ class QueryTest < MiniTest::Test
|
|
442
478
|
assert_equal [[1, 2, 3], [4, 5, 6], [42, 8, 9]], @db.query_ary('select * from t order by z')
|
443
479
|
end
|
444
480
|
|
445
|
-
def
|
481
|
+
def test_query_execute_with_mixed_params
|
482
|
+
@db.execute 'delete from t'
|
483
|
+
q = @db.prepare('insert into t values (?, ?, ?)')
|
484
|
+
|
485
|
+
q.execute(1, [2], 3)
|
486
|
+
q.execute([4, 5], 6)
|
487
|
+
q.execute([7], 8, [9])
|
488
|
+
|
489
|
+
assert_equal [[1, 2, 3], [4, 5, 6], [7, 8, 9]], @db.query_ary('select * from t order by z')
|
490
|
+
end
|
491
|
+
|
492
|
+
def test_query_chverons
|
493
|
+
q = @db.prepare('update t set x = ? where z = ?')
|
494
|
+
assert_equal q, (q << [42, 9])
|
495
|
+
assert_equal [[1, 2, 3], [4, 5, 6], [42, 8, 9]], @db.query_ary('select * from t order by z')
|
496
|
+
end
|
497
|
+
|
498
|
+
|
499
|
+
def test_query_batch_execute
|
446
500
|
@db.query('create table foo (a, b, c)')
|
447
501
|
assert_equal [], @db.query('select * from foo')
|
448
502
|
|
@@ -452,14 +506,336 @@ class QueryTest < MiniTest::Test
|
|
452
506
|
]
|
453
507
|
|
454
508
|
p = @db.prepare('insert into foo values (?, ?, ?)')
|
455
|
-
changes = p.
|
509
|
+
changes = p.batch_execute(records)
|
456
510
|
|
457
511
|
assert_equal 2, changes
|
458
512
|
assert_equal [
|
459
513
|
{ a: 1, b: '2', c: 3 },
|
460
514
|
{ a: '4', b: 5, c: 6 }
|
461
515
|
], @db.query('select * from foo')
|
462
|
-
end
|
516
|
+
end
|
517
|
+
|
518
|
+
def test_query_batch_execute_with_each_interface
|
519
|
+
@db.query('create table foo (a)')
|
520
|
+
assert_equal [], @db.query('select * from foo')
|
521
|
+
|
522
|
+
p = @db.prepare('insert into foo values (?)')
|
523
|
+
changes = p.batch_execute(1..3)
|
524
|
+
|
525
|
+
assert_equal 3, changes
|
526
|
+
assert_equal [
|
527
|
+
{ a: 1 },
|
528
|
+
{ a: 2 },
|
529
|
+
{ a: 3 }
|
530
|
+
], @db.query('select * from foo')
|
531
|
+
end
|
532
|
+
|
533
|
+
def test_query_batch_execute_with_proc
|
534
|
+
source = [42, 43, 44]
|
535
|
+
|
536
|
+
@db.query('create table foo (a)')
|
537
|
+
assert_equal [], @db.query('select * from foo')
|
538
|
+
|
539
|
+
p = @db.prepare('insert into foo values (?)')
|
540
|
+
pr = proc { source.shift }
|
541
|
+
changes = p.batch_execute(pr)
|
542
|
+
|
543
|
+
assert_equal 3, changes
|
544
|
+
assert_equal [
|
545
|
+
{ a: 42 },
|
546
|
+
{ a: 43 },
|
547
|
+
{ a: 44 }
|
548
|
+
], @db.query('select * from foo')
|
549
|
+
end
|
550
|
+
|
551
|
+
def test_query_batch_query_with_array
|
552
|
+
@db.query('create table foo (a integer primary key, b)')
|
553
|
+
assert_equal [], @db.query('select * from foo')
|
554
|
+
|
555
|
+
data = [5, 4, 3]
|
556
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
557
|
+
assert_equal [
|
558
|
+
[[1, 5]],
|
559
|
+
[[2, 4]],
|
560
|
+
[[3, 3]]
|
561
|
+
], results
|
562
|
+
|
563
|
+
q = @db.prepare('update foo set b = ? returning *')
|
564
|
+
|
565
|
+
results = q.batch_query([42, 43])
|
566
|
+
assert_equal [
|
567
|
+
[{ a: 1, b: 42 }, { a: 2, b: 42 }, { a: 3, b: 42 }],
|
568
|
+
[{ a: 1, b: 43 }, { a: 2, b: 43 }, { a: 3, b: 43 }]
|
569
|
+
], results
|
570
|
+
|
571
|
+
array = []
|
572
|
+
changes = q.batch_query([44, 45]) do |rows|
|
573
|
+
array << rows
|
574
|
+
end
|
575
|
+
assert_equal 6, changes
|
576
|
+
assert_equal [
|
577
|
+
[{ a: 1, b: 44 }, { a: 2, b: 44 }, { a: 3, b: 44 }],
|
578
|
+
[{ a: 1, b: 45 }, { a: 2, b: 45 }, { a: 3, b: 45 }]
|
579
|
+
], array
|
580
|
+
end
|
581
|
+
|
582
|
+
def test_query_batch_query_with_enumerable
|
583
|
+
@db.query('create table foo (a integer primary key, b)')
|
584
|
+
assert_equal [], @db.query('select * from foo')
|
585
|
+
|
586
|
+
data = [5, 4, 3]
|
587
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
588
|
+
assert_equal [
|
589
|
+
[[1, 5]],
|
590
|
+
[[2, 4]],
|
591
|
+
[[3, 3]]
|
592
|
+
], results
|
593
|
+
|
594
|
+
q = @db.prepare('update foo set b = ? returning *')
|
595
|
+
|
596
|
+
results = q.batch_query(42..43)
|
597
|
+
assert_equal [
|
598
|
+
[{ a: 1, b: 42 }, { a: 2, b: 42 }, { a: 3, b: 42 }],
|
599
|
+
[{ a: 1, b: 43 }, { a: 2, b: 43 }, { a: 3, b: 43 }]
|
600
|
+
], results
|
601
|
+
|
602
|
+
array = []
|
603
|
+
changes = q.batch_query(44..45) do |rows|
|
604
|
+
array << rows
|
605
|
+
end
|
606
|
+
assert_equal 6, changes
|
607
|
+
assert_equal [
|
608
|
+
[{ a: 1, b: 44 }, { a: 2, b: 44 }, { a: 3, b: 44 }],
|
609
|
+
[{ a: 1, b: 45 }, { a: 2, b: 45 }, { a: 3, b: 45 }]
|
610
|
+
], array
|
611
|
+
end
|
612
|
+
|
613
|
+
def parameter_source_proc(values)
|
614
|
+
proc { values.shift }
|
615
|
+
end
|
616
|
+
|
617
|
+
def test_query_batch_query_with_proc
|
618
|
+
@db.query('create table foo (a integer primary key, b)')
|
619
|
+
assert_equal [], @db.query('select * from foo')
|
620
|
+
|
621
|
+
data = [5, 4, 3]
|
622
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
623
|
+
assert_equal [
|
624
|
+
[[1, 5]],
|
625
|
+
[[2, 4]],
|
626
|
+
[[3, 3]]
|
627
|
+
], results
|
628
|
+
|
629
|
+
q = @db.prepare('update foo set b = ? returning *')
|
630
|
+
|
631
|
+
pr = parameter_source_proc([42, 43])
|
632
|
+
results = q.batch_query(pr)
|
633
|
+
assert_equal [
|
634
|
+
[{ a: 1, b: 42 }, { a: 2, b: 42 }, { a: 3, b: 42 }],
|
635
|
+
[{ a: 1, b: 43 }, { a: 2, b: 43 }, { a: 3, b: 43 }]
|
636
|
+
], results
|
637
|
+
|
638
|
+
array = []
|
639
|
+
pr = parameter_source_proc([44, 45])
|
640
|
+
changes = q.batch_query(pr) do |rows|
|
641
|
+
array << rows
|
642
|
+
end
|
643
|
+
assert_equal 6, changes
|
644
|
+
assert_equal [
|
645
|
+
[{ a: 1, b: 44 }, { a: 2, b: 44 }, { a: 3, b: 44 }],
|
646
|
+
[{ a: 1, b: 45 }, { a: 2, b: 45 }, { a: 3, b: 45 }]
|
647
|
+
], array
|
648
|
+
end
|
649
|
+
|
650
|
+
def test_query_batch_query_ary_with_array
|
651
|
+
@db.query('create table foo (a integer primary key, b)')
|
652
|
+
assert_equal [], @db.query('select * from foo')
|
653
|
+
|
654
|
+
data = [5, 4, 3]
|
655
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
656
|
+
assert_equal [
|
657
|
+
[[1, 5]],
|
658
|
+
[[2, 4]],
|
659
|
+
[[3, 3]]
|
660
|
+
], results
|
661
|
+
|
662
|
+
q = @db.prepare('update foo set b = ? returning *')
|
663
|
+
|
664
|
+
results = q.batch_query_ary([42, 43])
|
665
|
+
assert_equal [
|
666
|
+
[[1, 42], [2, 42], [3, 42]],
|
667
|
+
[[1, 43], [2, 43], [3, 43]]
|
668
|
+
], results
|
669
|
+
|
670
|
+
array = []
|
671
|
+
changes = q.batch_query_ary([44, 45]) do |rows|
|
672
|
+
array << rows
|
673
|
+
end
|
674
|
+
assert_equal 6, changes
|
675
|
+
assert_equal [
|
676
|
+
[[1, 44], [2, 44], [3, 44]],
|
677
|
+
[[1, 45], [2, 45], [3, 45]]
|
678
|
+
], array
|
679
|
+
end
|
680
|
+
|
681
|
+
def test_query_batch_query_ary_with_enumerable
|
682
|
+
@db.query('create table foo (a integer primary key, b)')
|
683
|
+
assert_equal [], @db.query('select * from foo')
|
684
|
+
|
685
|
+
data = [5, 4, 3]
|
686
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
687
|
+
assert_equal [
|
688
|
+
[[1, 5]],
|
689
|
+
[[2, 4]],
|
690
|
+
[[3, 3]]
|
691
|
+
], results
|
692
|
+
|
693
|
+
q = @db.prepare('update foo set b = ? returning *')
|
694
|
+
|
695
|
+
results = q.batch_query_ary(42..43)
|
696
|
+
assert_equal [
|
697
|
+
[[1, 42], [2, 42], [3, 42]],
|
698
|
+
[[1, 43], [2, 43], [3, 43]]
|
699
|
+
], results
|
700
|
+
|
701
|
+
array = []
|
702
|
+
changes = q.batch_query_ary(44..45) do |rows|
|
703
|
+
array << rows
|
704
|
+
end
|
705
|
+
assert_equal 6, changes
|
706
|
+
assert_equal [
|
707
|
+
[[1, 44], [2, 44], [3, 44]],
|
708
|
+
[[1, 45], [2, 45], [3, 45]]
|
709
|
+
], array
|
710
|
+
end
|
711
|
+
|
712
|
+
def test_query_batch_query_ary_with_proc
|
713
|
+
@db.query('create table foo (a integer primary key, b)')
|
714
|
+
assert_equal [], @db.query('select * from foo')
|
715
|
+
|
716
|
+
data = [5, 4, 3]
|
717
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
718
|
+
assert_equal [
|
719
|
+
[[1, 5]],
|
720
|
+
[[2, 4]],
|
721
|
+
[[3, 3]]
|
722
|
+
], results
|
723
|
+
|
724
|
+
q = @db.prepare('update foo set b = ? returning *')
|
725
|
+
|
726
|
+
pr = parameter_source_proc([42, 43])
|
727
|
+
results = q.batch_query_ary(pr)
|
728
|
+
assert_equal [
|
729
|
+
[[1, 42], [2, 42], [3, 42]],
|
730
|
+
[[1, 43], [2, 43], [3, 43]]
|
731
|
+
], results
|
732
|
+
|
733
|
+
array = []
|
734
|
+
pr = parameter_source_proc([44, 45])
|
735
|
+
changes = q.batch_query_ary(pr) do |rows|
|
736
|
+
array << rows
|
737
|
+
end
|
738
|
+
assert_equal 6, changes
|
739
|
+
assert_equal [
|
740
|
+
[[1, 44], [2, 44], [3, 44]],
|
741
|
+
[[1, 45], [2, 45], [3, 45]]
|
742
|
+
], array
|
743
|
+
end
|
744
|
+
|
745
|
+
def test_query_batch_query_single_column_with_array
|
746
|
+
@db.query('create table foo (a integer primary key, b)')
|
747
|
+
assert_equal [], @db.query('select * from foo')
|
748
|
+
|
749
|
+
data = [5, 4, 3]
|
750
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
751
|
+
assert_equal [
|
752
|
+
[[1, 5]],
|
753
|
+
[[2, 4]],
|
754
|
+
[[3, 3]]
|
755
|
+
], results
|
756
|
+
|
757
|
+
q = @db.prepare('update foo set b = ? returning b * 10 + a')
|
758
|
+
|
759
|
+
results = q.batch_query_single_column([42, 43])
|
760
|
+
assert_equal [
|
761
|
+
[421, 422, 423],
|
762
|
+
[431, 432, 433]
|
763
|
+
], results
|
764
|
+
|
765
|
+
array = []
|
766
|
+
changes = q.batch_query_single_column([44, 45]) do |rows|
|
767
|
+
array << rows
|
768
|
+
end
|
769
|
+
assert_equal 6, changes
|
770
|
+
assert_equal [
|
771
|
+
[441, 442, 443],
|
772
|
+
[451, 452, 453]
|
773
|
+
], array
|
774
|
+
end
|
775
|
+
|
776
|
+
def test_query_batch_query_single_column_with_enumerable
|
777
|
+
@db.query('create table foo (a integer primary key, b)')
|
778
|
+
assert_equal [], @db.query('select * from foo')
|
779
|
+
|
780
|
+
data = [5, 4, 3]
|
781
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
782
|
+
assert_equal [
|
783
|
+
[[1, 5]],
|
784
|
+
[[2, 4]],
|
785
|
+
[[3, 3]]
|
786
|
+
], results
|
787
|
+
|
788
|
+
q = @db.prepare('update foo set b = ? returning b * 10 + a')
|
789
|
+
|
790
|
+
results = q.batch_query_single_column(42..43)
|
791
|
+
assert_equal [
|
792
|
+
[421, 422, 423],
|
793
|
+
[431, 432, 433]
|
794
|
+
], results
|
795
|
+
|
796
|
+
array = []
|
797
|
+
changes = q.batch_query_single_column(44..45) do |rows|
|
798
|
+
array << rows
|
799
|
+
end
|
800
|
+
assert_equal 6, changes
|
801
|
+
assert_equal [
|
802
|
+
[441, 442, 443],
|
803
|
+
[451, 452, 453]
|
804
|
+
], array
|
805
|
+
end
|
806
|
+
|
807
|
+
def test_query_batch_query_single_column_with_proc
|
808
|
+
@db.query('create table foo (a integer primary key, b)')
|
809
|
+
assert_equal [], @db.query('select * from foo')
|
810
|
+
|
811
|
+
data = [5, 4, 3]
|
812
|
+
results = @db.batch_query_ary('insert into foo (b) values (?) returning *', data)
|
813
|
+
assert_equal [
|
814
|
+
[[1, 5]],
|
815
|
+
[[2, 4]],
|
816
|
+
[[3, 3]]
|
817
|
+
], results
|
818
|
+
|
819
|
+
q = @db.prepare('update foo set b = ? returning b * 10 + a')
|
820
|
+
|
821
|
+
pr = parameter_source_proc([42, 43])
|
822
|
+
results = q.batch_query_single_column(pr)
|
823
|
+
assert_equal [
|
824
|
+
[421, 422, 423],
|
825
|
+
[431, 432, 433]
|
826
|
+
], results
|
827
|
+
|
828
|
+
array = []
|
829
|
+
pr = parameter_source_proc([44, 45])
|
830
|
+
changes = q.batch_query_single_column(pr) do |rows|
|
831
|
+
array << rows
|
832
|
+
end
|
833
|
+
assert_equal 6, changes
|
834
|
+
assert_equal [
|
835
|
+
[441, 442, 443],
|
836
|
+
[451, 452, 453]
|
837
|
+
], array
|
838
|
+
end
|
463
839
|
|
464
840
|
def test_query_status
|
465
841
|
assert_equal 0, @query.status(Extralite::SQLITE_STMTSTATUS_RUN)
|
@@ -516,4 +892,24 @@ class QueryTest < MiniTest::Test
|
|
516
892
|
q = @db.prepare('select x from t')
|
517
893
|
assert_match /^\#\<Extralite::Query:0x[0-9a-f]+ #{q.sql.inspect}\>$/, q.inspect
|
518
894
|
end
|
895
|
+
|
896
|
+
def test_query_clone
|
897
|
+
q1 = @db.prepare('select x from t')
|
898
|
+
q2 = q1.clone
|
899
|
+
|
900
|
+
assert_kind_of Extralite::Query, q2
|
901
|
+
assert_equal @db, q2.database
|
902
|
+
assert_equal q1.sql, q2.sql
|
903
|
+
refute_equal q1, q2
|
904
|
+
end
|
905
|
+
|
906
|
+
def test_query_dup
|
907
|
+
q1 = @db.prepare('select x from t')
|
908
|
+
q2 = q1.dup
|
909
|
+
|
910
|
+
assert_kind_of Extralite::Query, q2
|
911
|
+
assert_equal @db, q2.database
|
912
|
+
assert_equal q1.sql, q2.sql
|
913
|
+
refute_equal q1, q2
|
914
|
+
end
|
519
915
|
end
|
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.5'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -88,12 +88,15 @@ extensions:
|
|
88
88
|
extra_rdoc_files:
|
89
89
|
- README.md
|
90
90
|
files:
|
91
|
+
- ".editorconfig"
|
91
92
|
- ".github/FUNDING.yml"
|
93
|
+
- ".github/workflows/test-bundle.yml"
|
92
94
|
- ".github/workflows/test.yml"
|
93
95
|
- ".gitignore"
|
94
96
|
- ".yardopts"
|
95
97
|
- CHANGELOG.md
|
96
98
|
- Gemfile
|
99
|
+
- Gemfile-bundle
|
97
100
|
- Gemfile.lock
|
98
101
|
- LICENSE
|
99
102
|
- README.md
|
@@ -118,7 +121,11 @@ files:
|
|
118
121
|
- lib/sequel/adapters/extralite.rb
|
119
122
|
- test/extensions/text.dylib
|
120
123
|
- test/extensions/text.so
|
124
|
+
- test/fixtures/image.png
|
121
125
|
- test/helper.rb
|
126
|
+
- test/issue-38.rb
|
127
|
+
- test/issue-54.rb
|
128
|
+
- test/issue-59.rb
|
122
129
|
- test/perf_ary.rb
|
123
130
|
- test/perf_hash.rb
|
124
131
|
- test/perf_prepared.rb
|
@@ -148,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
148
155
|
requirements:
|
149
156
|
- - ">="
|
150
157
|
- !ruby/object:Gem::Version
|
151
|
-
version: '
|
158
|
+
version: '3.0'
|
152
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
160
|
requirements:
|
154
161
|
- - ">="
|