this.actionFactory = actionFactory;
}
public void performAction(Connection connection, OperationObserver observer)
throws SQLException, Exception {
EJBQLCompiledExpression compiledExpression = query
.getExpression(getEntityResolver());
final EJBQLTranslatorFactory translatorFactory = ((JdbcAdapter) getAdapter())
.getEjbqlTranslatorFactory();
final EJBQLTranslationContext context = new EJBQLTranslationContext(
entityResolver,
query,
compiledExpression,
translatorFactory);
compiledExpression.getExpression().visit(new EJBQLBaseVisitor(false) {
@Override
public boolean visitSelect(EJBQLExpression expression) {
EJBQLExpressionVisitor visitor = translatorFactory
.getSelectTranslator(context);
expression.visit(visitor);
return false;
}
@Override
public boolean visitDelete(EJBQLExpression expression) {
EJBQLExpressionVisitor visitor = translatorFactory
.getDeleteTranslator(context);
expression.visit(visitor);
return false;
}
@Override
public boolean visitUpdate(EJBQLExpression expression) {
EJBQLExpressionVisitor visitor = translatorFactory
.getUpdateTranslator(context);
expression.visit(visitor);
return false;
}
});
SQLTemplate sqlQuery = context.getQuery();
// update with metadata
QueryMetadata md = query.getMetaData(getEntityResolver());
sqlQuery.setFetchLimit(md.getFetchLimit());
sqlQuery.setFetchOffset(md.getFetchOffset());
sqlQuery.setResult(compiledExpression.getResult());
sqlQuery.setPageSize(md.getPageSize());
if (md.getStatementFetchSize() != 0) {
sqlQuery.setStatementFetchSize(md.getStatementFetchSize());
}