class Arango::AQL

Attributes

batchSize[RW]

DEFINE ===

bindVars[RW]

DEFINE ===

cache[RW]

DEFINE ===

cached[R]
count[RW]

DEFINE ===

database[R]
extra[R]
failOnWarning[R]
fullCount[R]
hasMore[R]
id[R]
idCache[R]
intermediateCommitCount[R]
intermediateCommitSize[R]
maxPlans[R]
maxTransactionSize[R]
maxWarningCount[R]
optimizer_rules[R]
options[RW]

DEFINE ===

profile[R]
quantity[RW]

DEFINE ===

query[RW]

DEFINE ===

result[R]
satelliteSyncWait[R]
server[R]
size[RW]

DEFINE ===

size=[RW]

DEFINE ===

skipInaccessibleCollections[R]
ttl[RW]

DEFINE ===

Public Class Methods

new(query:, database:, count: nil, batchSize: nil, cache: nil, memoryLimit: nil, ttl: nil, bindVars: nil, failOnWarning: nil, profile: nil, maxTransactionSize: nil, skipInaccessibleCollections: nil, maxWarningCount: nil, intermediateCommitCount: nil, satelliteSyncWait: nil, fullCount: nil, intermediateCommitSize: nil, optimizer_rules: nil, maxPlans: nil) click to toggle source
# File lib/AQL.rb, line 9
def initialize(query:, database:, count: nil, batchSize: nil, cache: nil,
  memoryLimit: nil, ttl: nil, bindVars: nil, failOnWarning: nil,
  profile: nil, maxTransactionSize: nil, skipInaccessibleCollections: nil,
  maxWarningCount: nil, intermediateCommitCount: nil,
  satelliteSyncWait: nil, fullCount: nil, intermediateCommitSize: nil,
  optimizer_rules: nil, maxPlans: nil)
  satisfy_class?(query, [String])
  @query = query
  assign_database(database)

  @count       = count
  @batchSize   = batchSize
  @cache       = cache
  @memoryLimit = memoryLimit
  @ttl         = ttl
  @bindVars    = bindVars

  @quantity = nil
  @hasMore  = false
  @id       = ""
  @result   = []
  @options  = {}
  # DEFINE
  ["failOnWarning", "profile", "maxTransactionSize",
  "skipInaccessibleCollections", "maxWarningCount", "intermediateCommitCount",
  "satelliteSyncWait", "fullCount", "intermediateCommitSize",
  "optimizer_rules", "maxPlans"].each do |param_name|
    param = eval(param_name)
    set_option(param, param_name)
    define_singleton_method("#{param_name}=") do |value|
      set_option(value, param_name)
    end
  end
end

Public Instance Methods

destroy() click to toggle source
# File lib/AQL.rb, line 132
def destroy
  @database.request("DELETE", "_api/cursor/#{@id}")
end
execute() click to toggle source

EXECUTE QUERY ===

# File lib/AQL.rb, line 108
def execute
  body = {
    "query":       @query,
    "count":       @count,
    "batchSize":   @batchSize,
    "ttl":         @ttl,
    "cache":       @cache,
    "options":     @options,
    "bindVars":    @bindVars,
    "memoryLimit": @memoryLimit
  }
  result = @database.request("POST", "_api/cursor", body: body)
  return_aql(result)
end
explain() click to toggle source

PROPERTY QUERY ===

# File lib/AQL.rb, line 142
def explain
  body = {
    "query":    @query,
    "options":  @options,
    "bindVars": @bindVars
  }
  @database.request("POST", "_api/explain", body: body)
end
kill() click to toggle source
# File lib/AQL.rb, line 136
def kill
  @database.request("DELETE", "_api/query/#{@id}")
end
next() click to toggle source
# File lib/AQL.rb, line 123
def next
  if @hasMore
    result = @database.request("PUT", "_api/cursor/#{@id}")
    return_aql(result)
  else
    raise Arango::Error.new err::no_other_aql_next, data: {"hasMore": false}
  end
end
parse() click to toggle source
# File lib/AQL.rb, line 151
def parse
  @database.request("POST", "_api/query", body: {"query": @query})
end
to_h() click to toggle source

TO HASH ===

# File lib/AQL.rb, line 68
def to_h
  {
    "query":       @query,
    "result":      @result,
    "count":       @count,
    "quantity":    @quantity,
    "ttl":         @ttl,
    "cache":       @cache,
    "batchSize":   @batchSize,
    "bindVars":    @bindVars,
    "options":     @options,
    "idCache":     @idCache,
    "memoryLimit": @memoryLimit,
    "database":    @database.name
  }.delete_if{|k,v| v.nil?}
end

Private Instance Methods

return_aql(result) click to toggle source

REQUEST ===

# File lib/AQL.rb, line 87
def return_aql(result)
  return result if @server.async != false
  @extra    = result[:extra]
  @cached   = result[:cached]
  @quantity = result[:count]
  @hasMore  = result[:hasMore]
  @id       = result[:id]
  if(result[:result][0].nil? || !result[:result][0].is_a?(Hash) || !result[:result][0].key?(:_key))
    @result = result[:result]
  else
    @result = result[:result].map do |x|
      collection = Arango::Collection.new(name: x[:_id].split("/")[0], database: @database)
      Arango::Document.new(name: x[:_key], collection: collection, body: x)
    end
  end
  return return_directly?(result) ? result: self
end
set_option(attrs, name) click to toggle source
# File lib/AQL.rb, line 54
def set_option(attrs, name)
  @options ||= {}
  instance_variable_set("@#{name}", attrs)
  unless attrs
    name = "optimizer.rules" if name == "optimizer_rules"
    @options[name] = attrs
  end
  @options.delete_if{|k,v| v.nil?}
  @options = nil if @options.empty?
end