From: Michael D. <mik...@us...> - 2004-08-02 04:31:18
|
Update of /cvsroot/nhibernate/nhibernate/src/NHibernate/Expression In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27706/NHibernate/Expression Modified Files: Expression.cs Added Files: EqPropertyExpression.cs LePropertyExpression.cs LtPropertyExpression.cs PropertyExpression.cs Log Message: Added missing Property Expressions from http://jira.nhibernate.org:8080/browse/NH-22 Index: Expression.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Expression/Expression.cs,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Expression.cs 6 Apr 2004 04:11:19 -0000 1.8 --- Expression.cs 2 Aug 2004 04:30:37 -0000 1.9 *************** *** 158,161 **** --- 158,194 ---- } + + /// <summary> + /// Apply an "equal" constraint to two properties + /// </summary> + /// <param name="propertyName">The lhs Property Name</param> + /// <param name="otherPropertyName">The rhs Property Name</param> + /// <returns>A <see cref="EqPropertyExpression"/> .</returns> + public static Expression EqProperty(String propertyName, String otherPropertyName) + { + return new EqPropertyExpression(propertyName, otherPropertyName); + } + + /// <summary> + /// Apply a "less than" constraint to two properties + /// </summary> + /// <param name="propertyName">The lhs Property Name</param> + /// <param name="otherPropertyName">The rhs Property Name</param> + /// <returns>A <see cref="LtPropertyExpression"/> .</returns> + public static Expression LtProperty(String propertyName, String otherPropertyName) + { + return new LtPropertyExpression(propertyName, otherPropertyName); + } + + /// <summary> + /// Apply a "less than or equal" constraint to two properties + /// </summary> + /// <param name="propertyName">The lhs Property Name</param> + /// <param name="otherPropertyName">The rhs Property Name</param> + /// <returns>A <see cref="LePropertyExpression"/> .</returns> + public static Expression LeProperty(String propertyName, String otherPropertyName) + { + return new LePropertyExpression(propertyName, otherPropertyName); + } /// <summary> /// Return the conjuction of two expressions --- NEW FILE: LtPropertyExpression.cs --- using System; namespace NHibernate.Expression { public class LtPropertyExpression : PropertyExpression { public LtPropertyExpression(string propertyName, string otherPropertyName) : base(propertyName, otherPropertyName) { } protected override string Op { get { return " < "; } } } } --- NEW FILE: EqPropertyExpression.cs --- using System; namespace NHibernate.Expression { public class EqPropertyExpression : PropertyExpression { public EqPropertyExpression(string propertyName, string otherPropertyName) : base(propertyName, otherPropertyName) { } protected override string Op { get { return " = "; } } } } --- NEW FILE: PropertyExpression.cs --- using System; using NHibernate.Engine; using NHibernate.SqlCommand; using NHibernate.Util; namespace NHibernate.Expression { /// <summary> /// Superclass for comparisons between two properties (with SQL binary operators) /// </summary> public abstract class PropertyExpression : Expression { private string propertyName; private string otherPropertyName; private static TypedValue[] NoTypedValues = new TypedValue[0]; protected PropertyExpression(string propertyName, string otherPropertyName) { this.propertyName = propertyName; this.otherPropertyName = otherPropertyName; } public override SqlString ToSqlString(ISessionFactoryImplementor factory, System.Type persistentClass, string alias) { SqlStringBuilder sqlBuilder = new SqlStringBuilder(); string[] columnNames = GetColumns(factory, persistentClass, propertyName, alias); string[] otherColumnNames = GetColumns(factory, persistentClass, otherPropertyName, alias); bool andNeeded = false; for (int i = 0; i < columnNames.Length; i++) { if (andNeeded) sqlBuilder.Add(" AND "); andNeeded = true; sqlBuilder.Add(columnNames[i]).Add(Op).Add(otherColumnNames[i]); } return sqlBuilder.ToSqlString(); //TODO: get SQL rendering out of this package! } public override TypedValue[] GetTypedValues(ISessionFactoryImplementor sessionFactory, System.Type persistentClass) { return NoTypedValues; } public override string ToString() { return propertyName + Op + otherPropertyName; } protected abstract string Op { get; } } } --- NEW FILE: LePropertyExpression.cs --- using System; namespace NHibernate.Expression { public class LePropertyExpression : PropertyExpression { public LePropertyExpression(string propertyName, string otherPropertyName) : base(propertyName, otherPropertyName) { } protected override string Op { get { return " <= "; } } } } |