use of org.hibernate.hql.internal.ast.tree.FromElement in project hibernate-orm by hibernate.
the class LocalTemporaryTableBulkIdStrategy method buildUpdateHandler.
@Override
public UpdateHandler buildUpdateHandler(SessionFactoryImplementor factory, HqlSqlWalker walker) {
final UpdateStatement updateStatement = (UpdateStatement) walker.getAST();
final FromElement fromElement = updateStatement.getFromClause().getFromElement();
final Queryable targetedPersister = fromElement.getQueryable();
final IdTableInfoImpl tableInfo = getIdTableInfo(targetedPersister);
return new TableBasedUpdateHandlerImpl(factory, walker, tableInfo) {
@Override
protected void prepareForUse(Queryable persister, SharedSessionContractImplementor session) {
Helper.INSTANCE.createTempTable(tableInfo, ddlTransactionHandling, session);
}
@Override
protected void releaseFromUse(Queryable persister, SharedSessionContractImplementor session) {
Helper.INSTANCE.releaseTempTable(tableInfo, afterUseAction, ddlTransactionHandling, session);
}
};
}
use of org.hibernate.hql.internal.ast.tree.FromElement in project hibernate-orm by hibernate.
the class PersistentTableBulkIdStrategy method buildDeleteHandler.
@Override
public DeleteHandler buildDeleteHandler(SessionFactoryImplementor factory, HqlSqlWalker walker) {
final DeleteStatement updateStatement = (DeleteStatement) walker.getAST();
final FromElement fromElement = updateStatement.getFromClause().getFromElement();
final Queryable targetedPersister = fromElement.getQueryable();
return new DeleteHandlerImpl(factory, walker, getIdTableInfo(targetedPersister));
}
use of org.hibernate.hql.internal.ast.tree.FromElement in project hibernate-orm by hibernate.
the class GlobalTemporaryTableBulkIdStrategy method buildUpdateHandler.
@Override
public UpdateHandler buildUpdateHandler(SessionFactoryImplementor factory, HqlSqlWalker walker) {
final UpdateStatement updateStatement = (UpdateStatement) walker.getAST();
final FromElement fromElement = updateStatement.getFromClause().getFromElement();
final Queryable targetedPersister = fromElement.getQueryable();
return new TableBasedUpdateHandlerImpl(factory, walker, getIdTableInfo(targetedPersister)) {
@Override
protected void releaseFromUse(Queryable persister, SharedSessionContractImplementor session) {
if (afterUseAction == AfterUseAction.NONE) {
return;
}
// clean up our id-table rows
cleanUpRows(getIdTableInfo(persister).getQualifiedIdTableName(), session);
}
};
}
use of org.hibernate.hql.internal.ast.tree.FromElement in project hibernate-orm by hibernate.
the class GlobalTemporaryTableBulkIdStrategy method buildDeleteHandler.
@Override
public DeleteHandler buildDeleteHandler(SessionFactoryImplementor factory, HqlSqlWalker walker) {
final DeleteStatement updateStatement = (DeleteStatement) walker.getAST();
final FromElement fromElement = updateStatement.getFromClause().getFromElement();
final Queryable targetedPersister = fromElement.getQueryable();
return new TableBasedDeleteHandlerImpl(factory, walker, getIdTableInfo(targetedPersister)) {
@Override
protected void releaseFromUse(Queryable persister, SharedSessionContractImplementor session) {
if (afterUseAction == AfterUseAction.NONE) {
return;
}
// clean up our id-table rows
cleanUpRows(getIdTableInfo(persister).getQualifiedIdTableName(), session);
}
};
}
use of org.hibernate.hql.internal.ast.tree.FromElement in project hibernate-orm by hibernate.
the class HqlSqlWalker method createFromJoinElement.
@Override
protected void createFromJoinElement(AST path, AST alias, int joinType, AST fetchNode, AST propertyFetch, AST with) throws SemanticException {
boolean fetch = fetchNode != null;
if (fetch && isSubQuery()) {
throw new QueryException("fetch not allowed in subquery from-elements");
}
// the incoming "path" can be either:
// 1) an implicit join path (join p.address.city)
// 2) an entity-join (join com.acme.User)
//
// so make the proper interpretation here...
final EntityPersister entityJoinReferencedPersister = resolveEntityJoinReferencedPersister(path);
if (entityJoinReferencedPersister != null) {
// `path` referenced an entity
final EntityJoinFromElement join = createEntityJoin(entityJoinReferencedPersister, alias, joinType, propertyFetch, with);
((FromReferenceNode) path).setFromElement(join);
} else {
if (path.getType() != SqlTokenTypes.DOT) {
throw new SemanticException("Path expected for join!");
}
DotNode dot = (DotNode) path;
JoinType hibernateJoinType = JoinProcessor.toHibernateJoinType(joinType);
// Tell the dot node about the join type.
dot.setJoinType(hibernateJoinType);
dot.setFetch(fetch);
// Generate an explicit join for the root dot node. The implied joins will be collected and passed up
// to the root dot node.
dot.resolve(true, false, alias == null ? null : alias.getText());
final FromElement fromElement;
if (dot.getDataType() != null && dot.getDataType().isComponentType()) {
if (dot.getDataType().isAnyType()) {
throw new SemanticException("An AnyType attribute cannot be join fetched");
// ^^ because the discriminator (aka, the "meta columns") must be known to the SQL in
// a non-parameterized way.
}
FromElementFactory factory = new FromElementFactory(getCurrentFromClause(), dot.getLhs().getFromElement(), dot.getPropertyPath(), alias == null ? null : alias.getText(), null, false);
fromElement = factory.createComponentJoin((CompositeType) dot.getDataType());
} else {
fromElement = dot.getImpliedJoin();
fromElement.setAllPropertyFetch(propertyFetch != null);
if (with != null) {
if (fetch) {
throw new SemanticException("with-clause not allowed on fetched associations; use filters");
}
handleWithFragment(fromElement, with);
}
}
if (LOG.isDebugEnabled()) {
LOG.debug("createFromJoinElement() : " + getASTPrinter().showAsString(fromElement, "-- join tree --"));
}
}
}
Aggregations