Module: Fauna::Query
Overview
Helpers modeling the FaunaDB Query language.
Helpers are usually used via a concise DSL notation. A DSL block may be used directly with Fauna::Client
client.query { create(ref('classes', 'spells'), { data: { name: 'Magic Missile' } }) }
To build and return an query expression to execute later, use Fauna::Query.expr
Fauna::Query.expr { create(ref('classes', 'spells'), { data: { name: 'Magic Missile' } }) }
Or, you may directly use the helper methods:
Fauna::Query.create(Fauna::Query.ref('classes', 'spells'), { data: { name: 'Magic Missile' } })
Defined Under Namespace
Classes: Expr, QueryDSLContext
Class Method Summary collapse
-
.expr(&block) ⇒ Object
Build a query expression.
Instance Method Summary collapse
-
#add(*numbers) ⇒ Object
An add function.
-
#and_(*booleans) ⇒ Object
An and function.
-
#append(collection, elements) ⇒ Object
An append expression.
-
#casefold(string) ⇒ Object
A casefold function.
-
#concat(strings, separator = nil) ⇒ Object
A concat function.
-
#contains(path, in_) ⇒ Object
A contains function.
-
#count(set, params = {}) ⇒ Object
A count expression.
-
#create(class_ref, params) ⇒ Object
A create expression.
-
#date(string) ⇒ Object
A date expression.
-
#delete(ref) ⇒ Object
A delete expression.
-
#difference(*sets) ⇒ Object
A difference expression.
-
#distinct(set) ⇒ Object
A distinct expression.
-
#divide(*numbers) ⇒ Object
A divide function.
-
#do_(*expressions) ⇒ Object
A do expression.
-
#drop(number, collection) ⇒ Object
A drop expression.
-
#epoch(number, unit) ⇒ Object
An epoch expression.
-
#equals(*values) ⇒ Object
An equals function.
-
#exists(ref, params = {}) ⇒ Object
An exists expression.
-
#filter(collection, lambda_expr = nil, &lambda_block) ⇒ Object
A filter expression.
-
#foreach(collection, lambda_expr = nil, &lambda_block) ⇒ Object
A foreach expression.
-
#get(ref, params = {}) ⇒ Object
A get expression.
-
#gt(*values) ⇒ Object
A greater than function.
-
#gte(*values) ⇒ Object
A greater than or equal function.
-
#identify(ref, password) ⇒ Object
An identify function.
-
#if_(condition, then_, else_) ⇒ Object
An if expression.
-
#insert(ref, ts, action, params) ⇒ Object
An insert expression.
-
#intersection(*sets) ⇒ Object
An intersection expression.
-
#join(source, target_expr = nil, &target_block) ⇒ Object
A join expression.
-
#lambda(&block) ⇒ Object
A lambda expression.
-
#lambda_expr(var, expr) ⇒ Object
A raw lambda expression.
-
#let(vars, expr = nil, &block) ⇒ Object
A let expression.
-
#login(ref, params) ⇒ Object
A login function.
-
#logout(all_tokens) ⇒ Object
A logout function.
-
#lt(*values) ⇒ Object
A less than function.
-
#lte(*values) ⇒ Object
A less than or equal function.
-
#map(collection, lambda_expr = nil, &lambda_block) ⇒ Object
A map expression.
-
#match(index, *terms) ⇒ Object
A match expression.
-
#modulo(*numbers) ⇒ Object
A modulo function.
-
#multiply(*numbers) ⇒ Object
A multiply function.
-
#next_id ⇒ Object
A next_id function.
-
#not_(boolean) ⇒ Object
A not function.
-
#object(fields) ⇒ Object
An object expression.
-
#or_(*booleans) ⇒ Object
An or function.
-
#paginate(set, params = {}) ⇒ Object
A paginate expression.
-
#prepend(collection, elements) ⇒ Object
A prepend expression.
-
#ref(str, id = nil) ⇒ Object
Construct a ref value.
-
#remove(ref, ts, action) ⇒ Object
A remove expression.
-
#replace(ref, params) ⇒ Object
A replace expression.
-
#select(path, from, params = {}) ⇒ Object
A select function.
-
#subtract(*numbers) ⇒ Object
A subtract function.
-
#take(number, collection) ⇒ Object
A take expression.
-
#time(string) ⇒ Object
A time expression.
-
#union(*sets) ⇒ Object
A union expression.
-
#update(ref, params) ⇒ Object
An update expression.
-
#var(name) ⇒ Object
A var expression.
Class Method Details
.expr(&block) ⇒ Object
Build a query expression.
Allows for unscoped calls to Fauna::Query methods within the provided block. The block should return the constructed query expression.
Example: Fauna::Query.expr { add(1, 2, subtract(3, 2)) }
32 33 34 35 36 37 38 |
# File 'lib/fauna/query.rb', line 32 def self.expr(&block) return nil if block.nil? dsl = QueryDSLContext.new Expr.wrap DSLContext.eval_dsl(dsl, &block) end |
Instance Method Details
#add(*numbers) ⇒ Object
An add function
Reference: FaunaDB Miscellaneous Functions
485 486 487 |
# File 'lib/fauna/query.rb', line 485 def add(*numbers) Expr.new add: Expr.wrap_varargs(numbers) end |
#and_(*booleans) ⇒ Object
An and function
Reference: FaunaDB Miscellaneous Functions
557 558 559 |
# File 'lib/fauna/query.rb', line 557 def and_(*booleans) Expr.new and: Expr.wrap_varargs(booleans) end |
#append(collection, elements) ⇒ Object
An append expression
Reference: FaunaDB Collections
232 233 234 |
# File 'lib/fauna/query.rb', line 232 def append(collection, elements) Expr.new append: Expr.wrap(elements), collection: Expr.wrap(collection) end |
#casefold(string) ⇒ Object
A casefold function
Reference: FaunaDB String Functions
417 418 419 |
# File 'lib/fauna/query.rb', line 417 def casefold(string) Expr.new casefold: Expr.wrap(string) end |
#concat(strings, separator = nil) ⇒ Object
A concat function
Reference: FaunaDB String Functions
405 406 407 408 409 410 411 |
# File 'lib/fauna/query.rb', line 405 def concat(strings, separator = nil) if separator.nil? Expr.new concat: Expr.wrap(strings) else Expr.new concat: Expr.wrap(strings), separator: Expr.wrap(separator) end end |
#contains(path, in_) ⇒ Object
A contains function
Reference: FaunaDB Miscellaneous Functions
469 470 471 |
# File 'lib/fauna/query.rb', line 469 def contains(path, in_) Expr.new contains: Expr.wrap(path), in: Expr.wrap(in_) end |
#count(set, params = {}) ⇒ Object
A count expression
Reference: FaunaDB Read functions
266 267 268 |
# File 'lib/fauna/query.rb', line 266 def count(set, params = {}) Expr.new Expr.wrap_values(params).merge(count: Expr.wrap(set)) end |
#create(class_ref, params) ⇒ Object
A create expression
Reference: FaunaDB Write functions
276 277 278 |
# File 'lib/fauna/query.rb', line 276 def create(class_ref, params) Expr.new create: Expr.wrap(class_ref), params: Expr.wrap(params) end |
#date(string) ⇒ Object
A date expression
Reference: FaunaDB Time Functions
443 444 445 |
# File 'lib/fauna/query.rb', line 443 def date(string) Expr.new date: Expr.wrap(string) end |
#delete(ref) ⇒ Object
A delete expression
Reference: FaunaDB Write functions
300 301 302 |
# File 'lib/fauna/query.rb', line 300 def delete(ref) Expr.new delete: Expr.wrap(ref) end |
#difference(*sets) ⇒ Object
A difference expression
Reference: FaunaDB Sets
350 351 352 |
# File 'lib/fauna/query.rb', line 350 def difference(*sets) Expr.new difference: Expr.wrap_varargs(sets) end |
#distinct(set) ⇒ Object
A distinct expression
Reference: FaunaDB Sets
358 359 360 |
# File 'lib/fauna/query.rb', line 358 def distinct(set) Expr.new distinct: Expr.wrap(set) end |
#divide(*numbers) ⇒ Object
A divide function
Reference: FaunaDB Miscellaneous Functions
509 510 511 |
# File 'lib/fauna/query.rb', line 509 def divide(*numbers) Expr.new divide: Expr.wrap_varargs(numbers) end |
#do_(*expressions) ⇒ Object
A do expression
Reference: FaunaDB Basic Forms
117 118 119 |
# File 'lib/fauna/query.rb', line 117 def do_(*expressions) Expr.new do: Expr.wrap_varargs(expressions) end |
#drop(number, collection) ⇒ Object
A drop expression
Reference: FaunaDB Collections
216 217 218 |
# File 'lib/fauna/query.rb', line 216 def drop(number, collection) Expr.new drop: Expr.wrap(number), collection: Expr.wrap(collection) end |
#epoch(number, unit) ⇒ Object
An epoch expression
Reference: FaunaDB Time Functions
435 436 437 |
# File 'lib/fauna/query.rb', line 435 def epoch(number, unit) Expr.new epoch: Expr.wrap(number), unit: Expr.wrap(unit) end |
#equals(*values) ⇒ Object
An equals function
Reference: FaunaDB Miscellaneous Functions
461 462 463 |
# File 'lib/fauna/query.rb', line 461 def equals(*values) Expr.new equals: Expr.wrap_varargs(values) end |
#exists(ref, params = {}) ⇒ Object
An exists expression
Reference: FaunaDB Read functions
258 259 260 |
# File 'lib/fauna/query.rb', line 258 def exists(ref, params = {}) Expr.new Expr.wrap_values(params).merge(exists: Expr.wrap(ref)) end |
#filter(collection, lambda_expr = nil, &lambda_block) ⇒ Object
A filter expression
Only one of lambda_expr
or lambda_block
should be provided. For example: Fauna.query { filter(collection) { |a| equals a, 1 } }
.
Reference: FaunaDB Collections
200 201 202 |
# File 'lib/fauna/query.rb', line 200 def filter(collection, lambda_expr = nil, &lambda_block) Expr.new filter: Expr.wrap(lambda_expr || lambda_block), collection: Expr.wrap(collection) end |
#foreach(collection, lambda_expr = nil, &lambda_block) ⇒ Object
A foreach expression
Only one of lambda_expr
or lambda_block
should be provided. For example: Fauna.query { foreach(collection) { |a| delete a } }
.
Reference: FaunaDB Collections
189 190 191 |
# File 'lib/fauna/query.rb', line 189 def foreach(collection, lambda_expr = nil, &lambda_block) Expr.new foreach: Expr.wrap(lambda_expr || lambda_block), collection: Expr.wrap(collection) end |
#get(ref, params = {}) ⇒ Object
A get expression
Reference: FaunaDB Read functions
242 243 244 |
# File 'lib/fauna/query.rb', line 242 def get(ref, params = {}) Expr.new Expr.wrap_values(params).merge(get: Expr.wrap(ref)) end |
#gt(*values) ⇒ Object
A greater than function
Reference: FaunaDB Miscellaneous Functions
541 542 543 |
# File 'lib/fauna/query.rb', line 541 def gt(*values) Expr.new gt: Expr.wrap_varargs(values) end |
#gte(*values) ⇒ Object
A greater than or equal function
Reference: FaunaDB Miscellaneous Functions
549 550 551 |
# File 'lib/fauna/query.rb', line 549 def gte(*values) Expr.new gte: Expr.wrap_varargs(values) end |
#identify(ref, password) ⇒ Object
An identify function
Reference: FaunaDB Authentication
395 396 397 |
# File 'lib/fauna/query.rb', line 395 def identify(ref, password) Expr.new identify: Expr.wrap(ref), password: Expr.wrap(password) end |
#if_(condition, then_, else_) ⇒ Object
An if expression
Reference: FaunaDB Basic Forms
109 110 111 |
# File 'lib/fauna/query.rb', line 109 def if_(condition, then_, else_) Expr.new if: Expr.wrap(condition), then: Expr.wrap(then_), else: Expr.wrap(else_) end |
#insert(ref, ts, action, params) ⇒ Object
An insert expression
Reference: FaunaDB Write functions
308 309 310 |
# File 'lib/fauna/query.rb', line 308 def insert(ref, ts, action, params) Expr.new insert: Expr.wrap(ref), ts: Expr.wrap(ts), action: Expr.wrap(action), params: Expr.wrap(params) end |
#intersection(*sets) ⇒ Object
An intersection expression
Reference: FaunaDB Sets
342 343 344 |
# File 'lib/fauna/query.rb', line 342 def intersection(*sets) Expr.new intersection: Expr.wrap_varargs(sets) end |
#join(source, target_expr = nil, &target_block) ⇒ Object
A join expression
Only one of target_expr
or target_block
should be provided. For example: Fauna.query { join(source) { |x| match some_index, x } }
.
Reference: FaunaDB Sets
369 370 371 |
# File 'lib/fauna/query.rb', line 369 def join(source, target_expr = nil, &target_block) Expr.new join: Expr.wrap(source), with: Expr.wrap(target_expr || target_block) end |
#lambda(&block) ⇒ Object
A lambda expression
Reference: FaunaDB Basic Forms
This form generates #var objects for you, and is called like:
Query.lambda do |a|
Query.add a, a
end
# Produces: {lambda: :a, expr: {add: [{var: :a}, {var: :a}]}}
Query functions requiring lambdas can be passed blocks without explicitly calling #lambda.
You can also use #lambda_expr and #var directly.
block
-
Takes one or more #var expressions and uses them to construct an expression. If this takes more than one argument, the lambda destructures an array argument. (To destructure single-element arrays use #lambda_expr.)
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/fauna/query.rb', line 140 def lambda(&block) dsl = Query::QueryDSLContext.new vars = block.parameters.map do |kind, name| fail ArgumentError, 'Splat parameters are not supported in lambda expressions.' if kind == :rest name end case vars.length when 0 fail ArgumentError, 'Block must take at least 1 argument.' when 1 # When there's only 1 parameter, don't use an array pattern. lambda_expr vars[0], DSLContext.eval_dsl(dsl, var(vars[0]), &block) else lambda_expr vars, DSLContext.eval_dsl(dsl, *(vars.map { |v| var(v) }), &block) end end |
#lambda_expr(var, expr) ⇒ Object
165 166 167 |
# File 'lib/fauna/query.rb', line 165 def lambda_expr(var, expr) Expr.new lambda: Expr.wrap(var), expr: Expr.wrap(expr) end |
#let(vars, expr = nil, &block) ⇒ Object
A let expression
Only one of expr
or block
should be provided.
Block example: Fauna.query { let(x: 2) { add(1, x) } }
.
Expression example: Fauna.query { let({ x: 2 }, add(1, var(:x))) }
.
Reference: FaunaDB Basic Forms
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/fauna/query.rb', line 79 def let(vars, expr = nil, &block) in_ = if block.nil? expr else dsl = QueryDSLContext.new dslcls = (class << dsl; self; end) vars.keys.each do |v| dslcls.send(:define_method, v) { var(v) } end DSLContext.eval_dsl(dsl, &block) end Expr.new let: Expr.wrap_values(vars), in: Expr.wrap(in_) end |
#login(ref, params) ⇒ Object
A login function
Reference: FaunaDB Authentication
379 380 381 |
# File 'lib/fauna/query.rb', line 379 def login(ref, params) Expr.new login: Expr.wrap(ref), params: Expr.wrap(params) end |
#logout(all_tokens) ⇒ Object
A logout function
Reference: FaunaDB Authentication
387 388 389 |
# File 'lib/fauna/query.rb', line 387 def logout(all_tokens) Expr.new logout: Expr.wrap(all_tokens) end |
#lt(*values) ⇒ Object
A less than function
Reference: FaunaDB Miscellaneous Functions
525 526 527 |
# File 'lib/fauna/query.rb', line 525 def lt(*values) Expr.new lt: Expr.wrap_varargs(values) end |
#lte(*values) ⇒ Object
A less than or equal function
Reference: FaunaDB Miscellaneous Functions
533 534 535 |
# File 'lib/fauna/query.rb', line 533 def lte(*values) Expr.new lte: Expr.wrap_varargs(values) end |
#map(collection, lambda_expr = nil, &lambda_block) ⇒ Object
A map expression
Only one of lambda_expr
or lambda_block
should be provided. For example: Fauna.query { map(collection) { |a| add a, 1 } }
.
Reference: FaunaDB Collections
178 179 180 |
# File 'lib/fauna/query.rb', line 178 def map(collection, lambda_expr = nil, &lambda_block) Expr.new map: Expr.wrap(lambda_expr || lambda_block), collection: Expr.wrap(collection) end |
#match(index, *terms) ⇒ Object
A match expression
Reference: FaunaDB Sets
326 327 328 |
# File 'lib/fauna/query.rb', line 326 def match(index, *terms) Expr.new match: Expr.wrap(index), terms: Expr.wrap_varargs(terms) end |
#modulo(*numbers) ⇒ Object
A modulo function
Reference: FaunaDB Miscellaneous Functions
517 518 519 |
# File 'lib/fauna/query.rb', line 517 def modulo(*numbers) Expr.new modulo: Expr.wrap_varargs(numbers) end |
#multiply(*numbers) ⇒ Object
A multiply function
Reference: FaunaDB Miscellaneous Functions
493 494 495 |
# File 'lib/fauna/query.rb', line 493 def multiply(*numbers) Expr.new multiply: Expr.wrap_varargs(numbers) end |
#next_id ⇒ Object
A next_id function
Reference: FaunaDB Miscellaneous Functions
453 454 455 |
# File 'lib/fauna/query.rb', line 453 def next_id Expr.new next_id: nil end |
#not_(boolean) ⇒ Object
A not function
Reference: FaunaDB Miscellaneous Functions
573 574 575 |
# File 'lib/fauna/query.rb', line 573 def not_(boolean) Expr.new not: Expr.wrap(boolean) end |
#object(fields) ⇒ Object
An object expression
Query expression constructs can also take a regular ruby object, so the following are equivalent:
Fauna.query { { x: 1, y: add(1, 2) } }
Fauna.query { object(x: 1, y: add(1, 2)) }
Reference: FaunaDB Basic Forms
63 64 65 |
# File 'lib/fauna/query.rb', line 63 def object(fields) Expr.new object: Expr.wrap_values(fields) end |
#or_(*booleans) ⇒ Object
An or function
Reference: FaunaDB Miscellaneous Functions
565 566 567 |
# File 'lib/fauna/query.rb', line 565 def or_(*booleans) Expr.new or: Expr.wrap_varargs(booleans) end |
#paginate(set, params = {}) ⇒ Object
A paginate expression
Reference: FaunaDB Read functions
250 251 252 |
# File 'lib/fauna/query.rb', line 250 def paginate(set, params = {}) Expr.new Expr.wrap_values(params).merge(paginate: Expr.wrap(set)) end |
#prepend(collection, elements) ⇒ Object
A prepend expression
Reference: FaunaDB Collections
224 225 226 |
# File 'lib/fauna/query.rb', line 224 def prepend(collection, elements) Expr.new prepend: Expr.wrap(elements), collection: Expr.wrap(collection) end |
#ref(str, id = nil) ⇒ Object
Construct a ref value
Reference: FaunaDB Values
46 47 48 49 50 51 52 |
# File 'lib/fauna/query.rb', line 46 def ref(str, id = nil) if id.nil? Ref.new(str) else Expr.new ref: Expr.wrap(str), id: Expr.wrap(id) end end |
#remove(ref, ts, action) ⇒ Object
A remove expression
Reference: FaunaDB Write functions
316 317 318 |
# File 'lib/fauna/query.rb', line 316 def remove(ref, ts, action) Expr.new remove: Expr.wrap(ref), ts: Expr.wrap(ts), action: Expr.wrap(action) end |
#replace(ref, params) ⇒ Object
A replace expression
Reference: FaunaDB Write functions
292 293 294 |
# File 'lib/fauna/query.rb', line 292 def replace(ref, params) Expr.new replace: Expr.wrap(ref), params: Expr.wrap(params) end |
#select(path, from, params = {}) ⇒ Object
A select function
Reference: FaunaDB Miscellaneous Functions
477 478 479 |
# File 'lib/fauna/query.rb', line 477 def select(path, from, params = {}) Expr.new Expr.wrap_values(params).merge(select: Expr.wrap(path), from: Expr.wrap(from)) end |
#subtract(*numbers) ⇒ Object
A subtract function
Reference: FaunaDB Miscellaneous Functions
501 502 503 |
# File 'lib/fauna/query.rb', line 501 def subtract(*numbers) Expr.new subtract: Expr.wrap_varargs(numbers) end |
#take(number, collection) ⇒ Object
A take expression
Reference: FaunaDB Collections
208 209 210 |
# File 'lib/fauna/query.rb', line 208 def take(number, collection) Expr.new take: Expr.wrap(number), collection: Expr.wrap(collection) end |
#time(string) ⇒ Object
A time expression
Reference: FaunaDB Time Functions
427 428 429 |
# File 'lib/fauna/query.rb', line 427 def time(string) Expr.new time: Expr.wrap(string) end |
#union(*sets) ⇒ Object
A union expression
Reference: FaunaDB Sets
334 335 336 |
# File 'lib/fauna/query.rb', line 334 def union(*sets) Expr.new union: Expr.wrap_varargs(sets) end |
#update(ref, params) ⇒ Object
An update expression
Reference: FaunaDB Write functions
284 285 286 |
# File 'lib/fauna/query.rb', line 284 def update(ref, params) Expr.new update: Expr.wrap(ref), params: Expr.wrap(params) end |
#var(name) ⇒ Object
A var expression
Reference: FaunaDB Basic Forms
101 102 103 |
# File 'lib/fauna/query.rb', line 101 def var(name) Expr.new var: Expr.wrap(name) end |