I posted this on StackOverflow, but I haven't been able to get any traction 
on it, so I'll try asking here. I'm trying to port from 3.3.4 to 4.0.4. For 
the most part it's been pretty seamless, but I've run into an issue with my 
SQLite dialect that I use for my tests. Our production code uses Oracle, 
and so we've setup an alias from Oracle's *greatest* function to SQLite's 
*max* function. This worked fine in 3.3.4, but doesn't appear to work 
currently in 4.0.4 with my code.

So in our SQLite dialect constructor we have:

RegisterFunction(GreatestFunctionExtension.GreatestFunction, new 
StandardSQLFunction("max", NHibernateUtil.DateTime));


The extension is defined as:

public static class GreatestFunctionExtension
{
    public const String GreatestFunction = "greatest";
    [LinqExtensionMethod(GreatestFunction)]
    public static DateTime GreatestDateTime(DateTime?[] expression)
    {
        throw new NotImplementedException("GreatestDateTime");
    }
}


So we use this down in the projection for the query which looks similar too

            Session.Query<TwoDateEntity>().Select(f => new
            {
                GreatestDate = 
GreatestFunctionExtension.GreatestDateTime(new[]
                {
                    f.Date1,
                    f.Date2
                })
            }).ToList();

This only results in the GreatestDateTime NotImplementedException in 4.x. 
It generates SQL like:

    select twodateentity0_.DATE1 as col_0_0_, twodateentity0_.DATE2 as 
col_1_0_ from TWO_DATES twodateentity0_

Then it takes those two values and seems to pass them into the extension 
method.

In 3.3.4 it instead looks like:

    select max(twodateentity0_.DATE1, twodateentity0_.DATE2) as col_0_0_ 
from TWO_DATES twodateentity0_

I believe it has something to do with the collection. If I change it from 
max to count, and switch the parameters to a single value, it seems to 
function correctly. I've also tried switching from an Array to a List, but 
it ends in the same result.

Thank you for any help you can provide,

PM


-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhusers+unsubscr...@googlegroups.com.
To post to this group, send email to nhusers@googlegroups.com.
Visit this group at https://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to