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.