/** * @param where - "{E}" may be used as a replaceable entity placeholder. No such value * should be used as a string constant */ @Override public void addWhere(String where) { EntityReference entityReference = createMainIdentificationVariableReference(); if (where.contains("{E}")) { where = entityReference.replaceEntries(where, "\\{E\\}"); } addWhere(parseWhereCondition(where), entityReference, false); }
@Override public void replaceOrderBy(boolean desc, String... properties) { EntityReference entityReference = createMainSelectedPathNodeReference(); PathEntityReference[] paths = Arrays.stream(properties) .map(entityReference::addFieldPath) .toArray(PathEntityReference[]::new); getTransformer().replaceOrderBy(desc, paths); }
@Override public void handleCaseInsensitiveParam(String parameterName) { List<SimpleConditionNode> conditions = getAnalyzer().getConditions().stream() .filter(condition -> getAnalyzer().isConditionForParameter(condition, parameterName)). collect(Collectors.toList()); getTransformer().applyLowerCaseForConditions(conditions); }
@Override public void addWhereAsIs(String where) { addWhere(parseWhereCondition(where), null, false); }
@Override public void addJoinAndWhere(String join, String where) { EntityReference entityReference = createMainIdentificationVariableReference(); if (where.contains("{E}")) { where = entityReference.replaceEntries(where, "\\{E\\}"); } if (join.contains("{E}")) { join = entityReference.replaceEntries(join, "\\{E\\}"); } String[] strings = join.split(","); join = strings[0]; if (StringUtils.isNotBlank(join)) { List<JoinVariableNode> joinVariableNodes = parseJoinCondition(join); boolean firstJoin = true; for (JoinVariableNode joinVariableNode : joinVariableNodes) { getTransformer().mixinJoinIntoTree(joinVariableNode, entityReference, firstJoin); firstJoin = false; } } for (int i = 1; i < strings.length; i++) { CommonTree selectionSource = parseSelectionSource(strings[i]); getTransformer().addSelectionSource(selectionSource); } addWhere(parseWhereCondition(where), entityReference, false); }
@Override public void addJoinAsIs(String join) { String[] strings = join.split(","); join = strings[0]; List<JoinVariableNode> joinVariableNodes = parseJoinCondition(join); IdentificationVariableNode identificationVariable = getAnalyzer().getMainIdentificationVariableNode(); String entityName = getAnalyzer().getMainEntityName(identificationVariable); for (JoinVariableNode joinVariableNode : joinVariableNodes) { getTransformer().mixinJoinIntoTree(joinVariableNode, new EntityNameEntityReference(entityName), false); } for (int i = 1; i < strings.length; i++) { CommonTree selectionSource = parseSelectionSource(strings[i]); getTransformer().addSelectionSource(selectionSource); } }
@Override public boolean removeDistinct() { return getTransformer().removeDistinct(); }
/** * copy from another statement * * @param statement from we copy where clause */ @Override @Deprecated public void mergeWhere(String statement) { try { EntityReference entityReference = createMainIdentificationVariableReference(); CommonTree whereTree = Parser.parse(statement, true); CommonTree whereClause = (CommonTree) whereTree.getFirstChildWithType(JPA2Lexer.T_CONDITION); addWhere(whereClause, entityReference, true); } catch (RecognitionException e) { throw new RuntimeException(e); } }
protected QueryTreeTransformer getTransformer() { if (queryTransformer == null) { queryTransformer = new QueryTreeTransformer(getTree()); } return queryTransformer; }
protected EntityReference createMainIdentificationVariableReference() { IdentificationVariableNode identificationVariable = getAnalyzer().getMainIdentificationVariableNode(); String entityName = getAnalyzer().getMainEntityName(identificationVariable); String variableName = getAnalyzer().getMainEntityVariable(identificationVariable); return new VariableEntityReference(entityName, variableName); }
@Override public void addEntityInGroupBy(String entityAlias) { getTransformer().addEntityInGroupBy(entityAlias); }
protected QueryTreeAnalyzer getAnalyzer() { if (queryAnalyzer == null) { queryAnalyzer = new QueryTreeAnalyzer(getTree()); } return queryAnalyzer; }
protected EntityReference createMainSelectedPathNodeReference() { PathNode pathNode = getAnalyzer().getMainSelectedPathNode(); String entityName = getAnalyzer().getMainSelectedEntityName(pathNode); String variableName = getAnalyzer().getMainSelectedEntityVariable(pathNode); return new VariableEntityReference(entityName, variableName); } }
@Override public void replaceWithSelectId(String pkName) { getTransformer().replaceWithSelectId(pkName, getAnalyzer().getMainSelectedPathNode()); }
@Override public void addOrderByIdIfNotExists(String idProperty) { EntityReference entityReference = createMainSelectedPathNodeReference(); PathEntityReference idReference = entityReference.addFieldPath(idProperty); getTransformer().addOrderByIdIfNotExists(idReference); }
@Override public void addDistinct() { getTransformer().addDistinct(); }
@Override public String getResult() { return getTree().visit(new TreeToQuery()).getQueryString().trim(); }
@Override public void replaceWithSelectId() { getTransformer().replaceWithSelectId("id", getAnalyzer().getMainSelectedPathNode()); }
@Override public void replaceWithCount() { EntityReference entityReference = createMainSelectedPathNodeReference(); getTransformer().replaceWithCount(entityReference.createNode()); }
@Override public void removeOrderBy() { getTransformer().removeOrderBy(); }