public void NamedParameter(string name, int position) { var paramSpec = new NamedParameterSpecification(1, position, name); var parameter = Parameter.Placeholder; parameter.BackTrack = paramSpec.GetIdsForBackTrack(factory).First(); parametersSpecifications.Add(paramSpec); result.Add(parameter); }
public SqlString GetNamedParameter(string name) { var parameterSpecification = new NamedParameterSpecification(1, 0, name); var parameter = Parameter.Placeholder; parameter.BackTrack = parameterSpecification.GetIdsForBackTrack(Factory).First(); AddNamedParameter(name); collectedParameters.Add(parameterSpecification); return new SqlString(parameter); }
protected SqlString GetSubSelectWithLimits(SqlString subquery, ICollection<IParameterSpecification> parameterSpecs, RowSelection processedRowSelection, IDictionary<string, TypedValue> parameters) { ISessionFactoryImplementor sessionFactory = Factory; Dialect.Dialect dialect = sessionFactory.Dialect; RowSelection selection = processedRowSelection; bool useLimit = UseLimit(selection, dialect); if (useLimit) { bool hasFirstRow = GetFirstRow(selection) > 0; bool useOffset = hasFirstRow && dialect.SupportsLimitOffset; int max = GetMaxOrLimit(dialect, selection); int? skip = useOffset ? (int?)dialect.GetOffsetValue(GetFirstRow(selection)) : null; int? take = max != int.MaxValue ? (int?)max : null; Parameter skipSqlParameter = null; Parameter takeSqlParameter = null; if (skip.HasValue) { string skipParameterName = "nhsubselectskip"; var skipParameter = new NamedParameterSpecification(1, 0, skipParameterName) { ExpectedType = NHibernateUtil.Int32 }; skipSqlParameter = Parameter.Placeholder; skipSqlParameter.BackTrack = skipParameter.GetIdsForBackTrack(sessionFactory).First(); parameters.Add(skipParameterName, new TypedValue(skipParameter.ExpectedType, skip.Value, EntityMode.Poco)); parameterSpecs.Add(skipParameter); } if (take.HasValue) { string takeParameterName = "nhsubselecttake"; var takeParameter = new NamedParameterSpecification(1, 0, takeParameterName) { ExpectedType = NHibernateUtil.Int32 }; takeSqlParameter = Parameter.Placeholder; takeSqlParameter.BackTrack = takeParameter.GetIdsForBackTrack(sessionFactory).First(); parameters.Add(takeParameterName, new TypedValue(takeParameter.ExpectedType, take.Value, EntityMode.Poco)); parameterSpecs.Add(takeParameter); } // The dialect can move the given parameters where he need, what it can't do is generates new parameters loosing the BackTrack. SqlString result; if (TryGetLimitString(dialect, subquery, skip, take, skipSqlParameter, takeSqlParameter, out result)) return result; } return subquery; }