rufus-tokyo 0.1.11 → 0.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.
data/CHANGELOG.txt CHANGED
@@ -2,6 +2,14 @@
2
2
  = rufus-tokyo CHANGELOG.txt
3
3
 
4
4
 
5
+ == rufus-tokyo - 0.1.12 released 2009/04/07
6
+
7
+ - todo : added ext method for calling embedded Lua function (Tyrant)
8
+ - todo : added transaction support for Rufus::Tokyo::Cabinet
9
+ - todo : mimicking query.count in rufus/edo
10
+ - todo : implemented query.count (TC 1.4.12 and TT 1.1.20 only) rufus/tokyo
11
+
12
+
5
13
  == rufus-tokyo - 0.1.11 released 2009/03/25
6
14
 
7
15
  - todo : autodetecting /usr/lib/libtokyocabinet.so and
data/TODO.txt CHANGED
@@ -9,6 +9,9 @@
9
9
  [x] edo : tran
10
10
  [ ] bench ux socket
11
11
 
12
+ [ ] TT (TC) call [lua] function
13
+ [ ] queryout
14
+
12
15
  [ ] impl lget/lput/ldelete in Rufus::Edo::Cabinet
13
16
 
14
17
  [ ] maybe supported different libs for migrations...
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  require 'rufus/tokyo/hmethods'
32
27
  require 'rufus/tokyo/transactions'
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  require 'tokyocabinet' # gem install careo-tokyocabinet
32
27
 
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  require 'tokyocabinet'
32
27
 
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  module Rufus
32
27
  module Edo
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,20 +18,16 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  require 'tokyotyrant' # gem install careo-tokyotyrant
32
27
 
33
28
  require 'rufus/edo/error'
34
29
  require 'rufus/edo/cabcore'
35
- require 'rufus/tokyo/stats'
30
+ require 'rufus/tokyo/ttcommons'
36
31
 
37
32
 
38
33
  module Rufus::Edo
@@ -48,11 +43,10 @@ module Rufus::Edo
48
43
  class NetTyrant
49
44
 
50
45
  include Rufus::Edo::CabinetCore
51
- include Rufus::Tokyo::TyrantStats
46
+ include Rufus::Tokyo::TyrantCommons
52
47
 
53
48
  attr_reader :host, :port
54
49
 
55
- #
56
50
  # Connects to a given Tokyo Tyrant server.
57
51
  #
58
52
  # Note that if the port is not specified, the host parameter is expected
@@ -92,7 +86,6 @@ module Rufus::Edo
92
86
  end
93
87
  end
94
88
 
95
- #
96
89
  # Returns the 'weight' of the db (in bytes)
97
90
  #
98
91
  def weight
@@ -100,7 +93,6 @@ module Rufus::Edo
100
93
  self.stat['size']
101
94
  end
102
95
 
103
- #
104
96
  # isn't that a bit dangerous ? it creates a file on the server...
105
97
  #
106
98
  # DISABLED.
@@ -111,7 +103,6 @@ module Rufus::Edo
111
103
  raise 'not allowed to create files on the server'
112
104
  end
113
105
 
114
- #
115
106
  # Copies the current cabinet to a new file.
116
107
  #
117
108
  # Does it by copying each entry afresh to the target file. Spares some
@@ -122,7 +113,6 @@ module Rufus::Edo
122
113
  raise NotImplementedError.new('not creating files locally')
123
114
  end
124
115
 
125
- #
126
116
  # Deletes all the entries whose keys begin with the given prefix
127
117
  #
128
118
  def delete_keys_with_prefix (prefix)
@@ -131,7 +121,6 @@ module Rufus::Edo
131
121
  nil
132
122
  end
133
123
 
134
- #
135
124
  # Given a list of keys, returns a Hash { key => value } of the
136
125
  # matching entries (in one sweep).
137
126
  #
@@ -140,7 +129,6 @@ module Rufus::Edo
140
129
  Hash[*@db.misc('getlist', keys)]
141
130
  end
142
131
 
143
- #
144
132
  # Merges the given hash into this Tyrant and returns self.
145
133
  #
146
134
  def merge! (hash)
@@ -150,7 +138,6 @@ module Rufus::Edo
150
138
  end
151
139
  alias :lput :merge!
152
140
 
153
- #
154
141
  # Given a list of keys, deletes all the matching entries (in one sweep).
155
142
  #
156
143
  def ldelete (keys)
