29
29
@ SuppressWarnings ("WeakerAccess" ) // WeakerAccess: allow inner class access without accessor
30
30
public class PropertyQuery {
31
31
final Query query ;
32
+ final long queryHandle ;
32
33
final Property property ;
34
+ final int propertyId ;
35
+
33
36
boolean distinct ;
34
37
boolean noCaseIfDistinct = true ;
35
38
boolean enableNull ;
@@ -42,7 +45,9 @@ public class PropertyQuery {
42
45
43
46
PropertyQuery (Query query , Property property ) {
44
47
this .query = query ;
48
+ queryHandle = query .handle ;
45
49
this .property = property ;
50
+ propertyId = property .id ;
46
51
}
47
52
48
53
/** Clears all values (e.g. distinct and null value). */
@@ -140,7 +145,7 @@ public String[] findStrings() {
140
145
public String [] call () {
141
146
boolean distinctNoCase = distinct && noCaseIfDistinct ;
142
147
long cursorHandle = query .cursorHandle ();
143
- return query .nativeFindStrings (query . handle , cursorHandle , property . id , distinct , distinctNoCase ,
148
+ return query .nativeFindStrings (queryHandle , cursorHandle , propertyId , distinct , distinctNoCase ,
144
149
enableNull , nullValueString );
145
150
}
146
151
});
@@ -161,7 +166,7 @@ public long[] findLongs() {
161
166
return (long []) query .callInReadTx (new Callable <long []>() {
162
167
@ Override
163
168
public long [] call () {
164
- return query .nativeFindLongs (query . handle , query .cursorHandle (), property . id , distinct ,
169
+ return query .nativeFindLongs (queryHandle , query .cursorHandle (), propertyId , distinct ,
165
170
enableNull , nullValueLong );
166
171
}
167
172
});
@@ -180,7 +185,7 @@ public int[] findInts() {
180
185
return (int []) query .callInReadTx (new Callable <int []>() {
181
186
@ Override
182
187
public int [] call () {
183
- return query .nativeFindInts (query . handle , query .cursorHandle (), property . id , distinct ,
188
+ return query .nativeFindInts (queryHandle , query .cursorHandle (), propertyId , distinct ,
184
189
enableNull , (int ) nullValueLong );
185
190
}
186
191
});
@@ -199,7 +204,7 @@ public short[] findShorts() {
199
204
return (short []) query .callInReadTx (new Callable <short []>() {
200
205
@ Override
201
206
public short [] call () {
202
- return query .nativeFindShorts (query . handle , query .cursorHandle (), property . id , distinct ,
207
+ return query .nativeFindShorts (queryHandle , query .cursorHandle (), propertyId , distinct ,
203
208
enableNull , (short ) nullValueLong );
204
209
}
205
210
});
@@ -218,7 +223,7 @@ public char[] findChars() {
218
223
return (char []) query .callInReadTx (new Callable <char []>() {
219
224
@ Override
220
225
public char [] call () {
221
- return query .nativeFindChars (query . handle , query .cursorHandle (), property . id , distinct ,
226
+ return query .nativeFindChars (queryHandle , query .cursorHandle (), propertyId , distinct ,
222
227
enableNull , (char ) nullValueLong );
223
228
}
224
229
});
@@ -235,7 +240,7 @@ public byte[] findBytes() {
235
240
return (byte []) query .callInReadTx (new Callable <byte []>() {
236
241
@ Override
237
242
public byte [] call () {
238
- return query .nativeFindBytes (query . handle , query .cursorHandle (), property . id , distinct ,
243
+ return query .nativeFindBytes (queryHandle , query .cursorHandle (), propertyId , distinct ,
239
244
enableNull , (byte ) nullValueLong );
240
245
}
241
246
});
@@ -254,7 +259,7 @@ public float[] findFloats() {
254
259
return (float []) query .callInReadTx (new Callable <float []>() {
255
260
@ Override
256
261
public float [] call () {
257
- return query .nativeFindFloats (query . handle , query .cursorHandle (), property . id , distinct ,
262
+ return query .nativeFindFloats (queryHandle , query .cursorHandle (), propertyId , distinct ,
258
263
enableNull , nullValueFloat );
259
264
}
260
265
});
@@ -273,7 +278,7 @@ public double[] findDoubles() {
273
278
return (double []) query .callInReadTx (new Callable <double []>() {
274
279
@ Override
275
280
public double [] call () {
276
- return query .nativeFindDoubles (query . handle , query .cursorHandle (), property . id , distinct ,
281
+ return query .nativeFindDoubles (queryHandle , query .cursorHandle (), propertyId , distinct ,
277
282
enableNull , nullValueDouble );
278
283
}
279
284
});
@@ -284,7 +289,7 @@ public String findString() {
284
289
@ Override
285
290
public String call () {
286
291
boolean distinctCase = distinct && !noCaseIfDistinct ;
287
- return query .nativeFindString (query . handle , query .cursorHandle (), property . id , unique , distinct ,
292
+ return query .nativeFindString (queryHandle , query .cursorHandle (), propertyId , unique , distinct ,
288
293
distinctCase , enableNull , nullValueString );
289
294
}
290
295
});
@@ -294,7 +299,7 @@ private Object findNumber() {
294
299
return query .callInReadTx (new Callable <Object >() {
295
300
@ Override
296
301
public Object call () {
297
- return query .nativeFindNumber (query . handle , query .cursorHandle (), property . id , unique , distinct ,
302
+ return query .nativeFindNumber (queryHandle , query .cursorHandle (), propertyId , unique , distinct ,
298
303
enableNull , nullValueLong , nullValueFloat , nullValueDouble );
299
304
}
300
305
});
@@ -332,4 +337,75 @@ public Double findDouble() {
332
337
return (Double ) findNumber ();
333
338
}
334
339
340
+
341
+ /** Sums up all values for the given property over all Objects matching the query. */
342
+ public long sum () {
343
+ return (Long ) query .callInReadTx (new Callable <Long >() {
344
+ @ Override
345
+ public Long call () {
346
+ return query .nativeSum (queryHandle , query .cursorHandle (), propertyId );
347
+ }
348
+ });
349
+ }
350
+
351
+ /** Sums up all values for the given property over all Objects matching the query. */
352
+ public double sumDouble () {
353
+ return (Double ) query .callInReadTx (new Callable <Double >() {
354
+ @ Override
355
+ public Double call () {
356
+ return query .nativeSumDouble (queryHandle , query .cursorHandle (), propertyId );
357
+ }
358
+ });
359
+ }
360
+
361
+ /** Finds the maximum value for the given property over all Objects matching the query. */
362
+ public long max () {
363
+ return (Long ) query .callInReadTx (new Callable <Long >() {
364
+ @ Override
365
+ public Long call () {
366
+ return query .nativeMax (queryHandle , query .cursorHandle (), propertyId );
367
+ }
368
+ });
369
+ }
370
+
371
+ /** Finds the maximum value for the given property over all Objects matching the query. */
372
+ public double maxDouble () {
373
+ return (Double ) query .callInReadTx (new Callable <Double >() {
374
+ @ Override
375
+ public Double call () {
376
+ return query .nativeMaxDouble (queryHandle , query .cursorHandle (), propertyId );
377
+ }
378
+ });
379
+ }
380
+
381
+ /** Finds the minimum value for the given property over all Objects matching the query. */
382
+ public long min () {
383
+ return (Long ) query .callInReadTx (new Callable <Long >() {
384
+ @ Override
385
+ public Long call () {
386
+ return query .nativeMin (queryHandle , query .cursorHandle (), propertyId );
387
+ }
388
+ });
389
+ }
390
+
391
+ /** Finds the minimum value for the given property over all Objects matching the query. */
392
+ public double minDouble () {
393
+ return (Double ) query .callInReadTx (new Callable <Double >() {
394
+ @ Override
395
+ public Double call () {
396
+ return query .nativeMinDouble (queryHandle , query .cursorHandle (), propertyId );
397
+ }
398
+ });
399
+ }
400
+
401
+ /** Calculates the average of all values for the given property over all Objects matching the query. */
402
+ public double avg () {
403
+ return (Double ) query .callInReadTx (new Callable <Double >() {
404
+ @ Override
405
+ public Double call () {
406
+ return query .nativeAvg (queryHandle , query .cursorHandle (), propertyId );
407
+ }
408
+ });
409
+ }
410
+
335
411
}
0 commit comments