Пример #1
0
        IASTNode GenerateNamedParameter(IASTNode delimiterNode, IASTNode nameNode)
        {
            string name = nameNode.Text;

            TrackNamedParameterPositions(name);

            // create the node initially with the param name so that it shows
            // appropriately in the "original text" attribute
            ParameterNode parameter = (ParameterNode)adaptor.Create(NAMED_PARAM, name);

            parameter.Text = "?";

            NamedParameterSpecification paramSpec = new NamedParameterSpecification(
                delimiterNode.Line,
                delimiterNode.CharPositionInLine,
                name
                );

            parameter.HqlParameterSpecification = paramSpec;
            if (_namedParameters != null && _namedParameters.TryGetValue(name, out var namedParameter))
            {
                // Add the parameter type information so that we are able to calculate functions return types
                // when the parameter is used as an argument.
                parameter.ExpectedType = namedParameter.Type;
            }

            _parameters.Add(paramSpec);
            return(parameter);
        }
Пример #2
0
            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);
            }
Пример #3
0
        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));
                    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));
                    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);
        }
Пример #4
0
        IASTNode GenerateNamedParameter(IASTNode delimiterNode, IASTNode nameNode)
        {
            string name = nameNode.Text;

            TrackNamedParameterPositions(name);

            // create the node initially with the param name so that it shows
            // appropriately in the "original text" attribute
            ParameterNode parameter = (ParameterNode)adaptor.Create(NAMED_PARAM, name);

            parameter.Text = "?";

            NamedParameterSpecification paramSpec = new NamedParameterSpecification(
                delimiterNode.Line,
                delimiterNode.CharPositionInLine,
                name
                );

            parameter.HqlParameterSpecification = paramSpec;
            _parameters.Add(paramSpec);
            return(parameter);
        }