use of org.hibernate.sql.ast.tree.select.SelectStatement in project hibernate-orm by hibernate.
the class HqlEntityGraphTest method testBasicElementCollections.
@ParameterizedTest
@EnumSource(GraphSemantic.class)
void testBasicElementCollections(GraphSemantic graphSemantic) {
scope.inTransaction(session -> {
final RootGraphImplementor<Dog> eg = session.createEntityGraph(Dog.class);
eg.addAttributeNodes("favorites");
final SelectStatement sqlAst = buildSqlSelectAst(Dog.class, "select d from Dog as d", eg, graphSemantic, session);
// Check the from-clause
assertPluralAttributeJoinedGroup(sqlAst, "favorites", tableGroup -> {
});
});
}
use of org.hibernate.sql.ast.tree.select.SelectStatement in project hibernate-orm by hibernate.
the class HqlEntityGraphTest method buildSqlSelectAst.
private <T> SelectStatement buildSqlSelectAst(Class<T> entityType, String hql, RootGraphImplementor<T> entityGraph, GraphSemantic mode, SessionImplementor session) {
final LoadQueryInfluencers loadQueryInfluencers = new LoadQueryInfluencers(session.getSessionFactory());
final QueryImplementor<T> query = session.createQuery(hql, entityType);
final SqmQueryImplementor<String> hqlQuery = (SqmQueryImplementor<String>) query;
hqlQuery.applyGraph(entityGraph, mode);
final SqmSelectStatement<String> sqmStatement = (SqmSelectStatement<String>) hqlQuery.getSqmStatement();
final StandardSqmTranslator<SelectStatement> sqmConverter = new StandardSqmTranslator<>(sqmStatement, hqlQuery.getQueryOptions(), ((QuerySqmImpl<?>) hqlQuery).getDomainParameterXref(), query.getParameterBindings(), loadQueryInfluencers, session.getSessionFactory(), true);
final SqmTranslation<SelectStatement> sqmInterpretation = sqmConverter.translate();
return sqmInterpretation.getSqlAst();
}
use of org.hibernate.sql.ast.tree.select.SelectStatement in project hibernate-orm by hibernate.
the class MappedFetchTests method baseline.
@Test
public void baseline(SessionFactoryScope scope) {
final SessionFactoryImplementor sessionFactory = scope.getSessionFactory();
final MappingMetamodel domainModel = sessionFactory.getRuntimeMetamodels().getMappingMetamodel();
final EntityPersister rootEntityDescriptor = domainModel.getEntityDescriptor(RootEntity.class);
final SelectStatement sqlAst = LoaderSelectBuilder.createSelect(rootEntityDescriptor, null, rootEntityDescriptor.getIdentifierMapping(), null, 1, LoadQueryInfluencers.NONE, LockOptions.NONE, jdbcParameter -> {
}, sessionFactory);
assertThat(sqlAst.getDomainResultDescriptors().size(), is(1));
final DomainResult domainResult = sqlAst.getDomainResultDescriptors().get(0);
assertThat(domainResult, instanceOf(EntityResult.class));
final EntityResult entityResult = (EntityResult) domainResult;
final List<Fetch> fetches = entityResult.getFetches();
// name + both lists
assertThat(fetches.size(), is(3));
// order is alphabetical...
final Fetch nameFetch = fetches.get(0);
assertThat(nameFetch.getFetchedMapping().getFetchableName(), is("name"));
assertThat(nameFetch, instanceOf(BasicFetch.class));
final Fetch nickNamesFetch = fetches.get(1);
assertThat(nickNamesFetch.getFetchedMapping().getFetchableName(), is("nickNames"));
assertThat(nickNamesFetch, instanceOf(EagerCollectionFetch.class));
final Fetch simpleEntitiesFetch = fetches.get(2);
assertThat(simpleEntitiesFetch.getFetchedMapping().getFetchableName(), is("simpleEntities"));
assertThat(simpleEntitiesFetch, instanceOf(DelayedCollectionFetch.class));
final QuerySpec querySpec = sqlAst.getQuerySpec();
final TableGroup tableGroup = querySpec.getFromClause().getRoots().get(0);
assertThat(tableGroup.getModelPart(), is(rootEntityDescriptor));
assertThat(tableGroup.getTableGroupJoins().size(), is(1));
final TableGroupJoin collectionJoin = tableGroup.getTableGroupJoins().iterator().next();
assertThat(collectionJoin.getJoinedGroup().getModelPart(), is(nickNamesFetch.getFetchedMapping()));
assertThat(collectionJoin.getPredicate(), notNullValue());
assertThat(collectionJoin.getPredicate(), instanceOf(ComparisonPredicate.class));
}
use of org.hibernate.sql.ast.tree.select.SelectStatement in project hibernate-orm by hibernate.
the class EntityJoinTest method testNoImpliedJoinGeneratedForEqualityComparison.
@Test
@TestForIssue(jiraKey = "HHH-11538")
public void testNoImpliedJoinGeneratedForEqualityComparison(SessionFactoryScope scope) {
final String qry = "select r.id, cust.name " + "from FinancialRecord r " + " join Customer cust on r.customer = cust" + " order by r.id";
scope.inTransaction((session) -> {
final SessionFactoryImplementor factory = scope.getSessionFactory();
final EntityMappingType customerEntityDescriptor = factory.getRuntimeMetamodels().getMappingMetamodel().findEntityDescriptor(Customer.class);
final QueryEngine queryEngine = factory.getQueryEngine();
final HqlTranslator hqlTranslator = queryEngine.getHqlTranslator();
final SqmTranslatorFactory sqmTranslatorFactory = queryEngine.getSqmTranslatorFactory();
final SqmStatement<Object> sqm = hqlTranslator.translate(qry, null);
final SqmTranslator<SelectStatement> selectTranslator = sqmTranslatorFactory.createSelectTranslator((SqmSelectStatement<?>) sqm, QueryOptions.NONE, DomainParameterXref.empty(), QueryParameterBindings.NO_PARAM_BINDINGS, LoadQueryInfluencers.NONE, factory, true);
final SqmTranslation<SelectStatement> sqmTranslation = selectTranslator.translate();
final SelectStatement sqlAst = sqmTranslation.getSqlAst();
final List<TableGroup> roots = sqlAst.getQuerySpec().getFromClause().getRoots();
assertThat(roots.size(), is(1));
final TableGroup rootTableGroup = roots.get(0);
assertThat(rootTableGroup.getTableGroupJoins().size(), is(1));
final TableGroupJoin tableGroupJoin = rootTableGroup.getTableGroupJoins().get(0);
assertThat(tableGroupJoin.getJoinedGroup().getModelPart(), is(customerEntityDescriptor));
});
}
use of org.hibernate.sql.ast.tree.select.SelectStatement in project hibernate-orm by hibernate.
the class AbstractResultTests method interpret.
protected SelectStatement interpret(String hql, QueryParameterBindings parameterBindings, SessionFactoryImplementor sessionFactory) {
final QueryEngine queryEngine = sessionFactory.getQueryEngine();
final SqmSelectStatement<?> sqm = (SqmSelectStatement<?>) queryEngine.getHqlTranslator().translate(hql, null);
final SqmTranslatorFactory sqmTranslatorFactory = queryEngine.getSqmTranslatorFactory();
final SqmTranslator<SelectStatement> sqmConverter = sqmTranslatorFactory.createSelectTranslator(sqm, QueryOptions.NONE, DomainParameterXref.from(sqm), parameterBindings, LoadQueryInfluencers.NONE, sessionFactory, true);
return sqmConverter.translate().getSqlAst();
}
Aggregations