コード例 #1
0
            public VirtualField([NotNull] SelectQuery.Column column)
            {
                if (column == null)
                {
                    throw new ArgumentNullException("column");
                }

                Column = column;
            }
コード例 #2
0
ファイル: SubQueryContext.cs プロジェクト: rabbers/linq2db
        protected virtual int GetIndex(SelectQuery.Column column)
        {
            int idx;

            if (!ColumnIndexes.TryGetValue(column, out idx))
            {
                idx = SelectQuery.Select.Add(column);
                ColumnIndexes.Add(column, idx);
            }

            return(idx);
        }
コード例 #3
0
        static bool CheckColumn(SelectQuery.Column column, ISqlExpression expr, SelectQuery query, bool optimizeValues, bool optimizeColumns)
        {
            if (expr is SqlField || expr is SelectQuery.Column)
            {
                return(false);
            }

            if (expr is SqlValue)
            {
                return(!optimizeValues && 1.Equals(((SqlValue)expr).Value));
            }

            if (expr is SqlBinaryExpression)
            {
                var e = (SqlBinaryExpression)expr;

                if (e.Operation == "*" && e.Expr1 is SqlValue)
                {
                    var value = (SqlValue)e.Expr1;

                    if (value.Value is int && (int)value.Value == -1)
                    {
                        return(CheckColumn(column, e.Expr2, query, optimizeValues, optimizeColumns));
                    }
                }
            }

            var visitor = new QueryVisitor();

            if (optimizeColumns &&
                QueryVisitor.Find(expr, e => e is SelectQuery || IsAggregationFunction(e)) == null)
            {
                var n = 0;
                var q = query.ParentSelect ?? query;

                visitor.VisitAll(q, e => { if (e == column)
                                           {
                                               n++;
                                           }
                                 });

                return(n > 2);
            }

            return(true);
        }
コード例 #4
0
        void BuildAnyAsCount()
        {
            SelectQuery.SearchCondition cond;

            if (SelectQuery.Select.Columns[0].Expression is SqlFunction)
            {
                var func = (SqlFunction)SelectQuery.Select.Columns[0].Expression;
                cond = (SelectQuery.SearchCondition)func.Parameters[0];
            }
            else
            {
                cond = (SelectQuery.SearchCondition)SelectQuery.Select.Columns[0].Expression;
            }

            var exist = ((SelectQuery.Predicate.FuncLike)cond.Conditions[0].Predicate).Function;
            var query = (SelectQuery)exist.Parameters[0];

            _selectColumn = new SelectQuery.Column(SelectQuery, new SqlExpression(cond.Conditions[0].IsNot ? "Count(*) = 0" : "Count(*) > 0"), SelectQuery.Select.Columns[0].Alias);

            BuildSql(0, query, StringBuilder);

            _selectColumn = null;
        }
コード例 #5
0
ファイル: AccessSqlBuilder.cs プロジェクト: jjchiw/linq2db
        void BuildAnyAsCount()
        {
            SelectQuery.SearchCondition cond;

            if (SelectQuery.Select.Columns[0].Expression is SqlFunction)
            {
                var func  = (SqlFunction)SelectQuery.Select.Columns[0].Expression;
                cond  = (SelectQuery.SearchCondition)func.Parameters[0];
            }
            else
            {
                cond  = (SelectQuery.SearchCondition)SelectQuery.Select.Columns[0].Expression;
            }

            var exist = ((SelectQuery.Predicate.FuncLike)cond.Conditions[0].Predicate).Function;
            var query = (SelectQuery)exist.Parameters[0];

            _selectColumn = new SelectQuery.Column(SelectQuery, new SqlExpression(cond.Conditions[0].IsNot ? "Count(*) = 0" : "Count(*) > 0"), SelectQuery.Select.Columns[0].Alias);

            BuildSql(0, query, StringBuilder);

            _selectColumn = null;
        }