private static bool ContainsTable(ISqlTableSource table, IQueryElement sql) { return(null != QueryVisitor.FindFirstOrDefault <IQueryExpression>( sql, e => e == table || e.ElementType == EQueryElementType.SqlField && table == ((ISqlField)e).Table || e.ElementType == EQueryElementType.Column && table == ((IColumn)e).Parent)); }
private static bool CheckColumn(IColumn column, IQueryExpression expr, ISelectQuery query, bool optimizeValues, bool optimizeColumns) { if (expr is ISqlField || expr is IColumn || expr is ISqlParameter) { return(false); } var sqlValue = expr as ISqlValue; if (sqlValue != null) { return(!optimizeValues && 1.Equals(sqlValue.Value)); } var sqlBinaryExpression = expr as ISqlBinaryExpression; if (sqlBinaryExpression != null) { var e = sqlBinaryExpression; var expr1 = e.Expr1 as ISqlValue; if (e.Operation == "*" && expr1 != null) { if (expr1.Value is int && (int)expr1.Value == -1) { return(CheckColumn(column, e.Expr2, query, optimizeValues, optimizeColumns)); } } } if (optimizeColumns && QueryVisitor.FindFirstOrDefault <ISelectQuery>(expr, IsAggregationFunction) == null) { var q = query.ParentSelect ?? query; var count = QueryVisitor.FindOnce <IColumn>(q).Count(e => e == column); return(count > 2); } return(true); }