From: <te...@us...> - 2008-09-20 22:06:52
|
Revision: 3778 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3778&view=rev Author: tehlike Date: 2008-09-20 22:06:36 +0000 (Sat, 20 Sep 2008) Log Message: ----------- Adding OneToOnePropertyExpression, AssociationPropertyExpression, OneToManyPropertyExpression in order to handle associations easier. Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Linq/Expressions/NHExpressionType.cs trunk/nhibernate/src/NHibernate.Linq/NHibernate.Linq.csproj trunk/nhibernate/src/NHibernate.Linq/Visitors/AssociationRewriteVisitor.cs trunk/nhibernate/src/NHibernate.Linq/Visitors/NHibernateExpressionVisitor.cs Added Paths: ----------- trunk/nhibernate/src/NHibernate.Linq/Expressions/AssociationPropertyExpression.cs trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToManyPropertyExpression.cs trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToOnePropertyExpression.cs trunk/nhibernate/src/NHibernate.Linq/Visitors/JoinGatherer.cs Removed Paths: ------------- trunk/nhibernate/src/NHibernate.Linq/Expressions/CollectionPropertyExpression.cs Added: trunk/nhibernate/src/NHibernate.Linq/Expressions/AssociationPropertyExpression.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Expressions/AssociationPropertyExpression.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Linq/Expressions/AssociationPropertyExpression.cs 2008-09-20 22:06:36 UTC (rev 3778) @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Linq.Expressions; +using NHibernate.Type; + +namespace NHibernate.Linq.Expressions +{ + public abstract class AssociationPropertyExpression:PropertyExpression + { + public AssociationPropertyExpression(string name,NHExpressionType nodeType,System.Type type, + Expression source,IType nhType):base(name,nodeType,type,source,nhType) + { + + } + + public IAssociationType AssociationType { get { return base.NHibernateType as IAssociationType; } } + } +} Deleted: trunk/nhibernate/src/NHibernate.Linq/Expressions/CollectionPropertyExpression.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Expressions/CollectionPropertyExpression.cs 2008-09-20 16:50:54 UTC (rev 3777) +++ trunk/nhibernate/src/NHibernate.Linq/Expressions/CollectionPropertyExpression.cs 2008-09-20 22:06:36 UTC (rev 3778) @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using NHibernate.Type; - -namespace NHibernate.Linq.Expressions -{ - public class CollectionPropertyExpression : PropertyExpression - { - public CollectionPropertyExpression(string name, System.Type type, Expression source, IType nhibernateType) - : base(name,NHExpressionType.CollectionProperty, type, source, nhibernateType) - { - } - - public CollectionType CollectionType { get { return base.NHibernateType as CollectionType; } } - } -} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Linq/Expressions/NHExpressionType.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Expressions/NHExpressionType.cs 2008-09-20 16:50:54 UTC (rev 3777) +++ trunk/nhibernate/src/NHibernate.Linq/Expressions/NHExpressionType.cs 2008-09-20 22:06:36 UTC (rev 3778) @@ -7,7 +7,8 @@ Projection, SimpleProperty, ComponentProperty, - CollectionProperty, + OneToManyProperty, + OneToOneProperty, Order, } } \ No newline at end of file Copied: trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToManyPropertyExpression.cs (from rev 3777, trunk/nhibernate/src/NHibernate.Linq/Expressions/CollectionPropertyExpression.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToManyPropertyExpression.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToManyPropertyExpression.cs 2008-09-20 22:06:36 UTC (rev 3778) @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using NHibernate.Type; + +namespace NHibernate.Linq.Expressions +{ + public class OneToManyPropertyExpression : AssociationPropertyExpression + { + public OneToManyPropertyExpression(string name, System.Type type, Expression source, IType nhibernateType) + : base(name,NHExpressionType.OneToManyProperty, type, source, nhibernateType) + { + } + + public CollectionType CollectionType { get { return base.AssociationType as CollectionType; } } + } +} \ No newline at end of file Property changes on: trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToManyPropertyExpression.cs ___________________________________________________________________ Added: svn:mergeinfo + Added: trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToOnePropertyExpression.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToOnePropertyExpression.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToOnePropertyExpression.cs 2008-09-20 22:06:36 UTC (rev 3778) @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using NHibernate.Type; + +namespace NHibernate.Linq.Expressions +{ + public class OneToOnePropertyExpression:AssociationPropertyExpression + { + public OneToOnePropertyExpression(string name, System.Type type, Expression source, IType nhType) + : base(name, NHExpressionType.OneToOneProperty, type, source, nhType) + { + + } + + public OneToOneType OneToOneType { get { return base.AssociationType as OneToOneType; } } + } +} Property changes on: trunk/nhibernate/src/NHibernate.Linq/Expressions/OneToOnePropertyExpression.cs ___________________________________________________________________ Added: svn:mergeinfo + Modified: trunk/nhibernate/src/NHibernate.Linq/NHibernate.Linq.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/NHibernate.Linq.csproj 2008-09-20 16:50:54 UTC (rev 3777) +++ trunk/nhibernate/src/NHibernate.Linq/NHibernate.Linq.csproj 2008-09-20 22:06:36 UTC (rev 3778) @@ -50,8 +50,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Compile Include="Expressions\CollectionPropertyExpression.cs" /> + <Compile Include="Expressions\AssociationPropertyExpression.cs" /> + <Compile Include="Expressions\OneToManyPropertyExpression.cs" /> <Compile Include="Expressions\ComponentPropertyExpression.cs" /> + <Compile Include="Expressions\OneToOnePropertyExpression.cs" /> <Compile Include="Expressions\OrderExpression.cs" /> <Compile Include="Expressions\OrderType.cs" /> <Compile Include="Expressions\ProjectionExpression.cs" /> @@ -65,6 +67,7 @@ <Compile Include="Util\Guard.cs" /> <Compile Include="Util\LinqUtil.cs" /> <Compile Include="Visitors\AssociationRewriteVisitor.cs" /> + <Compile Include="Visitors\JoinGatherer.cs" /> <Compile Include="Visitors\LogicalExpressionReducer.cs" /> <Compile Include="ExpressionVisitor.cs" /> <Compile Include="NHibernateExtensions.cs" /> Modified: trunk/nhibernate/src/NHibernate.Linq/Visitors/AssociationRewriteVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Visitors/AssociationRewriteVisitor.cs 2008-09-20 16:50:54 UTC (rev 3777) +++ trunk/nhibernate/src/NHibernate.Linq/Visitors/AssociationRewriteVisitor.cs 2008-09-20 22:06:36 UTC (rev 3778) @@ -59,19 +59,18 @@ ((PropertyInfo) expr.Member).PropertyType, source, propertyType); } - else if(propertyType.IsAssociationType) + else if (propertyType is OneToOneType) { - throw new NotImplementedException("Queries on associations are not yet supported"); + Expression source = base.Visit(expr.Expression); + return new OneToOnePropertyExpression(propertyName, expr.Type, source, propertyType); } - else if(propertyType.IsCollectionType) + else if(!propertyType.IsAssociationType)//assume simple property { - throw new NotImplementedException("Queries on collections are not yet supported"); + return new SimplePropertyExpression(expr.Member.Name, mapping.ToColumns(propertyName)[0], + ((PropertyInfo) expr.Member).PropertyType, + base.Visit(expr.Expression), propertyType); } - else//Assume simple property - { - return new SimplePropertyExpression(expr.Member.Name,mapping.ToColumns(propertyName)[0], ((PropertyInfo) expr.Member).PropertyType, - base.Visit(expr.Expression), propertyType); - } + return expr; } protected override Expression VisitConstant(ConstantExpression c) Added: trunk/nhibernate/src/NHibernate.Linq/Visitors/JoinGatherer.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Visitors/JoinGatherer.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Linq/Visitors/JoinGatherer.cs 2008-09-20 22:06:36 UTC (rev 3778) @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NHibernate.Engine; +using NHibernate.Mapping; +using NHibernate.Type; + +namespace NHibernate.Linq.Visitors +{ + public class SelectWhereJoinGatherer:NHibernateExpressionVisitor + { + public override System.Linq.Expressions.Expression Visit(System.Linq.Expressions.Expression exp) + { + return base.Visit(exp); + } + } +} Modified: trunk/nhibernate/src/NHibernate.Linq/Visitors/NHibernateExpressionVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Visitors/NHibernateExpressionVisitor.cs 2008-09-20 16:50:54 UTC (rev 3777) +++ trunk/nhibernate/src/NHibernate.Linq/Visitors/NHibernateExpressionVisitor.cs 2008-09-20 22:06:36 UTC (rev 3778) @@ -23,8 +23,10 @@ return VisitProjection((ProjectionExpression) exp); case NHExpressionType.SimpleProperty: return VisitSimpleProperty((SimplePropertyExpression) exp); - case NHExpressionType.CollectionProperty: - return VisitCollectionProperty((CollectionPropertyExpression)exp); + case NHExpressionType.OneToManyProperty: + return VisitOneToManyProperty((OneToManyPropertyExpression)exp); + case NHExpressionType.OneToOneProperty: + return VisitOneToOneProperty((OneToOnePropertyExpression)exp); case NHExpressionType.ComponentProperty: return VisitComponentProperty((ComponentPropertyExpression) exp); default: @@ -33,6 +35,8 @@ } + + protected virtual Expression VisitProjection(ProjectionExpression projection) { var source = (SelectExpression) Visit(projection.Source); @@ -65,14 +69,20 @@ return property; } - private Expression VisitCollectionProperty(CollectionPropertyExpression property) + private Expression VisitOneToManyProperty(OneToManyPropertyExpression propertyExpression) { - Expression source = Visit(property.Source); - if (source != property.Source) - return new CollectionPropertyExpression(property.Name, property.Type, source, property.NHibernateType); - return property; + Expression source = Visit(propertyExpression.Source); + if (source != propertyExpression.Source) + return new OneToManyPropertyExpression(propertyExpression.Name, propertyExpression.Type, source, propertyExpression.NHibernateType); + return propertyExpression; } - + private Expression VisitOneToOneProperty(OneToOnePropertyExpression propertyExpression) + { + Expression source = Visit(propertyExpression.Source); + if (source != propertyExpression.Source) + return new OneToOnePropertyExpression(propertyExpression.Name, propertyExpression.Type, source, propertyExpression.NHibernateType); + return propertyExpression; + } //TODO: modify protected virtual Expression VisitSelect(SelectExpression select) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |