extralite 2.5 → 2.7
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/.gitignore +1 -0
- data/CHANGELOG.md +34 -13
- data/Gemfile +4 -0
- data/Gemfile-bundle +1 -1
- data/LICENSE +1 -1
- data/README.md +1059 -247
- data/Rakefile +18 -0
- data/TODO.md +0 -7
- data/examples/kv_store.rb +49 -0
- data/examples/multi_fiber.rb +16 -0
- data/examples/on_progress.rb +9 -0
- data/examples/pubsub_store_polyphony.rb +194 -0
- data/examples/pubsub_store_threads.rb +204 -0
- data/ext/extralite/changeset.c +463 -0
- data/ext/extralite/common.c +177 -91
- data/ext/extralite/database.c +745 -276
- data/ext/extralite/extconf-bundle.rb +10 -4
- data/ext/extralite/extconf.rb +34 -34
- data/ext/extralite/extralite.h +104 -47
- data/ext/extralite/extralite_ext.c +6 -0
- data/ext/extralite/iterator.c +14 -86
- data/ext/extralite/query.c +171 -264
- data/extralite-bundle.gemspec +1 -1
- data/extralite.gemspec +1 -1
- data/gemspec.rb +10 -11
- data/lib/extralite/version.rb +1 -1
- data/lib/extralite.rb +69 -10
- data/lib/sequel/adapters/extralite.rb +1 -1
- data/test/helper.rb +9 -1
- data/test/perf_argv_transform.rb +74 -0
- data/test/perf_ary.rb +14 -12
- data/test/perf_hash.rb +17 -15
- data/test/perf_hash_prepared.rb +58 -0
- data/test/perf_hash_transform.rb +66 -0
- data/test/perf_polyphony.rb +74 -0
- data/test/test_changeset.rb +161 -0
- data/test/test_database.rb +720 -104
- data/test/test_extralite.rb +2 -2
- data/test/test_iterator.rb +28 -13
- data/test/test_query.rb +352 -110
- data/test/test_sequel.rb +4 -4
- metadata +24 -16
- data/Gemfile.lock +0 -37
- data/test/perf_prepared.rb +0 -64
data/test/test_sequel.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require_relative 'helper'
|
4
4
|
require 'sequel'
|
5
5
|
|
6
|
-
class SequelExtraliteTest <
|
6
|
+
class SequelExtraliteTest < Minitest::Test
|
7
7
|
def setup
|
8
8
|
@db = Sequel.connect('extralite::memory:')
|
9
9
|
@db.create_table :items do
|
@@ -46,8 +46,8 @@ class SequelExtraliteTest < MiniTest::Test
|
|
46
46
|
|
47
47
|
def test_migration
|
48
48
|
# Adapted from https://github.com/digital-fabric/extralite/issues/8
|
49
|
-
Dir.mktmpdir(
|
50
|
-
File.write(dir +
|
49
|
+
Dir.mktmpdir('extralite-migration') do |dir|
|
50
|
+
File.write(dir + '/001_migrate.rb', <<~RUBY)
|
51
51
|
Sequel.migration do
|
52
52
|
change do
|
53
53
|
create_table(:foobars) { primary_key :id }
|
@@ -56,7 +56,7 @@ class SequelExtraliteTest < MiniTest::Test
|
|
56
56
|
RUBY
|
57
57
|
|
58
58
|
Sequel.extension :migration
|
59
|
-
db = Sequel.connect(
|
59
|
+
db = Sequel.connect('extralite://')
|
60
60
|
Sequel::Migrator.run(db, dir)
|
61
61
|
|
62
62
|
assert_equal [:id], db[:foobars].columns
|
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.7'
|
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-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.2.7
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.2.7
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 5.
|
33
|
+
version: 5.21.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.21.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,28 +58,28 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.9.
|
61
|
+
version: 0.9.34
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.9.
|
68
|
+
version: 0.9.34
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sequel
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 5.
|
75
|
+
version: 5.77.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 5.
|
82
|
+
version: 5.77.0
|
83
83
|
description:
|
84
84
|
email: sharon@noteflakes.com
|
85
85
|
executables: []
|
@@ -97,12 +97,17 @@ files:
|
|
97
97
|
- CHANGELOG.md
|
98
98
|
- Gemfile
|
99
99
|
- Gemfile-bundle
|
100
|
-
- Gemfile.lock
|
101
100
|
- LICENSE
|
102
101
|
- README.md
|
103
102
|
- Rakefile
|
104
103
|
- TODO.md
|
105
104
|
- bin/update_sqlite_source
|
105
|
+
- examples/kv_store.rb
|
106
|
+
- examples/multi_fiber.rb
|
107
|
+
- examples/on_progress.rb
|
108
|
+
- examples/pubsub_store_polyphony.rb
|
109
|
+
- examples/pubsub_store_threads.rb
|
110
|
+
- ext/extralite/changeset.c
|
106
111
|
- ext/extralite/common.c
|
107
112
|
- ext/extralite/database.c
|
108
113
|
- ext/extralite/extconf-bundle.rb
|
@@ -126,10 +131,14 @@ files:
|
|
126
131
|
- test/issue-38.rb
|
127
132
|
- test/issue-54.rb
|
128
133
|
- test/issue-59.rb
|
134
|
+
- test/perf_argv_transform.rb
|
129
135
|
- test/perf_ary.rb
|
130
136
|
- test/perf_hash.rb
|
131
|
-
- test/
|
137
|
+
- test/perf_hash_prepared.rb
|
138
|
+
- test/perf_hash_transform.rb
|
139
|
+
- test/perf_polyphony.rb
|
132
140
|
- test/run.rb
|
141
|
+
- test/test_changeset.rb
|
133
142
|
- test/test_database.rb
|
134
143
|
- test/test_extralite.rb
|
135
144
|
- test/test_iterator.rb
|
@@ -139,14 +148,13 @@ homepage: https://github.com/digital-fabric/extralite
|
|
139
148
|
licenses:
|
140
149
|
- MIT
|
141
150
|
metadata:
|
142
|
-
source_code_uri: https://github.com/digital-fabric/extralite
|
143
|
-
documentation_uri: https://www.rubydoc.info/gems/extralite
|
144
151
|
homepage_uri: https://github.com/digital-fabric/extralite
|
152
|
+
documentation_uri: https://www.rubydoc.info/gems/extralite
|
145
153
|
changelog_uri: https://github.com/digital-fabric/extralite/blob/master/CHANGELOG.md
|
146
154
|
post_install_message:
|
147
155
|
rdoc_options:
|
148
156
|
- "--title"
|
149
|
-
-
|
157
|
+
- Extralite
|
150
158
|
- "--main"
|
151
159
|
- README.md
|
152
160
|
require_paths:
|
@@ -162,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
170
|
- !ruby/object:Gem::Version
|
163
171
|
version: '0'
|
164
172
|
requirements: []
|
165
|
-
rubygems_version: 3.
|
173
|
+
rubygems_version: 3.5.3
|
166
174
|
signing_key:
|
167
175
|
specification_version: 4
|
168
176
|
summary: Extra-lightweight SQLite3 wrapper for Ruby
|
data/Gemfile.lock
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
extralite (2.5)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: https://rubygems.org/
|
8
|
-
specs:
|
9
|
-
docile (1.4.0)
|
10
|
-
json (2.7.1)
|
11
|
-
minitest (5.15.0)
|
12
|
-
rake (13.1.0)
|
13
|
-
rake-compiler (1.1.6)
|
14
|
-
rake
|
15
|
-
sequel (5.51.0)
|
16
|
-
simplecov (0.17.1)
|
17
|
-
docile (~> 1.1)
|
18
|
-
json (>= 1.8, < 3)
|
19
|
-
simplecov-html (~> 0.10.0)
|
20
|
-
simplecov-html (0.10.2)
|
21
|
-
webrick (1.7.0)
|
22
|
-
yard (0.9.27)
|
23
|
-
webrick (~> 1.7.0)
|
24
|
-
|
25
|
-
PLATFORMS
|
26
|
-
ruby
|
27
|
-
|
28
|
-
DEPENDENCIES
|
29
|
-
extralite!
|
30
|
-
minitest (= 5.15.0)
|
31
|
-
rake-compiler (= 1.1.6)
|
32
|
-
sequel (= 5.51.0)
|
33
|
-
simplecov (= 0.17.1)
|
34
|
-
yard (= 0.9.27)
|
35
|
-
|
36
|
-
BUNDLED WITH
|
37
|
-
2.4.22
|
data/test/perf_prepared.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bundler/inline'
|
4
|
-
|
5
|
-
gemfile do
|
6
|
-
source 'https://rubygems.org'
|
7
|
-
gem 'extralite', path: '..'
|
8
|
-
gem 'sqlite3'
|
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_prepare
|
27
|
-
db = SQLite3::Database.new(DB_PATH, :results_as_hash => true)
|
28
|
-
db.prepare('select * from foo')
|
29
|
-
end
|
30
|
-
|
31
|
-
def sqlite3_run(stmt, count)
|
32
|
-
# db = SQLite3::Database.new(DB_PATH, :results_as_hash => true)
|
33
|
-
results = stmt.execute.to_a
|
34
|
-
raise unless results.size == count
|
35
|
-
end
|
36
|
-
|
37
|
-
def extralite_prepare
|
38
|
-
db = Extralite::Database.new(DB_PATH)
|
39
|
-
db.prepare('select * from foo')
|
40
|
-
end
|
41
|
-
|
42
|
-
def extralite_run(query, count)
|
43
|
-
# db = Extralite::Database.new(DB_PATH)
|
44
|
-
results = query.to_a
|
45
|
-
raise unless results.size == count
|
46
|
-
end
|
47
|
-
|
48
|
-
[10, 1000, 100000].each do |c|
|
49
|
-
puts; puts; puts "Record count: #{c}"
|
50
|
-
|
51
|
-
prepare_database(c)
|
52
|
-
|
53
|
-
sqlite3_stmt = sqlite3_prepare
|
54
|
-
extralite_stmt = extralite_prepare
|
55
|
-
|
56
|
-
Benchmark.ips do |x|
|
57
|
-
x.config(:time => 3, :warmup => 1)
|
58
|
-
|
59
|
-
x.report("sqlite3") { sqlite3_run(sqlite3_stmt, c) }
|
60
|
-
x.report("extralite") { extralite_run(extralite_stmt, c) }
|
61
|
-
|
62
|
-
x.compare!
|
63
|
-
end
|
64
|
-
end
|