public String processQuery(String query, Map<String, Object> paramValues) { Set<String> params = new HashSet<>(); for (Map.Entry<String, Object> entry : paramValues.entrySet()) { if (paramValueIsOk(entry.getValue())) params.add(entry.getKey()); } query = TemplateHelper.processTemplate(query, paramValues); if (isActual(root, params)) { Condition refined = refine(root, params); if (refined != null) { QueryTransformer transformer = QueryTransformerFactory.createTransformer(query); String where = new FilterJpqlGenerator().generateJpql(refined); if (!StringUtils.isBlank(where)) { Set<String> joins = refined.getJoins(); if (!joins.isEmpty()) { String joinsStr = joins.stream().collect(Collectors.joining(" ")); transformer.addJoinAndWhere(joinsStr, where); } else { transformer.addWhere(where); } } return transformer.getResult(); } } return query; }
/** * Returns a JPQL query modified according to the given tree of conditions. * @param query JPQL query * @param condition root condition. If null, the query is returned as is. */ public String processQuery(String query, @Nullable Condition condition) { if (condition == null) { return query; } QueryTransformer transformer = queryTransformerFactory.transformer(query); String joins = generateJoins(condition); String where = generateWhere(condition); if (!Strings.isNullOrEmpty(joins)) { transformer.addJoinAndWhere(joins, where); } else { transformer.addWhere(where); } return transformer.getResult(); }
protected void processConstraint(QueryTransformer transformer, ConstraintData constraint, String entityName) { String join = constraint.getJoin(); String where = constraint.getWhereClause(); try { if (StringUtils.isBlank(join)) { if (!StringUtils.isBlank(where)) { transformer.addWhere(where); } } else { transformer.addJoinAndWhere(join, where); } } catch (JpqlSyntaxException e) { log.error("Syntax errors found in constraint's JPQL expressions. Entity [{}]. Constraint ID [{}].", entityName, constraint.getId(), e); throw new RowLevelSecurityException( "Syntax errors found in constraint's JPQL expressions. Please see the logs.", entityName); } catch (Exception e) { log.error("An error occurred when applying security constraint. Entity [{}]. Constraint ID [{}].", entityName, constraint.getId(), e); throw new RowLevelSecurityException( "An error occurred when applying security constraint. Please see the logs.", entityName); } }
protected CollectionDatasource<Entity<Object>, Object> createOptionsDataSource(MetaClass metaClass) { CollectionDatasource ds = DsBuilder.create() .setMetaClass(metaClass) .setViewName(entityView) .buildCollectionDatasource(); ds.setRefreshOnComponentValueChange(true); ((DatasourceImplementation) ds).initialized(); if (!StringUtils.isBlank(entityWhere)) { QueryTransformer transformer = QueryTransformerFactory.createTransformer( "select e from " + metaClass.getName() + " e"); transformer.addWhere(entityWhere); String q = transformer.getResult(); ds.setQuery(q); } // TODO filter ds // if (WindowParams.DISABLE_AUTO_REFRESH.getBool(datasource.getDsContext().getFrameContext())) { // if (ds instanceof CollectionDatasource.Suspendable) // ((CollectionDatasource.Suspendable) ds).refreshIfNotSuspended(); // else ds.refresh(); // } return ds; }
transformer.addJoinAndWhere(constraint.getJoinClause(), constraint.getWhereClause()); } else { transformer.addWhere(constraint.getWhereClause());