2323
2424
2525import java .math .BigDecimal ;
26+ import java .util .ArrayList ;
2627import java .util .Iterator ;
2728import java .util .List ;
2829import com .kingsrook .qqq .backend .core .actions .tables .InsertAction ;
4243import com .kingsrook .qqq .backend .core .model .actions .tables .query .QQueryFilter ;
4344import com .kingsrook .qqq .backend .core .model .actions .tables .query .QueryJoin ;
4445import com .kingsrook .qqq .backend .core .model .data .QRecord ;
46+ import com .kingsrook .qqq .backend .core .model .metadata .fields .QFieldMetaData ;
4547import com .kingsrook .qqq .backend .core .model .metadata .fields .QFieldType ;
4648import com .kingsrook .qqq .backend .core .model .session .QSession ;
49+ import com .kingsrook .qqq .backend .core .utils .ExceptionUtils ;
4750import com .kingsrook .qqq .backend .module .rdbms .TestUtils ;
48- import org .junit .jupiter .api .Assertions ;
4951import org .junit .jupiter .api .BeforeEach ;
52+ import org .junit .jupiter .api .Disabled ;
5053import org .junit .jupiter .api .Test ;
5154import static org .junit .jupiter .api .Assertions .assertEquals ;
55+ import static org .junit .jupiter .api .Assertions .assertNotNull ;
5256import static org .junit .jupiter .api .Assertions .assertNull ;
5357import static org .junit .jupiter .api .Assertions .assertTrue ;
5458import static org .junit .jupiter .api .Assertions .fail ;
@@ -83,20 +87,56 @@ public void testUnfilteredNoGroupBy() throws QException
8387 Aggregate averageOfDaysWorked = new Aggregate ("daysWorked" , AggregateOperator .AVG );
8488 Aggregate maxAnnualSalary = new Aggregate ("annualSalary" , AggregateOperator .MAX );
8589 Aggregate minFirstName = new Aggregate ("firstName" , AggregateOperator .MIN );
90+ Aggregate countOfBirthDate = new Aggregate ("birthDate" , AggregateOperator .COUNT );
8691 aggregateInput .withAggregate (countOfId );
8792 aggregateInput .withAggregate (sumOfId );
8893 aggregateInput .withAggregate (averageOfDaysWorked );
8994 aggregateInput .withAggregate (maxAnnualSalary );
9095 aggregateInput .withAggregate (minFirstName );
96+ aggregateInput .withAggregate (countOfBirthDate );
9197
9298 AggregateOutput aggregateOutput = new RDBMSAggregateAction ().execute (aggregateInput );
9399
94100 AggregateResult aggregateResult = aggregateOutput .getResults ().get (0 );
95- Assertions .assertEquals (5 , aggregateResult .getAggregateValue (countOfId ));
96- Assertions .assertEquals (15 , aggregateResult .getAggregateValue (sumOfId ));
97- Assertions .assertEquals (new BigDecimal ("96.4" ), aggregateResult .getAggregateValue (averageOfDaysWorked ));
98- Assertions .assertEquals (new BigDecimal ("1000000.00" ), aggregateResult .getAggregateValue (maxAnnualSalary ));
99- Assertions .assertEquals ("Darin" , aggregateResult .getAggregateValue (minFirstName ));
101+ assertEquals (5 , aggregateResult .getAggregateValue (countOfId ));
102+ assertEquals (15 , aggregateResult .getAggregateValue (sumOfId ));
103+ assertEquals (new BigDecimal ("96.4" ), aggregateResult .getAggregateValue (averageOfDaysWorked ));
104+ assertEquals (new BigDecimal ("1000000.00" ), aggregateResult .getAggregateValue (maxAnnualSalary ));
105+ assertEquals ("Darin" , aggregateResult .getAggregateValue (minFirstName ));
106+ assertEquals (4 , aggregateResult .getAggregateValue (countOfBirthDate ));
107+ }
108+
109+
110+
111+ /*******************************************************************************
112+ **
113+ *******************************************************************************/
114+ @ Test
115+ @ Disabled ("Interesting to see effects of all operators on all types, but failures are expected (e.g., avg(string), so not for CI." )
116+ void testOperatorsCrossTypes ()
117+ {
118+ List <String > failures = new ArrayList <>();
119+ for (QFieldMetaData field : QContext .getQInstance ().getTable (TestUtils .TABLE_NAME_PERSON ).getFields ().values ())
120+ {
121+ for (AggregateOperator aggregateOperator : AggregateOperator .values ())
122+ {
123+ try
124+ {
125+ AggregateInput aggregateInput = initAggregateRequest ();
126+ Aggregate aggregate = new Aggregate (field .getName (), aggregateOperator );
127+ aggregateInput .withAggregate (aggregate );
128+ AggregateOutput aggregateOutput = new RDBMSAggregateAction ().execute (aggregateInput );
129+ AggregateResult aggregateResult = aggregateOutput .getResults ().get (0 );
130+ assertNotNull (aggregateResult .getAggregateValue (aggregate ));
131+ }
132+ catch (Exception e )
133+ {
134+ failures .add (ExceptionUtils .getRootException (e ).getMessage ());
135+ }
136+ }
137+ }
138+
139+ failures .forEach (System .out ::println );
100140 }
101141
102142
@@ -123,11 +163,11 @@ public void testFilteredNoGroupBy() throws QException
123163 AggregateOutput aggregateOutput = new RDBMSAggregateAction ().execute (aggregateInput );
124164
125165 AggregateResult aggregateResult = aggregateOutput .getResults ().get (0 );
126- Assertions . assertEquals (2 , aggregateResult .getAggregateValue (countOfId ));
127- Assertions . assertEquals (5 , aggregateResult .getAggregateValue (sumOfId ));
128- Assertions . assertEquals (new BigDecimal ("62.0" ), aggregateResult .getAggregateValue (averageOfDaysWorked ));
129- Assertions . assertEquals (new BigDecimal ("26000.00" ), aggregateResult .getAggregateValue (maxAnnualSalary ));
130- Assertions . assertEquals ("James" , aggregateResult .getAggregateValue (minFirstName ));
166+ assertEquals (2 , aggregateResult .getAggregateValue (countOfId ));
167+ assertEquals (5 , aggregateResult .getAggregateValue (sumOfId ));
168+ assertEquals (new BigDecimal ("62.0" ), aggregateResult .getAggregateValue (averageOfDaysWorked ));
169+ assertEquals (new BigDecimal ("26000.00" ), aggregateResult .getAggregateValue (maxAnnualSalary ));
170+ assertEquals ("James" , aggregateResult .getAggregateValue (minFirstName ));
131171 }
132172
133173
@@ -156,15 +196,15 @@ public void testUnfilteredWithGroupBy() throws QException
156196 AggregateOutput aggregateOutput = new RDBMSAggregateAction ().execute (aggregateInput );
157197 {
158198 AggregateResult aggregateResult = aggregateOutput .getResults ().get (0 );
159- Assertions . assertEquals ("Chamberlain" , aggregateResult .getGroupByValue (lastNameGroupBy ));
160- Assertions . assertEquals (2 , aggregateResult .getAggregateValue (countOfId ));
161- Assertions . assertEquals (17 , aggregateResult .getAggregateValue (sumOfDaysWorked ));
199+ assertEquals ("Chamberlain" , aggregateResult .getGroupByValue (lastNameGroupBy ));
200+ assertEquals (2 , aggregateResult .getAggregateValue (countOfId ));
201+ assertEquals (17 , aggregateResult .getAggregateValue (sumOfDaysWorked ));
162202 }
163203 {
164204 AggregateResult aggregateResult = aggregateOutput .getResults ().get (1 );
165- Assertions . assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
166- Assertions . assertEquals (4 , aggregateResult .getAggregateValue (countOfId ));
167- Assertions . assertEquals (11364 , aggregateResult .getAggregateValue (sumOfDaysWorked ));
205+ assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
206+ assertEquals (4 , aggregateResult .getAggregateValue (countOfId ));
207+ assertEquals (11364 , aggregateResult .getAggregateValue (sumOfDaysWorked ));
168208 }
169209 }
170210
@@ -201,29 +241,29 @@ public void testUnfilteredWithMultiGroupBy() throws QException
201241 AggregateResult aggregateResult ;
202242
203243 aggregateResult = iterator .next ();
204- Assertions . assertEquals ("Chamberlain" , aggregateResult .getGroupByValue (lastNameGroupBy ));
205- Assertions . assertEquals ("Donny" , aggregateResult .getGroupByValue (firstNameGroupBy ));
206- Assertions . assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
244+ assertEquals ("Chamberlain" , aggregateResult .getGroupByValue (lastNameGroupBy ));
245+ assertEquals ("Donny" , aggregateResult .getGroupByValue (firstNameGroupBy ));
246+ assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
207247
208248 aggregateResult = iterator .next ();
209- Assertions . assertEquals ("Chamberlain" , aggregateResult .getGroupByValue (lastNameGroupBy ));
210- Assertions . assertEquals ("Tim" , aggregateResult .getGroupByValue (firstNameGroupBy ));
211- Assertions . assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
249+ assertEquals ("Chamberlain" , aggregateResult .getGroupByValue (lastNameGroupBy ));
250+ assertEquals ("Tim" , aggregateResult .getGroupByValue (firstNameGroupBy ));
251+ assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
212252
213253 aggregateResult = iterator .next ();
214- Assertions . assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
215- Assertions . assertEquals ("Aaron" , aggregateResult .getGroupByValue (firstNameGroupBy ));
216- Assertions . assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
254+ assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
255+ assertEquals ("Aaron" , aggregateResult .getGroupByValue (firstNameGroupBy ));
256+ assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
217257
218258 aggregateResult = iterator .next ();
219- Assertions . assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
220- Assertions . assertEquals ("Darin" , aggregateResult .getGroupByValue (firstNameGroupBy ));
221- Assertions . assertEquals (2 , aggregateResult .getAggregateValue (countOfId ));
259+ assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
260+ assertEquals ("Darin" , aggregateResult .getGroupByValue (firstNameGroupBy ));
261+ assertEquals (2 , aggregateResult .getAggregateValue (countOfId ));
222262
223263 aggregateResult = iterator .next ();
224- Assertions . assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
225- Assertions . assertEquals ("Trevor" , aggregateResult .getGroupByValue (firstNameGroupBy ));
226- Assertions . assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
264+ assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
265+ assertEquals ("Trevor" , aggregateResult .getGroupByValue (firstNameGroupBy ));
266+ assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
227267 }
228268
229269
@@ -255,24 +295,24 @@ public void testOrderByAggregate() throws QException
255295 AggregateResult aggregateResult ;
256296
257297 aggregateResult = iterator .next ();
258- Assertions . assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
259- Assertions . assertEquals (4 , aggregateResult .getAggregateValue (countOfId ));
298+ assertEquals ("Kelkhoff" , aggregateResult .getGroupByValue (lastNameGroupBy ));
299+ assertEquals (4 , aggregateResult .getAggregateValue (countOfId ));
260300
261301 aggregateResult = iterator .next ();
262- Assertions . assertEquals ("Richardson" , aggregateResult .getGroupByValue (lastNameGroupBy ));
263- Assertions . assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
302+ assertEquals ("Richardson" , aggregateResult .getGroupByValue (lastNameGroupBy ));
303+ assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
264304
265305 aggregateResult = iterator .next ();
266- Assertions . assertEquals ("Maes" , aggregateResult .getGroupByValue (lastNameGroupBy ));
267- Assertions . assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
306+ assertEquals ("Maes" , aggregateResult .getGroupByValue (lastNameGroupBy ));
307+ assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
268308
269309 aggregateResult = iterator .next ();
270- Assertions . assertEquals ("Samples" , aggregateResult .getGroupByValue (lastNameGroupBy ));
271- Assertions . assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
310+ assertEquals ("Samples" , aggregateResult .getGroupByValue (lastNameGroupBy ));
311+ assertEquals (1 , aggregateResult .getAggregateValue (countOfId ));
272312
273313 aggregateResult = iterator .next ();
274- Assertions . assertEquals ("Chamberlain" , aggregateResult .getGroupByValue (lastNameGroupBy ));
275- Assertions . assertEquals (2 , aggregateResult .getAggregateValue (countOfId ));
314+ assertEquals ("Chamberlain" , aggregateResult .getGroupByValue (lastNameGroupBy ));
315+ assertEquals (2 , aggregateResult .getAggregateValue (countOfId ));
276316 }
277317
278318
@@ -293,7 +333,7 @@ public void testNoRowsFound() throws QException
293333 ////////////////////////////////////////////////////////////
294334 AggregateOutput aggregateOutput = new RDBMSAggregateAction ().execute (aggregateInput );
295335 AggregateResult aggregateResult = aggregateOutput .getResults ().get (0 );
296- Assertions . assertEquals (0 , aggregateResult .getAggregateValue (countOfId ));
336+ assertEquals (0 , aggregateResult .getAggregateValue (countOfId ));
297337
298338 /////////////////////////////////////////////////////////////////////////////////////////
299339 // but re-run w/ a group-by -- then, if no rows are found, there are 0 result objects. //
@@ -324,12 +364,12 @@ void testOmsJoinAggregate() throws Exception
324364 QContext .setQSession (new QSession ().withSecurityKeyValue (TestUtils .SECURITY_KEY_STORE_ALL_ACCESS , true ));
325365 aggregateOutput = new RDBMSAggregateAction ().execute (aggregateInput );
326366 aggregateResult = aggregateOutput .getResults ().get (0 );
327- Assertions . assertEquals (43 , aggregateResult .getAggregateValue (sumOfQuantity ));
367+ assertEquals (43 , aggregateResult .getAggregateValue (sumOfQuantity ));
328368
329369 QContext .setQSession (new QSession ().withSecurityKeyValue (TestUtils .TABLE_NAME_STORE , 1 ));
330370 aggregateOutput = new RDBMSAggregateAction ().execute (aggregateInput );
331371 aggregateResult = aggregateOutput .getResults ().get (0 );
332- Assertions . assertEquals (33 , aggregateResult .getAggregateValue (sumOfQuantity ));
372+ assertEquals (33 , aggregateResult .getAggregateValue (sumOfQuantity ));
333373 }
334374
335375
0 commit comments