Ejemplo n.º 1
0
        public virtual void AddLimit(int limit)
        {
            if (_limit != null)
            {
                var subquery = new SelectExpression();

                var columnAliasCounter = 0;

                foreach (var columnExpression in _projection)
                {
                    if (subquery._projection.FindIndex(ce => ce.Name == columnExpression.Name) != -1)
                    {
                        columnExpression.Alias = "c" + columnAliasCounter++;
                    }

                    subquery._projection.Add(columnExpression);
                }

                subquery.AddTables(_tables);
                subquery.AddToOrderBy(_orderBy);

                subquery._limit = _limit;

                _tables.Clear();
                _projection.Clear();

                ClearOrderBy();

                _projectStar = true;
                _subquery    = subquery;
            }

            _limit = limit;
        }
Ejemplo n.º 2
0
        private void PushDownSubquery()
        {
            var subquery = new SelectExpression();

            var columnAliasCounter = 0;

            foreach (var columnExpression in _projection)
            {
                if (subquery._projection.FindIndex(ce => ce.Name == columnExpression.Name) != -1)
                {
                    columnExpression.Alias = "c" + columnAliasCounter++;
                }

                subquery._projection.Add(columnExpression);
            }

            subquery.AddTables(_tables);
            subquery.AddToOrderBy(_orderBy);

            subquery._limit       = _limit;
            subquery._isDistinct  = _isDistinct;
            subquery._subquery    = _subquery;
            subquery._projectStar = _projectStar;

            _limit      = null;
            _isDistinct = false;

            ClearTables();
            ClearProjection();
            ClearOrderBy();

            _projectStar = true;
            _subquery    = subquery;
        }
        private SelectExpression PushDownSubquery()
        {
            _subqueryDepth
                = _subqueryDepth != null
                    ? _subqueryDepth + 1
                    : 0;

            var subquery
                = new SelectExpression("t" + _subqueryDepth);

            var columnAliasCounter = 0;

            foreach (var aliasExpression in _projection.OfType <AliasExpression>())
            {
                var columnExpression = ((Expression)aliasExpression).TryGetColumnExpression();
                if (columnExpression != null &&
                    subquery._projection.OfType <AliasExpression>().Any(ae =>
                                                                        ae.TryGetColumnExpression()?.Name == columnExpression.Name))
                {
                    aliasExpression.Alias = "c" + columnAliasCounter++;
                }

                subquery._projection.Add(aliasExpression);
            }

            subquery.AddTables(_tables);
            subquery.AddToOrderBy(_orderBy);

            subquery._limit         = _limit;
            subquery._offset        = _offset;
            subquery._isDistinct    = _isDistinct;
            subquery._subqueryDepth = _subqueryDepth;
            subquery._projectStar   = _projectStar;

            _limit      = null;
            _offset     = null;
            _isDistinct = false;

            ClearTables();
            ClearProjection();
            ClearOrderBy();

            _projectStar = true;

            AddTable(subquery);

            return(subquery);
        }
Ejemplo n.º 4
0
        private SelectExpression PushDownSubquery()
        {
            _subqueryDepth
                = _subqueryDepth != null
                    ? _subqueryDepth + 1
                    : 0;

            var subquery
                = new SelectExpression("t" + _subqueryDepth);

            var columnAliasCounter = 0;

            foreach (var columnExpression in _projection)
            {
                if (subquery._projection.FindIndex(ce => ce.Name == columnExpression.Name) != -1)
                {
                    columnExpression.Alias = "c" + columnAliasCounter++;
                }

                subquery._projection.Add(columnExpression);
            }

            subquery.AddTables(_tables);
            subquery.AddToOrderBy(_orderBy);

            subquery._limit         = _limit;
            subquery._offset        = _offset;
            subquery._isDistinct    = _isDistinct;
            subquery._subqueryDepth = _subqueryDepth;
            subquery._projectStar   = _projectStar;

            _limit      = null;
            _offset     = null;
            _isDistinct = false;

            ClearTables();
            ClearProjection();
            ClearOrderBy();

            _projectStar = true;

            AddTable(subquery);

            return(subquery);
        }
        public virtual SelectExpression Clone([NotNull] string alias)
        {
            Check.NotEmpty(alias, nameof(alias));

            var selectExpression
                = new SelectExpression(alias)
                    {
                        _limit = _limit,
                        _offset = _offset,
                        _isDistinct = _isDistinct,
                        _subqueryDepth = _subqueryDepth,
                        _projectStar = _projectStar,
                        Predicate = Predicate
                    };

            selectExpression._projection.AddRange(_projection);

            selectExpression.AddTables(_tables);
            selectExpression.AddToOrderBy(_orderBy);

            return selectExpression;
        }
Ejemplo n.º 6
0
        public virtual SelectExpression Clone([NotNull] string alias)
        {
            Check.NotEmpty(alias, "alias");

            var selectExpression
                = new SelectExpression(alias)
                {
                _limit         = _limit,
                _offset        = _offset,
                _isDistinct    = _isDistinct,
                _subqueryDepth = _subqueryDepth,
                _projectStar   = _projectStar,
                Predicate      = Predicate
                };

            selectExpression._projection.AddRange(_projection);

            selectExpression.AddTables(_tables);
            selectExpression.AddToOrderBy(_orderBy);

            return(selectExpression);
        }
        private SelectExpression PushDownSubquery()
        {
            _subqueryDepth
                = _subqueryDepth != null
                    ? _subqueryDepth + 1
                    : 0;

            var subquery
                = new SelectExpression("t" + _subqueryDepth);

            var columnAliasCounter = 0;

            foreach (var aliasExpression in _projection.OfType<AliasExpression>())
            {
                var columnExpression = ((Expression)aliasExpression).TryGetColumnExpression();
                if (columnExpression != null
                    && subquery._projection.OfType<AliasExpression>().Any(ae =>
                        ae.TryGetColumnExpression()?.Name == columnExpression.Name))
                {
                    aliasExpression.Alias = "c" + columnAliasCounter++;
                }

                subquery._projection.Add(aliasExpression);
            }

            subquery.AddTables(_tables);
            subquery.AddToOrderBy(_orderBy);

            subquery._limit = _limit;
            subquery._offset = _offset;
            subquery._isDistinct = _isDistinct;
            subquery._subqueryDepth = _subqueryDepth;
            subquery._projectStar = _projectStar;

            _limit = null;
            _offset = null;
            _isDistinct = false;

            ClearTables();
            ClearProjection();
            ClearOrderBy();

            _projectStar = true;

            AddTable(subquery);

            return subquery;
        }
Ejemplo n.º 8
0
        private void PushDownSubquery()
        {
            var subquery = new SelectExpression();

            var columnAliasCounter = 0;

            foreach (var columnExpression in _projection)
            {
                if (subquery._projection.FindIndex(ce => ce.Name == columnExpression.Name) != -1)
                {
                    columnExpression.Alias = "c" + columnAliasCounter++;
                }

                subquery._projection.Add(columnExpression);
            }
            
            subquery.AddTables(_tables);
            subquery.AddToOrderBy(_orderBy);

            subquery._limit = _limit;
            subquery._isDistinct = _isDistinct;
            subquery._subquery = _subquery;
            subquery._projectStar = _projectStar;

            _limit = null;
            _isDistinct = false;

            ClearTables();
            ClearProjection();
            ClearOrderBy();

            _projectStar = true;
            _subquery = subquery;
        }