I still believe you're thinking about dialects the wrong way :) Consider
dialects a projection, an API in a sense. They allow you to register SQL
functions for use in HQL queries, or Sql column types to .NET system or user
types. They do not create those functions or columns in the SQL schema just
by the nature of being registered. You'll still need to use something like a
database object for custom SQL function creation to happen automatically.
That creates your function in SQL, and the dialect can then register that
function for use in HQL.

However, specifically with your setup, you're using a where="xxxx" attribute
in the collection. Where's use SQL syntax, not HQL. So I'm pretty sure that
registering the function with the dialect still won't help you out there.

On Fri, Dec 4, 2009 at 8:30 AM, Kristoffer Ahl <[email protected]> wrote:

> Hudson,
> Actually the end goal for me is to create a second dialect for SQLite
> which uses a different syntax. So I still think this might be the way
> but I can't get it to register the functions it seems. Any ideas on
> that?
> Thanks for your reply!
> / Kristoffer
>
> On 4 Dec, 15:16, Hudson Akridge <[email protected]> wrote:
> > A dialect's purpose is to manage the nuances between different Sql
> > languages. You're using it as a customization to an existing Sql
> language.
> > Basically think of it like this, it's intent isn't for you to add
> > functionality to that doesn't already exist, it's for you to register
> > differences in functionality between different query languages.
> >
> > What you're looking to do with registering your own function for use
> > elsewhere in your mappings would probably lead you to use a Database
> > object<
> http://ayende.com/Blog/archive/2009/04/16/nhibernate-mapping-ltdataba...>
> > .
> >
> >
> >
> > On Fri, Dec 4, 2009 at 7:21 AM, Kristoffer Ahl <[email protected]>
> wrote:
> > > I want to be able to call a custom function called "recent_date" as
> > > part of my HQL. Like this: [Date] >= recent_date()
> >
> > > I created a new dialect, inheriting from MsSql2000Dialect and
> > > specified the dialect for my configuration.
> >
> > > public class NordicMsSql2000Dialect : MsSql2000Dialect
> > > {
> > >    public NordicMsSql2000Dialect()
> > >    {
> > >        RegisterFunction(
> > >                "recent_date",
> > >                new SQLFunctionTemplate(
> > >                        NHibernateUtil.Date,
> > >                        "dateadd(day, -15, getdate())"
> > >                        )
> > >                );
> > >    }
> > > }
> >
> > > var configuration = Fluently.Configure()
> > > .Database(
> > >    MsSqlConfiguration.MsSql2000
> > >    .ConnectionString(c => .... )
> > >    .Cache(c => c.UseQueryCache().ProviderClass<HashtableCacheProvider>
> > > ())
> > >    .Dialect<NordicMsSql2000Dialect>()
> > > )
> > > .Mappings(m => ....)
> > > .BuildConfiguration();
> >
> > > When calling recent_date() I get the following error:
> > > System.Data.SqlClient.SqlException: 'recent_date' is not a recognized
> > > function name
> >
> > > I'm using it in a where statement for a HasMany-mapping like below.
> >
> > > HasMany(x => x.RecentValues)
> > >    .Access.CamelCaseField(Prefix.Underscore)
> > >    .Cascade.SaveUpdate()
> > >    .Where("Date >= recent_date()");
> >
> > > What am I missing here?
> >
> > > PS. I've also posted this question on Stackoverflow if you prefer to
> > > answer it there. Thanks!
> >
> > >http://stackoverflow.com/questions/1845884/custom-sql-function-for-nh.
> ..
> >
> > > --
> >
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Fluent NHibernate" group.
> > > To post to this group, send email to
> [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected]<fluent-nhibernate%[email protected]>
> <fluent-nhibernate%[email protected]<fluent-nhibernate%[email protected]>
> >
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/fluent-nhibernate?hl=en.
> >
> > --
> > - Hudsonhttp://www.bestguesstheory.comhttp://twitter.com/HudsonAkridge
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Fluent NHibernate" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<fluent-nhibernate%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/fluent-nhibernate?hl=en.
>
>
>


-- 
- Hudson
http://www.bestguesstheory.com
http://twitter.com/HudsonAkridge

--

You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en.


Reply via email to