@@ -159,6 +146,20 @@ module Rufus::Edo
159
146
  nil
160
147
  end
161
148
 
149
+ # Calls a lua embedded function
150
+ # (http://tokyocabinet.sourceforge.net/tyrantdoc/#luaext)
151
+ #
152
+ # Options are :global_locking and :record_locking
153
+ #
154
+ # Returns the return value of the called function.
155
+ #
156
+ # Nil is returned in case of failure.
157
+ #
158
+ def ext (func_name, key, value, opts={})
159
+
160
+ @db.ext(func_name.to_s, key.to_s, value.to_s, compute_ext_opts(opts))
161
+ end
162
+
162
163
  protected
163
164
 
164
165
  def do_stat #:nodoc#
@@ -27,7 +27,7 @@ require 'tokyotyrant'
27
27
 
28
28
  require 'rufus/edo/error'
29
29
  require 'rufus/edo/tabcore'
30
- require 'rufus/tokyo/stats'
30
+ require 'rufus/tokyo/ttcommons'
31
31
 
32
32
 
33
33
  module Rufus::Edo
@@ -48,7 +48,7 @@ module Rufus::Edo
48
48
  class NetTyrantTable
49
49
 
50
50
  include Rufus::Edo::TableCore
51
- include Rufus::Tokyo::TyrantStats
51
+ include Rufus::Tokyo::TyrantCommons
52
52
 
53
53
  attr_reader :host, :port
54
54
 
@@ -431,7 +431,19 @@ module Rufus::Edo
431
431
  # Runs this query (returns a TableResultSet instance)
432
432
  #
433
433
  def run
434
- TableResultSet.new(@table, @query.search, @opts)
434
+ @last_resultset = TableResultSet.new(@table, @query.search, @opts)
435
+ end
436
+
437
+ #
438
+ # Returns the count of results this query return when last run.
439
+ # Returns 0 if the query was not yet run.
440
+ #
441
+ def count
442
+
443
+ #@query.count
444
+ # not yet implemented by Hirabayashi-san
445
+
446
+ @last_resultset ? @last_resultset.size : 0
435
447
  end
436
448
 
437
449
  #
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,13 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
+
25
+
26
+ require 'rufus/tokyo/transactions'
24
27
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
28
 
31
29
  module Rufus::Tokyo
32
30
 
@@ -53,6 +51,7 @@ module Rufus::Tokyo
53
51
  class Cabinet
54
52
 
55
53
  include HashMethods
54
+ include Transactions
56
55
 
57
56
  #
58
57
  # Creates/opens the cabinet, raises an exception in case of
@@ -396,8 +395,52 @@ module Rufus::Tokyo
396
395
  call_misc('outlist', Rufus::Tokyo::List.new(keys))
397
396
  end
398
397
 
398
+ # Warning : this method is low-level, you probably only need
399
+ # to use #transaction and a block.
400
+ #
401
+ # Direct call for 'transaction begin'.
402
+ #
403
+ def tranbegin
404
+
405
+ check_transaction_support
406
+
407
+ libcall(:tcadbtranbegin)
408
+ end
409
+
410
+ # Warning : this method is low-level, you probably only need
411
+ # to use #transaction and a block.
412
+ #
413
+ # Direct call for 'transaction commit'.
414
+ #
415
+ def trancommit
416
+
417
+ check_transaction_support
418
+
419
+ libcall(:tcadbtrancommit)
420
+ end
421
+
422
+ # Warning : this method is low-level, you probably only need
423
+ # to use #transaction and a block.
424
+ #
425
+ # Direct call for 'transaction abort'.
426
+ #
427
+ def tranabort
428
+
429
+ check_transaction_support
430
+
431
+ libcall(:tcadbtranabort)
432
+ end
433
+
399
434
  protected
400
435
 
436
+ def check_transaction_support
437
+
438
+ raise(TokyoError.new(
439
+ "The version of Tokyo Cabinet you're using doesn't support " +
440
+ "transactions for non-table structures. Upgrade to TC >= 1.4.13.")
441
+ ) unless lib.respond_to?(:tcadbtranbegin)
442
+ end
443
+
401
444
  #
402
445
  # wrapping tcadbmisc or tcrdbmisc
403
446
  # (and taking care of freeing the list_pointer)
@@ -416,10 +459,18 @@ module Rufus::Tokyo
416
459
  end
417
460
  end
418
461
 
