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.