5
5
use LaravelFreelancerNL \FluentAQL \Clauses \CollectClause ;
6
6
use LaravelFreelancerNL \FluentAQL \Clauses \FilterClause ;
7
7
use LaravelFreelancerNL \FluentAQL \Clauses \GroupClause ;
8
- use LaravelFreelancerNL \FluentAQL \Clauses \InClause ;
9
8
use LaravelFreelancerNL \FluentAQL \Clauses \KeepClause ;
10
9
use LaravelFreelancerNL \FluentAQL \Clauses \LimitClause ;
11
10
use LaravelFreelancerNL \FluentAQL \Clauses \OptionsClause ;
14
13
use LaravelFreelancerNL \FluentAQL \Clauses \ReturnClause ;
15
14
use LaravelFreelancerNL \FluentAQL \Clauses \SearchClause ;
16
15
use LaravelFreelancerNL \FluentAQL \Clauses \SortClause ;
17
- use LaravelFreelancerNL \FluentAQL \Clauses \WithClause ;
18
16
use LaravelFreelancerNL \FluentAQL \Clauses \WithCountClause ;
19
- use LaravelFreelancerNL \FluentAQL \Expressions \NullExpression ;
20
17
use LaravelFreelancerNL \FluentAQL \QueryBuilder ;
21
18
22
19
/**
@@ -33,20 +30,31 @@ trait hasQueryClauses
33
30
* You HAVE TO prepare user input yourself or be open to injection attacks.
34
31
*
35
32
* @param string $aql
36
- * @param null $bindings
37
- * @param null $collections
38
- * @return $this
33
+ * @param null $binds
34
+ * @param array| null $collections
35
+ * @return QueryBuilder
39
36
*/
40
- public function raw (string $ aql , $ bindings = [] , $ collections = [] ) : QueryBuilder
37
+ public function raw (string $ aql , $ binds = null , $ collections = null ) : QueryBuilder
41
38
{
39
+ if (is_array ($ binds )) {
40
+ foreach ($ binds as $ key => $ value ) {
41
+ $ this ->bind ($ value , $ key );
42
+ }
43
+ }
44
+ if (is_array ($ binds )) {
45
+ foreach ($ collections as $ mode => $ modeCollections ) {
46
+ $ this ->registerCollections ($ modeCollections , $ mode );
47
+ }
48
+ }
49
+
42
50
$ this ->addCommand (new RawClause ($ aql ));
43
51
44
52
return $ this ;
45
53
}
46
54
47
55
public function options ($ options ) : QueryBuilder
48
56
{
49
- $ options = $ this ->normalizeArgument ($ options , 'document ' );
57
+ $ options = $ this ->normalizeArgument ($ options , 'Object ' );
50
58
51
59
$ this ->addCommand (new OptionsClause ($ options ));
52
60
@@ -56,7 +64,7 @@ public function options($options) : QueryBuilder
56
64
57
65
/**
58
66
* Create a for clause
59
- * @link https://www.arangodb.com/docs/3.4 /aql/operations-for.html
67
+ * @link https://www.arangodb.com/docs/stable /aql/operations-for.html
60
68
*
61
69
* @param string|array $variableName
62
70
* @param mixed $in
@@ -69,11 +77,12 @@ public function for($variableName, $in = null) : QueryBuilder
69
77
}
70
78
71
79
foreach ($ variableName as $ key => $ value ) {
72
- $ variableName [$ key ] = $ this ->normalizeArgument ($ value , 'variable ' );
80
+ $ variableName [$ key ] = $ this ->normalizeArgument ($ value , 'Variable ' );
81
+ $ this ->registerVariable ($ variableName [$ key ]);
73
82
}
74
83
75
84
if ($ in !== null ) {
76
- $ in = $ this ->normalizeArgument ($ in , ['collection ' , 'range ' , 'list ' , 'query ' ]);
85
+ $ in = $ this ->normalizeArgument ($ in , ['Collection ' , 'Range ' , 'List ' , 'Query ' ]);
77
86
}
78
87
79
88
$ this ->addCommand (new ForClause ($ variableName , $ in ));
@@ -142,10 +151,10 @@ public function search($attribute, $comparisonOperator = '==', $value = null, $l
142
151
public function collect ($ variableName = null , $ expression = null ) : QueryBuilder
143
152
{
144
153
if (isset ($ variableName )) {
145
- $ variableName = $ this ->normalizeArgument ($ variableName , 'variable ' );
154
+ $ variableName = $ this ->normalizeArgument ($ variableName , 'Variable ' );
146
155
}
147
156
if (isset ($ expression )) {
148
- $ expression = $ this ->normalizeArgument ($ expression , ['attribute ' , 'function ' , 'query ' , 'bind ' ]);
157
+ $ expression = $ this ->normalizeArgument ($ expression , ['VariableAttribute ' , 'Function ' , 'Query ' , 'Bind ' ]);
149
158
}
150
159
151
160
$ this ->addCommand (new CollectClause ($ variableName , $ expression ));
@@ -164,9 +173,11 @@ public function collect($variableName = null, $expression = null) : QueryBuilder
164
173
*/
165
174
public function group ($ groupsVariable , $ projectionExpression = null ) : QueryBuilder
166
175
{
167
- $ groupsVariable = $ this ->normalizeArgument ($ groupsVariable , 'variable ' );
176
+ $ groupsVariable = $ this ->normalizeArgument ($ groupsVariable , 'Variable ' );
177
+ $ this ->registerVariable ($ groupsVariable );
178
+
168
179
if (isset ($ projectionExpression )) {
169
- $ projectionExpression = $ this ->normalizeArgument ($ projectionExpression , ['attribute ' , 'document ' , 'function ' , 'query ' , 'bind ' ]);
180
+ $ projectionExpression = $ this ->normalizeArgument ($ projectionExpression , ['VariableAttribute ' , 'Object ' , 'Function ' , 'Query ' , 'Bind ' ]);
170
181
}
171
182
172
183
$ this ->addCommand (new GroupClause ($ groupsVariable , $ projectionExpression ));
@@ -184,7 +195,8 @@ public function group($groupsVariable, $projectionExpression = null) : QueryBuil
184
195
*/
185
196
public function keep ($ keepVariable ) : QueryBuilder
186
197
{
187
- $ keepVariable = $ this ->normalizeArgument ($ keepVariable , 'variable ' );
198
+ $ keepVariable = $ this ->normalizeArgument ($ keepVariable , 'Variable ' );
199
+ $ this ->registerVariable ($ keepVariable );
188
200
189
201
$ this ->addCommand (new KeepClause ($ keepVariable ));
190
202
@@ -203,7 +215,8 @@ public function keep($keepVariable) : QueryBuilder
203
215
*/
204
216
public function withCount ($ countVariableName ) : QueryBuilder
205
217
{
206
- $ countVariableName = $ this ->normalizeArgument ($ countVariableName , 'variable ' );
218
+ $ countVariableName = $ this ->normalizeArgument ($ countVariableName , 'Variable ' );
219
+ $ this ->registerVariable ($ countVariableName );
207
220
208
221
$ this ->addCommand (new WithCountClause ($ countVariableName ));
209
222
@@ -221,8 +234,10 @@ public function withCount($countVariableName) : QueryBuilder
221
234
*/
222
235
public function aggregate ($ variableName , $ aggregateExpression ) : QueryBuilder
223
236
{
224
- $ variableName = $ this ->normalizeArgument ($ variableName , 'variable ' );
225
- $ aggregateExpression = $ this ->normalizeArgument ($ aggregateExpression , 'attribute ' , 'function ' , 'query ' , 'bind ' );
237
+ $ variableName = $ this ->normalizeArgument ($ variableName , 'Variable ' );
238
+ $ this ->registerVariable ($ variableName );
239
+
240
+ $ aggregateExpression = $ this ->normalizeArgument ($ aggregateExpression , ['VariableAttribute ' , 'Function ' , 'Query ' , 'Bind ' ]);
226
241
227
242
$ this ->addCommand (new AggregateClause ($ variableName , $ aggregateExpression ));
228
243
@@ -261,15 +276,14 @@ public function sort($sortBy = null, $direction = null) : QueryBuilder
261
276
* Limit results
262
277
* @link https://www.arangodb.com/docs/stable/aql/operations-limit.html
263
278
*
264
- * @param $offsetOrCount
265
- * @param null $count
279
+ * @param int $offsetOrCount
280
+ * @param int $count
266
281
* @return $this
267
282
*/
268
- public function limit ($ offsetOrCount , $ count = null )
283
+ public function limit (int $ offsetOrCount , int $ count = null )
269
284
{
270
- $ offsetOrCount = $ this ->normalizeArgument ($ offsetOrCount , 'numeric ' );
271
285
if ($ count !== null ) {
272
- $ count = $ this -> normalizeArgument ( $ count, ' numeric ' ) ;
286
+ $ count = ( int ) $ count ;
273
287
}
274
288
275
289
$ this ->addCommand (new LimitClause ($ offsetOrCount , $ count ));
@@ -287,6 +301,8 @@ public function limit($offsetOrCount, $count = null)
287
301
*/
288
302
public function return ($ expression , $ distinct = false ) : QueryBuilder
289
303
{
304
+ $ expression = $ this ->normalizeArgument ($ expression , ['Variable ' , 'VariableAttribute ' , 'Object ' , 'Function ' , 'Query ' , 'Bind ' ]);
305
+
290
306
$ this ->addCommand (new ReturnClause ($ expression , $ distinct ));
291
307
292
308
return $ this ;
0 commit comments