Inheritance: IQueryExpression
		public static HqlExpression ConvertBooleanToCase(HqlExpression node)
		{
			if (node is HqlBooleanExpression)
			{
				var builder = new HqlTreeBuilder();

				return builder.Case(
					new[] {builder.When(node, builder.True())},
					builder.False());
			}

			return node;
		}
示例#2
0
        public void AddOrderByClause(HqlExpression orderBy, HqlDirectionStatement direction)
        {
            var orderByRoot = Root.NodesPreOrder.Where(n => n is HqlOrderBy).FirstOrDefault();

            if (orderByRoot == null)
            {
                orderByRoot = TreeBuilder.OrderBy();
                Root.As<HqlQuery>().AddChild(orderByRoot);
            }

            orderByRoot.AddChild(orderBy);
            orderByRoot.AddChild(direction);
        }
        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);
        }
示例#4
0
 public HqlAdd(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.PLUS, "+", factory, lhs, rhs)
 {
 }
示例#5
0
 public HqlWhere(IASTFactory factory, HqlExpression expression)
     : base(HqlSqlWalker.WHERE, "where", factory, expression)
 {
 }
示例#6
0
		public HqlIsNotNull IsNotNull(HqlExpression lhs)
		{
			return new HqlIsNotNull(_factory, lhs);
		}
示例#7
0
		public HqlTreeNode Coalesce(HqlExpression lhs, HqlExpression rhs)
		{
			return new HqlCoalesce(_factory, lhs, rhs);
		}
示例#8
0
		public HqlCount Count(HqlExpression child)
		{
			return new HqlCount(_factory, child);
		}
示例#9
0
		public HqlMin Min(HqlExpression expression)
		{
			return new HqlMin(_factory, expression);
		}
示例#10
0
 public HqlWhen(IASTFactory factory, HqlExpression predicate, HqlExpression ifTrue)
     : base(HqlSqlWalker.WHEN, "when", factory, predicate, ifTrue)
 {
 }
示例#11
0
		public HqlWhen When(HqlExpression predicate, HqlExpression ifTrue)
		{
			return new HqlWhen(_factory, predicate, ifTrue);
		}
示例#12
0
 public HqlTake(IASTFactory factory, HqlExpression parameter)
     : base(HqlSqlWalker.TAKE, "take", factory, parameter)
 {
 }
示例#13
0
 public HqlElse(IASTFactory factory, HqlExpression ifFalse)
     : base(HqlSqlWalker.ELSE, "else", factory, ifFalse)
 {
 }
示例#14
0
 public HqlSkip(IASTFactory factory, HqlExpression parameter)
     : base(HqlSqlWalker.SKIP, "skip", factory, parameter)
 {
 }
示例#15
0
 public HqlHaving(IASTFactory factory, HqlExpression expression)
     : base(HqlSqlWalker.HAVING, "having", factory, expression)
 {
 }
示例#16
0
 public HqlWith(IASTFactory factory, HqlExpression expression)
     : base(HqlSqlWalker.WITH, "with", factory, expression)
 {
 }
示例#17
0
		public HqlSkip Skip(HqlExpression parameter)
		{
			return new HqlSkip(_factory, parameter);
		}
示例#18
0
 public HqlGreaterThanOrEqual(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.GE, "ge", factory, lhs, rhs)
 {
 }
示例#19
0
		public HqlSelect Select(HqlExpression expression)
		{
			return new HqlSelect(_factory, expression);
		}
示例#20
0
 public HqlGreaterThan(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.GT, "gt", factory, lhs, rhs)
 {
 }
示例#21
0
		public HqlLessThan LessThan(HqlExpression lhs, HqlExpression rhs)
		{
			return new HqlLessThan(_factory, lhs, rhs);
		}
示例#22
0
 public HqlLessThanOrEqual(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.LE, "le", factory, lhs, rhs)
 {
 }
示例#23
0
		public HqlAverage Average(HqlExpression expression)
		{
			return new HqlAverage(_factory, expression);
		}
示例#24
0
 public HqlLessThan(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.LT, "lt", factory, lhs, rhs)
 {
 }
示例#25
0
		public HqlJoin Join(HqlExpression expression, HqlAlias @alias)
		{
			return new HqlJoin(_factory, expression, @alias);
		}
示例#26
0
 public HqlInequality(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.NE, "ne", factory, lhs, rhs)
 {
 }
示例#27
0
		public HqlLeftFetchJoin LeftFetchJoin(HqlExpression expression, HqlAlias @alias)
		{
			return new HqlLeftFetchJoin(_factory, expression, @alias);
		}
示例#28
0
 public HqlEquality(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.EQ, "==", factory, lhs, rhs)
 {
 }
示例#29
0
		public HqlTreeNode Indices(HqlExpression dictionary)
		{
			return new HqlIndices(_factory, dictionary);
		}
示例#30
0
		public HqlDot Dot(HqlExpression lhs, HqlExpression rhs)
		{
			return new HqlDot(_factory, lhs, rhs);
		}
示例#31
0
 public HqlCount(IASTFactory factory, HqlExpression child)
     : base(HqlSqlWalker.COUNT, "count", factory, child)
 {
 }
示例#32
0
 public HqlDot(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.DOT, ".", factory, lhs, rhs)
 {
 }
