rethinkdb 1.5.0.0 → 1.6.0.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.
- data/lib/func.rb +23 -19
- data/lib/net.rb +27 -6
- data/lib/ql2.pb.rb +101 -9
- metadata +6 -6
data/lib/func.rb
CHANGED
@@ -7,14 +7,23 @@ module RethinkDB
|
|
7
7
|
RQL.new.func(args, body)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
# Offsets of the "optarg" optional arguments hash in respective
|
11
|
+
# methods. Some methods change this depending on whether they're
|
12
|
+
# passed a block -- they take a hash specifying the offset for
|
13
|
+
# each circumstance, instead of an integer. -1 can be supplied to
|
14
|
+
# mean the "last" argument -- whatever argument is specified will
|
15
|
+
# only be removed from the argument list and treated as an optarg
|
16
|
+
# if it's a Hash. A positive value is necessary for functions
|
17
|
+
# that can take a hash for the last non-optarg argument.
|
18
|
+
@@optarg_offsets = {
|
19
|
+
:replace => {:with_block => 0, :without => 1},
|
20
|
+
:update => {:with_block => 0, :without => 1},
|
21
|
+
:insert => 1,
|
22
|
+
:delete => -1,
|
14
23
|
:reduce => -1, :between => -1, :grouped_map_reduce => -1,
|
15
24
|
:table => -1, :table_create => -1,
|
16
25
|
:get_all => -1, :eq_join => -1,
|
17
|
-
:javascript => -1
|
26
|
+
:javascript => -1, :filter => {:with_block => 0, :without => 1}
|
18
27
|
}
|
19
28
|
@@rewrites = {
|
20
29
|
:< => :lt, :<= => :le, :> => :gt, :>= => :ge,
|
@@ -48,11 +57,15 @@ module RethinkDB
|
|
48
57
|
termtype = Term::TermType.values[m.to_s.upcase.to_sym]
|
49
58
|
unbound_if(!termtype, m)
|
50
59
|
|
51
|
-
if (
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
60
|
+
if (opt_offset = @@optarg_offsets[m])
|
61
|
+
if opt_offset.class == Hash
|
62
|
+
opt_offset = opt_offset[b ? :with_block : :without]
|
63
|
+
end
|
64
|
+
# TODO: This should drop the Hash comparison or at least
|
65
|
+
# @@optarg_offsets should stop specifying -1, where possible.
|
66
|
+
# Any time one of these operations is changed to support a
|
67
|
+
# hash argument, we'll have to remember to fix
|
68
|
+
# @@optarg_offsets, otherwise.
|
56
69
|
optargs = a.delete_at(opt_offset) if a[opt_offset].class == Hash
|
57
70
|
end
|
58
71
|
|
@@ -76,15 +89,6 @@ module RethinkDB
|
|
76
89
|
end
|
77
90
|
def groupby(*a, &b); group_by(*a, &b); end
|
78
91
|
|
79
|
-
def optarg_jiggle(args, optarg)
|
80
|
-
if (ind = args.map{|x| x.class == Symbol ? x : nil}.index(optarg))
|
81
|
-
args << {args.delete_at(ind) => true}
|
82
|
-
else
|
83
|
-
args << {}
|
84
|
-
end
|
85
|
-
return args
|
86
|
-
end
|
87
|
-
|
88
92
|
def connect(*args)
|
89
93
|
unbound_if @body
|
90
94
|
Connection.new(*args)
|
data/lib/net.rb
CHANGED
@@ -75,17 +75,26 @@ module RethinkDB
|
|
75
75
|
end
|
76
76
|
|
77
77
|
class Connection
|
78
|
+
def auto_reconnect(x=true)
|
79
|
+
@auto_reconnect = x
|
80
|
+
self
|
81
|
+
end
|
78
82
|
def repl; RQL.set_default_conn self; end
|
79
83
|
|
80
|
-
def initialize(
|
84
|
+
def initialize(opts={})
|
81
85
|
begin
|
82
86
|
@abort_module = ::IRB
|
83
87
|
rescue NameError => e
|
84
88
|
@abort_module = Faux_Abort
|
85
89
|
end
|
90
|
+
|
91
|
+
opts = {:host => opts} if opts.class == String
|
92
|
+
@host = opts[:host] || "localhost"
|
93
|
+
@port = opts[:port] || 28015
|
94
|
+
default_db = opts[:db]
|
95
|
+
@auth_key = opts[:auth_key] || ""
|
96
|
+
|
86
97
|
@@last = self
|
87
|
-
@host = host
|
88
|
-
@port = port
|
89
98
|
@default_opts = default_db ? {:db => RQL.new.db(default_db)} : {}
|
90
99
|
@conn_id = 0
|
91
100
|
reconnect
|
@@ -98,6 +107,7 @@ module RethinkDB
|
|
98
107
|
noreply ? nil : wait(q.token)
|
99
108
|
end
|
100
109
|
def run(msg, opts)
|
110
|
+
reconnect if @auto_reconnect && (!@socket || !@listener)
|
101
111
|
raise RuntimeError, "Error: Connection Closed." if !@socket || !@listener
|
102
112
|
q = Query.new
|
103
113
|
q.type = Query::QueryType::START
|
@@ -135,9 +145,9 @@ module RethinkDB
|
|
135
145
|
end
|
136
146
|
|
137
147
|
def dispatch msg
|
138
|
-
PP.pp msg if $DEBUG
|
148
|
+
# PP.pp msg if $DEBUG
|
139
149
|
payload = msg.serialize_to_string
|
140
|
-
#File.open('sexp_payloads.txt', 'a') {|f| f.write(payload.inspect+"\n")}
|
150
|
+
# File.open('sexp_payloads.txt', 'a') {|f| f.write(payload.inspect+"\n")}
|
141
151
|
send([payload.length].pack('L<') + payload)
|
142
152
|
return msg.token
|
143
153
|
end
|
@@ -172,7 +182,7 @@ module RethinkDB
|
|
172
182
|
end
|
173
183
|
|
174
184
|
@@last = nil
|
175
|
-
@@magic_number =
|
185
|
+
@@magic_number = VersionDummy::Version::V0_2
|
176
186
|
|
177
187
|
def debug_socket; @socket; end
|
178
188
|
|
@@ -212,6 +222,17 @@ module RethinkDB
|
|
212
222
|
end
|
213
223
|
end
|
214
224
|
@socket.write([@@magic_number].pack('L<'))
|
225
|
+
|
226
|
+
@socket.write([@auth_key.size].pack('L<') + @auth_key)
|
227
|
+
response = ""
|
228
|
+
while response[-1..-1] != "\0"
|
229
|
+
response += @socket.read_exn(1)
|
230
|
+
end
|
231
|
+
response = response[0...-1]
|
232
|
+
if response != "SUCCESS"
|
233
|
+
raise RqlRuntimeError,"Server dropped connection with message: \"#{response}\""
|
234
|
+
end
|
235
|
+
|
215
236
|
@listener.terminate if @listener
|
216
237
|
@listener = Thread.new do
|
217
238
|
loop do
|
data/lib/ql2.pb.rb
CHANGED
@@ -10,6 +10,14 @@
|
|
10
10
|
# // little-endian 32-bit integer over the wire raw. This number should
|
11
11
|
# // only be sent once per connection.
|
12
12
|
#
|
13
|
+
# // The magic number shall be followed by an authorization key. The
|
14
|
+
# // first 4 bytes are the length of the key to be sent as a little-endian
|
15
|
+
# // 32-bit integer, followed by the key string. Even if there is no key,
|
16
|
+
# // an empty string should be sent (length 0 and no data). The server will
|
17
|
+
# // then respond with a NULL-terminated string response. "SUCCESS" indicates
|
18
|
+
# // that the connection has been accepted. Any other response indicates an
|
19
|
+
# // error, and the response string should describe the error.
|
20
|
+
#
|
13
21
|
# // Next, for each query you want to send, construct a [Query] protobuf
|
14
22
|
# // and serialize it to a binary blob. Send the blob's size to the
|
15
23
|
# // server encoded as a little-endian 32-bit integer, followed by the
|
@@ -33,6 +41,7 @@
|
|
33
41
|
# // non-conforming protobuf libraries
|
34
42
|
# enum Version {
|
35
43
|
# V0_1 = 0x3f61ba36;
|
44
|
+
# V0_2 = 0x723081e1;
|
36
45
|
# }
|
37
46
|
# }
|
38
47
|
#
|
@@ -211,8 +220,12 @@
|
|
211
220
|
# // Takes some javascript code and executes it.
|
212
221
|
# JAVASCRIPT = 11; // STRING {timeout: !NUMBER} -> DATUM |
|
213
222
|
# // STRING {timeout: !NUMBER} -> Function(*)
|
223
|
+
#
|
214
224
|
# // Takes a string and throws an error with that message.
|
215
|
-
#
|
225
|
+
# // Inside of a `default` block, you can omit the first
|
226
|
+
# // argument to rethrow whatever error you catch (this is most
|
227
|
+
# // useful as an argument to the `default` filter optarg).
|
228
|
+
# ERROR = 12; // STRING -> Error | -> Error
|
216
229
|
# // Takes nothing and returns a reference to the implicit variable.
|
217
230
|
# IMPLICIT_VAR = 13; // -> DATUM
|
218
231
|
#
|
@@ -244,17 +257,39 @@
|
|
244
257
|
# // DATUM Array Ops
|
245
258
|
# // Append a single element to the end of an array (like `snoc`).
|
246
259
|
# APPEND = 29; // ARRAY, DATUM -> ARRAY
|
260
|
+
# // Prepend a single element to the end of an array (like `cons`).
|
261
|
+
# PREPEND = 80; // ARRAY, DATUM -> ARRAY
|
262
|
+
# //Remove the elements of one array from another array.
|
263
|
+
# DIFFERENCE = 95; // ARRAY, ARRAY -> ARRAY
|
264
|
+
#
|
265
|
+
# // DATUM Set Ops
|
266
|
+
# // Set ops work on arrays. They don't use actual sets and thus have
|
267
|
+
# // performance characteristics you would expect from arrays rather than
|
268
|
+
# // from sets. All set operations have the post condition that they
|
269
|
+
# // array they return contains no duplicate values.
|
270
|
+
# SET_INSERT = 88; // ARRAY, DATUM -> ARRAY
|
271
|
+
# SET_INTERSECTION = 89; // ARRAY, ARRAY -> ARRAY
|
272
|
+
# SET_UNION = 90; // ARRAY, ARRAY -> ARRAY
|
273
|
+
# SET_DIFFERENCE = 91; // ARRAY, ARRAY -> ARRAY
|
274
|
+
#
|
247
275
|
# SLICE = 30; // Sequence, NUMBER, NUMBER -> Sequence
|
248
276
|
# SKIP = 70; // Sequence, NUMBER -> Sequence
|
249
277
|
# LIMIT = 71; // Sequence, NUMBER -> Sequence
|
278
|
+
# INDEXES_OF = 87; // Sequence, DATUM -> Sequence | Sequence, Function(1) -> Sequence
|
279
|
+
# CONTAINS = 93; // Sequence, DATUM -> BOOL
|
250
280
|
#
|
251
281
|
# // Stream/Object Ops
|
252
282
|
# // Get a particular attribute out of an object, or map that over a
|
253
283
|
# // sequence.
|
254
284
|
# GETATTR = 31; // OBJECT, STRING -> DATUM
|
255
|
-
# //
|
256
|
-
# //
|
257
|
-
#
|
285
|
+
# // Return an array containing the keys of the object.
|
286
|
+
# KEYS = 94; // OBJECT -> ARRAY
|
287
|
+
# // Check whether an object contains all the specified fields,
|
288
|
+
# // or filters a sequence so that all objects inside of it
|
289
|
+
# // contain all the specified fields.
|
290
|
+
# HAS_FIELDS = 32; // OBJECT, STRING... -> BOOL
|
291
|
+
# // x.with_fields(...) <=> x.has_fields(...).pluck(...)
|
292
|
+
# WITH_FIELDS = 96; // Sequence, STRING... -> Sequence
|
258
293
|
# // Get a subset of an object by selecting some attributes to preserve,
|
259
294
|
# // or map that over a sequence. (Both pick and pluck, polymorphic.)
|
260
295
|
# PLUCK = 33; // Sequence, STRING... -> Sequence | OBJECT, STRING... -> OBJECT
|
@@ -269,15 +304,26 @@
|
|
269
304
|
# BETWEEN = 36; // StreamSelection, DATUM, DATUM, {:index:!STRING} -> StreamSelection
|
270
305
|
# REDUCE = 37; // Sequence, Function(2), {base:DATUM} -> DATUM
|
271
306
|
# MAP = 38; // Sequence, Function(1) -> Sequence
|
272
|
-
#
|
307
|
+
#
|
308
|
+
# // Filter a sequence with either a function or a shortcut
|
309
|
+
# // object (see API docs for details). The body of FILTER is
|
310
|
+
# // wrapped in an implicit `.default(false)`, and you can
|
311
|
+
# // change the default value by specifying the `default`
|
312
|
+
# // optarg. If you make the default `r.error`, all errors
|
313
|
+
# // caught by `default` will be rethrown as if the `default`
|
314
|
+
# // did not exist.
|
315
|
+
# FILTER = 39; // Sequence, Function(1), {default:DATUM} -> Sequence |
|
316
|
+
# // Sequence, OBJECT, {default:DATUM} -> Sequence
|
273
317
|
# // Map a function over a sequence and then concatenate the results together.
|
274
318
|
# CONCATMAP = 40; // Sequence, Function(1) -> Sequence
|
275
319
|
# // Order a sequence based on one or more attributes.
|
276
320
|
# ORDERBY = 41; // Sequence, (!STRING | Ordering)... -> Sequence
|
277
321
|
# // Get all distinct elements of a sequence (like `uniq`).
|
278
322
|
# DISTINCT = 42; // Sequence -> Sequence
|
279
|
-
# // Count the number of elements in a sequence
|
280
|
-
#
|
323
|
+
# // Count the number of elements in a sequence, or only the elements that match
|
324
|
+
# // a given filter.
|
325
|
+
# COUNT = 43; // Sequence -> NUMBER | Sequence, DATUM -> NUMBER | Sequence, Function(1) -> NUMBER
|
326
|
+
# IS_EMPTY = 86; // Sequence -> BOOL
|
281
327
|
# // Take the union of multiple sequences (preserves duplicate elements! (use distinct)).
|
282
328
|
# UNION = 44; // Sequence... -> Sequence
|
283
329
|
# // Get the Nth element of a sequence.
|
@@ -286,7 +332,7 @@
|
|
286
332
|
# // - A function to group the sequence by.
|
287
333
|
# // - A function to map over the groups.
|
288
334
|
# // - A reduction to apply to each of the groups.
|
289
|
-
# GROUPED_MAP_REDUCE = 46; // Sequence, Function(1), Function(1), Function(2), {base:DATUM} ->
|
335
|
+
# GROUPED_MAP_REDUCE = 46; // Sequence, Function(1), Function(1), Function(2), {base:DATUM} -> ARRAY
|
290
336
|
# // Groups a sequence by one or more attributes, and then applies a reduction.
|
291
337
|
# // The third argument is a special object literal giving the kind of operation to be
|
292
338
|
# // performed and any necessary arguments.
|
@@ -301,6 +347,16 @@
|
|
301
347
|
# EQ_JOIN = 50; // Sequence, !STRING, Sequence, {index:!STRING} -> Sequence
|
302
348
|
# ZIP = 72; // Sequence -> Sequence
|
303
349
|
#
|
350
|
+
# // Array Ops
|
351
|
+
# // Insert an element in to an array at a given index.
|
352
|
+
# INSERT_AT = 82; // ARRAY, NUMBER, DATUM -> ARRAY
|
353
|
+
# // Remove an element at a given index from an array.
|
354
|
+
# DELETE_AT = 83; // ARRAY, NUMBER -> ARRAY |
|
355
|
+
# // ARRAY, NUMBER, NUMBER -> ARRAY
|
356
|
+
# // Change the element at a given index of an array.
|
357
|
+
# CHANGE_AT = 84; // ARRAY, NUMBER, DATUM -> ARRAY
|
358
|
+
# // Splice one array in to another array.
|
359
|
+
# SPLICE_AT = 85; // ARRAY, NUMBER, ARRAY -> ARRAY
|
304
360
|
#
|
305
361
|
# // * Type Ops
|
306
362
|
# // Coerces a datum to a named type (e.g. "bool").
|
@@ -423,6 +479,23 @@
|
|
423
479
|
#
|
424
480
|
# // Gets info about anything. INFO is most commonly called on tables.
|
425
481
|
# INFO = 79; // Top -> OBJECT
|
482
|
+
#
|
483
|
+
# // `a.match(b)` returns a match object if the string `a`
|
484
|
+
# // matches the regular expression `b`.
|
485
|
+
# MATCH = 97; // STRING, STRING -> DATUM
|
486
|
+
#
|
487
|
+
# // Select a number of elements from sequence with uniform distribution.
|
488
|
+
# SAMPLE = 81; // Sequence, NUMBER -> Sequence
|
489
|
+
#
|
490
|
+
# // Evaluates its first argument. If that argument returns
|
491
|
+
# // NULL or throws an error related to the absence of an
|
492
|
+
# // expected value (for instance, accessing a non-existent
|
493
|
+
# // field or adding NULL to an integer), DEFAULT will either
|
494
|
+
# // return its second argument or execute it if it's a
|
495
|
+
# // function. If the second argument is a function, it will be
|
496
|
+
# // passed either the text of the error or NULL as its
|
497
|
+
# // argument.
|
498
|
+
# DEFAULT = 92; // Top, Top -> Top
|
426
499
|
# }
|
427
500
|
# optional TermType type = 1;
|
428
501
|
#
|
@@ -498,6 +571,7 @@ class VersionDummy < ::Protobuf::Message
|
|
498
571
|
class Version < ::Protobuf::Enum
|
499
572
|
defined_in __FILE__
|
500
573
|
V0_1 = value(:V0_1, 1063369270)
|
574
|
+
V0_2 = value(:V0_2, 1915781601)
|
501
575
|
end
|
502
576
|
end
|
503
577
|
class Query < ::Protobuf::Message
|
@@ -602,11 +676,21 @@ class Term < ::Protobuf::Message
|
|
602
676
|
DIV = value(:DIV, 27)
|
603
677
|
MOD = value(:MOD, 28)
|
604
678
|
APPEND = value(:APPEND, 29)
|
679
|
+
PREPEND = value(:PREPEND, 80)
|
680
|
+
DIFFERENCE = value(:DIFFERENCE, 95)
|
681
|
+
SET_INSERT = value(:SET_INSERT, 88)
|
682
|
+
SET_INTERSECTION = value(:SET_INTERSECTION, 89)
|
683
|
+
SET_UNION = value(:SET_UNION, 90)
|
684
|
+
SET_DIFFERENCE = value(:SET_DIFFERENCE, 91)
|
605
685
|
SLICE = value(:SLICE, 30)
|
606
686
|
SKIP = value(:SKIP, 70)
|
607
687
|
LIMIT = value(:LIMIT, 71)
|
688
|
+
INDEXES_OF = value(:INDEXES_OF, 87)
|
689
|
+
CONTAINS = value(:CONTAINS, 93)
|
608
690
|
GETATTR = value(:GETATTR, 31)
|
609
|
-
|
691
|
+
KEYS = value(:KEYS, 94)
|
692
|
+
HAS_FIELDS = value(:HAS_FIELDS, 32)
|
693
|
+
WITH_FIELDS = value(:WITH_FIELDS, 96)
|
610
694
|
PLUCK = value(:PLUCK, 33)
|
611
695
|
WITHOUT = value(:WITHOUT, 34)
|
612
696
|
MERGE = value(:MERGE, 35)
|
@@ -618,6 +702,7 @@ class Term < ::Protobuf::Message
|
|
618
702
|
ORDERBY = value(:ORDERBY, 41)
|
619
703
|
DISTINCT = value(:DISTINCT, 42)
|
620
704
|
COUNT = value(:COUNT, 43)
|
705
|
+
IS_EMPTY = value(:IS_EMPTY, 86)
|
621
706
|
UNION = value(:UNION, 44)
|
622
707
|
NTH = value(:NTH, 45)
|
623
708
|
GROUPED_MAP_REDUCE = value(:GROUPED_MAP_REDUCE, 46)
|
@@ -626,6 +711,10 @@ class Term < ::Protobuf::Message
|
|
626
711
|
OUTER_JOIN = value(:OUTER_JOIN, 49)
|
627
712
|
EQ_JOIN = value(:EQ_JOIN, 50)
|
628
713
|
ZIP = value(:ZIP, 72)
|
714
|
+
INSERT_AT = value(:INSERT_AT, 82)
|
715
|
+
DELETE_AT = value(:DELETE_AT, 83)
|
716
|
+
CHANGE_AT = value(:CHANGE_AT, 84)
|
717
|
+
SPLICE_AT = value(:SPLICE_AT, 85)
|
629
718
|
COERCE_TO = value(:COERCE_TO, 51)
|
630
719
|
TYPEOF = value(:TYPEOF, 52)
|
631
720
|
UPDATE = value(:UPDATE, 53)
|
@@ -650,6 +739,9 @@ class Term < ::Protobuf::Message
|
|
650
739
|
ASC = value(:ASC, 73)
|
651
740
|
DESC = value(:DESC, 74)
|
652
741
|
INFO = value(:INFO, 79)
|
742
|
+
MATCH = value(:MATCH, 97)
|
743
|
+
SAMPLE = value(:SAMPLE, 81)
|
744
|
+
DEFAULT = value(:DEFAULT, 92)
|
653
745
|
end
|
654
746
|
optional :TermType, :type, 1
|
655
747
|
optional :Datum, :datum, 2
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rethinkdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 111
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 6
|
9
9
|
- 0
|
10
10
|
- 0
|
11
|
-
version: 1.
|
11
|
+
version: 1.6.0.0
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- RethinkDB Inc.
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-
|
19
|
+
date: 2013-06-13 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: json
|
@@ -55,13 +55,13 @@ extensions: []
|
|
55
55
|
extra_rdoc_files: []
|
56
56
|
|
57
57
|
files:
|
58
|
+
- lib/net.rb
|
58
59
|
- lib/exc.rb
|
59
60
|
- lib/ql2.pb.rb
|
60
61
|
- lib/rethinkdb.rb
|
61
62
|
- lib/rpp.rb
|
62
63
|
- lib/shim.rb
|
63
64
|
- lib/func.rb
|
64
|
-
- lib/net.rb
|
65
65
|
homepage: http://rethinkdb.com
|
66
66
|
licenses:
|
67
67
|
- Apache-2
|
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
requirements: []
|
92
92
|
|
93
93
|
rubyforge_project:
|
94
|
-
rubygems_version: 1.
|
94
|
+
rubygems_version: 1.8.15
|
95
95
|
signing_key:
|
96
96
|
specification_version: 3
|
97
97
|
summary: This package provides the Ruby driver library for the RethinkDB database server.
|