public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { string leadingOrTrailing = "TRAILING"; if (method.Name == "TrimLeading") leadingOrTrailing = "LEADING"; return treeBuilder.MethodCall("Trim", treeBuilder.Ident(leadingOrTrailing), visitor.Visit(arguments[1]).AsExpression(), treeBuilder.Ident("FROM"), visitor.Visit(arguments[0]).AsExpression()); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { // There is a problem with NHibernate when an identifier matches an entity's name. The resulting // SQL may be null in that situation. The searchTable's name is split in 2 identifiers to mitigate the problem. string searchTable = (string)((ConstantExpression)arguments[2]).Value; var searchTableFullName = searchTable.Split('.'); if (searchTableFullName.Length != 2) throw new FrameworkException("FullTextSearch table name '" + searchTable + "' must have format 'schema.table'."); string searchColumns = (string)((ConstantExpression)arguments[3]).Value; var parameters = new HqlExpression[] { visitor.Visit(arguments[0]).AsExpression(), visitor.Visit(arguments[1]).AsExpression(), treeBuilder.Ident(searchTableFullName[0]), treeBuilder.Ident(searchTableFullName[1]), treeBuilder.Ident(searchColumns), }; return treeBuilder.BooleanMethodCall("FullTextSearch", parameters); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { string trimWhere; if (method.Name == "TrimStart") trimWhere = "leading"; else if (method.Name == "TrimEnd") trimWhere = "trailing"; else trimWhere = "both"; string trimChars = ""; if (method.GetParameters().Length > 0) foreach (char c in (char[])((ConstantExpression)arguments[0]).Value) trimChars += c; if (trimChars == "") { return treeBuilder.MethodCall("trim", treeBuilder.Ident(trimWhere), treeBuilder.Ident("from"), visitor.Visit(targetObject).AsExpression()); } else { return treeBuilder.MethodCall("trim", treeBuilder.Ident(trimWhere), treeBuilder.Constant(trimChars), treeBuilder.Ident("from"), visitor.Visit(targetObject).AsExpression()); } }