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