lmdb 0.5.3 → 0.6.1

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTORS +1 -0
  3. data/Rakefile +9 -0
  4. data/behaviour.org +35 -0
  5. data/ext/lmdb_ext/extconf.rb +8 -3
  6. data/ext/lmdb_ext/lmdb_ext.c +314 -200
  7. data/ext/lmdb_ext/lmdb_ext.h +19 -3
  8. data/lib/lmdb/database.rb +9 -8
  9. data/lib/lmdb/version.rb +1 -1
  10. data/lmdb.gemspec +5 -4
  11. data/spec/helper.rb +3 -0
  12. data/{ext/lmdb_ext → vendor/libraries}/liblmdb/.gitignore +8 -0
  13. data/{ext/lmdb_ext → vendor/libraries}/liblmdb/COPYRIGHT +1 -1
  14. data/vendor/libraries/liblmdb/Doxyfile +1631 -0
  15. data/{ext/lmdb_ext → vendor/libraries}/liblmdb/LICENSE +0 -0
  16. data/vendor/libraries/liblmdb/Makefile +118 -0
  17. data/vendor/libraries/liblmdb/intro.doc +192 -0
  18. data/{ext/lmdb_ext → vendor/libraries}/liblmdb/lmdb.h +161 -61
  19. data/{ext/lmdb_ext → vendor/libraries}/liblmdb/mdb.c +3244 -1302
  20. data/vendor/libraries/liblmdb/mdb_copy.1 +61 -0
  21. data/vendor/libraries/liblmdb/mdb_copy.c +84 -0
  22. data/vendor/libraries/liblmdb/mdb_drop.1 +40 -0
  23. data/vendor/libraries/liblmdb/mdb_drop.c +135 -0
  24. data/vendor/libraries/liblmdb/mdb_dump.1 +81 -0
  25. data/vendor/libraries/liblmdb/mdb_dump.c +319 -0
  26. data/vendor/libraries/liblmdb/mdb_load.1 +84 -0
  27. data/vendor/libraries/liblmdb/mdb_load.c +492 -0
  28. data/vendor/libraries/liblmdb/mdb_stat.1 +70 -0
  29. data/vendor/libraries/liblmdb/mdb_stat.c +264 -0
  30. data/{ext/lmdb_ext → vendor/libraries}/liblmdb/midl.c +66 -5
  31. data/{ext/lmdb_ext → vendor/libraries}/liblmdb/midl.h +19 -5
  32. data/vendor/libraries/liblmdb/mtest.c +177 -0
  33. data/vendor/libraries/liblmdb/mtest2.c +124 -0
  34. data/vendor/libraries/liblmdb/mtest3.c +133 -0
  35. data/vendor/libraries/liblmdb/mtest4.c +168 -0
  36. data/vendor/libraries/liblmdb/mtest5.c +135 -0
  37. data/vendor/libraries/liblmdb/mtest6.c +141 -0
  38. data/vendor/libraries/liblmdb/sample-bdb.txt +73 -0
  39. data/vendor/libraries/liblmdb/sample-mdb.txt +62 -0
  40. data/vendor/libraries/liblmdb/tooltag +27 -0
  41. metadata +53 -18
  42. data/.gitignore +0 -13
  43. data/.travis.yml +0 -14
  44. data/ext/lmdb_ext/liblmdb/CHANGES +0 -112
@@ -47,19 +47,35 @@
47
47
  Data_Get_Struct(var, Cursor, var_cur); \
48
48
  cursor_check(var_cur)
49
49
 
50
+ /*
51
+ hey yo if you can convince hyc to add a function like
52
+ mdb_txn_get_flags or even mdb_txn_is_rdonly, you could probably get
53
+ rid of these wrapper structs and a lot of complexity, cause that is
54
+ literally the only reason why they're needed
55
+
56
+ actually no we would also need to know when a txn has a child and
57
+ there is also no mdb_txn_get_child or whatever
58
+ */
59
+
50
60
  typedef struct {
51
61
  VALUE env;
52
- VALUE parent;
62
+ VALUE parent; // ignored for ro threads
63
+ VALUE child; // ditto
53
64
  VALUE thread;
54
65
  VALUE cursors;
55
66
  MDB_txn* txn;
56
67
  unsigned int flags;
57
68
  } Transaction;
58
69
 
70
+ // we have an extra field `rw_txn_thread` here that acts as the
71
+ // registry for the single read-write transaction. if it's populated,
72
+ // that's the one
73
+
59
74
  typedef struct {
60
75
  MDB_env* env;
61
- VALUE thread_txn_hash;
62
- VALUE txn_thread_hash;
76
+ VALUE thread_txn_hash; /* transaction -> thread */
77
+ VALUE txn_thread_hash; /* thread -> transaction */
78
+ VALUE rw_txn_thread; /* the thread with the rw transaction */
63
79
  } Environment;
