public override HqlTreeNode BuildHql( MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { // Get the StringComparison argument. var comparison = (StringComparison)(arguments[1].As<ConstantExpression>().Value); if (comparison == StringComparison.CurrentCultureIgnoreCase || comparison == StringComparison.InvariantCultureIgnoreCase || comparison == StringComparison.OrdinalIgnoreCase) { // If the comparison calls for us to ignore the case, use SQL LOWER() return treeBuilder.Equality( treeBuilder.MethodCall("lower", new[] { visitor.Visit(targetObject).AsExpression() }), treeBuilder.MethodCall("lower", new[] { visitor.Visit(arguments[0]).AsExpression() })); } // Otherwise use the database's default string comparison mechanism. return treeBuilder.Equality( visitor.Visit(targetObject).AsExpression(), visitor.Visit(arguments[0]).AsExpression()); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression expression, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { string function = method.Name.ToLowerInvariant(); HqlExpression firstArgument = visitor.Visit(arguments[0]).AsExpression(); if (arguments.Count == 2) { return treeBuilder.MethodCall(function, firstArgument, visitor.Visit(arguments[1]).AsExpression()); } return treeBuilder.MethodCall(function, firstArgument); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { var comparison = (StringComparison)(arguments[1].As<ConstantExpression>().Value); if (comparison == StringComparison.CurrentCultureIgnoreCase || comparison == StringComparison.InvariantCultureIgnoreCase || comparison == StringComparison.OrdinalIgnoreCase) { return treeBuilder.Equality( treeBuilder.MethodCall("lower", new[] { visitor.Visit(targetObject).AsExpression() }), treeBuilder.MethodCall("lower", new[] { visitor.Visit(arguments[0]).AsExpression() })); } return treeBuilder.Equality( visitor.Visit(targetObject).AsExpression(), visitor.Visit(arguments[0]).AsExpression()); }
public override HqlTreeNode BuildHql( MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { var left = treeBuilder.Cast(visitor.Visit(targetObject).AsExpression(), typeof(string)); var right = treeBuilder.Cast(visitor.Visit(arguments.First()).AsExpression(), typeof(string)); var leftSubstring = treeBuilder.MethodCall("substring", left, treeBuilder.Constant(4)); var rightSubstring = treeBuilder.MethodCall("substring", right, treeBuilder.Constant(4)); var equals = treeBuilder.Equality(leftSubstring, rightSubstring); return equals; }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { IEnumerable<HqlExpression> args = visitor.Visit(targetObject) .Union(arguments.Select(a => visitor.Visit(a))) .Cast<HqlExpression>(); return treeBuilder.MethodCall(_name, args); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { var arg = visitor.Visit(arguments[0]).AsExpression(); var mt = treeBuilder.MethodCall("hid_Parse", arg); return mt; }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { var arg = visitor.Visit(arguments[0]).AsExpression(); var c1 = visitor.Visit(arguments[1]).AsExpression(); var c2 = visitor.Visit(arguments[2]).AsExpression(); var mt = treeBuilder.MethodCall("hid_GetReparentedValue", arg, c1, c2); return mt; }
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) { if (arguments.Count == 1) { return treeBuilder.MethodCall("locate", visitor.Visit(arguments[0]).AsExpression(), visitor.Visit(targetObject).AsExpression(), treeBuilder.Constant(0)); } return treeBuilder.MethodCall("locate", visitor.Visit(arguments[0]).AsExpression(), visitor.Visit(targetObject).AsExpression(), visitor.Visit(arguments[1]).AsExpression()); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { string methodName; if (((method.Name == "ToUpper") || (method.Name == "ToUpperInvariant"))) { methodName = "upper"; } else { methodName = "lower"; } return treeBuilder.MethodCall(methodName, visitor.Visit(targetObject).AsExpression()); }
public HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { return treeBuilder.MethodCall("str", visitor.Visit(targetObject).AsExpression()); }
public override HqlTreeNode BuildHql(MemberInfo member, Expression expression, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { return treeBuilder.MethodCall(member.Name.ToLowerInvariant(), visitor.Visit(expression).AsExpression()); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { HqlMethodCall locate; if (arguments.Count == 1) { locate = treeBuilder.MethodCall("locate", visitor.Visit(arguments[0]).AsExpression(), visitor.Visit(targetObject).AsExpression()); //, //treeBuilder.Constant(0)); } else { var start = treeBuilder.Add(visitor.Visit(arguments[1]).AsExpression(), treeBuilder.Constant(1)); locate = treeBuilder.MethodCall("locate", visitor.Visit(arguments[0]).AsExpression(), visitor.Visit(targetObject).AsExpression(), start); } return treeBuilder.Subtract(locate,treeBuilder.Constant(1)); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { var stringExpr = visitor.Visit(targetObject).AsExpression(); var start = treeBuilder.Add(visitor.Visit(arguments[0]).AsExpression(), treeBuilder.Constant(1)); if (arguments.Count == 1) return treeBuilder.MethodCall("substring", stringExpr, start); var length = visitor.Visit(arguments[1]).AsExpression(); return treeBuilder.MethodCall("substring", stringExpr, start, length); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { var length = arguments.Count == 1 ? treeBuilder.Subtract(treeBuilder.MethodCall("length", visitor.Visit(targetObject).AsExpression()), visitor.Visit(arguments[0]).AsExpression()) : visitor.Visit(arguments[1]).AsExpression(); return treeBuilder.MethodCall("substring", visitor.Visit(targetObject).AsExpression(), treeBuilder.Add(visitor.Visit(arguments[0]).AsExpression(), treeBuilder.Constant(1)), length); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { return treeBuilder.MethodCall("replace", visitor.Visit(targetObject).AsExpression(), visitor.Visit(arguments[0]).AsExpression(), visitor.Visit(arguments[1]).AsExpression()); }
public override HqlTreeNode BuildHql(MemberInfo member, Expression expression, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { return treeBuilder.MethodCall("length", visitor.Visit(expression).AsExpression()); }
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()); } }