462
+ # calls the tcadbmisc function
463
+ #
419
464
  def do_call_misc (function, list_pointer)
420
465
 
421
466
  lib.tcadbmisc(@db, function, list_pointer)
422
467
  end
468
+
469
+ def libcall (lib_method, *args)
470
+
471
+ (eval(%{ lib.#{lib_method}(@db, *args) }) == 1) or \
472
+ raise TokyoError.new("call to #{lib_method} failed")
473
+ end
423
474
  end
424
475
  end
425
476
 
@@ -42,14 +42,17 @@ module Rufus::Tokyo
42
42
  /usr/local/lib/libtokyocabinet.so
43
43
  })
44
44
 
45
- path = paths.find { |path| File.exist?(path) }
45
+ begin
46
46
 
47
- raise(
48
- "didn't find Tokyo Cabinet libs on your system. " +
49
- "Please install Tokyo Cabinet (http://tokyocabinet.sf.net)"
50
- ) unless path
47
+ ffi_lib(*paths)
51
48
 
52
- ffi_lib(path)
49
+ rescue LoadError => le
50
+ raise(
51
+ "didn't find Tokyo Cabinet libs on your system. " +
52
+ "Please install Tokyo Cabinet (http://tokyocabinet.sf.net) " +
53
+ "(see also http://openwferu.rubyforge.org/tokyo.html)"
54
+ )
55
+ end
53
56
 
54
57
  class << self
55
58
  alias :attfunc :attach_function
@@ -97,6 +100,13 @@ module Rufus::Tokyo
97
100
 
98
101
  attfunc :tcadbmisc, [ :pointer, :string, :pointer ], :pointer
99
102
 
103
+ begin # since TC 1.4.13
104
+ attfunc :tcadbtranbegin, [ :pointer ], :int
105
+ attfunc :tcadbtrancommit, [ :pointer ], :int
106
+ attfunc :tcadbtranabort, [ :pointer ], :int
107
+ rescue FFI::NotFoundError => nfe
108
+ end
109
+
100
110
  #
101
111
  # tctdb functions
102
112
  #
@@ -154,7 +164,7 @@ module Rufus::Tokyo
154
164
  attfunc :qry_addcond, :tctdbqryaddcond, [ :pointer, :string, :int, :string ], :void
155
165
  attfunc :qry_setorder, :tctdbqrysetorder, [ :pointer, :string, :int ], :void
156
166
 
157
- begin
167
+ begin # since TC 1.4.10
158
168
  attfunc :qry_setmax, :tctdbqrysetmax, [ :pointer, :int ], :void
159
169
  rescue FFI::NotFoundError => nfe
160
170
  attfunc :qry_setlimit, :tctdbqrysetlimit, [ :pointer, :int, :int ], :void
@@ -162,6 +172,11 @@ module Rufus::Tokyo
162
172
 
163
173
  attfunc :qry_search, :tctdbqrysearch, [ :pointer ], :pointer
164
174
 
175
+ begin # since TC 1.4.12
176
+ attfunc :qry_count, :tctdbqrycount, [ :pointer ], :int
177
+ rescue FFI::NotFoundError => nfe
178
+ end
179
+
165
180
  #
166
181
  # tcmap functions
167
182
  #
@@ -287,6 +287,8 @@ module Rufus::Tokyo
287
287
  #
288
288
  def delete_keys_with_prefix (prefix)
289
289
 
290
+ # TODO : use ...searchout
291
+
290
292
  ks = lib.tab_fwmkeys2(@db, prefix, -1) # -1 for no limit
291
293
  #Rufus::Tokyo::List.new(ks).release.each { |k| self.delete(k) }
292
294
  begin
@@ -335,7 +337,6 @@ module Rufus::Tokyo
335
337
  a
336
338
  end
337
339
 
338
- #
339
340
  # Warning : this method is low-level, you probably only need
340
341
  # to use #transaction and a block.
341
342
  #
@@ -345,7 +346,6 @@ module Rufus::Tokyo
345
346
  libcall(:tctdbtranbegin)
346
347
  end
347
348
 
348
- #
349
349
  # Warning : this method is low-level, you probably only need
350
350
  # to use #transaction and a block.
351
351
  #
@@ -355,7 +355,6 @@ module Rufus::Tokyo
355
355
  libcall(:tctdbtrancommit)
356
356
  end
357
357
 
358
- #
359
358
  # Warning : this method is low-level, you probably only need
360
359
  # to use #transaction and a block.
361
360
  #
@@ -403,7 +402,7 @@ module Rufus::Tokyo
403
402
  err_code = lib.tab_ecode(@db)
404
403
  err_msg = lib.tab_errmsg(err_code)
405
404
 
406
- raise TokyoError, "(err #{err_code}) #{err_msg}"
405
+ raise TokyoError.new("(err #{err_code}) #{err_msg}")
407
406
  end
408
407
  end
409
408
 
@@ -557,7 +556,23 @@ module Rufus::Tokyo
557
556
  # Runs this query (returns a TableResultSet instance)
558
557
  #
559
558
  def run
560
- TableResultSet.new(@table, lib.qry_search(@query), @opts)
559
+
560
+ @last_resultset =
561
+ TableResultSet.new(@table, lib.qry_search(@query), @opts)
562
+ end
563
+
564
+ #
565
+ # Gets the count of records returned by this query.
566
+ #
567
+ # Note : the 'real' impl is only available since TokyoCabinet 1.4.12.
568
+ #
569
+ def count
570
+
571
+ if lib.respond_to?(:qry_count)
572
+ lib.qry_count(@query)
573
+ else
574
+ @last_resultset ? @last_resultset.size : 0
575
+ end
561
576
  end
562
577
 
563
578
  #
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  require 'rufus/tokyo/hmethods'
32
27
 
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  module Rufus
32
27
  module Tokyo
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  module Rufus::Tokyo
32
27
 
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  module Rufus::Tokyo
32
27
 
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  require 'rufus/tokyo'
32
27
 
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  module Rufus
32
27
  module Tokyo
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  module Rufus
32
27
  module Tokyo
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  module Rufus
32
27
  module Tokyo
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,24 +18,19 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  module Rufus
32
27
  module Tokyo
33
28
 
34
29
  #
35
- # Just a handy #stat method for now
30
+ # #stat and #compte_ext_opts, that's all.
36
31
  #
37
- module TyrantStats
32
+ module TyrantCommons
38
33
 
39
- #
40
34
  # Returns a hash of information about the Tokyo Tyrant database (or table)
41
35
  # at the other end of the connection.
42
36
  #
@@ -48,6 +42,17 @@ module Tokyo
48
42
  r
49
43
  }
