protected override Expression VisitConstant(ConstantExpression expression)
            {
                var value = expression.Value;
                if (value.DataType is QueryType)
                    hasSubQuery = true;

                return base.VisitConstant(expression);
            }
            protected override Expression VisitConstant(ConstantExpression expression)
            {
                if (expression.Value.DataType is QueryType) {
                    TableNames = ((IQueryPlanNode)expression.Value.Value).DiscoverTableNames(TableNames);
                }

                return expression;
            }
            protected override Expression VisitConstant(ConstantExpression expression)
            {
                var value = expression.Value;
                if (value.DataType is ArrayType) {
                    var exps = (IEnumerable<Expression>) value.Value;
                    VisitExpressionList(new ReadOnlyCollection<Expression>(exps.ToList()));
                }

                return base.VisitConstant(expression);
            }
            protected override Expression VisitConstant(ConstantExpression expression)
            {
                var value = expression.Value;
                if (value.DataType is QueryType) {
                    var planNode = (IQueryPlanNode) value.Value;
                    variables = planNode.DiscoverCorrelatedVariables(queryLevel + 1, variables);
                }

                return expression;
            }
            protected override Expression VisitConstant(ConstantExpression expression)
            {
                var value = expression.Value;
                if (!value.IsNull) {
                    if (value.DataType is QueryType) {
                        isConstant = false;
                    } else if (value.DataType is ArrayType) {
                        var array = (IEnumerable<Expression>) value.Value;
                        if (array.Any(exp => !exp.IsConstant()))
                            isConstant = false;
                    }
                }

                return base.VisitConstant(expression);
            }
 protected override Expression VisitConstant(ConstantExpression expression)
 {
     return DoPrepare(expression);
 }
 protected override Expression VisitConstant(ConstantExpression expression)
 {
     returnType = expression.Value.DataType;
     return expression;
 }
 protected virtual Expression VisitConstant(ConstantExpression expression)
 {
     return expression;
 }