2929@ SuppressWarnings ("WeakerAccess" ) // WeakerAccess: allow inner class access without accessor
3030public class PropertyQuery {
3131 final Query query ;
32+ final long queryHandle ;
3233 final Property property ;
34+ final int propertyId ;
35+
3336 boolean distinct ;
3437 boolean noCaseIfDistinct = true ;
3538 boolean enableNull ;
@@ -42,7 +45,9 @@ public class PropertyQuery {
4245
4346 PropertyQuery (Query query , Property property ) {
4447 this .query = query ;
48+ queryHandle = query .handle ;
4549 this .property = property ;
50+ propertyId = property .id ;
4651 }
4752
4853 /** Clears all values (e.g. distinct and null value). */
@@ -140,7 +145,7 @@ public String[] findStrings() {
140145 public String [] call () {
141146 boolean distinctNoCase = distinct && noCaseIfDistinct ;
142147 long cursorHandle = query .cursorHandle ();
143- return query .nativeFindStrings (query . handle , cursorHandle , property . id , distinct , distinctNoCase ,
148+ return query .nativeFindStrings (queryHandle , cursorHandle , propertyId , distinct , distinctNoCase ,
144149 enableNull , nullValueString );
145150 }
146151 });
@@ -161,7 +166,7 @@ public long[] findLongs() {
161166 return (long []) query .callInReadTx (new Callable <long []>() {
162167 @ Override
163168 public long [] call () {
164- return query .nativeFindLongs (query . handle , query .cursorHandle (), property . id , distinct ,
169+ return query .nativeFindLongs (queryHandle , query .cursorHandle (), propertyId , distinct ,
165170 enableNull , nullValueLong );
166171 }
167172 });
@@ -180,7 +185,7 @@ public int[] findInts() {
180185 return (int []) query .callInReadTx (new Callable <int []>() {
181186 @ Override
182187 public int [] call () {
183- return query .nativeFindInts (query . handle , query .cursorHandle (), property . id , distinct ,
188+ return query .nativeFindInts (queryHandle , query .cursorHandle (), propertyId , distinct ,
184189 enableNull , (int ) nullValueLong );
185190 }
186191 });
@@ -199,7 +204,7 @@ public short[] findShorts() {
199204 return (short []) query .callInReadTx (new Callable <short []>() {
200205 @ Override
201206 public short [] call () {
202- return query .nativeFindShorts (query . handle , query .cursorHandle (), property . id , distinct ,
207+ return query .nativeFindShorts (queryHandle , query .cursorHandle (), propertyId , distinct ,
203208 enableNull , (short ) nullValueLong );
204209 }
205210 });
@@ -218,7 +223,7 @@ public char[] findChars() {
218223 return (char []) query .callInReadTx (new Callable <char []>() {
219224 @ Override
220225 public char [] call () {
221- return query .nativeFindChars (query . handle , query .cursorHandle (), property . id , distinct ,
226+ return query .nativeFindChars (queryHandle , query .cursorHandle (), propertyId , distinct ,
222227 enableNull , (char ) nullValueLong );
223228 }
224229 });
@@ -235,7 +240,7 @@ public byte[] findBytes() {
235240 return (byte []) query .callInReadTx (new Callable <byte []>() {
236241 @ Override
237242 public byte [] call () {
238- return query .nativeFindBytes (query . handle , query .cursorHandle (), property . id , distinct ,
243+ return query .nativeFindBytes (queryHandle , query .cursorHandle (), propertyId , distinct ,
239244 enableNull , (byte ) nullValueLong );
240245 }
241246 });
@@ -254,7 +259,7 @@ public float[] findFloats() {
254259 return (float []) query .callInReadTx (new Callable <float []>() {
255260 @ Override
256261 public float [] call () {
257- return query .nativeFindFloats (query . handle , query .cursorHandle (), property . id , distinct ,
262+ return query .nativeFindFloats (queryHandle , query .cursorHandle (), propertyId , distinct ,
258263 enableNull , nullValueFloat );
259264 }
260265 });
@@ -273,7 +278,7 @@ public double[] findDoubles() {
273278 return (double []) query .callInReadTx (new Callable <double []>() {
274279 @ Override
275280 public double [] call () {
276- return query .nativeFindDoubles (query . handle , query .cursorHandle (), property . id , distinct ,
281+ return query .nativeFindDoubles (queryHandle , query .cursorHandle (), propertyId , distinct ,
277282 enableNull , nullValueDouble );
278283 }
279284 });
@@ -284,7 +289,7 @@ public String findString() {
284289 @ Override
285290 public String call () {
286291 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 ,
288293 distinctCase , enableNull , nullValueString );
289294 }
290295 });
@@ -294,7 +299,7 @@ private Object findNumber() {
294299 return query .callInReadTx (new Callable <Object >() {
295300 @ Override
296301 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 ,
298303 enableNull , nullValueLong , nullValueFloat , nullValueDouble );
299304 }
300305 });
@@ -332,4 +337,75 @@ public Double findDouble() {
332337 return (Double ) findNumber ();
333338 }
334339
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+
335411}
0 commit comments