rdf-lmdb 0.2.1 → 0.3.2
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 +1 -1
- data/lib/rdf/lmdb/version.rb +1 -1
- data/lib/rdf/lmdb.rb +57 -14
- data/rdf-lmdb.gemspec +9 -9
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea35cfcc72e22d7a71f047728b412575ce712691c2815a3693d23f94909a78b2
|
4
|
+
data.tar.gz: ab6e65528c0b9bc70bf4d18a7f47b2f47206dbfd1d09aa99c4551a799694b3a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 483d8b372297ee978595110432dd21170cd34fafde285b7f0f1269fea9d5d06428066b19e8e9b6cf294c6e71dbf378e1b30e37215e36810fae19dd6ebbeda5fc
|
7
|
+
data.tar.gz: 20fac6ce5e493fa10ef923bd12e0e549e33b83a46f859b623f5fe5838ab42348ec1ef67884bfbe7baaa396ae1937a6bb3256897f86e8fd0343b0705ac2ed423d
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# RDF::LMDB - Lightweight, persistent, transactional RDF store
|
2
2
|
|
3
|
-
This library implements `RDF::Repository` using the
|
3
|
+
This library implements `RDF::Repository` using the Symas Lightning
|
4
4
|
MDB key-value database. It is intended to be a basic, durable,
|
5
5
|
locally-attached quad store, that avails itself of the properties of
|
6
6
|
LMDB.
|
data/lib/rdf/lmdb/version.rb
CHANGED
data/lib/rdf/lmdb.rb
CHANGED
@@ -65,13 +65,13 @@ module RDF
|
|
65
65
|
def initialize repository,
|
66
66
|
graph_name: nil, mutable: false, **options, &block
|
67
67
|
@repository = repository
|
68
|
-
@snapshot =
|
68
|
+
@snapshot =
|
69
69
|
repository.supports?(:snapshots) ? repository.snapshot : repository
|
70
70
|
@options = options.dup
|
71
71
|
@mutable = mutable
|
72
72
|
@graph_name = graph_name
|
73
73
|
|
74
|
-
raise TransactionError,
|
74
|
+
raise TransactionError,
|
75
75
|
'Tried to open a mutable transaction on an immutable repository' if
|
76
76
|
@mutable && !@repository.mutable?
|
77
77
|
|
@@ -110,11 +110,20 @@ module RDF
|
|
110
110
|
|
111
111
|
#
|
112
112
|
# RDF::LMDB::Repository implements a lightweight, transactional,
|
113
|
-
# locally-attached data store using
|
113
|
+
# locally-attached data store using Symas LMDB.
|
114
114
|
#
|
115
115
|
class Repository < ::RDF::Repository
|
116
116
|
private
|
117
117
|
|
118
|
+
# for the mapsize parameter
|
119
|
+
UNITS = { nil => 1 }
|
120
|
+
'kmgtpe'.split('').each_with_index do |x, i|
|
121
|
+
j = i + 1
|
122
|
+
UNITS[x] = 1000 ** j
|
123
|
+
UNITS[x.upcase] = 1024 ** j
|
124
|
+
end
|
125
|
+
UNITS.freeze
|
126
|
+
|
118
127
|
DEFAULT_TX_CLASS = RDF::LMDB::Transaction
|
119
128
|
|
120
129
|
SUPPORTS = %i[
|
@@ -126,10 +135,20 @@ module RDF
|
|
126
135
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
|
127
136
|
].pack('H*').freeze
|
128
137
|
|
138
|
+
def int_bytes bytes
|
139
|
+
m = /\A\s*(\d+)([kmgtpeKMGTPE])?\s*\Z/s.match bytes.to_s
|
140
|
+
raise ArgumentError, "#{bytes} not a viable byte size" unless m
|
141
|
+
|
142
|
+
factor, unit = m.captures
|
143
|
+
factor.to_i * UNITS[unit]
|
144
|
+
end
|
145
|
+
|
129
146
|
def init_lmdb dir, **options
|
130
147
|
dir = Pathname(dir).expand_path
|
131
148
|
dir.mkdir unless dir.exist?
|
132
149
|
|
150
|
+
options[:mapsize] = int_bytes options[:mapsize] if options[:mapsize]
|
151
|
+
|
133
152
|
# fire up the environment
|
134
153
|
@lmdb = ::LMDB.new dir, **options
|
135
154
|
|
@@ -198,7 +217,7 @@ Currently you have to dump from the old layout and reload the new one. Sorry!
|
|
198
217
|
|
199
218
|
def int_for term
|
200
219
|
case term
|
201
|
-
when nil then 0
|
220
|
+
when nil, RDF::Query::Variable then 0
|
202
221
|
when RDF::Statement
|
203
222
|
terms = term.to_a.map { |t| int_for t }
|
204
223
|
return if terms.include? nil # the statement implicitly not here
|
@@ -420,7 +439,7 @@ Currently you have to dump from the old layout and reload the new one. Sorry!
|
|
420
439
|
seq = []
|
421
440
|
out = string.unpack('J*').map do |i|
|
422
441
|
seq << i
|
423
|
-
j = resolve_term(i, cache: cache, write: write)
|
442
|
+
j = resolve_term(i, cache: cache, write: write)
|
424
443
|
[i, j]
|
425
444
|
end.to_h
|
426
445
|
|
@@ -518,7 +537,7 @@ Currently you have to dump from the old layout and reload the new one. Sorry!
|
|
518
537
|
|
519
538
|
# warn thash.inspect, ihash.inspect
|
520
539
|
|
521
|
-
# note
|
540
|
+
# note
|
522
541
|
if gint = ihash[:graph_name]
|
523
542
|
gpack = [gint].pack ?J
|
524
543
|
return unless @dbs[:stmt2g].has? spack, gpack
|
@@ -669,8 +688,18 @@ Currently you have to dump from the old layout and reload the new one. Sorry!
|
|
669
688
|
end
|
670
689
|
|
671
690
|
def delete_statement statement
|
691
|
+
# note that this does not get called by `delete_statements`,
|
692
|
+
# because we want the transaction on the outside.
|
672
693
|
complete! statement
|
673
|
-
|
694
|
+
# warn "WTF LOL #{statement.inspect}"
|
695
|
+
@lmdb.transaction do |t|
|
696
|
+
if statement.variable?
|
697
|
+
query(statement).each { |stmt| rm_one stmt }
|
698
|
+
else
|
699
|
+
rm_one statement
|
700
|
+
end
|
701
|
+
t.commit
|
702
|
+
end
|
674
703
|
nil
|
675
704
|
end
|
676
705
|
|
@@ -688,12 +717,25 @@ Currently you have to dump from the old layout and reload the new one. Sorry!
|
|
688
717
|
def delete_statements statements
|
689
718
|
@lmdb.transaction do |t|
|
690
719
|
hashes = []
|
691
|
-
|
692
|
-
|
693
|
-
|
720
|
+
|
721
|
+
# we don't know what's in here but it may contain statements
|
722
|
+
# with variables, in which case we have to handle them
|
723
|
+
enums = [statements]
|
724
|
+
# also note that RDF::Util::Coercions#coerce_statements
|
725
|
+
# which is called in advance of this is supposed to take
|
726
|
+
# care of this situation but doesn't for some reason.
|
727
|
+
until enums.empty?
|
728
|
+
statements = enums.shift
|
729
|
+
statements.each do |statement|
|
730
|
+
if statement.variable?
|
731
|
+
enums << query(statement)
|
732
|
+
else
|
733
|
+
hashes += rm_one statement, scan: false
|
734
|
+
end
|
735
|
+
end
|
694
736
|
end
|
695
737
|
|
696
|
-
clean_terms hashes
|
738
|
+
clean_terms hashes.uniq
|
697
739
|
t.commit
|
698
740
|
end
|
699
741
|
|
@@ -792,7 +834,8 @@ Currently you have to dump from the old layout and reload the new one. Sorry!
|
|
792
834
|
# end
|
793
835
|
|
794
836
|
def delete_insert deletes, inserts
|
795
|
-
ret =
|
837
|
+
ret = nil
|
838
|
+
@lmdb.transaction { ret = super(deletes, inserts) }
|
796
839
|
commit_transaction # this is to satiate the test suite
|
797
840
|
ret
|
798
841
|
end
|
@@ -835,7 +878,7 @@ Currently you have to dump from the old layout and reload the new one. Sorry!
|
|
835
878
|
pack = [int].pack ?J
|
836
879
|
@dbs[:s2stmt].has? pack
|
837
880
|
end
|
838
|
-
|
881
|
+
|
839
882
|
def has_predicate? predicate
|
840
883
|
raise ArgumentError, 'predicate must be an RDF::Term' unless
|
841
884
|
predicate.is_a? RDF::Term
|
@@ -843,7 +886,7 @@ Currently you have to dump from the old layout and reload the new one. Sorry!
|
|
843
886
|
pack = [int].pack ?J
|
844
887
|
@dbs[:p2stmt].has? pack
|
845
888
|
end
|
846
|
-
|
889
|
+
|
847
890
|
def has_object? object
|
848
891
|
raise ArgumentError, 'object must be an RDF::Term' unless
|
849
892
|
object.is_a? RDF::Term
|
data/rdf-lmdb.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['code@doriantaylor.com']
|
11
11
|
spec.license = 'Apache-2.0'
|
12
12
|
spec.homepage = 'https://github.com/doriantaylor/rb-rdf-lmdb'
|
13
|
-
spec.summary = '
|
13
|
+
spec.summary = 'Symas LMDB back-end for RDF::Repository'
|
14
14
|
spec.description = <<-DESC
|
15
15
|
This module implements RDF::Repository on top of LMDB, a fast and
|
16
16
|
robust key-value store.
|
@@ -25,16 +25,16 @@ robust key-value store.
|
|
25
25
|
spec.require_paths = ["lib"]
|
26
26
|
|
27
27
|
# ruby
|
28
|
-
spec.required_ruby_version = '
|
28
|
+
spec.required_ruby_version = '>= 2.0'
|
29
29
|
|
30
30
|
# dev/test dependencies
|
31
|
-
spec.add_development_dependency 'bundler', '~> 2
|
32
|
-
spec.add_development_dependency 'rake', '~> 13
|
33
|
-
spec.add_development_dependency 'rspec', '~> 3
|
34
|
-
spec.add_development_dependency 'rdf-spec', '~> 3
|
31
|
+
spec.add_development_dependency 'bundler', '~> 2'
|
32
|
+
spec.add_development_dependency 'rake', '~> 13'
|
33
|
+
spec.add_development_dependency 'rspec', '~> 3'
|
34
|
+
spec.add_development_dependency 'rdf-spec', '~> 3'
|
35
35
|
|
36
36
|
# stuff we use
|
37
|
-
spec.add_runtime_dependency 'unf', '~> 0.1
|
38
|
-
spec.add_runtime_dependency 'rdf', '~> 3
|
39
|
-
spec.add_runtime_dependency 'lmdb', '~> 0.
|
37
|
+
spec.add_runtime_dependency 'unf', '~> 0.1'
|
38
|
+
spec.add_runtime_dependency 'rdf', '~> 3'
|
39
|
+
spec.add_runtime_dependency 'lmdb', '~> 0.6.1'
|
40
40
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-lmdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dorian Taylor
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,98 +16,98 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2
|
19
|
+
version: '2'
|
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: '2
|
26
|
+
version: '2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '13
|
33
|
+
version: '13'
|
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: '13
|
40
|
+
version: '13'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3
|
47
|
+
version: '3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3
|
54
|
+
version: '3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rdf-spec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3
|
61
|
+
version: '3'
|
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: '3
|
68
|
+
version: '3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: unf
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.1
|
75
|
+
version: '0.1'
|
76
76
|
type: :runtime
|
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: 0.1
|
82
|
+
version: '0.1'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rdf
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 3
|
89
|
+
version: '3'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 3
|
96
|
+
version: '3'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: lmdb
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
103
|
+
version: 0.6.1
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
110
|
+
version: 0.6.1
|
111
111
|
description: |
|
112
112
|
This module implements RDF::Repository on top of LMDB, a fast and
|
113
113
|
robust key-value store.
|
@@ -134,13 +134,13 @@ homepage: https://github.com/doriantaylor/rb-rdf-lmdb
|
|
134
134
|
licenses:
|
135
135
|
- Apache-2.0
|
136
136
|
metadata: {}
|
137
|
-
post_install_message:
|
137
|
+
post_install_message:
|
138
138
|
rdoc_options: []
|
139
139
|
require_paths:
|
140
140
|
- lib
|
141
141
|
required_ruby_version: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '2.0'
|
146
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
@@ -149,8 +149,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: '0'
|
151
151
|
requirements: []
|
152
|
-
rubygems_version: 3.
|
153
|
-
signing_key:
|
152
|
+
rubygems_version: 3.3.15
|
153
|
+
signing_key:
|
154
154
|
specification_version: 4
|
155
|
-
summary:
|
155
|
+
summary: Symas LMDB back-end for RDF::Repository
|
156
156
|
test_files: []
|