It´s a pity that a powerful framework like NHibernate fails on such a
"simple task", it would be so easy if there just was a function to call
were you could more freely type your function signature. It´s not like
NHibernate is doing any complicated work on it in the end it´s just sent to
the database. Seems a bit overcomplicated that way it works now.
I actually though about a custom function in MySQL as a workaround, tho my
first test didn´t work as it didn´t seem to like referencing a column in
the function. But maybe it´s possible I just did it wrong, maybe a should
have another look.
Anyway thanks for the answer, really appreciate you taking your time.
Den torsdagen den 5:e juni 2014 kl. 20:54:47 UTC+2 skrev Ricardo Peres:
>
> AFAIK, this method only works for translating custom extensions into HQL.
> Since HQL does not support MATCH...AGAINST, there's nothing you can do.
> One possible alternative could possibly be writing a custom function in
> MySQL that would wrap MATCH...AGAINST and calling it from LINQ. That is
> possible.
>
> RP
>
>
> On Thursday, June 5, 2014 8:41:49 AM UTC+1, Joel Hervén wrote:
>>
>> I´ve tried to write a LINQ extension that executes the MySQL function
>> MATCH(...,...) AGAINST(...). But I have not been able to translate it into
>> appropriate HQL because of the "two functions" syntax.
>>
>> To have something to look at I wrote this method
>>
>> public override HqlTreeNode BuildHql(MethodInfo method, Expression
>> targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder
>> treeBuilder, IHqlExpressionVisitor visitor)
>> {
>> var e1 = treeBuilder.MethodCall("MATCH", new[]
>> {
>> visitor.Visit(arguments[0]).AsExpression(),
>> });
>>
>> var e2 = treeBuilder.MethodCall("AGAINST", new[]
>> {
>> visitor.Visit(arguments[1]).AsExpression(),
>> });
>>
>> return
>> treeBuilder.Equality(e1, e2);
>> }
>>
>> The Equality method is obviously not the correct thing here but it will
>> generate the SQL "MATCH(....)+AGAINST(....)" which is very close to correct
>> except the + sign that shouldn´t be there. I have looked at the
>> HqlTreeBuilder many times but I can´t find a working method to just add up
>> the methods like needed here.
>>
>> So next thing was to look at the HqlTreeBuilder and try to extend with an
>> alternative
>>
>> public class HqlDoubleMethod : HqlBooleanExpression
>> {
>> public HqlDoubleMethod(IASTFactory factory, HqlExpression lhs,
>> HqlExpression rhs)
>> : base(0, "", factory, lhs, rhs)
>> {
>> }
>> }
>>
>> Calling this method instead of Equality results in a
>> RewriteEmptyStreamException rule b
>>
>>
>> Is it possible to implement this kind of function without modifying the
>> Nhibernate-core?
>>
>
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.