50
44
  end
45
+
46
+ # Computes the :int option for the "ext" function (triggering
47
+ # tyrant embedded lua functions)
48
+ #
49
+ def compute_ext_opts (opts)
50
+
51
+ r = 0
52
+ r = r | 1 if opts[:record_locking]
53
+ r = r | 2 if opts[:global_locking]
54
+ r
55
+ end
51
56
  end
52
57
  end
53
58
  end
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,16 +18,12 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
- require 'rufus/tokyo/stats'
26
+ require 'rufus/tokyo/ttcommons'
32
27
 
33
28
 
34
29
  module Rufus::Tokyo
@@ -43,11 +38,10 @@ module Rufus::Tokyo
43
38
  #
44
39
  class Tyrant < Cabinet
45
40
 
46
- include TyrantStats
41
+ include TyrantCommons
47
42
 
48
43
  attr_reader :host, :port
49
44
 
50
- #
51
45
  # Connects to a given Tokyo Tyrant server.
52
46
  #
53
47
  # Note that if the port is not specified, the host parameter is expected
@@ -89,14 +83,12 @@ module Rufus::Tokyo
89
83
  end
90
84
  end
91
85
 
92
- #
93
86
  # Using the tyrant lib
94
87
  #
95
88
  def lib
96
89
  TyrantLib
97
90
  end
98
91
 
99
- #
100
92
  # isn't that a bit dangerous ? it creates a file on the server...
101
93
  #
102
94
  # DISABLED.
@@ -106,6 +98,22 @@ module Rufus::Tokyo
106
98
  raise 'not allowed to create files on the server'
107
99
  end
108
100
 
101
+ # Calls a lua embedded function
102
+ # (http://tokyocabinet.sourceforge.net/tyrantdoc/#luaext)
103
+ #
104
+ # Options are :global_locking and :record_locking
105
+ #
106
+ # Returns the return value of the called function.
107
+ #
108
+ # Nil is returned in case of failure.
109
+ #
110
+ def ext (func_name, key, value, opts={})
111
+
112
+ lib.tcrdbext2(
113
+ @db, func_name.to_s, compute_ext_opts(opts), key.to_s, value.to_s
114
+ ) rescue nil
115
+ end
116
+
109
117
  protected
