rethinkdb 1.7.0.0 → 1.8.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 +8 -6
- data/lib/net.rb +31 -10
- data/lib/ql2.pb.rb +39 -0
- data/lib/rpp.rb +1 -1
- data/lib/shim.rb +46 -8
- metadata +40 -64
data/lib/func.rb
CHANGED
@@ -15,15 +15,19 @@ module RethinkDB
|
|
15
15
|
# only be removed from the argument list and treated as an optarg
|
16
16
|
# if it's a Hash. A positive value is necessary for functions
|
17
17
|
# that can take a hash for the last non-optarg argument.
|
18
|
+
# NOTE: we search for the optarg after we apply the rewrite rules below.
|
19
|
+
# For example we need to use orderby not order_by
|
18
20
|
@@optarg_offsets = {
|
19
21
|
:replace => {:with_block => 0, :without => 1},
|
20
22
|
:update => {:with_block => 0, :without => 1},
|
21
23
|
:insert => 1,
|
22
24
|
:delete => -1,
|
23
|
-
:reduce => -1, :between =>
|
25
|
+
:reduce => -1, :between => 2, :grouped_map_reduce => -1,
|
24
26
|
:table => -1, :table_create => -1,
|
25
27
|
:get_all => -1, :eq_join => -1,
|
26
|
-
:javascript => -1, :filter => {:with_block => 0, :without => 1}
|
28
|
+
:javascript => -1, :filter => {:with_block => 0, :without => 1},
|
29
|
+
:slice => -1, :during => -1, :orderby => -1,
|
30
|
+
:iso8601 => -1
|
27
31
|
}
|
28
32
|
@@rewrites = {
|
29
33
|
:< => :lt, :<= => :le, :> => :gt, :>= => :ge,
|
@@ -130,10 +134,8 @@ module RethinkDB
|
|
130
134
|
elsif ind.class == Symbol || ind.class == String
|
131
135
|
return get_field(ind)
|
132
136
|
elsif ind.class == Range
|
133
|
-
|
134
|
-
|
135
|
-
end
|
136
|
-
return slice(ind.begin, ind.end - (ind.exclude_end? ? 1 : 0))
|
137
|
+
return slice(ind.begin, ind.end, :right_bound =>
|
138
|
+
(ind.exclude_end? ? 'open' : 'closed'))
|
137
139
|
end
|
138
140
|
raise ArgumentError, "[] cannot handle #{ind.inspect} of type #{ind.class}."
|
139
141
|
end
|
data/lib/net.rb
CHANGED
@@ -20,6 +20,12 @@ module RethinkDB
|
|
20
20
|
c, opts = @@default_conn, c if opts.nil? && !c.kind_of?(RethinkDB::Connection)
|
21
21
|
opts = {} if opts.nil?
|
22
22
|
opts = {opts => true} if opts.class != Hash
|
23
|
+
if (tf = opts[:time_format])
|
24
|
+
opts[:time_format] = (tf = tf.to_s)
|
25
|
+
if tf != 'raw' && tf != 'native'
|
26
|
+
raise ArgumentError, "`time_format` must be 'raw' or 'native' (got `#{tf}`)."
|
27
|
+
end
|
28
|
+
end
|
23
29
|
if !c
|
24
30
|
raise ArgumentError, "No connection specified!\n" \
|
25
31
|
"Use `query.run(conn)` or `conn.repl(); query.run`."
|
@@ -46,13 +52,14 @@ module RethinkDB
|
|
46
52
|
(@run ? "" : "\n#{preview}") + ">"
|
47
53
|
end
|
48
54
|
|
49
|
-
def initialize(results, msg, connection, token, more = true) # :nodoc:
|
55
|
+
def initialize(results, msg, connection, opts, token, more = true) # :nodoc:
|
50
56
|
@more = more
|
51
57
|
@results = results
|
52
58
|
@msg = msg
|
53
59
|
@run = false
|
54
60
|
@conn_id = connection.conn_id
|
55
61
|
@conn = connection
|
62
|
+
@opts = opts
|
56
63
|
@token = token
|
57
64
|
end
|
58
65
|
|
@@ -67,7 +74,7 @@ module RethinkDB
|
|
67
74
|
q.type = Query::QueryType::CONTINUE
|
68
75
|
q.token = @token
|
69
76
|
res = @conn.run_internal q
|
70
|
-
@results = Shim.response_to_native(res, @msg)
|
77
|
+
@results = Shim.response_to_native(res, @msg, @opts)
|
71
78
|
if res.type == Response::ResponseType::SUCCESS_SEQUENCE
|
72
79
|
@more = false
|
73
80
|
end
|
@@ -133,11 +140,13 @@ module RethinkDB
|
|
133
140
|
res = run_internal(q, all_opts[:noreply])
|
134
141
|
return res if !res
|
135
142
|
if res.type == Response::ResponseType::SUCCESS_PARTIAL
|
136
|
-
Cursor.new(Shim.response_to_native(res, msg
|
143
|
+
Cursor.new(Shim.response_to_native(res, msg, opts),
|
144
|
+
msg, self, opts, q.token, true)
|
137
145
|
elsif res.type == Response::ResponseType::SUCCESS_SEQUENCE
|
138
|
-
Cursor.new(Shim.response_to_native(res, msg
|
146
|
+
Cursor.new(Shim.response_to_native(res, msg, opts),
|
147
|
+
msg, self, opts, q.token, false)
|
139
148
|
else
|
140
|
-
Shim.response_to_native(res, msg)
|
149
|
+
Shim.response_to_native(res, msg, opts)
|
141
150
|
end
|
142
151
|
end
|
143
152
|
|
@@ -259,11 +268,23 @@ module RethinkDB
|
|
259
268
|
rescue
|
260
269
|
raise RqlRuntimeError, "Bad Protobuf #{response}, server is buggy."
|
261
270
|
end
|
262
|
-
|
263
|
-
@
|
264
|
-
|
265
|
-
|
266
|
-
|
271
|
+
if protob.token == -1
|
272
|
+
@mutex.synchronize do
|
273
|
+
@waiters.keys.each {|k|
|
274
|
+
@data[k] = protob
|
275
|
+
if @waiters[k]
|
276
|
+
cond = @waiters.delete k
|
277
|
+
cond.signal
|
278
|
+
end
|
279
|
+
}
|
280
|
+
end
|
281
|
+
else
|
282
|
+
@mutex.synchronize do
|
283
|
+
@data[protob.token] = protob
|
284
|
+
if @waiters[protob.token]
|
285
|
+
cond = @waiters.delete protob.token
|
286
|
+
cond.signal
|
287
|
+
end
|
267
288
|
end
|
268
289
|
end
|
269
290
|
end
|
data/lib/ql2.pb.rb
CHANGED
@@ -215,6 +215,45 @@ class Term < ::ProtocolBuffers::Message
|
|
215
215
|
SAMPLE = 81
|
216
216
|
DEFAULT = 92
|
217
217
|
JSON = 98
|
218
|
+
ISO8601 = 99
|
219
|
+
TO_ISO8601 = 100
|
220
|
+
EPOCH_TIME = 101
|
221
|
+
TO_EPOCH_TIME = 102
|
222
|
+
NOW = 103
|
223
|
+
IN_TIMEZONE = 104
|
224
|
+
DURING = 105
|
225
|
+
DATE = 106
|
226
|
+
TIME_OF_DAY = 126
|
227
|
+
TIMEZONE = 127
|
228
|
+
YEAR = 128
|
229
|
+
MONTH = 129
|
230
|
+
DAY = 130
|
231
|
+
DAY_OF_WEEK = 131
|
232
|
+
DAY_OF_YEAR = 132
|
233
|
+
HOURS = 133
|
234
|
+
MINUTES = 134
|
235
|
+
SECONDS = 135
|
236
|
+
TIME = 136
|
237
|
+
MONDAY = 107
|
238
|
+
TUESDAY = 108
|
239
|
+
WEDNESDAY = 109
|
240
|
+
THURSDAY = 110
|
241
|
+
FRIDAY = 111
|
242
|
+
SATURDAY = 112
|
243
|
+
SUNDAY = 113
|
244
|
+
JANUARY = 114
|
245
|
+
FEBRUARY = 115
|
246
|
+
MARCH = 116
|
247
|
+
APRIL = 117
|
248
|
+
MAY = 118
|
249
|
+
JUNE = 119
|
250
|
+
JULY = 120
|
251
|
+
AUGUST = 121
|
252
|
+
SEPTEMBER = 122
|
253
|
+
OCTOBER = 123
|
254
|
+
NOVEMBER = 124
|
255
|
+
DECEMBER = 125
|
256
|
+
LITERAL = 137
|
218
257
|
end
|
219
258
|
|
220
259
|
# nested messages
|
data/lib/rpp.rb
CHANGED
data/lib/shim.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'json'
|
2
|
+
require 'time'
|
2
3
|
|
3
4
|
module RethinkDB
|
4
5
|
module Shim
|
5
|
-
def self.datum_to_native
|
6
|
+
def self.datum_to_native(d, opts)
|
6
7
|
raise RqlRuntimeError, "SHENANIGANS" if d.class != Datum
|
7
8
|
dt = Datum::DatumType
|
8
9
|
case d.type
|
@@ -10,13 +11,21 @@ module RethinkDB
|
|
10
11
|
when dt::R_STR then d.r_str
|
11
12
|
when dt::R_BOOL then d.r_bool
|
12
13
|
when dt::R_NULL then nil
|
13
|
-
when dt::R_ARRAY then d.r_array.map{|d2| datum_to_native
|
14
|
-
when dt::R_OBJECT then
|
14
|
+
when dt::R_ARRAY then d.r_array.map{|d2| datum_to_native(d2, opts)}
|
15
|
+
when dt::R_OBJECT then
|
16
|
+
obj = Hash[d.r_object.map{|x| [x.key, datum_to_native(x.val, opts)]}]
|
17
|
+
if obj["$reql_type$"] == "TIME" && opts[:time_format] != 'raw'
|
18
|
+
t = Time.at(obj['epoch_time'])
|
19
|
+
tz = obj['timezone']
|
20
|
+
(tz && tz != "" && tz != "Z") ? t.getlocal(tz) : t.utc
|
21
|
+
else
|
22
|
+
obj
|
23
|
+
end
|
15
24
|
else raise RqlRuntimeError, "Unimplemented."
|
16
25
|
end
|
17
26
|
end
|
18
27
|
|
19
|
-
def self.response_to_native(r, orig_term)
|
28
|
+
def self.response_to_native(r, orig_term, opts)
|
20
29
|
rt = Response::ResponseType
|
21
30
|
if r.backtrace
|
22
31
|
bt = r.backtrace.frames.map {|x|
|
@@ -28,9 +37,9 @@ module RethinkDB
|
|
28
37
|
|
29
38
|
begin
|
30
39
|
case r.type
|
31
|
-
when rt::SUCCESS_ATOM then datum_to_native(r.response[0])
|
32
|
-
when rt::SUCCESS_PARTIAL then r.response.map{|d| datum_to_native(d)}
|
33
|
-
when rt::SUCCESS_SEQUENCE then r.response.map{|d| datum_to_native(d)}
|
40
|
+
when rt::SUCCESS_ATOM then datum_to_native(r.response[0], opts)
|
41
|
+
when rt::SUCCESS_PARTIAL then r.response.map{|d| datum_to_native(d, opts)}
|
42
|
+
when rt::SUCCESS_SEQUENCE then r.response.map{|d| datum_to_native(d, opts)}
|
34
43
|
when rt::RUNTIME_ERROR then
|
35
44
|
raise RqlRuntimeError, "#{r.response[0].r_str}"
|
36
45
|
when rt::COMPILE_ERROR then # TODO: remove?
|
@@ -82,6 +91,13 @@ module RethinkDB
|
|
82
91
|
return t
|
83
92
|
end
|
84
93
|
|
94
|
+
def timezone_from_offset(offset)
|
95
|
+
raw_offset = offset.abs
|
96
|
+
raw_hours = raw_offset / 3600
|
97
|
+
raw_minutes = (raw_offset / 60) - (raw_hours * 60)
|
98
|
+
return (offset < 0 ? "-" : "+") + sprintf("%02d:%02d", raw_hours, raw_minutes);
|
99
|
+
end
|
100
|
+
|
85
101
|
def fast_expr(x, context, allow_json)
|
86
102
|
return x if x.class == RQL
|
87
103
|
if @@datum_types.include?(x.class)
|
@@ -123,11 +139,33 @@ module RethinkDB
|
|
123
139
|
end
|
124
140
|
end
|
125
141
|
|
142
|
+
def check_depth depth
|
143
|
+
raise RqlRuntimeError, "Maximum expression depth of 20 exceeded." if depth > 20
|
144
|
+
end
|
145
|
+
|
146
|
+
def reql_typify(tree, depth=0)
|
147
|
+
check_depth(depth)
|
148
|
+
case tree
|
149
|
+
when Array
|
150
|
+
return tree.map{|x| reql_typify(x, depth+1)}
|
151
|
+
when Hash
|
152
|
+
return Hash[tree.map{|k,v| [k, reql_typify(v, depth+1)]}]
|
153
|
+
when Time
|
154
|
+
return {
|
155
|
+
'$reql_type$' => 'TIME',
|
156
|
+
'epoch_time' => tree.to_f,
|
157
|
+
'timezone' => timezone_from_offset(tree.utc_offset)
|
158
|
+
}
|
159
|
+
else
|
160
|
+
return tree
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
126
164
|
def expr(x, opts={})
|
127
165
|
allow_json = opts[:allow_json]
|
128
166
|
unbound_if @body
|
129
167
|
context = RPP.sanitize_context(caller)
|
130
|
-
res = fast_expr(x, context, allow_json)
|
168
|
+
res = fast_expr(reql_typify(x), context, allow_json)
|
131
169
|
return res if res.class == RQL
|
132
170
|
return RQL.new(any_to_pb(res, context), nil, context)
|
133
171
|
end
|
metadata
CHANGED
@@ -1,99 +1,75 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rethinkdb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.8.0.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 7
|
9
|
-
- 0
|
10
|
-
- 0
|
11
|
-
version: 1.7.0.0
|
12
6
|
platform: ruby
|
13
|
-
authors:
|
7
|
+
authors:
|
14
8
|
- RethinkDB Inc.
|
15
9
|
autorequire:
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-08-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: json
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &17292480 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: ruby-protocol-buffers
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *17292480
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: ruby-protocol-buffers
|
27
|
+
requirement: &17291140 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 0
|
46
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
47
33
|
type: :runtime
|
48
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *17291140
|
49
36
|
description:
|
50
37
|
email: bugs@rethinkdb.com
|
51
38
|
executables: []
|
52
|
-
|
53
39
|
extensions: []
|
54
|
-
|
55
40
|
extra_rdoc_files: []
|
56
|
-
|
57
|
-
files:
|
41
|
+
files:
|
58
42
|
- lib/exc.rb
|
59
43
|
- lib/ql2.pb.rb
|
60
|
-
- lib/func.rb
|
61
|
-
- lib/net.rb
|
62
44
|
- lib/rethinkdb.rb
|
45
|
+
- lib/net.rb
|
63
46
|
- lib/rpp.rb
|
64
47
|
- lib/shim.rb
|
48
|
+
- lib/func.rb
|
65
49
|
homepage: http://rethinkdb.com
|
66
|
-
licenses:
|
50
|
+
licenses:
|
67
51
|
- Apache-2
|
68
52
|
post_install_message:
|
69
53
|
rdoc_options: []
|
70
|
-
|
71
|
-
require_paths:
|
54
|
+
require_paths:
|
72
55
|
- lib
|
73
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
57
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
|
79
|
-
|
80
|
-
- 0
|
81
|
-
version: "0"
|
82
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.9.0
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
63
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
|
88
|
-
segments:
|
89
|
-
- 0
|
90
|
-
version: "0"
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
91
68
|
requirements: []
|
92
|
-
|
93
69
|
rubyforge_project:
|
94
|
-
rubygems_version: 1.8.
|
70
|
+
rubygems_version: 1.8.11
|
95
71
|
signing_key:
|
96
72
|
specification_version: 3
|
97
|
-
summary: This package provides the Ruby driver library for the RethinkDB database
|
73
|
+
summary: This package provides the Ruby driver library for the RethinkDB database
|
74
|
+
server.
|
98
75
|
test_files: []
|
99
|
-
|