public VirtualField([NotNull] SelectQuery.Column column) { if (column == null) { throw new ArgumentNullException("column"); } Column = column; }
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); }
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); }
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; }