extralite 1.8.2 → 1.12
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/FUNDING.yml +1 -0
- data/.github/workflows/test.yml +2 -2
- data/CHANGELOG.md +17 -0
- data/Gemfile.lock +3 -3
- data/README.md +57 -24
- data/ext/extralite/extconf.rb +3 -109
- data/ext/extralite/extralite.c +21 -10
- data/ext/extralite/sqlite3.c +237479 -0
- data/ext/extralite/sqlite3.h +12492 -0
- data/extralite.gemspec +1 -1
- data/lib/extralite/version.rb +1 -1
- data/test/extensions/text.dylib +0 -0
- data/test/extensions/text.so +0 -0
- data/test/helper.rb +2 -0
- data/test/perf_ary.rb +51 -0
- data/test/{perf.rb → perf_hash.rb} +0 -0
- data/test/test_database.rb +39 -0
- data/test/test_extralite.rb +14 -0
- metadata +16 -9
data/extralite.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.extra_rdoc_files = ["README.md"]
|
20
20
|
s.extensions = ["ext/extralite/extconf.rb"]
|
21
21
|
s.require_paths = ["lib"]
|
22
|
-
s.required_ruby_version = '>= 2.
|
22
|
+
s.required_ruby_version = '>= 2.7'
|
23
23
|
|
24
24
|
s.add_development_dependency 'rake-compiler', '1.1.6'
|
25
25
|
s.add_development_dependency 'minitest', '5.15.0'
|
data/lib/extralite/version.rb
CHANGED
Binary file
|
Binary file
|
data/test/helper.rb
CHANGED
data/test/perf_ary.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/inline'
|
4
|
+
|
5
|
+
gemfile do
|
6
|
+
source 'https://rubygems.org'
|
7
|
+
gem 'sqlite3'
|
8
|
+
gem 'extralite', path: '..'
|
9
|
+
gem 'benchmark-ips'
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'benchmark/ips'
|
13
|
+
require 'fileutils'
|
14
|
+
|
15
|
+
DB_PATH = '/tmp/extralite_sqlite3_perf.db'
|
16
|
+
|
17
|
+
def prepare_database(count)
|
18
|
+
FileUtils.rm(DB_PATH) rescue nil
|
19
|
+
db = Extralite::Database.new(DB_PATH)
|
20
|
+
db.query('create table foo ( a integer primary key, b text )')
|
21
|
+
db.query('begin')
|
22
|
+
count.times { db.query('insert into foo (b) values (?)', "hello#{rand(1000)}" )}
|
23
|
+
db.query('commit')
|
24
|
+
end
|
25
|
+
|
26
|
+
def sqlite3_run(count)
|
27
|
+
db = SQLite3::Database.new(DB_PATH)
|
28
|
+
results = db.execute('select * from foo')
|
29
|
+
raise unless results.size == count
|
30
|
+
end
|
31
|
+
|
32
|
+
def extralite_run(count)
|
33
|
+
db = Extralite::Database.new(DB_PATH)
|
34
|
+
results = db.query_ary('select * from foo')
|
35
|
+
raise unless results.size == count
|
36
|
+
end
|
37
|
+
|
38
|
+
[10, 1000, 100000].each do |c|
|
39
|
+
puts; puts; puts "Record count: #{c}"
|
40
|
+
|
41
|
+
prepare_database(c)
|
42
|
+
|
43
|
+
Benchmark.ips do |x|
|
44
|
+
x.config(:time => 3, :warmup => 1)
|
45
|
+
|
46
|
+
x.report("sqlite3") { sqlite3_run(c) }
|
47
|
+
x.report("extralite") { extralite_run(c) }
|
48
|
+
|
49
|
+
x.compare!
|
50
|
+
end
|
51
|
+
end
|
File without changes
|
data/test/test_database.rb
CHANGED
@@ -138,6 +138,45 @@ end
|
|
138
138
|
r = @db.query('select x, y, z from t where z = :bazzz', ':bazzz' => 6)
|
139
139
|
assert_equal [{ x: 4, y: 5, z: 6 }], r
|
140
140
|
end
|
141
|
+
|
142
|
+
def test_parameter_binding_with_index_key
|
143
|
+
r = @db.query('select x, y, z from t where z = ?', 1 => 3)
|
144
|
+
assert_equal [{ x: 1, y: 2, z: 3 }], r
|
145
|
+
|
146
|
+
r = @db.query('select x, y, z from t where x = ?2', 1 => 42, 2 => 4)
|
147
|
+
assert_equal [{ x: 4, y: 5, z: 6 }], r
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_value_casting
|
151
|
+
r = @db.query_single_value("select 'abc'")
|
152
|
+
assert_equal 'abc', r
|
153
|
+
|
154
|
+
r = @db.query_single_value('select 123')
|
155
|
+
assert_equal 123, r
|
156
|
+
|
157
|
+
r = @db.query_single_value('select 12.34')
|
158
|
+
assert_equal 12.34, r
|
159
|
+
|
160
|
+
r = @db.query_single_value('select zeroblob(4)')
|
161
|
+
assert_equal "\x00\x00\x00\x00", r
|
162
|
+
|
163
|
+
r = @db.query_single_value('select null')
|
164
|
+
assert_nil r
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def test_extension_loading
|
170
|
+
case RUBY_PLATFORM
|
171
|
+
when /linux/
|
172
|
+
@db.load_extension(File.join(__dir__, 'extensions/text.so'))
|
173
|
+
when /darwin/
|
174
|
+
@db.load_extension(File.join(__dir__, 'extensions/text.dylib'))
|
175
|
+
end
|
176
|
+
|
177
|
+
r = @db.query_single_value("select reverse('abcd')")
|
178
|
+
assert_equal 'dcba', r
|
179
|
+
end
|
141
180
|
end
|
142
181
|
|
143
182
|
class ScenarioTest < MiniTest::Test
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'helper'
|
4
|
+
|
5
|
+
class ExtraliteTest < MiniTest::Test
|
6
|
+
SQLITE3_C_PATH = File.expand_path('../ext/extralite/sqlite3.c', __dir__)
|
7
|
+
SQLITE_VERSION_DEFINE_REGEXP = /#define SQLITE_VERSION\s+"([\d\.]+)"/m.freeze
|
8
|
+
|
9
|
+
def test_sqlite3_version
|
10
|
+
version = IO.read(SQLITE3_C_PATH).match(SQLITE_VERSION_DEFINE_REGEXP)[1]
|
11
|
+
|
12
|
+
assert_equal version, Extralite.sqlite3_version
|
13
|
+
end
|
14
|
+
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: 1.
|
4
|
+
version: '1.12'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 5.51.0
|
83
|
-
description:
|
83
|
+
description:
|
84
84
|
email: sharon@noteflakes.com
|
85
85
|
executables: []
|
86
86
|
extensions:
|
@@ -88,6 +88,7 @@ extensions:
|
|
88
88
|
extra_rdoc_files:
|
89
89
|
- README.md
|
90
90
|
files:
|
91
|
+
- ".github/FUNDING.yml"
|
91
92
|
- ".github/workflows/test.yml"
|
92
93
|
- ".gitignore"
|
93
94
|
- CHANGELOG.md
|
@@ -100,14 +101,20 @@ files:
|
|
100
101
|
- ext/extralite/extconf.rb
|
101
102
|
- ext/extralite/extralite.c
|
102
103
|
- ext/extralite/extralite_ext.c
|
104
|
+
- ext/extralite/sqlite3.c
|
105
|
+
- ext/extralite/sqlite3.h
|
103
106
|
- extralite.gemspec
|
104
107
|
- lib/extralite.rb
|
105
108
|
- lib/extralite/version.rb
|
106
109
|
- lib/sequel/adapters/extralite.rb
|
110
|
+
- test/extensions/text.dylib
|
111
|
+
- test/extensions/text.so
|
107
112
|
- test/helper.rb
|
108
|
-
- test/
|
113
|
+
- test/perf_ary.rb
|
114
|
+
- test/perf_hash.rb
|
109
115
|
- test/run.rb
|
110
116
|
- test/test_database.rb
|
117
|
+
- test/test_extralite.rb
|
111
118
|
- test/test_sequel.rb
|
112
119
|
homepage: https://github.com/digital-fabric/extralite
|
113
120
|
licenses:
|
@@ -117,7 +124,7 @@ metadata:
|
|
117
124
|
documentation_uri: https://www.rubydoc.info/gems/extralite
|
118
125
|
homepage_uri: https://github.com/digital-fabric/extralite
|
119
126
|
changelog_uri: https://github.com/digital-fabric/extralite/blob/master/CHANGELOG.md
|
120
|
-
post_install_message:
|
127
|
+
post_install_message:
|
121
128
|
rdoc_options:
|
122
129
|
- "--title"
|
123
130
|
- extralite
|
@@ -129,15 +136,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
136
|
requirements:
|
130
137
|
- - ">="
|
131
138
|
- !ruby/object:Gem::Version
|
132
|
-
version: '2.
|
139
|
+
version: '2.7'
|
133
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
141
|
requirements:
|
135
142
|
- - ">="
|
136
143
|
- !ruby/object:Gem::Version
|
137
144
|
version: '0'
|
138
145
|
requirements: []
|
139
|
-
rubygems_version: 3.
|
140
|
-
signing_key:
|
146
|
+
rubygems_version: 3.3.3
|
147
|
+
signing_key:
|
141
148
|
specification_version: 4
|
142
149
|
summary: Extra-lightweight SQLite3 wrapper for Ruby
|
143
150
|
test_files: []
|