List of usage examples for org.hibernate.hql.internal.ast.tree QueryNode getFromClause
@Override public final FromClause getFromClause()
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); }