@@ -369,25 +369,33 @@ public String getCriteriaGroupQuery(CriteriaGroup group, String eventTable) {
369369 indexId ++;
370370 }
371371
372- String occurrenceCountClause = "HAVING COUNT(index_id) " ;
373-
374- if (group .type .equalsIgnoreCase ("ALL" )) // count must match number of criteria + sub-groups in group.
375- occurrenceCountClause += "= " + indexId ;
376-
377- if (group .type .equalsIgnoreCase ("ANY" )) // count must be > 0 for an 'ANY' criteria
378- occurrenceCountClause += "> 0" ;
379-
380- if (group .type .toUpperCase ().startsWith ("AT_" ))
372+ if (indexId > 0 ) // this group is not empty
381373 {
382- if (group .type .toUpperCase ().endsWith ("LEAST" ))
383- occurrenceCountClause += ">= " + group .count ;
384- else
385- occurrenceCountClause += "<= " + group .count ;
374+ query = StringUtils .replace (query , "@criteriaQueries" , StringUtils .join (additionalCriteriaQueries , "\n UNION ALL\n " ));
375+
376+ String occurrenceCountClause = "HAVING COUNT(index_id) " ;
377+ if (group .type .equalsIgnoreCase ("ALL" )) // count must match number of criteria + sub-groups in group.
378+ occurrenceCountClause += "= " + indexId ;
379+
380+ if (group .type .equalsIgnoreCase ("ANY" )) // count must be > 0 for an 'ANY' criteria
381+ occurrenceCountClause += "> 0" ;
382+
383+ if (group .type .toUpperCase ().startsWith ("AT_" ))
384+ {
385+ if (group .type .toUpperCase ().endsWith ("LEAST" ))
386+ occurrenceCountClause += ">= " + group .count ;
387+ else
388+ occurrenceCountClause += "<= " + group .count ;
389+ }
390+ query = StringUtils .replace (query , "@occurrenceCountClause" , occurrenceCountClause );
391+ }
392+ else // query group is empty so replace queries and occurence count clause with a friendly default
393+ {
394+ query = StringUtils .replace (query , "@criteriaQueries" , "select ET.person_id, ET.event_id from @eventTable ET" );
395+ query = StringUtils .replace (query , "@occurrenceCountClause" , "" );
386396 }
387-
397+
388398 query = StringUtils .replace (query , "@eventTable" , eventTable );
389- query = StringUtils .replace (query , "@occurrenceCountClause" , occurrenceCountClause );
390- query = StringUtils .replace (query , "@criteriaQueries" , StringUtils .join (additionalCriteriaQueries , "\n UNION ALL\n " ));
391399
392400 return query ;
393401 }
0 commit comments