Skip to content

Instantly share code, notes, and snippets.

@hugithordarson
Created August 16, 2016 19:16
Show Gist options
  • Save hugithordarson/95b2dddd94d9f04e219ada75810c0f62 to your computer and use it in GitHub Desktop.
Save hugithordarson/95b2dddd94d9f04e219ada75810c0f62 to your computer and use it in GitHub Desktop.
package strimillinn.xperimental;
import static strimillinn.core.StrimillinnCore.*;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
import org.apache.cayenne.ejbql.EJBQLExpression;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
import org.apache.cayenne.query.EJBQLQuery;
public class EJBQLToSQL {
/**
* @return The given EJBQL compiled to SQL
*/
private static String ejbqlToSQL( ServerRuntime runtime, String ejbqlString ) {
final EJBQLQuery ejbqlQuery = new EJBQLQuery( ejbqlString );
final DataNode dataNode = runtime.getDataDomain().getDefaultNode();
final EJBQLCompiledExpression compiledExpression = ejbqlQuery.getExpression( dataNode.getEntityResolver() );
final EJBQLTranslatorFactory translatorFactory = dataNode.getAdapter().getEjbqlTranslatorFactory();
final EJBQLTranslationContext context = new EJBQLTranslationContext( dataNode.getEntityResolver(), ejbqlQuery, compiledExpression, translatorFactory, dataNode.getAdapter().getQuotingStrategy() );
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;
}
} );
return context.getQuery().getDefaultTemplate();
}
public static void main( String[] args ) {
System.out.println( ejbqlToSQL( serverRuntime(), "select u from User u" ) );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment