use of com.manydesigns.elements.text.OgnlSqlFormat in project Portofino by ManyDesigns.
the class ModelSelectionProviderSupport method createSQLOptionProvider.
@NotNull
protected OptionProvider createSQLOptionProvider(DatabaseSelectionProvider selectionProvider, Class[] fieldTypes, String name, String databaseName, String sql) {
return new MemoizingOptionProvider(() -> {
Session session = persistence.getSession(databaseName);
OgnlSqlFormat sqlFormat = OgnlSqlFormat.create(sql);
String formatString = sqlFormat.getFormatString();
Object[] parameters = sqlFormat.evaluateOgnlExpressions(this);
QueryStringWithParameters cacheKey = new QueryStringWithParameters(formatString, parameters);
Collection<Object[]> objects = getFromQueryCache(selectionProvider, cacheKey);
if (objects == null) {
logger.debug("Query not in cache: {}", formatString);
try {
objects = QueryUtils.runSql(session, formatString, parameters);
} catch (Exception e) {
logger.error("Exception in populating selection provider " + name, e);
return null;
}
putInQueryCache(selectionProvider, cacheKey, objects);
}
return objects.stream().map(o -> SelectionProviderLogic.getOption(fieldTypes, o)).collect(Collectors.toList());
});
}
Aggregations