List of usage examples for org.hibernate.hql.internal.ast.tree FromElement getQueryableCollection
public QueryableCollection getQueryableCollection()
From source file:org.babyfish.hibernate.hql.XQueryTranslatorImpl.java
License:Open Source License
@SuppressWarnings("unchecked") protected boolean shouldUseDistinctQuery() { if (this.pathPlan.containsCollectionJoins()) { return true; }/* w ww .j a va2 s . c o m*/ 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; }//from w w w. j a v a 2 s . co 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; }/*from w w w. j a v a 2 s .c om*/ } } } } SqlASTHelper.addFromElementAndancestors(usedFromElements, fromElement); } SqlASTHelper.removeFromElementsExcept(queryNode, usedFromElements); }