Skip to content

Commit

Permalink
minor refactoring.
Browse files Browse the repository at this point in the history
  • Loading branch information
craiggwilson committed Apr 30, 2010
1 parent b725b68 commit 0723354
Show file tree
Hide file tree
Showing 18 changed files with 98 additions and 88 deletions.
Expand Up @@ -10,7 +10,7 @@ internal class AggregateSubqueryExpression : MongoExpression
{
private Expression _aggregateInGroupSelect;
private ScalarExpression _aggregateAsSubquery;
private string _groupByAlias;
private Alias _groupByAlias;

public Expression AggregateInGroupSelect
{
Expand All @@ -22,12 +22,12 @@ public ScalarExpression AggregateAsSubquery
get { return _aggregateAsSubquery; }
}

public string GroupByAlias
public Alias GroupByAlias
{
get { return _groupByAlias; }
}

public AggregateSubqueryExpression(string groupByAlias, Expression aggregateInGroupSelect, ScalarExpression aggregateAsSubquery)
public AggregateSubqueryExpression(Alias groupByAlias, Expression aggregateInGroupSelect, ScalarExpression aggregateAsSubquery)
: base(MongoExpressionType.AggregateSubquery, aggregateAsSubquery.Type)
{
_groupByAlias = groupByAlias;
Expand Down
2 changes: 1 addition & 1 deletion source/MongoDB/Linq/Expressions/Alias.cs
Expand Up @@ -5,6 +5,6 @@

namespace MongoDB.Linq.Expressions
{
public class Alias
internal sealed class Alias
{ }
}
23 changes: 23 additions & 0 deletions source/MongoDB/Linq/Expressions/AliasedExpression.cs
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MongoDB.Linq.Expressions
{
internal abstract class AliasedExpression : MongoExpression
{
private Alias _alias;

public Alias Alias
{
get { return _alias; }
}

protected AliasedExpression(MongoExpressionType nodeType, Type type, Alias alias)
: base(nodeType, type)
{
_alias = alias;
}
}
}
13 changes: 3 additions & 10 deletions source/MongoDB/Linq/Expressions/CollectionExpression.cs
Expand Up @@ -6,18 +6,12 @@

namespace MongoDB.Linq.Expressions
{
internal class CollectionExpression : MongoExpression
internal class CollectionExpression : AliasedExpression
{
private readonly string _alias;
private readonly string _collectionName;
private readonly IMongoDatabase _database;
private readonly Type _documentType;

public string Alias
{
get { return _alias; }
}

public string CollectionName
{
get { return _collectionName; }
Expand All @@ -33,10 +27,9 @@ public Type DocumentType
get { return _documentType; }
}

public CollectionExpression(Type type, string alias, IMongoDatabase database, string collectionName, Type documentType)
: base(MongoExpressionType.Collection, type)
public CollectionExpression(Alias alias, IMongoDatabase database, string collectionName, Type documentType)
: base(MongoExpressionType.Collection, typeof(void), alias)
{
_alias = alias;
_collectionName = collectionName;
_database = database;
_documentType = documentType;
Expand Down
6 changes: 3 additions & 3 deletions source/MongoDB/Linq/Expressions/FieldExpression.cs
Expand Up @@ -8,11 +8,11 @@ namespace MongoDB.Linq.Expressions
{
internal class FieldExpression : MongoExpression
{
private readonly string _alias;
private readonly Alias _alias;
private readonly Expression _expression;
private readonly string _name;

public string Alias
public Alias Alias
{
get { return _alias; }
}
Expand All @@ -27,7 +27,7 @@ public string Name
get { return _name; }
}

public FieldExpression(Expression expression, string alias, string name)
public FieldExpression(Expression expression, Alias alias, string name)
: base(MongoExpressionType.Field, expression.Type)
{
_alias = alias;
Expand Down
2 changes: 1 addition & 1 deletion source/MongoDB/Linq/Expressions/MongoExpressionVisitor.cs
Expand Up @@ -76,7 +76,7 @@ protected virtual Expression VisitSelect(SelectExpression select)
var take = Visit(select.Take);
var fields = VisitFieldDeclarationList(select.Fields);
if (from != select.From || where != select.Where || orderBy != select.OrderBy || groupBy != select.GroupBy || skip != select.Skip || take != select.Take || fields != select.Fields)
return new SelectExpression(select.Type, select.Alias, fields, from, where, orderBy, groupBy, select.Distinct, skip, take);
return new SelectExpression(select.Alias, fields, from, where, orderBy, groupBy, select.Distinct, skip, take);
return select;
}

Expand Down
2 changes: 1 addition & 1 deletion source/MongoDB/Linq/Expressions/ProjectionExpression.cs
Expand Up @@ -32,7 +32,7 @@ public ProjectionExpression(SelectExpression source, Expression projector)
{ }

public ProjectionExpression(SelectExpression source, Expression projector, LambdaExpression aggregator)
: base(MongoExpressionType.Projection, source.Type)
: base(MongoExpressionType.Projection, aggregator != null ? aggregator.Body.Type : typeof(IEnumerable<>).MakeGenericType(projector.Type))
{
_source = source;
_projector = projector;
Expand Down
21 changes: 9 additions & 12 deletions source/MongoDB/Linq/Expressions/SelectExpression.cs
Expand Up @@ -7,9 +7,8 @@

namespace MongoDB.Linq.Expressions
{
internal class SelectExpression : MongoExpression
internal class SelectExpression : AliasedExpression
{
private readonly string _alias;
private readonly bool _distinct;
private readonly ReadOnlyCollection<FieldDeclaration> _fields;
private readonly Expression _from;
Expand All @@ -19,11 +18,6 @@ internal class SelectExpression : MongoExpression
private readonly Expression _skip;
private readonly Expression _where;

public string Alias
{
get { return _alias; }
}

public bool Distinct
{
get { return _distinct; }
Expand Down Expand Up @@ -64,12 +58,16 @@ public Expression Where
get { return _where; }
}

public SelectExpression(Type type, string alias, IEnumerable<FieldDeclaration> fields, Expression from, Expression where)
: this(type, alias, fields, from, where, null, null, false, null, null)
public SelectExpression(Alias alias, IEnumerable<FieldDeclaration> fields, Expression from, Expression where)
: this(alias, fields, from, where, null, null)
{ }

public SelectExpression(Alias alias, IEnumerable<FieldDeclaration> fields, Expression from, Expression where, IEnumerable<OrderExpression> orderBy, Expression groupBy)
: this(alias, fields, from, where, orderBy, groupBy, false, null, null)
{ }

public SelectExpression(Type type, string alias, IEnumerable<FieldDeclaration> fields, Expression from, Expression where, IEnumerable<OrderExpression> orderBy, Expression groupBy, bool distinct, Expression skip, Expression take)
: base(MongoExpressionType.Select, type)
public SelectExpression(Alias alias, IEnumerable<FieldDeclaration> fields, Expression from, Expression where, IEnumerable<OrderExpression> orderBy, Expression groupBy, bool distinct, Expression skip, Expression take)
: base(MongoExpressionType.Select, typeof(void), alias)
{
_fields = fields as ReadOnlyCollection<FieldDeclaration>;
if (_fields == null)
Expand All @@ -79,7 +77,6 @@ public SelectExpression(Type type, string alias, IEnumerable<FieldDeclaration> f
if (_orderBy == null && orderBy != null)
_orderBy = new List<OrderExpression>(orderBy).AsReadOnly();

_alias = alias;
_distinct = distinct;
_from = from;
_groupBy = groupBy;
Expand Down
4 changes: 2 additions & 2 deletions source/MongoDB/Linq/Translators/AggregateRewriter.cs
Expand Up @@ -9,7 +9,7 @@ namespace MongoDB.Linq.Translators
{
internal class AggregateRewriter : MongoExpressionVisitor
{
ILookup<string, AggregateSubqueryExpression> _lookup;
ILookup<Alias, AggregateSubqueryExpression> _lookup;
Dictionary<AggregateSubqueryExpression, Expression> _map;

public AggregateRewriter()
Expand Down Expand Up @@ -47,7 +47,7 @@ protected override Expression VisitSelect(SelectExpression select)
_map.Add(ae, new FieldExpression(ae.AggregateInGroupSelect, ae.GroupByAlias, name));
fields.Add(field);
}
return new SelectExpression(select.Type, select.Alias, fields, select.From, select.Where, select.OrderBy, select.GroupBy, select.Distinct, select.Skip, select.Take);
return new SelectExpression(select.Alias, fields, select.From, select.Where, select.OrderBy, select.GroupBy, select.Distinct, select.Skip, select.Take);
}
return select;
}
Expand Down
6 changes: 3 additions & 3 deletions source/MongoDB/Linq/Translators/AliasesProduced.cs
Expand Up @@ -13,11 +13,11 @@ namespace MongoDB.Linq.Translators
/// </summary>
internal class AliasesProduced : MongoExpressionVisitor
{
private HashSet<string> _aliases;
private HashSet<Alias> _aliases;

public HashSet<string> Gather(Expression source)
public HashSet<Alias> Gather(Expression source)
{
_aliases = new HashSet<string>();
_aliases = new HashSet<Alias>();
Visit(source);
return _aliases;
}
Expand Down
4 changes: 3 additions & 1 deletion source/MongoDB/Linq/Translators/FieldBinder.cs
Expand Up @@ -15,10 +15,12 @@ internal class FieldBinder : ExpressionVisitor
typeof(ICollection), typeof(ICollection<>)
};

private Alias _alias;
private FieldFinder _finder;

public Expression Bind(Expression expression)
{
_alias = new Alias();
_finder = new FieldFinder();
return Visit(expression);
}
Expand All @@ -30,7 +32,7 @@ protected override Expression Visit(Expression exp)

var fieldName = _finder.Find(exp);
if (fieldName != null)
return new FieldExpression(exp, string.Empty, fieldName);
return new FieldExpression(exp, _alias, fieldName);

return base.Visit(exp);
}
Expand Down
12 changes: 6 additions & 6 deletions source/MongoDB/Linq/Translators/FieldMapper.cs
Expand Up @@ -10,19 +10,19 @@ namespace MongoDB.Linq.Translators
{
internal class FieldMapper : MongoExpressionVisitor
{
private HashSet<string> _oldAliases;
private string _newAlias;
private HashSet<Alias> _oldAliases;
private Alias _newAlias;

public Expression Map(Expression expression, string newAlias, IEnumerable<string> oldAliases)
public Expression Map(Expression expression, Alias newAlias, IEnumerable<Alias> oldAliases)
{
_oldAliases = new HashSet<string>(oldAliases);
_oldAliases = new HashSet<Alias>(oldAliases);
_newAlias = newAlias;
return Visit(expression);
}

public Expression Map(Expression expression, string newAlias, params string[] oldAliases)
public Expression Map(Expression expression, Alias newAlias, params Alias[] oldAliases)
{
return Map(expression, newAlias, (IEnumerable<string>)oldAliases);
return Map(expression, newAlias, (IEnumerable<Alias>)oldAliases);
}

protected override Expression VisitField(FieldExpression field)
Expand Down
8 changes: 4 additions & 4 deletions source/MongoDB/Linq/Translators/FieldProjector.cs
Expand Up @@ -13,11 +13,11 @@ namespace MongoDB.Linq.Translators
internal class FieldProjector : MongoExpressionVisitor
{
private HashSet<Expression> _candidates;
private string[] _existingAliases;
private Alias[] _existingAliases;
private HashSet<string> _fieldNames;
private List<FieldDeclaration> _fields;
private Dictionary<FieldExpression, FieldExpression> _map;
private string _newAlias;
private Alias _newAlias;
private Nominator _nominator;
private int columnIndex;

Expand All @@ -26,7 +26,7 @@ public FieldProjector(Func<Expression, bool> canBeField)
_nominator = new Nominator(canBeField);
}

public FieldProjection ProjectFields(Expression expression, string newAlias, params string[] existingAliases)
public FieldProjection ProjectFields(Expression expression, Alias newAlias, params Alias[] existingAliases)
{
_newAlias = newAlias;
_existingAliases = existingAliases;
Expand All @@ -48,7 +48,7 @@ protected override Expression Visit(Expression exp)
if (_map.TryGetValue(field, out mapped))
return mapped;

string alias = _existingAliases.Contains(field.Alias) ? field.Alias : _newAlias;
Alias alias = _existingAliases.Contains(field.Alias) ? field.Alias : _newAlias;
var ordinal = _fields.Count;
var fieldName = GetUniqueFieldName(field.Name);
_fields.Add(new FieldDeclaration(fieldName, field));
Expand Down
4 changes: 2 additions & 2 deletions source/MongoDB/Linq/Translators/OrderByRewriter.cs
Expand Up @@ -60,7 +60,7 @@ protected override Expression VisitSelect(SelectExpression select)
_gatheredOrderings = null;
}
if (orderings != select.OrderBy || fields != select.Fields)
select = new SelectExpression(select.Type, select.Alias, fields, select.From, select.Where, orderings, select.GroupBy, select.Distinct, select.Skip, select.Take);
select = new SelectExpression(select.Alias, fields, select.From, select.Where, orderings, select.GroupBy, select.Distinct, select.Skip, select.Take);

return select;
}
Expand Down Expand Up @@ -107,7 +107,7 @@ private void PrependOrderings(IList<OrderExpression> newOrderings)
}
}

private BindResult RebindOrderings(IEnumerable<OrderExpression> orderings, string alias, HashSet<string> existingAliases, IEnumerable<FieldDeclaration> existingFields)
private BindResult RebindOrderings(IEnumerable<OrderExpression> orderings, Alias alias, HashSet<Alias> existingAliases, IEnumerable<FieldDeclaration> existingFields)
{
List<FieldDeclaration> newFields = null;
var newOrderings = new List<OrderExpression>();
Expand Down

0 comments on commit 0723354

Please sign in to comment.