@@ -8,3 +8,155 @@ operations such as creating or deleting :doc:`databases <database>`,
8
8
information, refer to `ArangoDB manual `_.
9
9
10
10
.. _ArangoDB manual : https://docs.arangodb.com
11
+
12
+ AQL Queries
13
+ ===========
14
+
15
+ AQL queries are invoked from AQL API wrapper. Executing queries returns
16
+ :doc: `result cursors <cursor >`.
17
+
18
+ **Example: **
19
+
20
+ .. code-block :: python
21
+
22
+ from arangoasync import ArangoClient, AQLQueryKillError
23
+ from arangoasync.auth import Auth
24
+
25
+ # Initialize the client for ArangoDB.
26
+ async with ArangoClient(hosts = " http://localhost:8529" ) as client:
27
+ auth = Auth(username = " root" , password = " passwd" )
28
+
29
+ # Connect to "test" database as root user.
30
+ db = await client.db(" test" , auth = auth)
31
+
32
+ # Get the API wrapper for "students" collection.
33
+ students = db.collection(" students" )
34
+
35
+ # Insert some test documents into "students" collection.
36
+ await students.insert_many([
37
+ {" _key" : " Abby" , " age" : 22 },
38
+ {" _key" : " John" , " age" : 18 },
39
+ {" _key" : " Mary" , " age" : 21 }
40
+ ])
41
+
42
+ # Get the AQL API wrapper.
43
+ aql = db.aql
44
+
45
+ # Retrieve the execution plan without running the query.
46
+ plan = await aql.explain(" FOR doc IN students RETURN doc" )
47
+
48
+ # Validate the query without executing it.
49
+ validate = await aql.validate(" FOR doc IN students RETURN doc" )
50
+
51
+ # Execute the query
52
+ cursor = await db.aql.execute(
53
+ " FOR doc IN students FILTER doc.age < @value RETURN doc" ,
54
+ bind_vars = {" value" : 19 }
55
+ )
56
+
57
+ # Iterate through the result cursor
58
+ student_keys = []
59
+ async for doc in cursor:
60
+ student_keys.append(doc)
61
+
62
+ # List currently running queries.
63
+ queries = await aql.queries()
64
+
65
+ # List any slow queries.
66
+ slow_queries = await aql.slow_queries()
67
+
68
+ # Clear slow AQL queries if any.
69
+ await aql.clear_slow_queries()
70
+
71
+ # Retrieve AQL query tracking properties.
72
+ await aql.tracking()
73
+
74
+ # Configure AQL query tracking properties.
75
+ await aql.set_tracking(
76
+ max_slow_queries = 10 ,
77
+ track_bind_vars = True ,
78
+ track_slow_queries = True
79
+ )
80
+
81
+ # Kill a running query (this should fail due to invalid ID).
82
+ try :
83
+ await aql.kill(" some_query_id" )
84
+ except AQLQueryKillError as err:
85
+ assert err.http_code == 404
86
+
87
+ See :class: `arangoasync.aql.AQL ` for API specification.
88
+
89
+
90
+ AQL User Functions
91
+ ==================
92
+
93
+ **AQL User Functions ** are custom functions you define in Javascript to extend
94
+ AQL functionality. They are somewhat similar to SQL procedures.
95
+
96
+ **Example: **
97
+
98
+ .. code-block :: python
99
+
100
+ from arangoasync import ArangoClient
101
+ from arangoasync.auth import Auth
102
+
103
+ # Initialize the client for ArangoDB.
104
+ async with ArangoClient(hosts = " http://localhost:8529" ) as client:
105
+ auth = Auth(username = " root" , password = " passwd" )
106
+
107
+ # Connect to "test" database as root user.
108
+ db = await client.db(" test" , auth = auth)
109
+
110
+ # Get the AQL API wrapper.
111
+ aql = db.aql
112
+
113
+ # Create a new AQL user function.
114
+ await aql.create_function(
115
+ # Grouping by name prefix is supported.
116
+ name = " functions::temperature::converter" ,
117
+ code = " function (celsius) { return celsius * 1.8 + 32; }"
118
+ )
119
+
120
+ # List AQL user functions.
121
+ functions = await aql.functions()
122
+
123
+ # Delete an existing AQL user function.
124
+ await aql.delete_function(" functions::temperature::converter" )
125
+
126
+ See :class: `arangoasync.aql.AQL ` for API specification.
127
+
128
+
129
+ AQL Query Cache
130
+ ===============
131
+
132
+ **AQL Query Cache ** is used to minimize redundant calculation of the same query
133
+ results. It is useful when read queries are issued frequently and write queries
134
+ are not.
135
+
136
+ **Example: **
137
+
138
+ .. code-block :: python
139
+
140
+ from arangoasync import ArangoClient
141
+ from arangoasync.auth import Auth
142
+
143
+ # Initialize the client for ArangoDB.
144
+ async with ArangoClient(hosts = " http://localhost:8529" ) as client:
145
+ auth = Auth(username = " root" , password = " passwd" )
146
+
147
+ # Connect to "test" database as root user.
148
+ db = await client.db(" test" , auth = auth)
149
+
150
+ # Get the AQL API wrapper.
151
+ aql = db.aql
152
+
153
+ # Retrieve AQL query cache properties.
154
+ await aql.cache.properties()
155
+
156
+ # Configure AQL query cache properties
157
+ await aql.cache.configure(mode = " demand" , max_results = 10000 )
158
+
159
+ # Clear results in AQL query cache.
160
+ await aql.cache.clear()
161
+
162
+ See :class: `arangoasync.aql.AQLQueryCache ` for API specification.
0 commit comments