arango-driver 3.5.0.alpha0
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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +1073 -0
- data/arango_opal.js +15 -0
- data/lib/arango-driver.rb +61 -0
- data/lib/arango.rb +96 -0
- data/lib/arango/aql.rb +188 -0
- data/lib/arango/collection.rb +575 -0
- data/lib/arango/collection/documents.rb +122 -0
- data/lib/arango/collection/edges.rb +149 -0
- data/lib/arango/collection/importing.rb +57 -0
- data/lib/arango/collection/indexes.rb +53 -0
- data/lib/arango/collection/replication.rb +24 -0
- data/lib/arango/collection/user.rb +28 -0
- data/lib/arango/cursor.rb +67 -0
- data/lib/arango/database.rb +188 -0
- data/lib/arango/database/analyzer.rb +21 -0
- data/lib/arango/database/aql_functions.rb +54 -0
- data/lib/arango/database/aql_queries.rb +114 -0
- data/lib/arango/database/aql_query_cache.rb +27 -0
- data/lib/arango/database/collections.rb +100 -0
- data/lib/arango/database/foxx_services.rb +103 -0
- data/lib/arango/database/graph_access.rb +27 -0
- data/lib/arango/database/http_route.rb +9 -0
- data/lib/arango/database/replication.rb +96 -0
- data/lib/arango/database/stream_transactions.rb +25 -0
- data/lib/arango/database/tasks.rb +67 -0
- data/lib/arango/database/transactions.rb +15 -0
- data/lib/arango/database/user.rb +26 -0
- data/lib/arango/database/view_access.rb +37 -0
- data/lib/arango/document.rb +443 -0
- data/lib/arango/edge.rb +164 -0
- data/lib/arango/error.rb +97 -0
- data/lib/arango/error_db.rb +27 -0
- data/lib/arango/foxx.rb +255 -0
- data/lib/arango/graph.rb +202 -0
- data/lib/arango/graph/basics.rb +39 -0
- data/lib/arango/graph/edge_access.rb +56 -0
- data/lib/arango/graph/vertex_access.rb +33 -0
- data/lib/arango/helper/collection_assignment.rb +13 -0
- data/lib/arango/helper/database_assignment.rb +14 -0
- data/lib/arango/helper/request_method.rb +45 -0
- data/lib/arango/helper/return.rb +21 -0
- data/lib/arango/helper/satisfaction.rb +28 -0
- data/lib/arango/helper/server_assignment.rb +13 -0
- data/lib/arango/helper/traversal.rb +12 -0
- data/lib/arango/index.rb +103 -0
- data/lib/arango/replication.rb +231 -0
- data/lib/arango/request.rb +92 -0
- data/lib/arango/request_batch.rb +174 -0
- data/lib/arango/result.rb +130 -0
- data/lib/arango/search_view.rb +23 -0
- data/lib/arango/server.rb +68 -0
- data/lib/arango/server/administration.rb +296 -0
- data/lib/arango/server/agency.rb +23 -0
- data/lib/arango/server/async.rb +51 -0
- data/lib/arango/server/batch.rb +35 -0
- data/lib/arango/server/config.rb +76 -0
- data/lib/arango/server/databases.rb +71 -0
- data/lib/arango/server/monitoring.rb +17 -0
- data/lib/arango/server/opal_support.rb +95 -0
- data/lib/arango/server/tasks.rb +69 -0
- data/lib/arango/server/user.rb +22 -0
- data/lib/arango/task.rb +223 -0
- data/lib/arango/transaction.rb +113 -0
- data/lib/arango/traversal.rb +212 -0
- data/lib/arango/user.rb +174 -0
- data/lib/arango/version.rb +3 -0
- data/lib/arango/vertex.rb +112 -0
- data/lib/arango/view.rb +124 -0
- data/lib/arango/view/basics.rb +25 -0
- metadata +296 -0
@@ -0,0 +1,188 @@
|
|
1
|
+
# === DATABASE ===
|
2
|
+
|
3
|
+
module Arango
|
4
|
+
class Database
|
5
|
+
include Arango::Helper::Satisfaction
|
6
|
+
include Arango::Helper::Return
|
7
|
+
|
8
|
+
include Arango::Database::AQLFunctions
|
9
|
+
include Arango::Database::Collections
|
10
|
+
include Arango::Database::FoxxServices
|
11
|
+
include Arango::Database::GraphAccess
|
12
|
+
include Arango::Database::HTTPRoute
|
13
|
+
include Arango::Database::AQLQueries
|
14
|
+
include Arango::Database::AQLQueryCache
|
15
|
+
include Arango::Database::Replication
|
16
|
+
include Arango::Database::StreamTransactions
|
17
|
+
include Arango::Database::Tasks
|
18
|
+
include Arango::Database::Transactions
|
19
|
+
include Arango::Database::ViewAccess
|
20
|
+
|
21
|
+
class << self
|
22
|
+
# Retrieves all databases.
|
23
|
+
# @param server [Arango::Server]
|
24
|
+
# @return [Array<Arango::Database>]
|
25
|
+
def all(server:)
|
26
|
+
result = server.request(get: '_api/database').result
|
27
|
+
result.map{ |db| Arango::Database.new(db, server: server).reload }
|
28
|
+
end
|
29
|
+
|
30
|
+
# Retrieves all databases the current user can access.
|
31
|
+
# @param server [Arango::Server]
|
32
|
+
# @return [Array<Arango::Database>]
|
33
|
+
def all_user_databases(server:)
|
34
|
+
result = server.request(get: '_api/database/user').result
|
35
|
+
result.map{ |db| Arango::Database.new(db, server: server).reload }
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get database from server.
|
39
|
+
# @param name [String] The name of the database
|
40
|
+
# @param server [Arango::Server]
|
41
|
+
# @return [Arango::Database] The instance of the database.
|
42
|
+
def get(name, server:)
|
43
|
+
Arango::Database.new(name, server: server).reload
|
44
|
+
end
|
45
|
+
alias fetch get
|
46
|
+
alias retrieve get
|
47
|
+
|
48
|
+
# Retrieves a list of all databases.
|
49
|
+
# @param server [Arango::Server]
|
50
|
+
# @return [Array<String>] List of database names.
|
51
|
+
def list(server:)
|
52
|
+
server.request(get: '_api/database').result
|
53
|
+
end
|
54
|
+
|
55
|
+
# Retrieves a list of all databases the current user can access.
|
56
|
+
# @param server [Arango::Server]
|
57
|
+
# @return [Array<String>] List of database names.
|
58
|
+
def list_user_databases(server:)
|
59
|
+
server.request(get: '_api/database/user').result
|
60
|
+
end
|
61
|
+
|
62
|
+
# Removes a database.
|
63
|
+
# @param name [String] The name of the database
|
64
|
+
# @param server [Arango::Server]
|
65
|
+
# @return nil
|
66
|
+
def drop(name, server:)
|
67
|
+
server.request(delete: "_api/database/#{name}")
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
alias delete drop
|
71
|
+
alias destroy drop
|
72
|
+
|
73
|
+
# Check if database exists.
|
74
|
+
# @param name [String] Name of the database.
|
75
|
+
# @param server [Arango::Server]
|
76
|
+
# @return [Boolean]
|
77
|
+
def exist?(name, server:)
|
78
|
+
list(server: server).include?(name)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Instantiate a new database. All params except name and server are optional.
|
83
|
+
# @param name [String]
|
84
|
+
# @param server [Arango::Server]
|
85
|
+
# @param id
|
86
|
+
# @param is_system
|
87
|
+
# @param path
|
88
|
+
# @return [Arango::Database]
|
89
|
+
def initialize(name, id: nil, is_system: false, path: '', server: Arango.current_server)
|
90
|
+
send(:arango_server=, server)
|
91
|
+
@name = name
|
92
|
+
@is_system = is_system
|
93
|
+
@path = path
|
94
|
+
@id = id
|
95
|
+
end
|
96
|
+
|
97
|
+
# Whether or not the current database is the _system database
|
98
|
+
# @return [Boolean]
|
99
|
+
attr_reader :is_system
|
100
|
+
|
101
|
+
# The name of the database
|
102
|
+
# @return [String]
|
103
|
+
attr_reader :name
|
104
|
+
|
105
|
+
# The filesystem path of the current database
|
106
|
+
# @return [String]
|
107
|
+
attr_reader :path
|
108
|
+
|
109
|
+
attr_accessor :arango_server
|
110
|
+
|
111
|
+
# Creates the database on the server.
|
112
|
+
# @return [Arango::Database] self
|
113
|
+
def create
|
114
|
+
# TODO users: users
|
115
|
+
body = { name: @name }
|
116
|
+
@arango_server.request(post: '_api/database', body: body)
|
117
|
+
self
|
118
|
+
end
|
119
|
+
|
120
|
+
# Reload database properties.
|
121
|
+
# @return [Arango::Database] self
|
122
|
+
def reload
|
123
|
+
result = request(get: '_api/database/current')
|
124
|
+
_update_attributes(result.result)
|
125
|
+
self
|
126
|
+
end
|
127
|
+
alias refresh reload
|
128
|
+
alias retrieve reload
|
129
|
+
|
130
|
+
# Remove database from the server.
|
131
|
+
# @return nil
|
132
|
+
def drop
|
133
|
+
self.class.drop(@name, server: @arango_server)
|
134
|
+
nil
|
135
|
+
end
|
136
|
+
alias delete drop
|
137
|
+
alias destroy drop
|
138
|
+
|
139
|
+
# Returns the database version that this server requires.
|
140
|
+
# @return [String]
|
141
|
+
def target_version
|
142
|
+
request(get: '_admin/database/target-version').version
|
143
|
+
end
|
144
|
+
|
145
|
+
def request(get: nil, head: nil, patch: nil, post: nil, put: nil, delete: nil, body: nil, headers: nil, query: nil, block: nil)
|
146
|
+
@arango_server.request(get: get, head: head, patch: patch, post: post, put: put, delete: delete,
|
147
|
+
db: @name, body: body, headers: headers, query: query, block: block)
|
148
|
+
end
|
149
|
+
|
150
|
+
def execute_request(get: nil, head: nil, patch: nil, post: nil, put: nil, delete: nil, body: nil, headers: nil, query: nil, block: nil)
|
151
|
+
@arango_server.request(get: get, head: head, patch: patch, post: post, put: put, delete: delete,
|
152
|
+
db: @name, body: body, headers: headers, query: query, block: block)
|
153
|
+
end
|
154
|
+
|
155
|
+
def execute_requests(requests)
|
156
|
+
batch = Arango::RequestBatch.new(database: self)
|
157
|
+
requests.each { |request_h| batch.add_request(**request_h) }
|
158
|
+
batch.execute
|
159
|
+
end
|
160
|
+
|
161
|
+
def batch_request(request_hash)
|
162
|
+
promise = Promise.new
|
163
|
+
request_hash[:promise] = promise
|
164
|
+
batch = _promise_batch
|
165
|
+
batch.add_request(**request_hash)
|
166
|
+
promise
|
167
|
+
end
|
168
|
+
|
169
|
+
def execute_batched_requests
|
170
|
+
batch = @_promise_batch
|
171
|
+
@_promise_batch = nil
|
172
|
+
batch.execute
|
173
|
+
nil
|
174
|
+
end
|
175
|
+
|
176
|
+
private
|
177
|
+
|
178
|
+
def _promise_batch
|
179
|
+
@_promise_batch ||= Arango::RequestBatch.new(database: self)
|
180
|
+
end
|
181
|
+
|
182
|
+
def _update_attributes(result)
|
183
|
+
%i[id isSystem name path].each do |key|
|
184
|
+
instance_variable_set("@#{key.to_s.underscore}", result[key]) if result.key?(key)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Arango
|
2
|
+
class Database
|
3
|
+
module AQLFunctions
|
4
|
+
|
5
|
+
def list_aql_functions(namespace: nil)
|
6
|
+
query = nil
|
7
|
+
query = { namespace: namespace } unless namespace.nil?
|
8
|
+
result = execute_request(get: "_api/aqlfunction", query: query)
|
9
|
+
result.result.map { |r| Arango::Result.new(r) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_aql_function(name, code: nil, is_deterministic: nil, &block)
|
13
|
+
if block_given?
|
14
|
+
source_block = Parser::CurrentRuby.parse(block.source).children.last
|
15
|
+
source_block = source_block.children.last if source_block.type == :block
|
16
|
+
source_code = Unparser.unparse(source_block)
|
17
|
+
ruby_header = <<~RUBY
|
18
|
+
args = `original_arguments`
|
19
|
+
RUBY
|
20
|
+
compiled_ruby= Opal.compile(ruby_header + source_code, parse_comments: false)
|
21
|
+
if compiled_ruby.start_with?('/*')
|
22
|
+
start_of_code = compiled_ruby.index('*/') + 3
|
23
|
+
compiled_ruby = compiled_ruby[start_of_code..-1]
|
24
|
+
end
|
25
|
+
code = <<~JAVASCRIPT
|
26
|
+
function() {
|
27
|
+
"use strict";
|
28
|
+
require('opal');
|
29
|
+
var original_arguments = Array.prototype.slice.call(arguments);
|
30
|
+
for (var i=0; i<original_arguments.length; i++) {
|
31
|
+
if (typeof original_arguments[i] === "object" && !(original_arguments[i] instanceof Array)) {
|
32
|
+
original_arguments[i] = Opal.Hash.$new(original_arguments[i]);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
var result = #{compiled_ruby}
|
36
|
+
if (typeof result['$to_n'] === "function") { result = result['$to_n'](); }
|
37
|
+
return result;
|
38
|
+
}
|
39
|
+
JAVASCRIPT
|
40
|
+
end
|
41
|
+
body = { code: code, name: name, isDeterministic: is_deterministic }
|
42
|
+
result = execute_request(post: "_api/aqlfunction", body: body)
|
43
|
+
result.response_code == 200 || result.response_code == 201
|
44
|
+
end
|
45
|
+
|
46
|
+
def drop_aql_function(name, group: nil)
|
47
|
+
query = nil
|
48
|
+
query = { group: group } unless group.nil?
|
49
|
+
result = request(delete: "_api/aqlfunction/#{name}", query: query)
|
50
|
+
result.response_code == 200
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module Arango
|
2
|
+
class Database
|
3
|
+
module AQLQueries
|
4
|
+
def new_aql(query:, batch_size: nil, bind_vars: nil, cache: nil, count: nil, fail_on_warning: nil, full_count: nil,
|
5
|
+
intermediate_commit_count: nil, intermediate_commit_size: nil, max_plans: nil, max_transaction_size: nil,
|
6
|
+
max_warning_count: nil, memory_limit: nil, optimizer_rules: nil, profile: nil, satellite_sync_wait: nil,
|
7
|
+
skip_inaccessible_collections: nil, ttl: nil, block: nil, &ruby_block)
|
8
|
+
Arango::AQL.new(database: self, query: query, batch_size: batch_size, bind_vars: bind_vars, cache: cache, count: count,
|
9
|
+
fail_on_warning: fail_on_warning, full_count: full_count, intermediate_commit_count: intermediate_commit_count,
|
10
|
+
intermediate_commit_size: intermediate_commit_size, max_plans: max_plans, max_transaction_size: max_transaction_size,
|
11
|
+
max_warning_count: max_warning_count, memory_limit: memory_limit, optimizer_rules: optimizer_rules, profile: profile,
|
12
|
+
satellite_sync_wait: satellite_sync_wait, skip_inaccessible_collections: skip_inaccessible_collections, ttl: ttl,
|
13
|
+
block: block, &ruby_block)
|
14
|
+
end
|
15
|
+
|
16
|
+
def new_query(query, batch_size: nil, bind_vars: nil, cache: nil, count: nil, fail_on_warning: nil, full_count: nil,
|
17
|
+
intermediate_commit_count: nil, intermediate_commit_size: nil, max_plans: nil, max_transaction_size: nil,
|
18
|
+
max_warning_count: nil, memory_limit: nil, optimizer_rules: nil, profile: nil, satellite_sync_wait: nil,
|
19
|
+
skip_inaccessible_collections: nil, ttl: nil, block: nil, &ruby_block)
|
20
|
+
Arango::AQL.new(database: self, query: query, batch_size: batch_size, bind_vars: bind_vars, cache: cache, count: count,
|
21
|
+
fail_on_warning: fail_on_warning, full_count: full_count, intermediate_commit_count: intermediate_commit_count,
|
22
|
+
intermediate_commit_size: intermediate_commit_size, max_plans: max_plans, max_transaction_size: max_transaction_size,
|
23
|
+
max_warning_count: max_warning_count, memory_limit: memory_limit, optimizer_rules: optimizer_rules, profile: profile,
|
24
|
+
satellite_sync_wait: satellite_sync_wait, skip_inaccessible_collections: skip_inaccessible_collections, ttl: ttl,
|
25
|
+
block: block, &ruby_block)
|
26
|
+
end
|
27
|
+
|
28
|
+
def execute_aql(query:, batch_size: nil, bind_vars: nil, cache: nil, count: nil, fail_on_warning: nil, full_count: nil,
|
29
|
+
intermediate_commit_count: nil, intermediate_commit_size: nil, max_plans: nil, max_transaction_size: nil,
|
30
|
+
max_warning_count: nil, memory_limit: nil, optimizer_rules: nil, profile: nil, satellite_sync_wait: nil,
|
31
|
+
skip_inaccessible_collections: nil, ttl: nil, block: nil, &ruby_block)
|
32
|
+
aql = Arango::AQL.new(database: self, query: query, batch_size: batch_size, bind_vars: bind_vars, cache: cache, count: count,
|
33
|
+
fail_on_warning: fail_on_warning, full_count: full_count, intermediate_commit_count: intermediate_commit_count,
|
34
|
+
intermediate_commit_size: intermediate_commit_size, max_plans: max_plans, max_transaction_size: max_transaction_size,
|
35
|
+
max_warning_count: max_warning_count, memory_limit: memory_limit, optimizer_rules: optimizer_rules, profile: profile,
|
36
|
+
satellite_sync_wait: satellite_sync_wait, skip_inaccessible_collections: skip_inaccessible_collections, ttl: ttl,
|
37
|
+
block: block, &ruby_block)
|
38
|
+
aql.execute
|
39
|
+
end
|
40
|
+
|
41
|
+
def execute_query(query, batch_size: nil, bind_vars: nil, cache: nil, count: nil, fail_on_warning: nil, full_count: nil,
|
42
|
+
intermediate_commit_count: nil, intermediate_commit_size: nil, max_plans: nil, max_transaction_size: nil,
|
43
|
+
max_warning_count: nil, memory_limit: nil, optimizer_rules: nil, profile: nil, satellite_sync_wait: nil,
|
44
|
+
skip_inaccessible_collections: nil, ttl: nil, block: nil, &ruby_block)
|
45
|
+
aql = Arango::AQL.new(database: self, query: query, batch_size: batch_size, bind_vars: bind_vars, cache: cache, count: count,
|
46
|
+
fail_on_warning: fail_on_warning, full_count: full_count, intermediate_commit_count: intermediate_commit_count,
|
47
|
+
intermediate_commit_size: intermediate_commit_size, max_plans: max_plans, max_transaction_size: max_transaction_size,
|
48
|
+
max_warning_count: max_warning_count, memory_limit: memory_limit, optimizer_rules: optimizer_rules, profile: profile,
|
49
|
+
satellite_sync_wait: satellite_sync_wait, skip_inaccessible_collections: skip_inaccessible_collections, ttl: ttl,
|
50
|
+
block: block, &ruby_block)
|
51
|
+
aql.execute
|
52
|
+
end
|
53
|
+
|
54
|
+
def batch_execute_aql(query:, batch_size: nil, bind_vars: nil, cache: nil, count: nil, fail_on_warning: nil, full_count: nil,
|
55
|
+
intermediate_commit_count: nil, intermediate_commit_size: nil, max_plans: nil, max_transaction_size: nil,
|
56
|
+
max_warning_count: nil, memory_limit: nil, optimizer_rules: nil, profile: nil, satellite_sync_wait: nil,
|
57
|
+
skip_inaccessible_collections: nil, ttl: nil, block: nil, &ruby_block)
|
58
|
+
aql = Arango::AQL.new(database: self, query: query, batch_size: batch_size, bind_vars: bind_vars, cache: cache, count: count,
|
59
|
+
fail_on_warning: fail_on_warning, full_count: full_count, intermediate_commit_count: intermediate_commit_count,
|
60
|
+
intermediate_commit_size: intermediate_commit_size, max_plans: max_plans, max_transaction_size: max_transaction_size,
|
61
|
+
max_warning_count: max_warning_count, memory_limit: memory_limit, optimizer_rules: optimizer_rules, profile: profile,
|
62
|
+
satellite_sync_wait: satellite_sync_wait, skip_inaccessible_collections: skip_inaccessible_collections, ttl: ttl,
|
63
|
+
block: block, &ruby_block)
|
64
|
+
aql.batch_execute
|
65
|
+
end
|
66
|
+
|
67
|
+
def batch_execute_query(query, batch_size: nil, bind_vars: nil, cache: nil, count: nil, fail_on_warning: nil, full_count: nil,
|
68
|
+
intermediate_commit_count: nil, intermediate_commit_size: nil, max_plans: nil, max_transaction_size: nil,
|
69
|
+
max_warning_count: nil, memory_limit: nil, optimizer_rules: nil, profile: nil, satellite_sync_wait: nil,
|
70
|
+
skip_inaccessible_collections: nil, ttl: nil, block: nil, &ruby_block)
|
71
|
+
aql = Arango::AQL.new(database: self, query: query, batch_size: batch_size, bind_vars: bind_vars, cache: cache, count: count,
|
72
|
+
fail_on_warning: fail_on_warning, full_count: full_count, intermediate_commit_count: intermediate_commit_count,
|
73
|
+
intermediate_commit_size: intermediate_commit_size, max_plans: max_plans, max_transaction_size: max_transaction_size,
|
74
|
+
max_warning_count: max_warning_count, memory_limit: memory_limit, optimizer_rules: optimizer_rules, profile: profile,
|
75
|
+
satellite_sync_wait: satellite_sync_wait, skip_inaccessible_collections: skip_inaccessible_collections, ttl: ttl,
|
76
|
+
block: block, &ruby_block)
|
77
|
+
aql.batch_execute
|
78
|
+
end
|
79
|
+
|
80
|
+
def query_tracking_properties
|
81
|
+
execute_request(get: "_api/query/properties")
|
82
|
+
end
|
83
|
+
|
84
|
+
def set_query_tracking_properties(props)
|
85
|
+
body = props.to_h
|
86
|
+
body.transform_keys! { |k| k.to_s.camelize(:lower).to_sym }
|
87
|
+
execute_request(put: "_api/query/properties", body: props.to_h)
|
88
|
+
end
|
89
|
+
|
90
|
+
def running_queries
|
91
|
+
result = execute_request(get: "_api/query/current")
|
92
|
+
result.map { |query_hash| Arango::AQL.from_result(query_hash) }
|
93
|
+
end
|
94
|
+
|
95
|
+
def slow_queries
|
96
|
+
result = execute_request(get: "_api/query/slow")
|
97
|
+
result.map { |query_hash| Arango::AQL.from_result(query_hash) }
|
98
|
+
end
|
99
|
+
|
100
|
+
def clear_slow_queries_list
|
101
|
+
result = execute_request(delete: "_api/query/slow")
|
102
|
+
result.response_code == 200
|
103
|
+
end
|
104
|
+
|
105
|
+
def kill_query(aql_id)
|
106
|
+
id = if id.class == String then id
|
107
|
+
elsif id.class == Arango::AQL then id.id
|
108
|
+
end
|
109
|
+
result = execute_request(delete: "_api/query/#{id}")
|
110
|
+
result == 200
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Arango
|
2
|
+
class Database
|
3
|
+
module AQLQueryCache
|
4
|
+
|
5
|
+
def clear_query_cache
|
6
|
+
result = execute_request(delete: "_api/query-cache")
|
7
|
+
result.response_code == 200
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_query_cache
|
11
|
+
result = execute_request(get: "_api/query-cache/entries")
|
12
|
+
result.map { |entry| Arango::Result.new(entry) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def query_cache_properties
|
16
|
+
execute_request(get: "_api/query-cache/properties")
|
17
|
+
end
|
18
|
+
|
19
|
+
def set_query_cache_properties(props)
|
20
|
+
body = props.to_h
|
21
|
+
body.transform_keys! { |k| k.to_s.camelize(:lower).to_sym }
|
22
|
+
result = execute_request(put: "_api/query-cache/properties", body: body)
|
23
|
+
result.response_code == 200
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module Arango
|
2
|
+
class Database
|
3
|
+
module Collections
|
4
|
+
# Retrieves all collections from the database.
|
5
|
+
# @param exclude_system [Boolean] Optional, default true, exclude system collections.
|
6
|
+
# @return [Array<Arango::Collection>]
|
7
|
+
def all_collections(exclude_system: true)
|
8
|
+
Arango::Collection.all(exclude_system: exclude_system, database: self)
|
9
|
+
end
|
10
|
+
def batch_all_collections(exclude_system: true)
|
11
|
+
Arango::Collection.batch_all(exclude_system: exclude_system, database: self)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Creates a new collection.
|
15
|
+
# @param name [String] The name of the collection.
|
16
|
+
# @param type [Symbol] One of :document or :edge, the collection type, optional, default: :document.
|
17
|
+
# @return [Arango::Collection] The instance of the collection created.
|
18
|
+
def create_collection(name, type: :document, is_system: false)
|
19
|
+
Arango::Collection.new(name, type: type, database: self, is_system: is_system).create
|
20
|
+
end
|
21
|
+
def batch_create_collection(name, type: :document, is_system: false)
|
22
|
+
Arango::Collection.new(name, type: type, database: self, is_system: is_system).batch_create
|
23
|
+
end
|
24
|
+
|
25
|
+
# Creates a new edge collection.
|
26
|
+
# @param name [String] The name of the collection.
|
27
|
+
# @return [Arango::Collection] The instance of the collection created.
|
28
|
+
def create_edge_collection(name)
|
29
|
+
Arango::Collection.new(name, type: :edge, database: self).create
|
30
|
+
end
|
31
|
+
def batch_create_edge_collection(name)
|
32
|
+
Arango::Collection.new(name, type: :edge, database: self).batch_create
|
33
|
+
end
|
34
|
+
|
35
|
+
# Get collection from the database.
|
36
|
+
# @param name [String] The name of the collection.
|
37
|
+
# @return [Arango::Database]
|
38
|
+
def get_collection(name)
|
39
|
+
Arango::Collection.get(name, database: self)
|
40
|
+
end
|
41
|
+
def batch_get_collection(name)
|
42
|
+
Arango::Collection.batch_get(name, database: self)
|
43
|
+
end
|
44
|
+
alias fetch_collection get_collection
|
45
|
+
alias retrieve_collection get_collection
|
46
|
+
alias batch_fetch_collection batch_get_collection
|
47
|
+
alias batch_retrieve_collection batch_get_collection
|
48
|
+
|
49
|
+
# Instantiates a new collection.
|
50
|
+
# @param name [String] The name of the collection.
|
51
|
+
# @param type [Symbol] One of :document or :edge, the collection type, optional, default: :document.
|
52
|
+
# @return [Arango::Collection]
|
53
|
+
def new_collection(name, type: :document)
|
54
|
+
Arango::Collection.new(name, type: type, database: self)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Instantiates a new edge collection.
|
58
|
+
# @param name [String] The name of the collection.
|
59
|
+
# @return [Arango::Collection]
|
60
|
+
def new_edge_collection(name)
|
61
|
+
Arango::Collection.new(name, type: :edge, database: self)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Retrieves a list of all collections.
|
65
|
+
# @param exclude_system [Boolean] Optional, default true, exclude system collections.
|
66
|
+
# @return [Array<String>] List of collection names.
|
67
|
+
def list_collections(exclude_system: true)
|
68
|
+
Arango::Collection.list(exclude_system: exclude_system, database: self)
|
69
|
+
end
|
70
|
+
def batch_list_collections(exclude_system: true)
|
71
|
+
Arango::Collection.batch_list(exclude_system: exclude_system, database: self)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Removes a collection.
|
75
|
+
# @param name [String] The name of the collection.
|
76
|
+
# @return nil
|
77
|
+
def drop_collection(name)
|
78
|
+
Arango::Collection.drop(name, database: self)
|
79
|
+
end
|
80
|
+
def batch_drop_collection(name)
|
81
|
+
Arango::Collection.batch_drop(name, database: self)
|
82
|
+
end
|
83
|
+
alias delete_collection drop_collection
|
84
|
+
alias destroy_collection drop_collection
|
85
|
+
alias batch_delete_collection batch_drop_collection
|
86
|
+
alias batch_destroy_collection batch_drop_collection
|
87
|
+
|
88
|
+
# Check if collection exists.
|
89
|
+
# @param name [String] Name of the collection
|
90
|
+
# @return [Boolean]
|
91
|
+
def exist_collection?(name, exclude_system: true)
|
92
|
+
Arango::Collection.exist?(name, database: self, exclude_system: exclude_system)
|
93
|
+
end
|
94
|
+
def batch_exist_collection?(name, exclude_system: true)
|
95
|
+
Arango::Collection.batch_exist?(name, database: self, exclude_system: exclude_system)
|
96
|
+
end
|
97
|
+
alias collection_exist? exist_collection?
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|