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