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.

Reply via email to