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; }
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); }
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; }
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; }