64
80
 
65
81
  typedef struct {
data/lib/lmdb/database.rb CHANGED
@@ -11,8 +11,8 @@ module LMDB
11
11
  # puts "at #{key}: #{value}"
12
12
  # end
13
13
  def each
14
- # maybe_txn true do
15
- env.transaction do
14
+ maybe_txn true do
15
+ # env.transaction do
16
16
  cursor do |c|
17
17
  while i = c.next
18
18
  yield(i)
@@ -56,8 +56,8 @@ module LMDB
56
56
  # @return [Enumerator] in lieu of a block.
57
57
  def each_key(&block)
58
58
  return enum_for :each_key unless block_given?
59
- # maybe_txn true do
60
- env.transaction do
59
+ maybe_txn true do
60
+ #env.transaction do
61
61
  cursor do |c|
62
62
  while (rec = c.next true)
63
63
  yield rec.first
@@ -81,8 +81,8 @@ module LMDB
81
81
  return
82
82
  end
83
83
 
84
- #maybe_txn true do
85
- env.transaction do
84
+ maybe_txn true do
85
+ # env.transaction do
86
86
  cursor do |c|
87
87
  method = :set
88
88
  while rec = c.send(method, key)
@@ -124,8 +124,9 @@ module LMDB
124
124
 
125
125
  ret = false
126
126
  # read-only txn was having trouble being nested inside a read-write
127
- #maybe_txn true do
128
- env.transaction do
127
+ maybe_txn true do
128
+ # env.transaction true do
129
+ # env.transaction do
129
130
  cursor { |c| ret = !!c.set(key, value) }
130
131
  end
131
132
  ret
data/lib/lmdb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module LMDB
2
- VERSION = '0.5.3'.freeze
2
+ VERSION = '0.6.1'.freeze
3
3
  end
data/lmdb.gemspec CHANGED
@@ -9,13 +9,13 @@ Gem::Specification.new do |s|
9
9
  s.date = Date.today.to_s
10
10
  s.licenses = ['MIT']
11
11
  s.summary = 'Ruby bindings to Lightning MDB'
12
- s.email = 'mail@daniel-mendler.de'
13
- s.homepage = 'https://github.com/minad/lmdb'
12
+ s.email = 'code@doriantaylor.com'
13
+ s.homepage = 'https://github.com/doriantaylor/rb-lmdb'
14
14
  s.description = 'lmdb is a Ruby binding to OpenLDAP Lightning MDB.'
15
- s.authors = ['Daniel Mendler']
15
+ s.authors = ['Daniel Mendler', 'Dorian Taylor']
16
16
  s.extensions = Dir['ext/**/extconf.rb']
17
17
 
18
- s.files = `git ls-files`.split("\n")
18
+ s.files = `git ls-files --recurse-submodules -- *`.split("\n")
19
19
  s.test_files = `git ls-files -- spec/*`.split("\n")
20
20
  s.require_paths = ['lib']
21
21
 
@@ -23,4 +23,5 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency 'rake', "~> 13.0"
24
24
  s.add_development_dependency 'rake-compiler', '~> 1.1'
25
25
  s.add_development_dependency 'rspec', "~> 3.0"
26
+ s.add_development_dependency 'ruby_memcheck', "~> 1.0"
26
27
  end
data/spec/helper.rb CHANGED
@@ -2,6 +2,9 @@ require 'lmdb'
2
2
  require 'rspec'
3
3
  require 'fileutils'
4
4
 
5
+ # for valgrind
6
+ at_exit { GC.start }
7
+
5
8
  SPEC_ROOT = File.dirname(__FILE__)
6
9
  TEMP_ROOT = File.join(SPEC_ROOT, 'tmp')
7
10
 
@@ -3,12 +3,20 @@ mtest[23456]
3
3
  testdb
4
4
  mdb_copy
5
5
  mdb_stat
6
+ mdb_dump
7
+ mdb_load
8
+ mdb_drop
9
+ *.lo
6
10
  *.[ao]
7
11
  *.so
12
+ *.exe
8
13
  *[~#]
9
14
  *.bak
10
15
  *.orig
11
16
  *.rej
17
+ *.gcov
18
+ *.gcda
19
+ *.gcno
12
20
  core
13
21
  core.*
14
22
  valgrind.*
@@ -1,4 +1,4 @@
1
- Copyright 2011-2014 Howard Chu, Symas Corp.
1
+ Copyright 2011-2021 Howard Chu, Symas Corp.
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without