///////////////////////////////////////////////////////////////////////////////////////// // QUERY ///////////////////////////////////////////////////////////////////////////////////////// protected void _setJPAQueryParams(final Query qry, final BooleanQueryClause qryClause) { Set<QualifiedQueryClause<? extends QueryClause>> clauses = qryClause.getClauses(); for (Iterator<QualifiedQueryClause<? extends QueryClause>> clauseIt = clauses.iterator(); clauseIt.hasNext(); ) { QueryClause clause = clauseIt.next().getClause(); String dbFieldId = clause.getFieldId().asString(); if (clause instanceof BooleanQueryClause) { BooleanQueryClause boolQry = (BooleanQueryClause) clause; _setJPAQueryParams(qry, boolQry); // recurse! } else if (clause instanceof EqualsQueryClause<?>) { EqualsQueryClause<?> eqQry = (EqualsQueryClause<?>) clause; qry.setParameter(dbFieldId, eqQry.getValue().toString()); } else if (clause instanceof ContainsTextQueryClause) { ContainsTextQueryClause containsTxtClause = (ContainsTextQueryClause) clause; qry.setParameter(dbFieldId, containsTxtClause.getText()); } else if (clause instanceof RangeQueryClause<?>) { RangeQueryClause<?> rangeQry = (RangeQueryClause<?>) clause; if (rangeQry.getRange().hasLowerBound() && rangeQry.getRange().hasUpperBound()) { qry.setParameter(dbFieldId + "Start", rangeQry.getRange().lowerEndpoint()); qry.setParameter(dbFieldId + "End", rangeQry.getRange().lowerEndpoint()); } else if (rangeQry.getRange().hasLowerBound()) { qry.setParameter(dbFieldId, rangeQry.getRange().lowerEndpoint()); } else if (rangeQry.getRange().hasUpperBound()) { qry.setParameter(dbFieldId, rangeQry.getRange().upperEndpoint()); } } else if (clause instanceof ContainedInQueryClause<?>) { ContainedInQueryClause<?> containedInQry = (ContainedInQueryClause<?>) clause; Collection<?> spectrum = Lists.newArrayList(containedInQry.getSpectrum()); qry.setParameter(dbFieldId, spectrum); } } }
private static String _jpqlQueryFrom(final ContainsTextQueryClause containsTextQry) { String dbFieldId = containsTextQry.getFieldId().asString(); String template = null; if (containsTextQry.isBegining()) { template = "e._{} LIKE '%:{}'"; } else if (containsTextQry.isEnding()) { template = "e._{} LIKE ':{}%'"; } else if (containsTextQry.isContaining()) { template = "e._{} LIKE '%:{}%'"; } else if (containsTextQry.isFullText()) { template = "SQL( 'MATCH({}) " + "AGAINST(? IN BOOLEAN MODE)',':{}')"; } return Strings.of(template).customizeWith(dbFieldId, dbFieldId).asString(); }