From: <te...@us...> - 2008-09-20 13:24:01
|
Revision: 3775 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3775&view=rev Author: tehlike Date: 2008-09-20 13:23:41 +0000 (Sat, 20 Sep 2008) Log Message: ----------- adding SimplePropertyExpression and ComponentPropertyExpression Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Linq/Expressions/PropertyExpression.cs trunk/nhibernate/src/NHibernate.Linq/NHibernate.Linq.csproj trunk/nhibernate/src/NHibernate.Linq/Query/LinqTranslator.cs trunk/nhibernate/src/NHibernate.Linq/Visitors/AssociationRewriteVisitor.cs trunk/nhibernate/src/NHibernate.Linq/Visitors/SqlExpressionTranslator.cs Added Paths: ----------- trunk/nhibernate/src/NHibernate.Linq/Expressions/ComponentPropertyExpression.cs trunk/nhibernate/src/NHibernate.Linq/Expressions/SimplePropertyExpression.cs Added: trunk/nhibernate/src/NHibernate.Linq/Expressions/ComponentPropertyExpression.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Expressions/ComponentPropertyExpression.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Linq/Expressions/ComponentPropertyExpression.cs 2008-09-20 13:23:41 UTC (rev 3775) @@ -0,0 +1,21 @@ +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 ComponentPropertyExpression : PropertyExpression + { + public ComponentPropertyExpression(string name, string[] columns, System.Type type, Expression source, + IType nhibernateType) + : base(name, type, source, nhibernateType) + { + this.Columns = columns; + } + + public string[] Columns { get; protected set; } + } +} Modified: trunk/nhibernate/src/NHibernate.Linq/Expressions/PropertyExpression.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Expressions/PropertyExpression.cs 2008-09-20 11:38:34 UTC (rev 3774) +++ trunk/nhibernate/src/NHibernate.Linq/Expressions/PropertyExpression.cs 2008-09-20 13:23:41 UTC (rev 3775) @@ -3,31 +3,30 @@ namespace NHibernate.Linq.Expressions { - public class PropertyExpression : NHExpression + public abstract class PropertyExpression : NHExpression { - public PropertyExpression(string name, - System.Type type, Expression expression, IType nhibernateType) - : this(name, type, expression, nhibernateType, NHExpressionType.Property) + public PropertyExpression(string name, System.Type type, Expression source, IType nhibernateType) + : this(name, type, source, nhibernateType, NHExpressionType.Property) { } - protected PropertyExpression(string name, System.Type type, Expression expression, IType nhibernateType, + protected PropertyExpression(string name, System.Type type, Expression source, IType nhibernateType, NHExpressionType nodeType) : base(nodeType, type) { NHibernateType = nhibernateType; - Expression = expression; + Source = source; Name = name; } - public Expression Expression { get; protected set; } + public Expression Source { get; protected set; } public IType NHibernateType { get; protected set; } public string Name { get; protected set; } public override string ToString() { - return Expression + "." + Name; + return string.Format("({0}).Property({1})", Source, this.Name); } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Linq/Expressions/SimplePropertyExpression.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Expressions/SimplePropertyExpression.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Linq/Expressions/SimplePropertyExpression.cs 2008-09-20 13:23:41 UTC (rev 3775) @@ -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 SimplePropertyExpression:PropertyExpression + { + public SimplePropertyExpression(string name,string column, System.Type type, Expression source, IType nhibernateType) + : base(name, type, source, nhibernateType) + { + this.Column = column; + } + + public string Column { get; protected set; } + } +} Modified: trunk/nhibernate/src/NHibernate.Linq/NHibernate.Linq.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/NHibernate.Linq.csproj 2008-09-20 11:38:34 UTC (rev 3774) +++ trunk/nhibernate/src/NHibernate.Linq/NHibernate.Linq.csproj 2008-09-20 13:23:41 UTC (rev 3775) @@ -50,6 +50,7 @@ </ProjectReference> </ItemGroup> <ItemGroup> + <Compile Include="Expressions\ComponentPropertyExpression.cs" /> <Compile Include="Expressions\OrderExpression.cs" /> <Compile Include="Expressions\OrderType.cs" /> <Compile Include="Expressions\ProjectionExpression.cs" /> @@ -58,6 +59,7 @@ <Compile Include="Expressions\NHExpression.cs" /> <Compile Include="Expressions\NHExpressionType.cs" /> <Compile Include="Expressions\QuerySourceExpression.cs" /> + <Compile Include="Expressions\SimplePropertyExpression.cs" /> <Compile Include="Query\LinqTranslator.cs" /> <Compile Include="Util\Guard.cs" /> <Compile Include="Util\LinqUtil.cs" /> Modified: trunk/nhibernate/src/NHibernate.Linq/Query/LinqTranslator.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Query/LinqTranslator.cs 2008-09-20 11:38:34 UTC (rev 3774) +++ trunk/nhibernate/src/NHibernate.Linq/Query/LinqTranslator.cs 2008-09-20 13:23:41 UTC (rev 3775) @@ -34,11 +34,12 @@ public void Translate() { - /*Expression modified = LocalVariableExpressionReducer.Reduce(expression); + Expression modified = LocalVariableExpressionReducer.Reduce(expression); modified = LogicalExpressionReducer.Reduce(modified); modified = AssociationRewriteVisitor.Rewrite(modified, sessionFactory); modified = NHExpressionToSqlExpressionTransformer.Transform(sessionFactory, modified); - sqlString = SqlExpressionToSqlStringVisitor.Translate(modified, sessionFactory, parameterList);*/ + sqlString = SqlExpressionToSqlStringVisitor.Translate(modified, sessionFactory, parameterList); + throw new NotImplementedException(); } public IList List(ISessionImplementor sessionImplementor) Modified: trunk/nhibernate/src/NHibernate.Linq/Visitors/AssociationRewriteVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Visitors/AssociationRewriteVisitor.cs 2008-09-20 11:38:34 UTC (rev 3774) +++ trunk/nhibernate/src/NHibernate.Linq/Visitors/AssociationRewriteVisitor.cs 2008-09-20 13:23:41 UTC (rev 3775) @@ -1,4 +1,5 @@ -using System.Linq.Expressions; +using System; +using System.Linq.Expressions; using System.Reflection; using NHibernate.Engine; using NHibernate.Linq.Expressions; @@ -52,15 +53,28 @@ { expr = (MemberExpression) base.VisitMemberAccess(expr); IClassMetadata clazz = GetMetaData(expr.Member.DeclaringType); + IPropertyMapping mapping = sessionFactory.GetEntityPersister(expr.Type.FullName) as IPropertyMapping; IType propertyType = clazz.GetPropertyType(expr.Member.Name); - if (propertyType.IsAssociationType || propertyType.IsComponentType) + string propertyName = expr.Member.Name; + if (propertyType.IsComponentType) { - return new PropertyExpression(expr.Member.Name, ((PropertyInfo) expr.Member).PropertyType, - base.Visit(expr.Expression), propertyType); + Expression source = base.Visit(expr.Expression); + return new ComponentPropertyExpression(propertyName, mapping.ToColumns(propertyName), + ((PropertyInfo) expr.Member).PropertyType, + source, propertyType); } - else + else if(propertyType.IsAssociationType) { - return new PropertyExpression(expr.Member.Name, ((PropertyInfo) expr.Member).PropertyType, + throw new NotImplementedException(); + } + else if(propertyType.IsCollectionType) + { + throw new NotImplementedException(); + } + + else//Assume simple property + { + return new SimplePropertyExpression(expr.Member.Name,mapping.ToColumns(propertyName)[0], ((PropertyInfo) expr.Member).PropertyType, base.Visit(expr.Expression), propertyType); } } Modified: trunk/nhibernate/src/NHibernate.Linq/Visitors/SqlExpressionTranslator.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Linq/Visitors/SqlExpressionTranslator.cs 2008-09-20 11:38:34 UTC (rev 3774) +++ trunk/nhibernate/src/NHibernate.Linq/Visitors/SqlExpressionTranslator.cs 2008-09-20 13:23:41 UTC (rev 3775) @@ -130,7 +130,7 @@ protected override Expression VisitProperty(PropertyExpression property) { - var expr = property.Expression as ParameterExpression; + var expr = property.Source as ParameterExpression; sqlStringBuilder.Add(string.Format("{0}.{1}", expr.Name, property.Name)); return property; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |