public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary <string, IFilter> enabledFilters) { InitializeInnerQueryAndParameters(criteriaQuery); if (innerQuery.HasProjection == false) { throw new QueryException("Cannot use subqueries on a criteria without a projection."); } ISessionFactoryImplementor factory = criteriaQuery.Factory; IOuterJoinLoadable persister = (IOuterJoinLoadable)factory.GetEntityPersister(criteriaImpl.EntityOrClassName); //buffer needs to be before CriteriaJoinWalker for sake of parameter order SqlStringBuilder buf = new SqlStringBuilder().Add(ToLeftSqlString(criteria, criteriaQuery)); //patch to generate joins on subqueries //stolen from CriteriaLoader CriteriaJoinWalker walker = new CriteriaJoinWalker(persister, innerQuery, factory, criteriaImpl, criteriaImpl.EntityOrClassName, enabledFilters); SqlString sql = walker.SqlString; if (criteriaImpl.FirstResult != 0 || criteriaImpl.MaxResults != RowSelection.NoValue) { int firstResults = Loader.Loader.GetFirstRow(parameters.RowSelection); int maxResults = Loader.Loader.GetMaxOrLimit(factory.Dialect, parameters.RowSelection); int?offsetParameterIndex = criteriaQuery.CreatePagingParameter(firstResults); int?limitParameterIndex = criteriaQuery.CreatePagingParameter(maxResults); sql = factory.Dialect.GetLimitString(sql, firstResults, maxResults, offsetParameterIndex, limitParameterIndex); } if (op != null) { buf.Add(" ").Add(op).Add(" "); } if (quantifier != null && prefixOp) { buf.Add(quantifier).Add(" "); } buf.Add("(").Add(sql).Add(")"); if (quantifier != null && prefixOp == false) { buf.Add(" ").Add(quantifier); } return(buf.ToSqlString()); }
public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary<string, IFilter> enabledFilters) { InitializeInnerQueryAndParameters(criteriaQuery); if (innerQuery.HasProjection == false) { throw new QueryException("Cannot use subqueries on a criteria without a projection."); } ISessionFactoryImplementor factory = criteriaQuery.Factory; IOuterJoinLoadable persister = (IOuterJoinLoadable)factory.GetEntityPersister(criteriaImpl.EntityOrClassName); //buffer needs to be before CriteriaJoinWalker for sake of parameter order SqlStringBuilder buf = new SqlStringBuilder().Add(ToLeftSqlString(criteria, criteriaQuery)); //patch to generate joins on subqueries //stolen from CriteriaLoader CriteriaJoinWalker walker = new CriteriaJoinWalker(persister, innerQuery, factory, criteriaImpl, criteriaImpl.EntityOrClassName, enabledFilters); SqlString sql = walker.SqlString; if (criteriaImpl.FirstResult != 0 || criteriaImpl.MaxResults != RowSelection.NoValue) { int firstResults = Loader.Loader.GetFirstRow(parameters.RowSelection); int maxResults = Loader.Loader.GetMaxOrLimit(factory.Dialect, parameters.RowSelection); int? offsetParameterIndex = criteriaQuery.CreatePagingParameter(firstResults); int? limitParameterIndex = criteriaQuery.CreatePagingParameter(maxResults); sql = factory.Dialect.GetLimitString(sql, firstResults, maxResults, offsetParameterIndex, limitParameterIndex); } if (op != null) { buf.Add(" ").Add(op).Add(" "); } if (quantifier != null && prefixOp) { buf.Add(quantifier).Add(" "); } buf.Add("(").Add(sql).Add(")"); if (quantifier != null && prefixOp == false) { buf.Add(" ").Add(quantifier); } return buf.ToSqlString(); }