示例#33
0
		public HqlDivide Divide(HqlExpression lhs, HqlExpression rhs)
		{
			return new HqlDivide(_factory, lhs, rhs);
		}
示例#34
0
 public HqlCast(IASTFactory factory, HqlExpression expression, System.Type type)
     : base(HqlSqlWalker.METHOD_CALL, "method", factory)
 {
     AddChild(new HqlIdent(factory, "cast"));
     AddChild(new HqlExpressionList(factory, expression, new HqlIdent(factory, type)));
 }
示例#35
0
		public HqlWhere Where(HqlExpression expression)
		{
			return new HqlWhere(_factory, expression);
		}
示例#36
0
 public HqlCoalesce(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.METHOD_CALL, "coalesce", factory)
 {
     AddChild(new HqlIdent(factory, "coalesce"));
     AddChild(new HqlExpressionList(factory, lhs, rhs));
 }
示例#37
0
		public HqlTake Take(HqlExpression parameter)
		{
			return new HqlTake(_factory, parameter);
		}
示例#38
0
 public HqlDictionaryIndex(IASTFactory factory, HqlExpression dictionary, HqlExpression index)
     : base(HqlSqlWalker.INDEX_OP, "[", factory, dictionary, index)
 {
 }
示例#39
0
		public HqlCase Case(HqlWhen[] whenClauses, HqlExpression ifFalse)
		{
			return new HqlCase(_factory, whenClauses, ifFalse);
		}
示例#40
0
 public HqlIndices(IASTFactory factory, HqlExpression dictionary)
     : base(HqlSqlWalker.INDICES, "indices", factory, dictionary)
 {
 }
示例#41
0
		public HqlElse Else(HqlExpression ifFalse)
		{
			return new HqlElse(_factory, ifFalse);
		}
示例#42
0
 public HqlAverage(IASTFactory factory, HqlExpression expression)
     : base(HqlSqlWalker.AGGREGATE, "avg", factory, expression)
 {
 }
示例#43
0
		public HqlGreaterThanOrEqual GreaterThanOrEqual(HqlExpression lhs, HqlExpression rhs)
		{
			return new HqlGreaterThanOrEqual(_factory, lhs, rhs);
		}
示例#44
0
 public HqlSum(IASTFactory factory, HqlExpression expression)
     : base(HqlSqlWalker.AGGREGATE, "sum", factory, expression)
 {
 }
示例#45
0
		public HqlCast Cast(HqlExpression expression, System.Type type)
		{
			return new HqlCast(_factory, expression, type);
		}
示例#46
0
 public HqlMin(IASTFactory factory, HqlExpression expression)
     : base(HqlSqlWalker.AGGREGATE, "min", factory, expression)
 {
 }
示例#47
0
		public HqlSum Sum(HqlExpression expression)
		{
			return new HqlSum(_factory, expression);
		}
示例#48
0
 public HqlJoin(IASTFactory factory, HqlExpression expression, HqlAlias @alias) : base(HqlSqlWalker.JOIN, "join", factory, expression, @alias)
 {
 }
示例#49
0
		public HqlMax Max(HqlExpression expression)
		{
			return new HqlMax(_factory, expression);
		}
示例#50
0
 public HqlLeftFetchJoin(IASTFactory factory, HqlExpression expression, HqlAlias @alias)
     : base(HqlSqlWalker.JOIN, "join", factory, new HqlLeft(factory), new HqlFetch(factory), expression, @alias)
 {
 }
示例#51
0
		public HqlLike Like(HqlExpression lhs, HqlExpression rhs)
		{
			return new HqlLike(_factory, lhs, rhs);
		}
示例#52
0
 public HqlBitwiseOr(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.BOR, "bor", factory, lhs, rhs)
 {
 }
示例#53
0
		public HqlIn In(HqlExpression itemExpression, HqlTreeNode source)
		{
			return new HqlIn(_factory, itemExpression, source);
		}
示例#54
0
 public HqlBitwiseAnd(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.BAND, "band", factory, lhs, rhs)
 {
 }
示例#55
0
		public HqlBitwiseOr BitwiseOr(HqlExpression lhs, HqlExpression rhs)
		{
			return new HqlBitwiseOr(_factory, lhs, rhs);
		}
示例#56
0
 public HqlLike(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
     : base(HqlSqlWalker.LIKE, "like", factory, lhs, rhs)
 {
 }
示例#57
0
		public HqlTreeNode DictionaryItem(HqlExpression dictionary, HqlExpression index)
		{
			return new HqlDictionaryIndex(_factory, dictionary, index);
		}
示例#58
0
 public HqlIsNotNull(IASTFactory factory, HqlExpression lhs) : base(HqlSqlWalker.IS_NOT_NULL, "is not null", factory, lhs)
 {
 }
示例#59
0
		public HqlEquality Equality(HqlExpression lhs, HqlExpression rhs)
		{
			return new HqlEquality(_factory, lhs, rhs);
		}
示例#60
0
 public HqlIn(IASTFactory factory, HqlExpression itemExpression, HqlTreeNode source)
     : base(HqlSqlWalker.IN, "in", factory, itemExpression)
 {
     AddChild(new HqlInList(factory, source));
 }