lmdb 0.7.3 → 0.8.0
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/README.md +12 -4
- data/Rakefile +48 -0
- data/ext/lmdb_ext/extconf.rb +29 -10
- data/ext/lmdb_ext/lmdb_ext.c +1389 -908
- data/ext/lmdb_ext/lmdb_ext.h +36 -19
- data/lib/lmdb/database.rb +2 -1
- data/lib/lmdb/version.rb +1 -1
- data/lmdb.gemspec +4 -1
- data/spec/gc_torture_spec.rb +162 -0
- data/spec/helper.rb +3 -3
- data/spec/lmdb_spec.rb +152 -136
- data/spec/pseudo_transactions_spec.rb +237 -0
- data/vendor/liblmdb/VERSION +1 -0
- data/vendor/{libraries/liblmdb → liblmdb}/lmdb.h +18 -63
- data/vendor/{libraries/liblmdb → liblmdb}/mdb.c +583 -1480
- data/vendor/{libraries/liblmdb → liblmdb}/midl.c +0 -62
- data/vendor/{libraries/liblmdb → liblmdb}/midl.h +4 -16
- metadata +11 -34
- data/CONTRIBUTORS +0 -8
- data/behaviour.org +0 -35
- data/ext/lmdb_ext/prototypes.sh +0 -4
- data/vendor/libraries/liblmdb/.gitignore +0 -24
- data/vendor/libraries/liblmdb/COPYRIGHT +0 -20
- data/vendor/libraries/liblmdb/Doxyfile +0 -1631
- data/vendor/libraries/liblmdb/LICENSE +0 -47
- data/vendor/libraries/liblmdb/Makefile +0 -118
- data/vendor/libraries/liblmdb/intro.doc +0 -192
- data/vendor/libraries/liblmdb/mdb_copy.1 +0 -61
- data/vendor/libraries/liblmdb/mdb_copy.c +0 -84
- data/vendor/libraries/liblmdb/mdb_drop.1 +0 -40
- data/vendor/libraries/liblmdb/mdb_drop.c +0 -135
- data/vendor/libraries/liblmdb/mdb_dump.1 +0 -81
- data/vendor/libraries/liblmdb/mdb_dump.c +0 -319
- data/vendor/libraries/liblmdb/mdb_load.1 +0 -84
- data/vendor/libraries/liblmdb/mdb_load.c +0 -492
- data/vendor/libraries/liblmdb/mdb_stat.1 +0 -70
- data/vendor/libraries/liblmdb/mdb_stat.c +0 -264
- data/vendor/libraries/liblmdb/mtest.c +0 -177
- data/vendor/libraries/liblmdb/mtest2.c +0 -124
- data/vendor/libraries/liblmdb/mtest3.c +0 -133
- data/vendor/libraries/liblmdb/mtest4.c +0 -168
- data/vendor/libraries/liblmdb/mtest5.c +0 -135
- data/vendor/libraries/liblmdb/mtest6.c +0 -141
- data/vendor/libraries/liblmdb/sample-bdb.txt +0 -73
- data/vendor/libraries/liblmdb/sample-mdb.txt +0 -62
- data/vendor/libraries/liblmdb/tooltag +0 -27
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5673437b11f0c87befc6f0003aaa1c25f8c20ec3270147396d45c8af38fb0a78
|
|
4
|
+
data.tar.gz: 407eadc211c71c38cc8d1e4523f2639abb964e187452635af7b603ce5e3eb565
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz: '
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '0596fdb966d1373d03a739901ca441fb3df42b7257566b07a8ee513c1b30ea7b9b8fcfa1ae6f5a1efcbae7a5b91c7983f6d83fc1e6ffa6d63fba6c9572623c39'
|
|
7
|
+
data.tar.gz: cbfd03a44df15275c6bf66d10501e5d86d6a6bf3bee949588ae7d9b89cd9e03bf57ddb7f3502f56d7128ddf500658d502ea0436bc4868c455a0d139c7525a74c
|
data/README.md
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
# LMDB
|
|
2
2
|
|
|
3
|
-
Ruby bindings
|
|
3
|
+
These are Ruby bindings [OpenLDAP's excellent Lightning Memory-Mapped
|
|
4
|
+
Database (LMDB)](https://www.symas.com/lmdb/).
|
|
4
5
|
|
|
5
6
|
## Installation
|
|
6
7
|
|
|
7
|
-
Install via rubygems:
|
|
8
|
+
Install via [RubyGems](https://rubygems.org/gems/lmdb/):
|
|
8
9
|
|
|
9
|
-
```
|
|
10
|
-
gem install lmdb
|
|
10
|
+
```bash
|
|
11
|
+
$ gem install lmdb
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
If you want to force the bundled LMDB over your system version
|
|
15
|
+
(assuming one is present, along with headers):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
$ gem install lmdb -- --vendor-lmdb
|
|
11
19
|
```
|
|
12
20
|
|
|
13
21
|
## Links
|
data/Rakefile
CHANGED
|
@@ -76,3 +76,51 @@ namespace :release do
|
|
|
76
76
|
abort "#{tag} exists; update version!" unless `git tag -l #{tag}`.empty?
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
|
+
|
|
80
|
+
# all this business is to download actual releases of lmdb instead of using
|
|
81
|
+
# git submodules
|
|
82
|
+
|
|
83
|
+
require 'open-uri'
|
|
84
|
+
require 'json'
|
|
85
|
+
require 'fileutils'
|
|
86
|
+
require 'rubygems/package'
|
|
87
|
+
require 'zlib'
|
|
88
|
+
|
|
89
|
+
LMDB_VENDOR_DIR = File.expand_path('vendor/liblmdb', __dir__)
|
|
90
|
+
LMDB_NEEDED = %w[mdb.c midl.c lmdb.h midl.h].freeze
|
|
91
|
+
|
|
92
|
+
namespace :lmdb do
|
|
93
|
+
desc 'Fetch the latest LMDB C source into vendor/liblmdb'
|
|
94
|
+
task :fetch do
|
|
95
|
+
tags_url = 'https://api.github.com/repos/LMDB/lmdb/tags?per_page=20'
|
|
96
|
+
headers = { 'User-Agent' => 'rb-lmdb-gem-fetch' }
|
|
97
|
+
|
|
98
|
+
tags = JSON.parse(URI.open(tags_url, headers).read)
|
|
99
|
+
# warn tags.inspect
|
|
100
|
+
# Tags are like "LMDB_0_9_32" — pick the highest numeric one
|
|
101
|
+
tag = tags
|
|
102
|
+
.map { |t| t['name'] }
|
|
103
|
+
.select { |n| n.match?(/\ALMDB_\d+[_.]\d+[_.]\d+\z/) }
|
|
104
|
+
.max_by { |n| n.scan(/\d+/).map(&:to_i) }
|
|
105
|
+
|
|
106
|
+
abort 'Could not determine latest LMDB tag' unless tag
|
|
107
|
+
puts "Fetching LMDB #{tag}..."
|
|
108
|
+
|
|
109
|
+
tarball_url = "https://github.com/LMDB/lmdb/archive/refs/tags/#{tag}.tar.gz"
|
|
110
|
+
FileUtils.mkdir_p(LMDB_VENDOR_DIR)
|
|
111
|
+
|
|
112
|
+
# Stream the tarball, extract only the liblmdb source files we need
|
|
113
|
+
URI.open(tarball_url, headers) do |gz|
|
|
114
|
+
Gem::Package::TarReader.new(Zlib::GzipReader.new(gz)).each do |entry|
|
|
115
|
+
base = File.basename(entry.full_name)
|
|
116
|
+
next unless entry.file? && LMDB_NEEDED.include?(base)
|
|
117
|
+
dest = File.join(LMDB_VENDOR_DIR, base)
|
|
118
|
+
File.write(dest, entry.read)
|
|
119
|
+
puts " -> #{dest}"
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
File.write(File.join(LMDB_VENDOR_DIR, 'VERSION'), "#{tag}\n")
|
|
124
|
+
puts "Done. LMDB #{tag} vendored in #{LMDB_VENDOR_DIR}."
|
|
125
|
+
end
|
|
126
|
+
end
|
data/ext/lmdb_ext/extconf.rb
CHANGED
|
@@ -3,18 +3,35 @@ require 'mkmf'
|
|
|
3
3
|
$CFLAGS << ' -std=c99 -Wall -g '
|
|
4
4
|
$CFLAGS << ' -fdeclspec' if /darwin/.match? RUBY_PLATFORM
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
dir_config('lmdb')
|
|
7
|
+
|
|
8
|
+
# --vendor flag: skip system lmdb and always build from vendored source
|
|
9
|
+
vendor_forced = arg_config('--vendor-lmdb', false)
|
|
10
|
+
|
|
11
|
+
have_system_lmdb = false
|
|
12
|
+
|
|
13
|
+
unless vendor_forced
|
|
14
|
+
have_system_lmdb =
|
|
15
|
+
have_header('lmdb.h') && have_library('lmdb', 'mdb_env_create')
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
unless have_system_lmdb
|
|
19
|
+
vendor_dir = File.expand_path('../../vendor/liblmdb', __dir__)
|
|
20
|
+
abort <<~MSG unless File.exist?(File.join(vendor_dir, 'mdb.c'))
|
|
21
|
+
Could not find system lmdb and no vendored source found.
|
|
22
|
+
Run `rake lmdb:fetch` to download the LMDB C source, then retry.
|
|
23
|
+
MSG
|
|
24
|
+
|
|
25
|
+
warn "Building from vendored LMDB source in #{vendor_dir}"
|
|
26
|
+
$INCFLAGS << " -I#{vendor_dir}"
|
|
27
|
+
$srcs = Dir[File.join(__dir__, '*.c')] +
|
|
28
|
+
[File.join(vendor_dir, 'mdb.c'),
|
|
29
|
+
File.join(vendor_dir, 'midl.c')]
|
|
30
|
+
$VPATH << vendor_dir
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
18
35
|
have_header 'limits.h'
|
|
19
36
|
have_header 'string.h'
|
|
20
37
|
have_header 'stdlib.h'
|
|
@@ -23,8 +40,10 @@ have_header 'sys/types.h'
|
|
|
23
40
|
have_header 'assert.h'
|
|
24
41
|
|
|
25
42
|
have_header 'ruby.h'
|
|
43
|
+
|
|
26
44
|
have_func 'rb_funcall_passing_block'
|
|
27
45
|
have_func 'rb_thread_call_without_gvl2'
|
|
46
|
+
have_func 'rb_gc_mark_movable'
|
|
28
47
|
|
|
29
48
|
create_header
|
|
30
49
|
|