Which is the problem you have found implementing NullSafeEquals(p1,p2) ?

On Sat, Aug 28, 2010 at 6:13 PM, Patrick Earl <[email protected]> wrote:

> Thanks for your feedback Fabio.  The function would be similar to
> EqOrNullExpression but would offer the following additional
> functionality:
>
> 1.  It would work for database columns and subselects as well, not
> just parameters passed from .NET.
> 3.  The HQL function would make the code easy to read and eliminate
> the possibility of error in this area where errors are common.
> 2.  The function could easily be mapped from a LINQ method call.
>
> For example, NullSafeEquals(x.Prop1, x.Prop2).  I see that a method
> similar to EqOrNullExpression could be implemented to provide support
> for comparing projections in the criteria API.  However, my immediate
> problem was HQL based, and I would like this to be solvable with LINQ
> as well.  Alternatives include implementing something like "IS
> DISTINCT FROM" as a built-in HQL operation and then having a LINQ
> method map to that type of node.  The dialect would then specifically
> handle the SQL implementation using the SQL-99 IS [NOT] DISTINCT FROM,
> MySQL <=>, or the complicated clause as needed.
>
>        Patrick Earl
>
> On Aug 28, 1:13 pm, Fabio Maulo <[email protected]> wrote:
> > Personally I didn't understand which is the function you are needing.
> > Can you explain a usecase ?
> >
> > In criteria base queries with a property compared to a parameter that
> > function is unneeded... perhaps you are thinking something else than
> > EqOrNullExpression... I'll wait your explication.
> >
> >
> >
> >
> >
> > On Sat, Aug 28, 2010 at 4:02 PM, Patrick Earl <[email protected]> wrote:
> > > Solution #1 (duplicate positional parameters based on template
> > > contents) looks to be somewhat complicated to implement.
> > > Solution #2 (manipulate HQL AST and parameter list) doesn't work for
> > > ICriteria / QueryOver.
> > > Solution #3 (replace positional parameters with named) seems
> > > potentially viable.
> >
> > > I have two "big" questions:
> >
> > > 1.  Are there cases where positional parameters are required, or is it
> > > reasonable to always pre-process positional parameters into named
> > > parameters?  Along with this, what kind of parameters do the criteria
> > > API and Linq generate?  Are they always named parameters?
> > > 2.  Why is it required that the type of a null parameter is known.  In
> > > other words, why is it necessary to call SetParameter with a type
> > > overload?  Is there any way to say "put NULL in the DB query and
> > > disregard the type?"
> >
> > > I'll do some digging, but if anyone knows this stuff off-hand, that'd
> > > be great to know.
> >
> > >        Patrick Earl
> >
> > > On Aug 28, 2:55 am, Patrick Earl <[email protected]> wrote:
> > > > I'm interested in implementing a function to duplicate the behavior
> of
> > > > "IS NOT DISTINCT FROM" on SQL Server.  On PostgreSQL, I'd simply use
> ?
> > > > 1 IS NOT DISTINCT FROM ?2 as the function template.  On SQL Server
> > > > though, the template involves repeating the same argument: (?1 IS
> NULL
> > > > AND ?2 IS NULL) OR (?1 IS NOT NULL AND ?2 IS NOT NULL AND ?1 = ?2)
> >
> > > > Unfortunately, when used with positional parameters, the function
> > > > template is not processed correctly.  The system duplicates the ?
> > > > within the query, but it doesn't add another copy of the parameter to
> > > > the parameter list.  Here are some possible techniques for dealing
> > > > with this issue:
> >
> > > > 1.  Create another interface like ISQLParameterizedFunction that
> > > > allows modification of the parameter list as well.
> > > > 2.  Allow dialects to access the HQL AST and parameter list and
> modify
> > > > them directly.
> > > > 3.  Replace the positional parameters with named parameters.
> >
> > > > Sadly, I'm too tired for my brain to work properly.  I just wanted to
> > > > get these thoughts out there to see if anyone had any feedback or
> work-
> > > > arounds.
> >
> > > >         Patrick Earl
> >
> > --
> > Fabio Maulo
>



-- 
Fabio Maulo

Reply via email to