110
118
 
111
119
  def do_call_misc (function, list_pointer)
@@ -114,10 +122,10 @@ module Rufus::Tokyo
114
122
  # opts always to 0 for now
115
123
  end
116
124
 
117
- #
118
125
  # Returns the raw stat string from the Tyrant server.
119
126
  #
120
127
  def do_stat
128
+
121
129
  lib.tcrdbstat(@db)
122
130
  end
123
131
  end
@@ -43,11 +43,18 @@ module Rufus::Tokyo
43
43
  /usr/local/lib/libtokyotyrant.so
44
44
  })
45
45
 
46
- path = paths.find { |path| File.exist?(path) }
46
+ begin
47
+
48
+ ffi_lib(*paths)
47
49
 
48
- raise "Did not find Tokyo Tyrant libraries on your system" unless path
50
+ rescue LoadError => le
51
+ raise(
52
+ "didn't find Tokyo Tyrant libs on your system. " +
53
+ "Please install Tokyo Tyrant (http://tokyocabinet.sf.net) " +
54
+ "(see also http://openwferu.rubyforge.org/tokyo.html)"
55
+ )
56
+ end
49
57
 
50
- ffi_lib(path)
51
58
 
52
59
  class << self
53
60
  alias :attfunc :attach_function
@@ -83,6 +90,8 @@ module Rufus::Tokyo
83
90
  attfunc :abs_fwmkeys2, :tcrdbfwmkeys2, [ :pointer, :string, :int ], :pointer
84
91
  attfunc :tcrdbmisc, [ :pointer, :string, :int, :pointer ], :pointer
85
92
 
93
+ attfunc :tcrdbext2, [ :pointer, :string, :int, :string, :string ], :string
94
+
86
95
  #
87
96
  # table functions
88
97
 
@@ -128,5 +137,10 @@ module Rufus::Tokyo
128
137
  end
129
138
 
130
139
  attfunc :qry_search, :tcrdbqrysearch, [ :pointer ], :pointer
140
+
141
+ begin # since TC 1.4.21
142
+ attfunc :qry_count, :tcrdbqrysearchcount, [ :pointer ], :int
143
+ rescue FFI::NotFoundError => nfe
144
+ end
131
145
  end
132
146
  end
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,16 +18,12 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
- require 'rufus/tokyo/stats'
26
+ require 'rufus/tokyo/ttcommons'
32
27
 
33
28
 
34
29
  module Rufus::Tokyo
@@ -47,7 +42,7 @@ module Rufus::Tokyo
47
42
  #
48
43
  class TyrantTable < Table
49
44
 
50
- include TyrantStats
45
+ include TyrantCommons
51
46
 
52
47
 
53
48
  attr_reader :host, :port
@@ -1,4 +1,3 @@
1
- #
2
1
  #--
3
2
  # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
4
3
  #
@@ -19,14 +18,10 @@
19
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
- #++
23
21
  #
22
+ # Made in Japan.
23
+ #++
24
24
 
25
- #
26
- # "made in Japan"
27
- #
28
- # jmettraux@gmail.com
29
- #
30
25
 
31
26
  require 'rufus/tokyo'
32
27
 
data/lib/rufus/tokyo.rb CHANGED
@@ -29,7 +29,7 @@ require 'ffi' # sudo gem install ffi
29
29
  module Rufus
30
30
  module Tokyo
31
31
 
32
- VERSION = '0.1.11'
32
+ VERSION = '0.1.12'
33
33
 
34
34
  #
35
35
  # A common error class
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rufus-tokyo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-25 00:00:00 +09:00
12
+ date: 2009-04-07 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -52,8 +52,8 @@ files:
52
52
  - lib/rufus/tokyo/dystopia.rb
53
53
  - lib/rufus/tokyo/hmethods.rb
54
54
  - lib/rufus/tokyo/query.rb
55
- - lib/rufus/tokyo/stats.rb
56
55
  - lib/rufus/tokyo/transactions.rb
56
+ - lib/rufus/tokyo/ttcommons.rb
57
57
  - lib/rufus/tokyo/tyrant/abstract.rb
58
58
  - lib/rufus/tokyo/tyrant/lib.rb
59
59
  - lib/rufus/tokyo/tyrant/table.rb