Atm I’m working on SqlGenerator.cs, checking why lines 367 (queryWriter.Skip
= Convert.ToInt32(node.Text);) and 380 aren’t reachable(queryWriter.Take =
Convert.ToInt32(node.Text);).

I’ve already tested on mysql/postgre/oraclexe and none of them seem to be
filled.

When the provider start building the query it always assume that the query
limits will be set as parameters, discarding the possibility to be constant
strings.

 

If only I knew how to query the factory to obtain parameter values I would
change lines 328->343 

                    Parameter skipParameter = null;

                    Parameter takeParameter = null;

                    if(queryWriter.SkipParameter != null)

                    {

                           queryWriter.SkipParameter.ExpectedType =
NHibernateUtil.Int32;

                           queryWriter.SkipParameter.IsSkipParameter();

                           skipParameter = Parameter.Placeholder;

                           skipParameter.BackTrack =
queryWriter.SkipParameter.GetIdsForBackTrack(sessionFactory).First();

                    }

                    if (queryWriter.TakeParameter != null)

                    {

                           queryWriter.TakeParameter.ExpectedType =
NHibernateUtil.Int32;

 
queryWriter.TakeParameter.IsTakeParameterWithSkipParameter(queryWriter.SkipP
arameter);

                           takeParameter = Parameter.Placeholder;

                           takeParameter.BackTrack =
queryWriter.TakeParameter.GetIdsForBackTrack(sessionFactory).First();

                    }

 

Into this

                    Parameter skipParameter = null;

                    Parameter takeParameter = null;

                    if(queryWriter.SkipParameter != null)

                    {

                           queryWriter.SkipParameter.ExpectedType =
NHibernateUtil.Int32;

                           queryWriter.SkipParameter.IsSkipParameter();

queryWriter.Skip = GetSkipParameterValueFromCurrentStatement();

                           skipParameter = Parameter.Placeholder;

                           skipParameter.BackTrack =
queryWriter.SkipParameter.GetIdsForBackTrack(sessionFactory).First();

                    }

                    if (queryWriter.TakeParameter != null)

                    {

                           queryWriter.TakeParameter.ExpectedType =
NHibernateUtil.Int32;

 
queryWriter.TakeParameter.IsTakeParameterWithSkipParameter(queryWriter.SkipP
arameter);

queryWriter.Take = GetTakeParameterValueFromCurrentStatement();

                           takeParameter = Parameter.Placeholder;

                           takeParameter.BackTrack =
queryWriter.TakeParameter.GetIdsForBackTrack(sessionFactory).First();

                    }

 

Can anyone tell me how can I get parameter value from factory on the current
query? 

 

De: [email protected]
[mailto:[email protected]] Em nome de Alexander I.
Zaytsev
Enviada em: terça-feira, 19 de junho de 2012 10:37
Para: [email protected]
Assunto: Re: [nhibernate-development] Small bug on Linq SqlGenerator
Skip/Take parameters

 

Hi, could you please provide any samples?

2012/6/19 Moisés Gonçalves <[email protected]>

It seems that the Linq providers aren’t being passed as limit and offset
query parameters to the dialects.

I’ve been following the way they go on Criteria expressions and the
parameters are correctly passed, but when I use skip/take on Linq
expressions the parameters are passed as null values to the QueryWriter.

Is there any discussion about this issue?

 

Reply via email to