Example usage for org.hibernate.hql.internal.ast.exec StatementExecutor getSqlStatements

List of usage examples for org.hibernate.hql.internal.ast.exec StatementExecutor getSqlStatements

Introduction

In this page you can find the example usage for org.hibernate.hql.internal.ast.exec StatementExecutor getSqlStatements.

Prototype

String[] getSqlStatements();

Source Link

Usage

From source file:com.blazebit.persistence.integration.hibernate.base.HibernateExtendedQuerySupport.java

License:Apache License

@Override
public String getSql(EntityManager em, Query query) {
    SessionImplementor session = em.unwrap(SessionImplementor.class);
    HQLQueryPlan queryPlan = getOriginalQueryPlan(session, query);

    if (queryPlan.getTranslators().length > 1) {
        throw new IllegalArgumentException("No support for multiple translators yet!");
    }//from  w  w  w  . ja v a2s.  c  o m
    QueryTranslator queryTranslator = queryPlan.getTranslators()[0];

    String[] sqls;
    if (queryTranslator.isManipulationStatement()) {
        StatementExecutor executor = getStatementExecutor(queryTranslator);
        if (!(executor instanceof BasicExecutor)) {
            throw new IllegalArgumentException(
                    "Using polymorphic deletes/updates with CTEs is not yet supported");
        }
        sqls = executor.getSqlStatements();
    } else {
        sqls = queryPlan.getSqlStrings();
    }
    // TODO: have to handle multiple sql strings which happens when having e.g. a polymorphic UPDATE/DELETE
    for (int i = 0; i < sqls.length; i++) {
        if (sqls[i] != null) {
            return sqls[i];
        }
    }

    return null;
}