Example usage for org.hibernate.hql.internal.ast.tree QueryNode getFromClause

List of usage examples for org.hibernate.hql.internal.ast.tree QueryNode getFromClause

Introduction

In this page you can find the example usage for org.hibernate.hql.internal.ast.tree QueryNode getFromClause.

Prototype

@Override
    public final FromClause getFromClause() 

Source Link

Usage

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

License:Apache License

@Override
public String getSqlAlias(EntityManager em, Query query, String alias) {
    SessionImplementor session = em.unwrap(SessionImplementor.class);
    HQLQueryPlan plan = getOriginalQueryPlan(session, query);
    if (plan.getTranslators().length > 1) {
        throw new IllegalArgumentException("No support for multiple translators yet!");
    }//from   w w  w  .  j a v a2s . co  m
    QueryTranslator translator = plan.getTranslators()[0];

    QueryNode queryNode = getField(translator, "sqlAst");
    FromElement fromElement = queryNode.getFromClause().getFromElement(alias);

    if (fromElement == null) {
        throw new IllegalArgumentException("The alias " + alias + " could not be found in the query: " + query);
    }

    return fromElement.getTableAlias();
}

From source file:org.babyfish.hibernate.hql.SqlASTHelper.java

License:Open Source License

public static void removeFromElementsExcept(QueryNode queryNode, Set<FromElement> usedFromElements) {
    AST whereAst = ASTUtil.findTypeInChildren(queryNode, WHERE);
    if (whereAst != null) {
        updateUsedFromElements(whereAst, usedFromElements);
    }//from  w  w  w  .j  a va  2 s . c o  m
    removeFromElementsExceptImpl(queryNode.getFromClause(), usedFromElements);
}

From source file:org.babyfish.hibernate.hql.XQueryTranslatorImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
protected boolean shouldUseDistinctQuery() {
    if (this.pathPlan.containsCollectionJoins()) {
        return true;
    }//from  w w w .  j av a 2  s .  c  om
    QueryNode queryNode = (QueryNode) this.getSqlAST();
    boolean foundFrom = false;
    for (FromElement fromElement : (List<FromElement>) queryNode.getFromClause().getFromElements()) {
        if (fromElement.getClass() == FromElement.class) {
            if (!fromElement.getText().contains(" join ")) {
                if (foundFrom) {
                    return true;
                }
                foundFrom = true;
            } else if (fromElement.getText().startsWith("cross ")) {
                return true;
            } else if (fromElement.getQueryableCollection() != null) {
                return true;
            }
        }
    }
    return false;
}

From source file:org.babyfish.hibernate.hql.XQueryTranslatorImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
protected boolean shouldUseDistinctCount() {
    if (this.pathPlan.containsCollectionInnerJoins()) {
        return true;
    }// ww  w.j  a va  2 s.  c o m
    QueryNode queryNode = (QueryNode) this.getSqlAST();
    Set<FromElement> collectionLeftJoins = new HashSet<>(ReferenceEqualityComparator.getInstance());
    boolean foundFrom = false;
    for (FromElement fromElement : (List<FromElement>) queryNode.getFromClause().getFromElements()) {
        if (fromElement.getClass() == FromElement.class) {
            if (!fromElement.getText().contains(" join ")) {
                if (foundFrom) {
                    return true;
                }
                foundFrom = true;
            } else if (fromElement.getText().startsWith("cross ")) {
                return true;
            } else if (fromElement.getQueryableCollection() != null) {
                if (!fromElement.getText().startsWith("left ")) {
                    return true;
                }
                if (fromElement.getWithClauseFragment() != null) {
                    return true;
                }
                collectionLeftJoins.add(fromElement);
            }
        }
    }
    return SqlASTHelper.findJoinReferenceInWhereCaluse(queryNode, collectionLeftJoins);
}

From source file:org.babyfish.hibernate.hql.XQueryTranslatorImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
protected void onProcessCountSqlAST(AST sqlAst, boolean distinct) {
    QueryNode queryNode = (QueryNode) sqlAst;
    Set<FromElement> usedFromElements = new HashSet<>(ReferenceEqualityComparator.getInstance());
    for (FromElement fromElement : (List<FromElement>) queryNode.getFromClause().getFromElements()) {
        if (fromElement.getClass() == FromElement.class && fromElement.getWithClauseFragment() == null) {
            if (distinct || fromElement.getQueryableCollection() == null) {
                if (fromElement.getText().startsWith("left ")) {
                    continue;
                } else if (fromElement.getRole() != null && fromElement.getQueryableCollection() == null
                        && SettingsFactory.isDbSchemaStrict(this.factory.getProperties())) {
                    String role = fromElement.getRole();
                    int lastDotIndex = role.lastIndexOf('.');
                    String entityName = role.substring(0, lastDotIndex);
                    String propertyName = role.substring(lastDotIndex + 1);
                    EntityMetamodel entityMetamodel = this.factory.getEntityPersister(entityName)
                            .getEntityMetamodel();
                    int propertyIndex = entityMetamodel.getPropertyIndex(propertyName);
                    if (entityMetamodel.getPropertyTypes()[propertyIndex] instanceof ManyToOneType) {
                        boolean nullable = entityMetamodel.getPropertyNullability()[propertyIndex];
                        if (!nullable) {
                            continue;
                        }//ww  w  .j  ava  2  s  . com
                    }
                }
            }
        }
        SqlASTHelper.addFromElementAndancestors(usedFromElements, fromElement);
    }
    SqlASTHelper.removeFromElementsExcept(queryNode, usedFromElements);
}