You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
(248) |
May
(82) |
Jun
(90) |
Jul
(177) |
Aug
(253) |
Sep
(157) |
Oct
(151) |
Nov
(143) |
Dec
(278) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(152) |
Feb
(107) |
Mar
(177) |
Apr
(133) |
May
(259) |
Jun
(81) |
Jul
(119) |
Aug
(306) |
Sep
(416) |
Oct
(240) |
Nov
(329) |
Dec
(206) |
2006 |
Jan
(466) |
Feb
(382) |
Mar
(153) |
Apr
(162) |
May
(133) |
Jun
(21) |
Jul
(18) |
Aug
(37) |
Sep
(97) |
Oct
(114) |
Nov
(110) |
Dec
(28) |
2007 |
Jan
(74) |
Feb
(65) |
Mar
(49) |
Apr
(76) |
May
(43) |
Jun
(15) |
Jul
(68) |
Aug
(55) |
Sep
(63) |
Oct
(59) |
Nov
(70) |
Dec
(66) |
2008 |
Jan
(71) |
Feb
(60) |
Mar
(120) |
Apr
(31) |
May
(48) |
Jun
(81) |
Jul
(107) |
Aug
(51) |
Sep
(80) |
Oct
(83) |
Nov
(83) |
Dec
(79) |
2009 |
Jan
(83) |
Feb
(110) |
Mar
(97) |
Apr
(91) |
May
(291) |
Jun
(250) |
Jul
(197) |
Aug
(58) |
Sep
(54) |
Oct
(122) |
Nov
(68) |
Dec
(34) |
2010 |
Jan
(50) |
Feb
(17) |
Mar
(63) |
Apr
(61) |
May
(84) |
Jun
(81) |
Jul
(138) |
Aug
(144) |
Sep
(78) |
Oct
(26) |
Nov
(30) |
Dec
(61) |
2011 |
Jan
(33) |
Feb
(35) |
Mar
(166) |
Apr
(221) |
May
(109) |
Jun
(76) |
Jul
(27) |
Aug
(37) |
Sep
(1) |
Oct
(4) |
Nov
(2) |
Dec
(1) |
2012 |
Jan
|
Feb
|
Mar
(2) |
Apr
(2) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
2013 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
(3) |
Oct
(2) |
Nov
|
Dec
(1) |
2014 |
Jan
(1) |
Feb
(1) |
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <fab...@us...> - 2009-12-02 04:28:08
|
Revision: 4889 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4889&view=rev Author: fabiomaulo Date: 2009-12-02 04:27:58 +0000 (Wed, 02 Dec 2009) Log Message: ----------- binders refactoring - removed unused code Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-12-02 04:15:42 UTC (rev 4888) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-12-02 04:27:58 UTC (rev 4889) @@ -57,7 +57,7 @@ { foreach (var unionSubclass in unionSubclasses) { - new UnionSubclassBinder(this).HandleUnionSubclass(persistentClass, Serialize(unionSubclass), unionSubclass, inheritedMetas); + new UnionSubclassBinder(this).HandleUnionSubclass(persistentClass, unionSubclass, inheritedMetas); } } @@ -73,7 +73,7 @@ { foreach (var subclass in subclasses) { - new SubclassBinder(this).HandleSubclass(persistentClass, Serialize(subclass), subclass, inheritedMetas); + new SubclassBinder(this).HandleSubclass(persistentClass, subclass, inheritedMetas); } } Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-12-02 04:15:42 UTC (rev 4888) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-12-02 04:27:58 UTC (rev 4889) @@ -40,8 +40,9 @@ string catalog = joinedSubclassMapping.catalog ?? mappings.CatalogName; // TODO: very strange, the schema does not support it - XmlAttribute actionNode = subnode.Attributes["schema-action"]; - string action = actionNode == null ? "all" : actionNode.Value; + //XmlAttribute actionNode = subnode.Attributes["schema-action"]; + //string action = actionNode == null ? "all" : actionNode.Value; + string action = "all"; Table mytable = mappings.AddTable(schema, catalog, GetClassTableName(subclass, joinedSubclassMapping.table), null, false, action); ((ITableOwner)subclass).Table = mytable; Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-12-02 04:15:42 UTC (rev 4888) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-12-02 04:27:58 UTC (rev 4889) @@ -21,10 +21,10 @@ public void Bind(XmlNode node, HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass superModel = GetSuperclass(node); - HandleSubclass(superModel, node, subClassMapping, inheritedMetas); + HandleSubclass(superModel, subClassMapping, inheritedMetas); } - public void HandleSubclass(PersistentClass model, XmlNode subnode, HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas) + public void HandleSubclass(PersistentClass model, HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { Subclass subclass = new SingleTableSubclass(model); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-12-02 04:15:42 UTC (rev 4888) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-12-02 04:27:58 UTC (rev 4889) @@ -21,10 +21,10 @@ public void Bind(XmlNode node, HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass superModel = GetSuperclass(node); - HandleUnionSubclass(superModel, node, unionSubclassMapping, inheritedMetas); + HandleUnionSubclass(superModel, unionSubclassMapping, inheritedMetas); } - public void HandleUnionSubclass(PersistentClass model, XmlNode subnode, HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas) + public void HandleUnionSubclass(PersistentClass model, HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { var unionSubclass = new UnionSubclass(model); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-12-02 04:15:52
|
Revision: 4888 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4888&view=rev Author: fabiomaulo Date: 2009-12-02 04:15:42 +0000 (Wed, 02 Dec 2009) Log Message: ----------- binders refactoring - ValuePropertyBinder on the road Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ValuePropertyBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs 2009-12-01 22:52:47 UTC (rev 4887) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs 2009-12-02 04:15:42 UTC (rev 4888) @@ -61,7 +61,7 @@ if ((propertyMapping = entityPropertyMapping as HbmProperty) != null) { var value = new SimpleValue(table); - BindSimpleValue(Serialize(propertyMapping), value, true, propertyName); + new ValuePropertyBinder(value, Mappings).BindSimpleValue(propertyMapping, propertyName, true); property = CreateProperty(entityPropertyMapping, model.ClassName, value, inheritedMetas); BindValueProperty(propertyMapping, property); } Added: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ValuePropertyBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ValuePropertyBinder.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ValuePropertyBinder.cs 2009-12-02 04:15:42 UTC (rev 4888) @@ -0,0 +1,55 @@ +using System; +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping; +using NHibernate.Util; + +namespace NHibernate.Cfg.XmlHbmBinding +{ + public class ValuePropertyBinder : Binder + { + private readonly SimpleValue value; + + public ValuePropertyBinder(SimpleValue value, Mappings mappings) + : base(mappings) + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + this.value = value; + } + + //automatically makes a column with the default name if none is specified by XML + public void BindSimpleValue(HbmProperty propertyMapping, string propertyPath, bool isNullable) + { + new TypeBinder(value, Mappings).Bind(propertyMapping.Type); + var formulas = propertyMapping.Formulas.ToArray(); + if (formulas.Length > 0) + { + foreach (var hbmFormula in formulas) + { + value.AddFormula(new Formula {FormulaString = hbmFormula.Text.LinesToString()}); + } + } + else + { + new ColumnsBinder(value, Mappings).Bind(propertyMapping.Columns, isNullable, + () => + new HbmColumn + { + name = mappings.NamingStrategy.PropertyToColumnName(propertyPath), + length = propertyMapping.length, + scale = propertyMapping.scale, + precision = propertyMapping.precision, + notnull = propertyMapping.notnull, + notnullSpecified = propertyMapping.notnullSpecified, + unique = propertyMapping.unique, + uniqueSpecified = true, + uniquekey = propertyMapping.uniquekey, + index = propertyMapping.index + }); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 22:52:47 UTC (rev 4887) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-02 04:15:42 UTC (rev 4888) @@ -552,6 +552,9 @@ <SubType>Code</SubType> </Compile> <Compile Include="Cfg\XmlHbmBinding\TypeBinder.cs" /> + <Compile Include="Cfg\XmlHbmBinding\ValuePropertyBinder.cs"> + <SubType>Code</SubType> + </Compile> <Compile Include="Context\WcfOperationSessionContext.cs" /> <Compile Include="Criterion\GroupedProjection.cs" /> <Compile Include="Criterion\IPropertyProjection.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-12-01 22:53:03
|
Revision: 4887 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4887&view=rev Author: fabiomaulo Date: 2009-12-01 22:52:47 +0000 (Tue, 01 Dec 2009) Log Message: ----------- binders refactoring Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/TypeBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs 2009-12-01 22:08:23 UTC (rev 4886) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs 2009-12-01 22:52:47 UTC (rev 4887) @@ -17,7 +17,9 @@ { if (idSchema != null) { - var id = new SimpleValue(table) { TypeName = idSchema.type1 }; + var id = new SimpleValue(table); + new TypeBinder(id, Mappings).Bind(idSchema.Type); + rootClass.Identifier = id; Func<HbmColumn> defaultColumn = () => new HbmColumn Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/TypeBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/TypeBinder.cs 2009-12-01 22:08:23 UTC (rev 4886) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/TypeBinder.cs 2009-12-01 22:52:47 UTC (rev 4887) @@ -29,11 +29,12 @@ Bind(new HbmType { name= typeName }); } - private void Bind(HbmType typeMapping) + public void Bind(HbmType typeMapping) { if (typeMapping == null) { - throw new ArgumentNullException("typeMapping"); + // will find the type through reflection + return; } string originalTypeName = typeMapping.name; if(originalTypeName == null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2009-12-01 22:08:36
|
Revision: 4886 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4886&view=rev Author: steverstrong Date: 2009-12-01 22:08:23 +0000 (Tue, 01 Dec 2009) Log Message: ----------- Changes to HQLQueryPlan and IQueryTranslatorFactory to support polymorphic Linq queries Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Engine/Query/FilterQueryPlan.cs trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs trunk/nhibernate/src/NHibernate/Engine/Query/QueryPlanCache.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/ASTQueryTranslatorFactory.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlParser.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlToken.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/ASTNode.cs trunk/nhibernate/src/NHibernate/Hql/Classic/ClassicQueryTranslatorFactory.cs trunk/nhibernate/src/NHibernate/Hql/IQueryTranslatorFactory.cs trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs trunk/nhibernate/src/NHibernate.Test/App.config trunk/nhibernate/src/NHibernate.Test/BulkManipulation/BaseFixture.cs trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BaseFixture.cs trunk/nhibernate/src/NHibernate.Test/HQL/Ast/HqlFixture.cs trunk/nhibernate/src/NHibernate.Test/Linq/MiscellaneousTextFixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1849/Fixture.cs Modified: trunk/nhibernate/src/NHibernate/Engine/Query/FilterQueryPlan.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Query/FilterQueryPlan.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Engine/Query/FilterQueryPlan.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -8,7 +8,7 @@ /// being filtered. /// </summary> [Serializable] - public class FilterQueryPlan : HQLQueryPlan + public class FilterQueryPlan : HQLStringQueryPlan { private readonly string collectionRole; Modified: trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -7,258 +7,86 @@ using NHibernate.Event; using NHibernate.Hql; using NHibernate.Hql.Ast.ANTLR; +using NHibernate.Impl; using NHibernate.Type; using NHibernate.Util; namespace NHibernate.Engine.Query { + public interface IQueryPlan + { + ParameterMetadata ParameterMetadata { get; } + ISet<string> QuerySpaces { get; } + IQueryTranslator[] Translators { get; } + ReturnMetadata ReturnMetadata { get; } + void PerformList(QueryParameters queryParameters, ISessionImplementor statelessSessionImpl, IList results); + int PerformExecuteUpdate(QueryParameters queryParameters, ISessionImplementor statelessSessionImpl); + IEnumerable<T> PerformIterate<T>(QueryParameters queryParameters, IEventSource session); + IEnumerable PerformIterate(QueryParameters queryParameters, IEventSource session); + } + + public interface IQueryExpressionPlan : IQueryPlan + { + IQueryExpression QueryExpression { get; } + } + /// <summary> Defines a query execution plan for an HQL query (or filter). </summary> [Serializable] - public class HQLQueryPlan + public class HQLQueryPlan : IQueryPlan { - private static readonly ILog log = LogManager.GetLogger(typeof(HQLQueryPlan)); + protected static readonly ILog Log = LogManager.GetLogger(typeof(HQLQueryPlan)); - private readonly string sourceQuery; - private readonly IQueryTranslator[] translators; - private readonly string[] sqlStrings; + private readonly string _sourceQuery; - private readonly ParameterMetadata parameterMetadata; - private readonly ReturnMetadata returnMetadata; - private readonly HashedSet<string> querySpaces; - - private readonly HashedSet<string> enabledFilterNames; - private readonly bool shallow; - private IQueryExpression sourceQueryExpression; - - public HQLQueryPlan(string hql, bool shallow, - IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) - : this(hql, (string) null, shallow, enabledFilters, factory) - { - } - - public HQLQueryPlan(string expressionStr, IQueryExpression queryExpression, bool shallow, - IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) - : this(expressionStr, queryExpression, null, shallow, enabledFilters, factory) + protected HQLQueryPlan(string sourceQuery) { + _sourceQuery = sourceQuery; } - protected internal HQLQueryPlan(string hql, string collectionRole, bool shallow, - IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) - { - sourceQuery = hql; - this.shallow = shallow; - - enabledFilterNames = new HashedSet<string>(enabledFilters.Keys); - - HashedSet<string> combinedQuerySpaces = new HashedSet<string>(); - string[] concreteQueryStrings = QuerySplitter.ConcreteQueries(hql, factory); - int length = concreteQueryStrings.Length; - translators = new IQueryTranslator[length]; - List<string> sqlStringList = new List<string>(); - for (int i = 0; i < length; i++) - { - if (collectionRole == null) - { - translators[i] = - factory.Settings.QueryTranslatorFactory.CreateQueryTranslator(hql, concreteQueryStrings[i], enabledFilters, - factory); - translators[i].Compile(factory.Settings.QuerySubstitutions, shallow); - } - else - { - translators[i] = - factory.Settings.QueryTranslatorFactory.CreateFilterTranslator(hql, concreteQueryStrings[i], enabledFilters, - factory); - ((IFilterTranslator)translators[i]).Compile(collectionRole, factory.Settings.QuerySubstitutions, shallow); - } - foreach (string qs in translators[i].QuerySpaces) - { - combinedQuerySpaces.Add(qs); - } - sqlStringList.AddRange(translators[i].CollectSqlStrings); - } - - sqlStrings = sqlStringList.ToArray(); - querySpaces = combinedQuerySpaces; - - if (length == 0) - { - parameterMetadata = new ParameterMetadata(null, null); - returnMetadata = null; - } - else - { - parameterMetadata = BuildParameterMetadata(translators[0].GetParameterTranslations(), hql); - if (translators[0].IsManipulationStatement) - { - returnMetadata = null; - } - else - { - if (length > 1) - { - int returns = translators[0].ReturnTypes.Length; - returnMetadata = new ReturnMetadata(translators[0].ReturnAliases, new IType[returns]); - } - else - { - returnMetadata = new ReturnMetadata(translators[0].ReturnAliases, translators[0].ReturnTypes); - } - } - } - } - - protected internal HQLQueryPlan(string expressionStr, IQueryExpression queryExpression, string collectionRole, bool shallow, - IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) - { - sourceQueryExpression = queryExpression; - sourceQuery = expressionStr; - this.shallow = shallow; - - enabledFilterNames = new HashedSet<string>(enabledFilters.Keys); - - // TODO - no support for polymorphism here - done during Expression -> AST translation? - // TODO - polymorphism approach used in method above also sucks. Could be done in AST much more cleanly? Look at this... - IQueryTranslatorFactory2 qtFactory = new ASTQueryTranslatorFactory(); - - IQueryTranslator translator = qtFactory.CreateQueryTranslator(expressionStr, queryExpression, enabledFilters, - factory); - - translator.Compile(factory.Settings.QuerySubstitutions, shallow); - - translators = new[] { translator }; - - sqlStrings = new List<string>(translator.CollectSqlStrings).ToArray(); - - querySpaces = new HashedSet<string>(translator.QuerySpaces); - - var parameterTranslations = translator.GetParameterTranslations(); - - var namedParamDescriptorMap = new Dictionary<string, NamedParameterDescriptor>(); - foreach (NamedParameterDescriptor entry in queryExpression.ParameterDescriptors) - { - namedParamDescriptorMap[entry.Name] = - new NamedParameterDescriptor(entry.Name, parameterTranslations.GetNamedParameterExpectedType(entry.Name), - entry.SourceLocations, entry.JpaStyle); - } - - parameterMetadata = new ParameterMetadata(new OrdinalParameterDescriptor[0], namedParamDescriptorMap); - - returnMetadata = new ReturnMetadata(translator.ReturnAliases, translator.ReturnTypes); - } - - public string SourceQuery - { - get { return sourceQuery; } - } - public ISet<string> QuerySpaces { - get { return querySpaces; } + get; + protected set; } public ParameterMetadata ParameterMetadata { - get { return parameterMetadata; } - } + get; + protected set; + } public ReturnMetadata ReturnMetadata { - get { return returnMetadata; } - } + get; + protected set; + } - public ISet EnabledFilterNames - { - get { return enabledFilterNames; } - } - public string[] SqlStrings { - get { return sqlStrings; } - } + get; + protected set; + } - public ISet UtilizedFilterNames - { - get - { - // TODO : add this info to the translator and aggregate it here... - return null; - } - } - - public bool Shallow - { - get { return shallow; } - } - public IQueryTranslator[] Translators { - get - { - IQueryTranslator[] copy = new IQueryTranslator[translators.Length]; - Array.Copy(translators, 0, copy, 0, copy.Length); - return copy; - } - } + get; + protected set; + } - public IQueryExpression QueryExpression - { - get { return sourceQueryExpression; } - } - - private static ParameterMetadata BuildParameterMetadata(IParameterTranslations parameterTranslations, string hql) - { - long start = DateTime.Now.Ticks; - ParamLocationRecognizer recognizer = ParamLocationRecognizer.ParseLocations(hql); - long end = DateTime.Now.Ticks; - if (log.IsDebugEnabled) - { - log.Debug("HQL param location recognition took " + (end - start) + " mills (" + hql + ")"); - } - - int ordinalParamCount = parameterTranslations.OrdinalParameterCount; - int[] locations = recognizer.OrdinalParameterLocationList.ToArray(); - if (parameterTranslations.SupportsOrdinalParameterMetadata && locations.Length != ordinalParamCount) - { - throw new HibernateException("ordinal parameter mismatch"); - } - ordinalParamCount = locations.Length; - OrdinalParameterDescriptor[] ordinalParamDescriptors = new OrdinalParameterDescriptor[ordinalParamCount]; - for (int i = 1; i <= ordinalParamCount; i++) - { - ordinalParamDescriptors[i - 1] = - new OrdinalParameterDescriptor(i, - parameterTranslations.SupportsOrdinalParameterMetadata - ? parameterTranslations.GetOrdinalParameterExpectedType(i) - : null, locations[i - 1]); - } - - Dictionary<string, NamedParameterDescriptor> namedParamDescriptorMap = new Dictionary<string, NamedParameterDescriptor>(); - foreach (KeyValuePair<string, ParamLocationRecognizer.NamedParameterDescription> entry in recognizer.NamedParameterDescriptionMap) - { - string name = entry.Key; - ParamLocationRecognizer.NamedParameterDescription description = entry.Value; - namedParamDescriptorMap[name] = - new NamedParameterDescriptor(name, parameterTranslations.GetNamedParameterExpectedType(name), - description.BuildPositionsArray(), description.JpaStyle); - - } - return new ParameterMetadata(ordinalParamDescriptors, namedParamDescriptorMap); - } - public void PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) { - if (log.IsDebugEnabled) + if (Log.IsDebugEnabled) { - log.Debug("find: " + SourceQuery); + Log.Debug("find: " + _sourceQuery); queryParameters.LogParameters(session.Factory); } + bool hasLimit = queryParameters.RowSelection != null && queryParameters.RowSelection.DefinesLimits; - bool needsLimit = hasLimit && translators.Length > 1; + bool needsLimit = hasLimit && Translators.Length > 1; QueryParameters queryParametersToUse; if (needsLimit) { - log.Warn("firstResult/maxResults specified on polymorphic query; applying in memory!"); + Log.Warn("firstResult/maxResults specified on polymorphic query; applying in memory!"); RowSelection selection = new RowSelection(); selection.FetchSize = queryParameters.RowSelection.FetchSize; selection.Timeout = queryParameters.RowSelection.Timeout; @@ -272,9 +100,9 @@ IList combinedResults = results ?? new List<object>(); IdentitySet distinction = new IdentitySet(); int includedCount = -1; - for (int i = 0; i < translators.Length; i++) + for (int i = 0; i < Translators.Length; i++) { - IList tmp = translators[i].List(session, queryParametersToUse); + IList tmp = Translators[i].List(session, queryParametersToUse); if (needsLimit) { // NOTE : firstRow is zero-based @@ -333,28 +161,28 @@ { isMany = null; results = null; - if (log.IsDebugEnabled) + if (Log.IsDebugEnabled) { - log.Debug("enumerable: " + SourceQuery); + Log.Debug("enumerable: " + _sourceQuery); queryParameters.LogParameters(session.Factory); } - if (translators.Length == 0) + if (Translators.Length == 0) { result = CollectionHelper.EmptyEnumerable; } else { results = null; - bool many = translators.Length > 1; + bool many = Translators.Length > 1; if (many) { - results = new IEnumerable[translators.Length]; + results = new IEnumerable[Translators.Length]; } result = null; - for (int i = 0; i < translators.Length; i++) + for (int i = 0; i < Translators.Length; i++) { - result = translators[i].GetEnumerable(queryParameters, session); + result = Translators[i].GetEnumerable(queryParameters, session); if (many) results[i] = result; } @@ -364,22 +192,191 @@ public int PerformExecuteUpdate(QueryParameters queryParameters, ISessionImplementor session) { - if (log.IsDebugEnabled) + if (Log.IsDebugEnabled) { - log.Debug("executeUpdate: " + SourceQuery); + Log.Debug("executeUpdate: " + _sourceQuery); queryParameters.LogParameters(session.Factory); } - if (translators.Length != 1) + if (Translators.Length != 1) { - log.Warn("manipulation query [" + SourceQuery + "] resulted in [" + translators.Length + "] split queries"); + Log.Warn("manipulation query [" + _sourceQuery + "] resulted in [" + Translators.Length + "] split queries"); } int result = 0; - for (int i = 0; i < translators.Length; i++) + for (int i = 0; i < Translators.Length; i++) { - result += translators[i].ExecuteUpdate(queryParameters, session); + result += Translators[i].ExecuteUpdate(queryParameters, session); } return result; } - } + protected void BuildSqlStringsAndQuerySpaces() + { + var combinedQuerySpaces = new HashedSet<string>(); + var sqlStringList = new List<string>(); + + foreach (var translator in Translators) + { + foreach (var qs in translator.QuerySpaces) + { + combinedQuerySpaces.Add(qs); + } + + sqlStringList.AddRange(translator.CollectSqlStrings); + } + + SqlStrings = sqlStringList.ToArray(); + QuerySpaces = combinedQuerySpaces; + } + } + + [Serializable] + public class HQLStringQueryPlan : HQLQueryPlan + { + public HQLStringQueryPlan(string hql, bool shallow, + IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) + : this(hql, (string) null, shallow, enabledFilters, factory) + { + } + + protected internal HQLStringQueryPlan(string hql, string collectionRole, bool shallow, + IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) + :base(hql) + { + Translators = factory.Settings.QueryTranslatorFactory.CreateQueryTranslators(hql, collectionRole, shallow, enabledFilters, factory); + + BuildSqlStringsAndQuerySpaces(); + + if (Translators.Length == 0) + { + ParameterMetadata = new ParameterMetadata(null, null); + ReturnMetadata = null; + } + else + { + ParameterMetadata = BuildParameterMetadata(Translators[0].GetParameterTranslations(), hql); + if (Translators[0].IsManipulationStatement) + { + ReturnMetadata = null; + } + else + { + if (Translators.Length > 1) + { + int returns = Translators[0].ReturnTypes.Length; + ReturnMetadata = new ReturnMetadata(Translators[0].ReturnAliases, new IType[returns]); + } + else + { + ReturnMetadata = new ReturnMetadata(Translators[0].ReturnAliases, Translators[0].ReturnTypes); + } + } + } + } + + private static ParameterMetadata BuildParameterMetadata(IParameterTranslations parameterTranslations, string hql) + { + long start = DateTime.Now.Ticks; + ParamLocationRecognizer recognizer = ParamLocationRecognizer.ParseLocations(hql); + long end = DateTime.Now.Ticks; + if (Log.IsDebugEnabled) + { + Log.Debug("HQL param location recognition took " + (end - start) + " mills (" + hql + ")"); + } + + int ordinalParamCount = parameterTranslations.OrdinalParameterCount; + int[] locations = recognizer.OrdinalParameterLocationList.ToArray(); + if (parameterTranslations.SupportsOrdinalParameterMetadata && locations.Length != ordinalParamCount) + { + throw new HibernateException("ordinal parameter mismatch"); + } + ordinalParamCount = locations.Length; + OrdinalParameterDescriptor[] ordinalParamDescriptors = new OrdinalParameterDescriptor[ordinalParamCount]; + for (int i = 1; i <= ordinalParamCount; i++) + { + ordinalParamDescriptors[i - 1] = + new OrdinalParameterDescriptor(i, + parameterTranslations.SupportsOrdinalParameterMetadata + ? parameterTranslations.GetOrdinalParameterExpectedType(i) + : null, locations[i - 1]); + } + + Dictionary<string, NamedParameterDescriptor> namedParamDescriptorMap = new Dictionary<string, NamedParameterDescriptor>(); + foreach (KeyValuePair<string, ParamLocationRecognizer.NamedParameterDescription> entry in recognizer.NamedParameterDescriptionMap) + { + string name = entry.Key; + ParamLocationRecognizer.NamedParameterDescription description = entry.Value; + namedParamDescriptorMap[name] = + new NamedParameterDescriptor(name, parameterTranslations.GetNamedParameterExpectedType(name), + description.BuildPositionsArray(), description.JpaStyle); + + } + return new ParameterMetadata(ordinalParamDescriptors, namedParamDescriptorMap); + } + } + + [Serializable] + public class HQLLinqQueryPlan : HQLQueryPlan, IQueryExpressionPlan + { + public IQueryExpression QueryExpression + { + get; + protected set; + } + + public HQLLinqQueryPlan(string expressionStr, IQueryExpression queryExpression, bool shallow, + IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) + : this(expressionStr, queryExpression, null, shallow, enabledFilters, factory) + { + } + + protected internal HQLLinqQueryPlan(string expressionStr, IQueryExpression queryExpression, string collectionRole, bool shallow, + IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) + : base (expressionStr) + { + QueryExpression = queryExpression; + + IQueryTranslatorFactory2 qtFactory = new ASTQueryTranslatorFactory(); + + Translators = qtFactory.CreateQueryTranslators(expressionStr, queryExpression, collectionRole, shallow, enabledFilters, factory); + + BuildSqlStringsAndQuerySpaces(); + + if (Translators.Length == 0) + { + ParameterMetadata = new ParameterMetadata(null, null); + ReturnMetadata = null; + } + else + { + var parameterTranslations = Translators[0].GetParameterTranslations(); + + var namedParamDescriptorMap = new Dictionary<string, NamedParameterDescriptor>(); + foreach (NamedParameterDescriptor entry in queryExpression.ParameterDescriptors) + { + namedParamDescriptorMap[entry.Name] = + new NamedParameterDescriptor(entry.Name, parameterTranslations.GetNamedParameterExpectedType(entry.Name), + entry.SourceLocations, entry.JpaStyle); + } + + ParameterMetadata = new ParameterMetadata(new OrdinalParameterDescriptor[0], namedParamDescriptorMap); + + if (Translators[0].IsManipulationStatement) + { + ReturnMetadata = null; + } + else + { + if (Translators.Length > 1) + { + int returns = Translators[0].ReturnTypes.Length; + ReturnMetadata = new ReturnMetadata(Translators[0].ReturnAliases, new IType[returns]); + } + else + { + ReturnMetadata = new ReturnMetadata(Translators[0].ReturnAliases, Translators[0].ReturnTypes); + } + } + } + } + } } Modified: trunk/nhibernate/src/NHibernate/Engine/Query/QueryPlanCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Query/QueryPlanCache.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Engine/Query/QueryPlanCache.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -47,10 +47,10 @@ return metadata; } - public HQLQueryPlan GetHQLQueryPlan(string queryString, bool shallow, IDictionary<string, IFilter> enabledFilters) + public IQueryPlan GetHQLQueryPlan(string queryString, bool shallow, IDictionary<string, IFilter> enabledFilters) { var key = new HQLQueryPlanKey(queryString, shallow, enabledFilters); - var plan = (HQLQueryPlan)planCache[key]; + var plan = (IQueryPlan)planCache[key]; if (plan == null) { @@ -58,7 +58,7 @@ { log.Debug("unable to locate HQL query plan in cache; generating (" + queryString + ")"); } - plan = new HQLQueryPlan(queryString, shallow, enabledFilters, factory); + plan = new HQLStringQueryPlan(queryString, shallow, enabledFilters, factory); planCache.Put(key, plan); } else @@ -72,12 +72,12 @@ return plan; } - public HQLQueryPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow, IDictionary<string, IFilter> enabledFilters) + public IQueryExpressionPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow, IDictionary<string, IFilter> enabledFilters) { string expressionStr = queryExpression.Key; var key = new HQLQueryPlanKey(expressionStr, shallow, enabledFilters); - var plan = (HQLQueryPlan)planCache[key]; + var plan = (IQueryExpressionPlan)planCache[key]; if (plan == null) { @@ -85,7 +85,7 @@ { log.Debug("unable to locate HQL query plan in cache; generating (" + expressionStr + ")"); } - plan = new HQLQueryPlan(expressionStr, queryExpression, shallow, enabledFilters, factory); + plan = new HQLLinqQueryPlan(expressionStr, queryExpression, shallow, enabledFilters, factory); planCache.Put(key, plan); } else Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/ASTQueryTranslatorFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/ASTQueryTranslatorFactory.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/ASTQueryTranslatorFactory.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -1,5 +1,12 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Antlr.Runtime; using NHibernate.Engine; +using NHibernate.Hql.Ast.ANTLR.Tree; +using NHibernate.Hql.Ast.ANTLR.Util; +using NHibernate.Hql.Util; namespace NHibernate.Hql.Ast.ANTLR { @@ -12,19 +19,247 @@ /// </summary> public class ASTQueryTranslatorFactory : IQueryTranslatorFactory2 { - public IQueryTranslator CreateQueryTranslator(string queryIdentifier, string queryString, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory) + public IQueryTranslator[] CreateQueryTranslators(string queryString, string collectionRole, bool shallow, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory) { - return new QueryTranslatorImpl(queryIdentifier, queryString, filters, factory); - } + var isFilter = collectionRole != null; + var parser = new HqlParseEngine(queryString, isFilter, factory); + parser.Parse(); - public IFilterTranslator CreateFilterTranslator(string queryIdentifier, string queryString, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory) - { - return new QueryTranslatorImpl(queryIdentifier, queryString, filters, factory); + HqlParseEngine[] polymorphicParsers = AstPolymorphicProcessor.Process(parser, factory); + + var translators = polymorphicParsers + .Select(hql => new QueryTranslatorImpl(queryString, hql, filters, factory)) + .ToArray(); + + foreach (var translator in translators) + { + if (collectionRole == null) + { + translator.Compile(factory.Settings.QuerySubstitutions, shallow); + } + else + { + translator.Compile(collectionRole, factory.Settings.QuerySubstitutions, shallow); + } + } + + return translators; } - public IQueryTranslator CreateQueryTranslator(string queryIdentifier, IQueryExpression queryExpression, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory) + public IQueryTranslator[] CreateQueryTranslators(string queryIdentifier, IQueryExpression queryExpression, string collectionRole, bool shallow, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory) { - return new QueryTranslatorImpl(queryIdentifier, queryExpression, filters, factory); + var isFilter = collectionRole != null; + var parser = new HqlParseEngine(queryExpression.Translate(factory), factory); + + HqlParseEngine[] polymorphicParsers = AstPolymorphicProcessor.Process(parser, factory); + + var translators = polymorphicParsers + .Select(hql => new QueryTranslatorImpl(queryIdentifier, hql, filters, factory)) + .ToArray(); + + foreach (var translator in translators) + { + if (collectionRole == null) + { + translator.Compile(factory.Settings.QuerySubstitutions, shallow); + } + else + { + translator.Compile(collectionRole, factory.Settings.QuerySubstitutions, shallow); + } + } + + return translators; } } + + public class AstPolymorphicProcessor + { + public static HqlParseEngine[] Process(HqlParseEngine parser, ISessionFactoryImplementor factory) + { + // Find all the polymorphic "froms" + var fromDetector = new FromDetector(factory); + var polymorphic = new NodeTraverser(fromDetector); + polymorphic.TraverseDepthFirst(parser.Ast); + + if (fromDetector.Map.Count > 0) + { + var parsers = DuplicateTree(parser.Ast, fromDetector.Map); + + return parsers.Select(p => new HqlParseEngine(p, factory)).ToArray(); + } + else + { + return new [] { parser }; + } + } + + private static IEnumerable<IASTNode> DuplicateTree(IASTNode ast, IEnumerable<KeyValuePair<IASTNode, IASTNode[]>> nodeMapping) + { + var replacements = ExpandDictionaryArrays(nodeMapping); + + var dups = new IASTNode[replacements.Count()]; + + for (var i = 0; i < replacements.Count(); i++) + { + dups[i] = DuplicateTree(ast, replacements[i]); + } + + return dups; + } + + private static IASTNode DuplicateTree(IASTNode ast, Dictionary<IASTNode, IASTNode> nodeMapping) + { + IASTNode candidate; + + if (nodeMapping.TryGetValue(ast, out candidate)) + { + return candidate; + } + + var dup = ast.DupNode(); + + foreach (var child in ast) + { + dup.AddChild(DuplicateTree(child, nodeMapping)); + } + + return dup; + } + + static IList<Dictionary<IASTNode, IASTNode>> ExpandDictionaryArrays(IEnumerable<KeyValuePair<IASTNode, IASTNode[]>> input) + { + return (from list in ExpandDictionaryArraysInner(input) + select list.ToDictionary(kvp => kvp.Key, kvp => kvp.Value)).ToList(); + } + + static IEnumerable<IEnumerable<KeyValuePair<IASTNode, IASTNode>>> ExpandDictionaryArraysInner(IEnumerable<KeyValuePair<IASTNode, IASTNode[]>> input) + { + var output = new List<IEnumerable<KeyValuePair<IASTNode, IASTNode>>>(); + + foreach (var value in input.First().Value) + { + var inner = new List<KeyValuePair<IASTNode, IASTNode>> + {new KeyValuePair<IASTNode, IASTNode>(input.First().Key, value)}; + + if (input.Count() > 1) + { + output.AddRange(ExpandDictionaryArraysInner(input.Skip(1)).Select(c => c.Union(inner))); + } + else + { + output.Add(inner); + } + } + + return output; + } + + } + + + internal class FromDetector : IVisitationStrategy + { + private readonly ISessionFactoryImplementor _sfi; + private readonly Dictionary<IASTNode, IASTNode[]> _map = new Dictionary<IASTNode, IASTNode[]>(); + + public FromDetector(ISessionFactoryImplementor sfi) + { + _sfi = sfi; + } + + public IDictionary<IASTNode, IASTNode[]> Map + { + get { return _map; } + } + + public void Visit(IASTNode node) + { + if (node.Type == HqlSqlWalker.FROM && node.ChildCount > 0) + { + foreach (var child in node) + { + string className = null; + IASTNode identifer = null; + + if (child.Type == HqlSqlWalker.RANGE) + { + identifer = child.GetChild(0); + + if (identifer.Type == HqlSqlWalker.IDENT) + { + className = identifer.Text; + } + else if (identifer.Type == HqlSqlWalker.DOT) + { + className = BuildPath(identifer); + } + else + { + // TODO + throw new NotSupportedException(); + } + } + else + { + // TODO - stuff for joins? + } + + if (className != null) + { + System.Type classType = (new SessionFactoryHelper(_sfi)).GetImportedClass(className); + + if (classType != null) + { + string[] implementors = _sfi.GetImplementors(classType.FullName); + + if (implementors != null) + { + if (implementors.Length == 1 && + ((implementors[0] == className) || (implementors[0] == classType.FullName))) + { + // No need to change things + return; + } + + Map.Add(identifer, + implementors.Select(implementor => MakeIdent(identifer, implementor)).ToArray()); + } + } + } + } + } + } + + private IASTNode MakeIdent(IASTNode source, string text) + { + var ident = source.DupNode(); + ident.Type = HqlSqlWalker.IDENT; + ident.Text = text; + return ident; + } + + private static string BuildPath(IASTNode node) + { + var sb = new StringBuilder(); + BuildPath(node, sb); + return sb.ToString(); + } + + private static void BuildPath(IASTNode node, StringBuilder sb) + { + if (node.Type == HqlSqlWalker.DOT) + { + BuildPath(node.GetChild(0), sb); + + sb.Append('.'); + sb.Append(node.GetChild(1).Text); + } + else + { + sb.Append(node.Text); + } + } + } + } Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlParser.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlParser.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlParser.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -127,7 +127,7 @@ break; default: // Case 2: The current token is after FROM and before '.'. - if (t != IDENT && input.LA(-1) == FROM && input.LA(2) == DOT) + if (t != IDENT && input.LA(-1) == FROM && ((input.LA(2) == DOT) || (input.LA(2) == IDENT) || (input.LA(2) == -1))) { HqlToken hqlToken = (HqlToken)input.LT(1); if (hqlToken.PossibleId) Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlToken.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlToken.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlToken.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -23,6 +23,20 @@ } /// <summary> + /// Public constructor + /// </summary> + public HqlToken(IToken other) + : base(other) + { + var hqlToken = other as HqlToken; + + if (hqlToken != null) + { + _previousTokenType = hqlToken._previousTokenType; + } + } + + /// <summary> /// Indicates if the token could be an identifier. /// </summary> public bool PossibleId Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -46,12 +46,12 @@ /// <param name="factory">The session factory constructing this translator instance.</param> public QueryTranslatorImpl( string queryIdentifier, - string query, + HqlParseEngine parsedQuery, IDictionary<string, IFilter> enabledFilters, ISessionFactoryImplementor factory) { _queryIdentifier = queryIdentifier; - _hql = query; + _parser = parsedQuery; _compiled = false; _shallowQuery = false; _enabledFilters = enabledFilters; @@ -466,7 +466,7 @@ } } - internal class HqlParseEngine + public class HqlParseEngine { private static readonly ILog log = LogManager.GetLogger(typeof(HqlParseEngine)); @@ -581,7 +581,7 @@ } } - internal class HqlSqlTranslator + internal class HqlSqlTranslator { private readonly IASTNode _inputAst; private readonly CommonTokenStream _tokens; Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/ASTNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/ASTNode.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/ASTNode.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -33,10 +33,9 @@ _startIndex = -1; _stopIndex = -1; _childIndex = -1; - _token = other._token; + _token = new HqlToken(other._token); _startIndex = other._startIndex; _stopIndex = other._stopIndex; - } public bool IsNil Modified: trunk/nhibernate/src/NHibernate/Hql/Classic/ClassicQueryTranslatorFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Classic/ClassicQueryTranslatorFactory.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Hql/Classic/ClassicQueryTranslatorFactory.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -1,4 +1,6 @@ using System.Collections.Generic; +using System.Linq; +using Iesi.Collections.Generic; using NHibernate.Engine; namespace NHibernate.Hql.Classic @@ -8,20 +10,25 @@ /// </summary> public class ClassicQueryTranslatorFactory : IQueryTranslatorFactory { - #region IQueryTranslatorFactory Members - - public IQueryTranslator CreateQueryTranslator(string queryIdentifier, string queryString, IDictionary<string, IFilter> filters, - ISessionFactoryImplementor factory) + public IQueryTranslator[] CreateQueryTranslators(string queryString, string collectionRole, bool shallow, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory) { - return new QueryTranslator(queryIdentifier, queryString, filters, factory); - } + var translators = QuerySplitter.ConcreteQueries(queryString, factory) + .Select(hql => new QueryTranslator(queryString, hql, filters, factory)) + .ToArray(); - public IFilterTranslator CreateFilterTranslator(string queryIdentifier, string queryString, IDictionary<string, IFilter> filters, - ISessionFactoryImplementor factory) - { - return new QueryTranslator(queryIdentifier, queryString, filters, factory); + foreach (var translator in translators) + { + if (collectionRole == null) + { + translator.Compile(factory.Settings.QuerySubstitutions, shallow); + } + else + { + translator.Compile(collectionRole, factory.Settings.QuerySubstitutions, shallow); + } + } + + return translators; } - - #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Hql/IQueryTranslatorFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/IQueryTranslatorFactory.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Hql/IQueryTranslatorFactory.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -1,4 +1,6 @@ +using System; using System.Collections.Generic; +using Iesi.Collections.Generic; using NHibernate.Engine; namespace NHibernate.Hql @@ -13,31 +15,11 @@ /// Construct a <see cref="NHibernate.Hql.IQueryTranslator"/> instance /// capable of translating an HQL query string. /// </summary> - /// <param name="queryIdentifier"> - /// The query-identifier (used in <see cref="NHibernate.Stat.QueryStatistics"/> collection). - /// This is typically the same as the queryString parameter except for the case of - /// split polymorphic queries which result in multiple physical sql queries. - /// </param> /// <param name="queryString">The query string to be translated</param> /// <param name="filters">Currently enabled filters</param> /// <param name="factory">The session factory</param> /// <returns>An appropriate translator.</returns> - IQueryTranslator CreateQueryTranslator(string queryIdentifier, string queryString, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory); - - /// <summary> - /// Construct a <see cref="NHibernate.Hql.IFilterTranslator"/> instance capable of - /// translating an HQL filter string. - /// </summary> - /// <param name="queryIdentifier"> - /// The query-identifier (used in <see cref="NHibernate.Stat.QueryStatistics"/> collection). - /// This is typically the same as the queryString parameter except for the case of - /// split polymorphic queries which result in multiple physical sql queries. - /// </param> - /// <param name="queryString">The query string to be translated</param> - /// <param name="filters">Currently enabled filters</param> - /// <param name="factory">The session factory</param> - /// <returns>An appropriate translator.</returns> - IFilterTranslator CreateFilterTranslator(string queryIdentifier, string queryString, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory); + IQueryTranslator[] CreateQueryTranslators(string queryString, string collectionRole, bool shallow, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory); } /// <summary> @@ -59,6 +41,6 @@ /// <param name="filters">Currently enabled filters</param> /// <param name="factory">The session factory</param> /// <returns>An appropriate translator.</returns> - IQueryTranslator CreateQueryTranslator(string queryIdentifier, IQueryExpression queryExpression, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory); + IQueryTranslator[] CreateQueryTranslators(string queryIdentifier, IQueryExpression queryExpression, string collectionRole, bool shallow, IDictionary<string, IFilter> filters, ISessionFactoryImplementor factory); } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -290,7 +290,7 @@ } } - protected internal virtual HQLQueryPlan GetHQLQueryPlan(string query, bool shallow) + protected internal virtual IQueryPlan GetHQLQueryPlan(string query, bool shallow) { using (new SessionIdLoggingContext(SessionId)) { @@ -298,7 +298,7 @@ } } - protected internal virtual HQLQueryPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow) + protected internal virtual IQueryExpressionPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow) { using (new SessionIdLoggingContext(SessionId)) { Modified: trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -619,7 +619,7 @@ { CheckAndUpdateSessionStatus(); queryParameters.ValidateParameters(); - HQLQueryPlan plan = GetHQLQueryPlan(query, false); + var plan = GetHQLQueryPlan(query, false); AutoFlushIfRequired(plan.QuerySpaces); bool success = false; @@ -663,7 +663,7 @@ { CheckAndUpdateSessionStatus(); queryParameters.ValidateParameters(); - HQLQueryPlan plan = GetHQLQueryPlan(queryExpression, false); + var plan = GetHQLQueryPlan(queryExpression, false); AutoFlushIfRequired(plan.QuerySpaces); bool success = false; @@ -694,7 +694,7 @@ { using (new SessionIdLoggingContext(SessionId)) { - HQLQueryPlan plan = Factory.QueryPlanCache.GetHQLQueryPlan(query, scalar, enabledFilters); + var plan = Factory.QueryPlanCache.GetHQLQueryPlan(query, scalar, enabledFilters); AutoFlushIfRequired(plan.QuerySpaces); return plan.Translators; } @@ -730,7 +730,7 @@ { CheckAndUpdateSessionStatus(); queryParameters.ValidateParameters(); - HQLQueryPlan plan = GetHQLQueryPlan(query, true); + var plan = GetHQLQueryPlan(query, true); AutoFlushIfRequired(plan.QuerySpaces); dontFlushFromFind++; //stops flush being called multiple times if this method is recursively called @@ -751,7 +751,7 @@ { CheckAndUpdateSessionStatus(); queryParameters.ValidateParameters(); - HQLQueryPlan plan = GetHQLQueryPlan(query, true); + var plan = GetHQLQueryPlan(query, true); AutoFlushIfRequired(plan.QuerySpaces); dontFlushFromFind++; //stops flush being called multiple times if this method is recursively called @@ -2785,7 +2785,7 @@ { CheckAndUpdateSessionStatus(); queryParameters.ValidateParameters(); - HQLQueryPlan plan = GetHQLQueryPlan(query, false); + var plan = GetHQLQueryPlan(query, false); AutoFlushIfRequired(plan.QuerySpaces); bool success = false; Modified: trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -109,7 +109,7 @@ { CheckAndUpdateSessionStatus(); queryParameters.ValidateParameters(); - HQLQueryPlan plan = GetHQLQueryPlan(query, false); + var plan = GetHQLQueryPlan(query, false); bool success = false; try { @@ -381,7 +381,7 @@ using (new SessionIdLoggingContext(SessionId)) { // take the union of the query spaces (ie the queried tables) - HQLQueryPlan plan = Factory.QueryPlanCache.GetHQLQueryPlan(query, scalar, EnabledFilters); + var plan = Factory.QueryPlanCache.GetHQLQueryPlan(query, scalar, EnabledFilters); return plan.Translators; } } @@ -964,7 +964,7 @@ { CheckAndUpdateSessionStatus(); queryParameters.ValidateParameters(); - HQLQueryPlan plan = GetHQLQueryPlan(query, false); + var plan = GetHQLQueryPlan(query, false); bool success = false; int result; try Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -346,7 +346,7 @@ if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof (NhQueryable<>)) { - return _hqlTreeBuilder.Ident(t.GetGenericArguments()[0].Name); + return _hqlTreeBuilder.Ident(t.GetGenericArguments()[0].FullName); } } Modified: trunk/nhibernate/src/NHibernate.Test/App.config =================================================================== --- trunk/nhibernate/src/NHibernate.Test/App.config 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate.Test/App.config 2009-12-01 22:08:23 UTC (rev 4886) @@ -43,7 +43,9 @@ <bytecode-provider type="lcg"/> <reflection-optimizer use="true"/> <session-factory name="NHibernate.Test"> - <property name="connection.provider">NHibernate.Test.DebugConnectionProvider, NHibernate.Test</property> + <!--<property name="query.factory_class">NHibernate.Hql.Classic.ClassicQueryTranslatorFactory, NHibernate</property> +--> + <property name="connection.provider">NHibernate.Test.DebugConnectionProvider, NHibernate.Test</property> <property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider, NHibernate</property> <property name="cache.use_query_cache">true</property> <property name="query.startup_check">false</property> Modified: trunk/nhibernate/src/NHibernate.Test/BulkManipulation/BaseFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/BulkManipulation/BaseFixture.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate.Test/BulkManipulation/BaseFixture.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -39,7 +39,7 @@ public string GetSql(string query) { - var qt = new QueryTranslatorImpl(null, query, emptyfilters, sessions); + var qt = new QueryTranslatorImpl(null, new HqlParseEngine(query, false, sessions), emptyfilters, sessions); qt.Compile(null, false); return qt.SQLString; } Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BaseFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BaseFixture.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BaseFixture.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -39,7 +39,9 @@ public string GetSql(string query) { - var qt = new QueryTranslatorImpl(null, query, emptyfilters, sessions); + var parser = new HqlParseEngine(query, false, sessions); + parser.Parse(); + var qt = new QueryTranslatorImpl(null, parser, emptyfilters, sessions); qt.Compile(null, false); return qt.SQLString; } Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/HqlFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/HqlFixture.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/HqlFixture.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -12,7 +12,7 @@ { protected HQLQueryPlan CreateQueryPlan(string hql, bool scalar) { - return new HQLQueryPlan(hql, scalar, new CollectionHelper.EmptyMapClass<string, IFilter>(), sessions); + return new HQLStringQueryPlan(hql, scalar, new CollectionHelper.EmptyMapClass<string, IFilter>(), sessions); } protected HQLQueryPlan CreateQueryPlan(string hql) Modified: trunk/nhibernate/src/NHibernate.Test/Linq/MiscellaneousTextFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Linq/MiscellaneousTextFixture.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate.Test/Linq/MiscellaneousTextFixture.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Linq.Expressions; +using NHibernate.Linq; using NHibernate.Test.Linq.Entities; using NUnit.Framework; @@ -97,5 +98,20 @@ Assert.AreNotEqual(firstResultOnPage3.ProductId, firstResultOnPage4.ProductId); Assert.AreNotEqual(firstResultOnPage2.ProductId, firstResultOnPage4.ProductId); } + + [Test] + public void SelectFromObject() + { + using (var s = OpenSession()) + { + var hql = s.CreateQuery("from System.Object o").List(); + + var r = from o in s.Query<object>() select o; + + var l = r.ToList(); + + Console.WriteLine(l.Count); + } + } } } Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1849/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1849/Fixture.cs 2009-12-01 21:03:41 UTC (rev 4885) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1849/Fixture.cs 2009-12-01 22:08:23 UTC (rev 4886) @@ -39,7 +39,7 @@ { string hql = @"from Customer c where contains(c.Name, :smth)"; - HQLQueryPlan plan = new HQLQueryPlan(hql, false, new CollectionHelper.EmptyMapClass<string, IFilter>(), sessions); + HQLQueryPlan plan = new HQLStringQueryPlan(hql, false, new CollectionHelper.EmptyMapClass<string, IFilter>(), sessions); Assert.AreEqual(1, plan.ParameterMetadata.NamedParameterNames.Count); Assert.AreEqual(1, plan.QuerySpaces.Count); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-12-01 21:03:51
|
Revision: 4885 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4885&view=rev Author: fabiomaulo Date: 2009-12-01 21:03:41 +0000 (Tue, 01 Dec 2009) Log Message: ----------- binders refactoring - TypeBinder partially on the road Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate/Util/ArrayHelper.cs Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/TypeBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-12-01 16:47:38 UTC (rev 4884) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-12-01 21:03:41 UTC (rev 4885) @@ -197,7 +197,7 @@ string propertyName = versionSchema.name; var simpleValue = new SimpleValue(table); - BindVersionType(versionSchema.type, simpleValue); + new TypeBinder(simpleValue, Mappings).Bind(versionSchema.type); new ColumnsBinder(simpleValue, Mappings).Bind(versionSchema.Columns, false, () => new HbmColumn @@ -221,13 +221,6 @@ rootClass.AddProperty(property); } - private void BindVersionType(string versionTypeName, SimpleValue simpleValue) - { - if (versionTypeName == null) - return; - BindTypeDef(versionTypeName, versionTypeName, new Dictionary<string, string>(), simpleValue); - } - private void BindProperty(HbmVersion versionSchema, Property property, IDictionary<string, MetaAttribute> inheritedMetas) { property.Name = versionSchema.name; Added: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/TypeBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/TypeBinder.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/TypeBinder.cs 2009-12-01 21:03:41 UTC (rev 4885) @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping; +using NHibernate.Util; + +namespace NHibernate.Cfg.XmlHbmBinding +{ + public class TypeBinder: Binder + { + private readonly SimpleValue value; + + public TypeBinder(SimpleValue value, Mappings mappings) + : base(mappings) + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + this.value = value; + } + + public void Bind(string typeName) + { + if(string.IsNullOrEmpty(typeName)) + { + return; + } + Bind(new HbmType { name= typeName }); + } + + private void Bind(HbmType typeMapping) + { + if (typeMapping == null) + { + throw new ArgumentNullException("typeMapping"); + } + string originalTypeName = typeMapping.name; + if(originalTypeName == null) + { + return; + } + var parameters = new Dictionary<string, string>(); + if(typeMapping.param != null) + { + System.Array.ForEach(typeMapping.param, p => parameters[p.name] = p.Text.LinesToString()); + } + + BindThroughTypeDefOrType(originalTypeName, parameters); + } + + private void BindThroughTypeDefOrType(string originalTypeName, IDictionary<string, string> parameters) + { + string typeName = null; + TypeDef typeDef = Mappings.GetTypeDef(originalTypeName); + if (typeDef != null) + { + typeName = FullQualifiedClassName(typeDef.TypeClass, Mappings); + // parameters on the property mapping should + // override parameters in the typedef + parameters = new Dictionary<string, string>(typeDef.Parameters).AddOrOverride(parameters); + } + else if (NeedQualifiedClassName(originalTypeName) + && (typeDef = Mappings.GetTypeDef(FullQualifiedClassName(originalTypeName, Mappings))) != null) + { + // NH: allow className completing it with assembly+namespace of the mapping doc. + typeName = typeDef.TypeClass; + // parameters on the property mapping should + // override parameters in the typedef + parameters = new Dictionary<string, string>(typeDef.Parameters).AddOrOverride(parameters); + } + + if (parameters.Count != 0) + { + value.TypeParameters = parameters; + } + var typeToMap = typeName ?? originalTypeName; + if (NeedQualifiedClassName(typeToMap)) + { + typeToMap = FullQualifiedClassName(typeToMap, Mappings); + } + value.TypeName = typeToMap; + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 16:47:38 UTC (rev 4884) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 21:03:41 UTC (rev 4885) @@ -551,6 +551,7 @@ <Compile Include="Cfg\XmlHbmBinding\PropertiesBinder.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="Cfg\XmlHbmBinding\TypeBinder.cs" /> <Compile Include="Context\WcfOperationSessionContext.cs" /> <Compile Include="Criterion\GroupedProjection.cs" /> <Compile Include="Criterion\IPropertyProjection.cs" /> Modified: trunk/nhibernate/src/NHibernate/Util/ArrayHelper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Util/ArrayHelper.cs 2009-12-01 16:47:38 UTC (rev 4884) +++ trunk/nhibernate/src/NHibernate/Util/ArrayHelper.cs 2009-12-01 21:03:41 UTC (rev 4885) @@ -12,7 +12,7 @@ /// Helper class that contains common array functions and /// data structures used through out NHibernate. /// </summary> - public sealed class ArrayHelper + public static class ArrayHelper { public static readonly object[] EmptyObjectArray = new object[0]; public static readonly IType[] EmptyTypeArray = new IType[0]; @@ -22,10 +22,6 @@ public static readonly bool[] True = new bool[] { true }; public static readonly bool[] False = new bool[] { false }; - private ArrayHelper() - { - } - public static bool IsAllNegative(int[] array) { for (int i = 0; i < array.Length; i++) @@ -226,6 +222,16 @@ } } + public static IDictionary<TKey, TValue> AddOrOverride<TKey, TValue>(this IDictionary<TKey, TValue> destination, IDictionary<TKey, TValue> sourceOverride) + { + foreach (KeyValuePair<TKey, TValue> de in sourceOverride) + { + // we want to override the values from to if they exists + destination[de.Key] = de.Value; + } + return destination; + } + public static int[] GetBatchSizes(int maxBatchSize) { int batchSize = maxBatchSize; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-12-01 16:47:48
|
Revision: 4884 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4884&view=rev Author: fabiomaulo Date: 2009-12-01 16:47:38 +0000 (Tue, 01 Dec 2009) Log Message: ----------- Preparing other binders refactoring Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmElement.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyProperty.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ITypeMapping.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmElement.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmElement.cs 2009-12-01 16:31:59 UTC (rev 4883) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmElement.cs 2009-12-01 16:47:38 UTC (rev 4884) @@ -4,7 +4,7 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmElement: IColumnsMapping, IFormulasMapping + public partial class HbmElement: IColumnsMapping, IFormulasMapping, ITypeMapping { #region Implementation of IColumnsMapping @@ -56,5 +56,15 @@ } #endregion + + + #region Implementation of ITypeMapping + + public HbmType Type + { + get { return type ?? (!string.IsNullOrEmpty(type1) ? new HbmType { name = type1 } : null); } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs 2009-12-01 16:31:59 UTC (rev 4883) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs 2009-12-01 16:47:38 UTC (rev 4884) @@ -3,7 +3,7 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmId: AbstractDecoratable, IColumnsMapping + public partial class HbmId: AbstractDecoratable, IColumnsMapping, ITypeMapping { #region Implementation of IColumnsMapping @@ -38,5 +38,14 @@ } #endregion + + #region Implementation of ITypeMapping + + public HbmType Type + { + get { return type ?? (!string.IsNullOrEmpty(type1) ? new HbmType { name = type1 } : null); } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyProperty.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyProperty.cs 2009-12-01 16:31:59 UTC (rev 4883) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyProperty.cs 2009-12-01 16:47:38 UTC (rev 4884) @@ -2,7 +2,7 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmKeyProperty: IColumnsMapping + public partial class HbmKeyProperty: IColumnsMapping, ITypeMapping { #region Implementation of IColumnsMapping @@ -29,5 +29,14 @@ }; } } + + #region Implementation of ITypeMapping + + public HbmType Type + { + get { return type ?? (!string.IsNullOrEmpty(type1) ? new HbmType { name = type1 } : null); } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs 2009-12-01 16:31:59 UTC (rev 4883) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs 2009-12-01 16:47:38 UTC (rev 4884) @@ -4,7 +4,7 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmProperty : AbstractDecoratable, IEntityPropertyMapping, IColumnsMapping, IFormulasMapping + public partial class HbmProperty : AbstractDecoratable, IEntityPropertyMapping, IColumnsMapping, IFormulasMapping, ITypeMapping { #region Implementation of IEntityPropertyMapping @@ -87,5 +87,14 @@ } #endregion + + #region Implementation of ITypeMapping + + public HbmType Type + { + get { return type ?? (!string.IsNullOrEmpty(type1) ? new HbmType {name = type1} : null); } + } + + #endregion } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ITypeMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ITypeMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ITypeMapping.cs 2009-12-01 16:47:38 UTC (rev 4884) @@ -0,0 +1,7 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public interface ITypeMapping + { + HbmType Type { get; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 16:31:59 UTC (rev 4883) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 16:47:38 UTC (rev 4884) @@ -538,6 +538,7 @@ <Compile Include="Cfg\MappingSchema\IFormulasMapping.cs" /> <Compile Include="Cfg\MappingSchema\IPropertiesContainerMapping.cs" /> <Compile Include="Cfg\MappingSchema\IReferencePropertyMapping.cs" /> + <Compile Include="Cfg\MappingSchema\ITypeMapping.cs" /> <Compile Include="Cfg\SchemaAutoAction.cs" /> <Compile Include="Cfg\SessionFactoryConfigurationBase.cs" /> <Compile Include="Cfg\ISessionFactoryConfiguration.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-12-01 16:32:18
|
Revision: 4883 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4883&view=rev Author: fabiomaulo Date: 2009-12-01 16:31:59 +0000 (Tue, 01 Dec 2009) Log Message: ----------- binders refactoring -removed duplicated code Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDiscriminator.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassDiscriminatorBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDiscriminator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDiscriminator.cs 2009-12-01 15:44:13 UTC (rev 4882) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDiscriminator.cs 2009-12-01 16:31:59 UTC (rev 4883) @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; namespace NHibernate.Cfg.MappingSchema @@ -25,6 +24,8 @@ { name = column, length = length, + notnull = notnull, + notnullSpecified = true }; } } Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassDiscriminatorBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassDiscriminatorBinder.cs 2009-12-01 15:44:13 UTC (rev 4882) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassDiscriminatorBinder.cs 2009-12-01 16:31:59 UTC (rev 4883) @@ -3,21 +3,22 @@ namespace NHibernate.Cfg.XmlHbmBinding { - public class ClassDiscriminatorBinder : ClassBinder + public class ClassDiscriminatorBinder: Binder { - public ClassDiscriminatorBinder(ClassBinder parent) - : base(parent) + private readonly PersistentClass rootClass; + + public ClassDiscriminatorBinder(PersistentClass rootClass, Mappings mappings) : base(mappings) { + this.rootClass = rootClass; } - public void BindDiscriminator(HbmDiscriminator discriminatorSchema, PersistentClass rootClass, - Table table) + public void BindDiscriminator(HbmDiscriminator discriminatorSchema, Table table) { if (discriminatorSchema == null) return; //DISCRIMINATOR - SimpleValue discriminator = new SimpleValue(table); + var discriminator = new SimpleValue(table); rootClass.Discriminator = discriminator; BindSimpleValue(discriminatorSchema, discriminator); @@ -38,73 +39,23 @@ if (discriminatorSchema.formula != null) { - Formula f = new Formula(); - f.FormulaString = discriminatorSchema.formula; + var f = new Formula {FormulaString = discriminatorSchema.formula}; discriminator.AddFormula(f); } else - BindColumns(discriminatorSchema, discriminator); - } - - private void BindColumns(HbmDiscriminator discriminatorSchema, SimpleValue discriminator) - { - Table table = discriminator.Table; - - //COLUMN(S) - if (discriminatorSchema.column != null) { - Column col = new Column(); - col.Value = discriminator; - BindColumn(discriminatorSchema, col); - col.Name = mappings.NamingStrategy.ColumnName(discriminatorSchema.column); - - if (table != null) - table.AddColumn(col); - - discriminator.AddColumn(col); + new ColumnsBinder(discriminator, Mappings).Bind(discriminatorSchema.Columns, false, + () => + new HbmColumn + { + name = + mappings.NamingStrategy.PropertyToColumnName( + RootClass.DefaultDiscriminatorColumnName), + length = discriminatorSchema.length, + notnull = discriminatorSchema.notnull, + notnullSpecified = true + }); } - else if (discriminatorSchema.Item != null && discriminatorSchema.Item is HbmColumn) - { - HbmColumn theCol = (HbmColumn)discriminatorSchema.Item; - Column col = new Column(); - col.Value = discriminator; - BindColumn(theCol, col, false); - - col.Name = mappings.NamingStrategy.ColumnName(theCol.name); - - if (table != null) - table.AddColumn(col); - //table=null -> an association, fill it in later - - discriminator.AddColumn(col); - - BindIndex(theCol.index, table, col); - BindUniqueKey(theCol.uniquekey, table, col); - } - - if (discriminator.ColumnSpan == 0) - { - Column col = new Column(); - col.Value = discriminator; - BindColumn(discriminatorSchema, col); - - col.Name = mappings.NamingStrategy.PropertyToColumnName( - RootClass.DefaultDiscriminatorColumnName); - - discriminator.Table.AddColumn(col); - discriminator.AddColumn(col); - } } - - private static void BindColumn(HbmDiscriminator discriminatorSchema, Column column) - { - if (discriminatorSchema.length != null) - column.Length = int.Parse(discriminatorSchema.length); - - column.IsNullable = !discriminatorSchema.notnull; - column.IsUnique = false; - column.CheckConstraint = string.Empty; - column.SqlType = null; - } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-12-01 15:44:13 UTC (rev 4882) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-12-01 16:31:59 UTC (rev 4883) @@ -51,7 +51,7 @@ BindCache(classSchema.cache, rootClass); new ClassIdBinder(this).BindId(classSchema.Id, rootClass, table); new ClassCompositeIdBinder(this).BindCompositeId(classSchema.CompositeId, rootClass); - new ClassDiscriminatorBinder(this).BindDiscriminator(classSchema.discriminator, rootClass, table); + new ClassDiscriminatorBinder(rootClass, Mappings).BindDiscriminator(classSchema.discriminator, table); BindTimestamp(classSchema.Timestamp, rootClass, table, inheritedMetas); BindVersion(classSchema.Version, rootClass, table, inheritedMetas); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-12-01 15:44:23
|
Revision: 4882 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4882&view=rev Author: fabiomaulo Date: 2009-12-01 15:44:13 +0000 (Tue, 01 Dec 2009) Log Message: ----------- binders refactoring -removed duplicated code Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmTimestamp.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmTimestamp.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmTimestamp.cs 2009-12-01 14:26:29 UTC (rev 4881) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmTimestamp.cs 2009-12-01 15:44:13 UTC (rev 4882) @@ -1,10 +1,35 @@ +using System; +using System.Collections.Generic; + namespace NHibernate.Cfg.MappingSchema { - partial class HbmTimestamp : AbstractDecoratable + partial class HbmTimestamp : AbstractDecoratable, IColumnsMapping { protected override HbmMeta[] Metadatas { get { return meta ?? new HbmMeta[0]; } } + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get + { + if (string.IsNullOrEmpty(column)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column, + }; + } + } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-12-01 14:26:29 UTC (rev 4881) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-12-01 15:44:13 UTC (rev 4882) @@ -16,7 +16,7 @@ public void Bind(HbmClass classSchema, IDictionary<string, MetaAttribute> inheritedMetas) { - RootClass rootClass = new RootClass(); + var rootClass = new RootClass(); BindClass(classSchema, rootClass, inheritedMetas); // OPTIMISTIC LOCK MODE rootClass.OptimisticLockMode = classSchema.optimisticlock.ToOptimisticLock(); @@ -104,10 +104,12 @@ return; string propertyName = timestampSchema.name; - SimpleValue simpleValue = new SimpleValue(table); + var simpleValue = new SimpleValue(table); + new ColumnsBinder(simpleValue, Mappings).Bind(timestampSchema.Columns, false, + () => + new HbmColumn + {name = mappings.NamingStrategy.PropertyToColumnName(propertyName)}); - BindColumns(timestampSchema, simpleValue, propertyName); - if (!simpleValue.IsTypeSpecified) { switch (timestampSchema.source) @@ -138,42 +140,6 @@ rootClass.AddProperty(property); } - private void BindColumns(HbmTimestamp timestampSchema, SimpleValue model, string propertyPath) - { - Table table = model.Table; - - if (timestampSchema.column != null) - { - Column col = new Column(); - col.Value = model; - BindColumn(col, false); - col.Name = mappings.NamingStrategy.ColumnName(timestampSchema.column); - - if (table != null) - table.AddColumn(col); - - model.AddColumn(col); - } - - if (model.ColumnSpan == 0) - { - Column col = new Column(); - col.Value = model; - BindColumn(col, false); - col.Name = mappings.NamingStrategy.PropertyToColumnName(propertyPath); - model.Table.AddColumn(col); - model.AddColumn(col); - } - } - - private static void BindColumn(Column column, bool isNullable) - { - column.IsNullable = isNullable; - column.IsUnique = false; - column.CheckConstraint = string.Empty; - column.SqlType = null; - } - private void BindProperty(HbmTimestamp timestampSchema, Property property, IDictionary<string, MetaAttribute> inheritedMetas) { property.Name = timestampSchema.name; @@ -230,9 +196,13 @@ return; string propertyName = versionSchema.name; - SimpleValue simpleValue = new SimpleValue(table); + var simpleValue = new SimpleValue(table); BindVersionType(versionSchema.type, simpleValue); - BindColumns(versionSchema, simpleValue, false, propertyName); + new ColumnsBinder(simpleValue, Mappings).Bind(versionSchema.Columns, false, + () => + new HbmColumn + {name = mappings.NamingStrategy.PropertyToColumnName(propertyName)}); + if (!simpleValue.IsTypeSpecified) simpleValue.TypeName = NHibernateUtil.Int32.Name; @@ -258,43 +228,6 @@ BindTypeDef(versionTypeName, versionTypeName, new Dictionary<string, string>(), simpleValue); } - private void BindColumns(HbmVersion versionSchema, SimpleValue model, bool isNullable, string propertyPath) - { - Table table = model.Table; - if (versionSchema.column1 != null) - { - var col = new Column {Value = model}; - BindColumn(col, isNullable); - col.Name = mappings.NamingStrategy.ColumnName(versionSchema.column1); - - if (table != null) - table.AddColumn(col); - - model.AddColumn(col); - } - else if (versionSchema.column != null) - { - foreach (HbmColumn hbmColumn in versionSchema.column) - { - var col = new Column {Value = model}; - BindColumn(hbmColumn, col, isNullable); - if (table != null) - table.AddColumn(col); - - model.AddColumn(col); - } - } - - if (model.ColumnSpan == 0) - { - var col = new Column {Value = model}; - BindColumn(col, isNullable); - col.Name = mappings.NamingStrategy.PropertyToColumnName(propertyPath); - model.Table.AddColumn(col); - model.AddColumn(col); - } - } - private void BindProperty(HbmVersion versionSchema, Property property, IDictionary<string, MetaAttribute> inheritedMetas) { property.Name = versionSchema.name; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-12-01 14:26:42
|
Revision: 4881 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4881&view=rev Author: fabiomaulo Date: 2009-12-01 14:26:29 +0000 (Tue, 01 Dec 2009) Log Message: ----------- binders refactoring -ColumnsBinder on the road Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassCompositeIdBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ColumnsBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs 2009-12-01 00:18:30 UTC (rev 4880) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs 2009-12-01 14:26:29 UTC (rev 4881) @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; namespace NHibernate.Cfg.MappingSchema @@ -2,3 +3,3 @@ { - public partial class HbmId: IColumnsMapping + public partial class HbmId: AbstractDecoratable, IColumnsMapping { @@ -28,5 +29,14 @@ }; } } + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassCompositeIdBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassCompositeIdBinder.cs 2009-12-01 00:18:30 UTC (rev 4880) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassCompositeIdBinder.cs 2009-12-01 14:26:29 UTC (rev 4881) @@ -7,16 +7,15 @@ { public class ClassCompositeIdBinder : ClassBinder { - public ClassCompositeIdBinder(ClassBinder parent) - : base(parent) - { - } - private Component compositeId; + public ClassCompositeIdBinder(ClassBinder parent) : base(parent) {} + public void BindCompositeId(HbmCompositeId idSchema, PersistentClass rootClass) { if (idSchema == null) + { return; + } compositeId = new Component(rootClass); rootClass.Identifier = compositeId; @@ -28,12 +27,11 @@ } else { - System.Type reflectedClass = GetPropertyType(rootClass.MappedClass, - idSchema.name, idSchema); + System.Type reflectedClass = GetPropertyType(rootClass.MappedClass, idSchema.name, idSchema); BindComponent(reflectedClass, idSchema.name, idSchema); - Mapping.Property prop = new Mapping.Property(compositeId); + var prop = new Property(compositeId); BindProperty(prop, idSchema); rootClass.IdentifierProperty = prop; } @@ -43,24 +41,22 @@ System.Type compIdClass = compositeId.ComponentClass; if (!ReflectHelper.OverridesEquals(compIdClass)) - throw new MappingException( - "composite-id class must override Equals(): " + compIdClass.FullName - ); + { + throw new MappingException("composite-id class must override Equals(): " + compIdClass.FullName); + } if (!ReflectHelper.OverridesGetHashCode(compIdClass)) - throw new MappingException( - "composite-id class must override GetHashCode(): " + compIdClass.FullName - ); + { + throw new MappingException("composite-id class must override GetHashCode(): " + compIdClass.FullName); + } // Serializability check not ported } - private void BindComponent(System.Type reflectedClass, string path, - HbmCompositeId idSchema) + private void BindComponent(System.Type reflectedClass, string path, HbmCompositeId idSchema) { if (idSchema.@class != null) { - compositeId.ComponentClass = ClassForNameChecked(idSchema.@class, mappings, - "component class not found: {0}"); + compositeId.ComponentClass = ClassForNameChecked(idSchema.@class, mappings, "component class not found: {0}"); compositeId.IsEmbedded = false; } @@ -78,48 +74,45 @@ foreach (object item in idSchema.Items ?? new object[0]) { - HbmKeyManyToOne keyManyToOneSchema = item as HbmKeyManyToOne; - HbmKeyProperty keyPropertySchema = item as HbmKeyProperty; + var keyManyToOneSchema = item as HbmKeyManyToOne; + var keyPropertySchema = item as HbmKeyProperty; if (keyManyToOneSchema != null) { - ManyToOne manyToOne = new ManyToOne(compositeId.Table); + var manyToOne = new ManyToOne(compositeId.Table); - string propertyName = keyManyToOneSchema.name == null - ? null - : StringHelper.Qualify(path, keyManyToOneSchema.name); + string propertyName = keyManyToOneSchema.name == null ? null : StringHelper.Qualify(path, keyManyToOneSchema.name); BindManyToOne(keyManyToOneSchema, manyToOne, propertyName, false); - Mapping.Property property = CreateProperty(manyToOne, keyManyToOneSchema.name, - compositeId.ComponentClass, keyManyToOneSchema); + Property property = CreateProperty(manyToOne, keyManyToOneSchema.name, compositeId.ComponentClass, + keyManyToOneSchema); compositeId.AddProperty(property); } else if (keyPropertySchema != null) { - SimpleValue value = new SimpleValue(compositeId.Table); + var value = new SimpleValue(compositeId.Table); - string propertyName = keyPropertySchema.name == null - ? null - : StringHelper.Qualify(path, keyPropertySchema.name); + string propertyName = keyPropertySchema.name == null ? null : StringHelper.Qualify(path, keyPropertySchema.name); BindSimpleValue(keyPropertySchema, value, false, propertyName); - Mapping.Property property = CreateProperty(value, keyPropertySchema.name, - compositeId.ComponentClass, keyPropertySchema); + Property property = CreateProperty(value, keyPropertySchema.name, compositeId.ComponentClass, keyPropertySchema); compositeId.AddProperty(property); } } } - private void BindProperty(Mapping.Property property, HbmCompositeId idSchema) + private void BindProperty(Property property, HbmCompositeId idSchema) { property.Name = idSchema.name; if (property.Value.Type == null) + { throw new MappingException("could not determine a property type for: " + property.Name); + } property.PropertyAccessorName = idSchema.access ?? mappings.DefaultAccess; property.Cascade = mappings.DefaultCascade; @@ -132,14 +125,17 @@ LogMappedProperty(property); } - private System.Type GetPropertyType(System.Type containingType, string propertyName, - HbmCompositeId idSchema) + private System.Type GetPropertyType(System.Type containingType, string propertyName, HbmCompositeId idSchema) { if (idSchema.@class != null) + { return ClassForNameChecked(idSchema.@class, mappings, "could not find class: {0}"); + } else if (containingType == null) + { return null; + } else { @@ -149,14 +145,15 @@ } private void BindManyToOne(HbmKeyManyToOne keyManyToOneSchema, ManyToOne manyToOne, string defaultColumnName, - bool isNullable) + bool isNullable) { - BindColumns(keyManyToOneSchema, manyToOne, isNullable, true, defaultColumnName); + new ColumnsBinder(manyToOne, mappings).Bind(keyManyToOneSchema.Columns, isNullable, + () => new HbmColumn { name = mappings.NamingStrategy.PropertyToColumnName(defaultColumnName) }); manyToOne.FetchMode = FetchMode.Default; manyToOne.IsLazy = !keyManyToOneSchema.lazySpecified - ? manyToOne.IsLazy - : keyManyToOneSchema.lazy == HbmRestrictedLaziness.Proxy; + ? manyToOne.IsLazy + : keyManyToOneSchema.lazy == HbmRestrictedLaziness.Proxy; string typeNode = keyManyToOneSchema.@class; if (typeNode != null) @@ -171,81 +168,25 @@ manyToOne.IsIgnoreNotFound = false; if (keyManyToOneSchema.foreignkey != null) - manyToOne.ForeignKeyName = keyManyToOneSchema.foreignkey; - } - - private void BindColumns(HbmKeyManyToOne keyManyToOneSchema, SimpleValue model, bool isNullable, - bool autoColumn, string propertyPath) - { - Table table = model.Table; - //COLUMN(S) - if (keyManyToOneSchema.column1 == null) { - int count = 0; - - foreach (HbmColumn columnSchema in keyManyToOneSchema.column ?? new HbmColumn[0]) - { - Column col = new Column(); - col.Value = model; - col.TypeIndex = count++; - BindColumn(columnSchema, col, isNullable); - - string name = columnSchema.name; - col.Name = mappings.NamingStrategy.ColumnName(name); - if (table != null) - table.AddColumn(col); - //table=null -> an association, fill it in later - model.AddColumn(col); - - //column index - BindIndex(columnSchema.index, table, col); - //column group index (although it can serve as a separate column index) - - BindUniqueKey(columnSchema.uniquekey, table, col); - } + manyToOne.ForeignKeyName = keyManyToOneSchema.foreignkey; } - else - { - Column col = new Column(); - col.Value = compositeId; - BindColumn(col, isNullable); - col.Name = mappings.NamingStrategy.ColumnName(keyManyToOneSchema.column1); - if (table != null) - table.AddColumn(col); - model.AddColumn(col); - //column group index (although can serve as a separate column index) - } - - if (autoColumn && model.ColumnSpan == 0) - { - Column col = new Column(); - col.Value = model; - BindColumn(col, isNullable); - col.Name = mappings.NamingStrategy.PropertyToColumnName(propertyPath); - model.Table.AddColumn(col); - model.AddColumn(col); - //column group index (although can serve as a separate column index) - } } - private static void BindColumn(Column model, bool isNullable) - { - model.IsNullable = isNullable; - model.IsUnique = false; - model.CheckConstraint = string.Empty; - model.SqlType = null; - } - private Property CreateProperty(ToOne value, string propertyName, System.Type parentClass, - HbmKeyManyToOne keyManyToOneSchema) + HbmKeyManyToOne keyManyToOneSchema) { if (parentClass != null && value.IsSimpleValue) + { value.SetTypeUsingReflection(parentClass.AssemblyQualifiedName, propertyName, keyManyToOneSchema.access ?? mappings.DefaultAccess); + } string propertyRef = value.ReferencedPropertyName; if (propertyRef != null) + { mappings.AddUniquePropertyReference(value.ReferencedEntityName, propertyRef); + } value.CreateForeignKey(); var prop = new Property {Value = value}; @@ -259,7 +200,9 @@ property.Name = keyManyToOneSchema.name; if (property.Value.Type == null) + { throw new MappingException("could not determine a property type for: " + property.Name); + } property.PropertyAccessorName = keyManyToOneSchema.access ?? mappings.DefaultAccess; property.Cascade = mappings.DefaultCascade; @@ -275,80 +218,21 @@ private void BindSimpleValue(HbmKeyProperty keyPropertySchema, SimpleValue model, bool isNullable, string path) { if (keyPropertySchema.type1 != null) - model.TypeName = keyPropertySchema.type1; - BindColumns(keyPropertySchema, model, isNullable, true, path); - } - - private void BindColumns(HbmKeyProperty keyPropertySchema, SimpleValue model, bool isNullable, bool autoColumn, - string propertyPath) - { - Table table = model.Table; - - if (keyPropertySchema.column1 == null) { - int count = 0; - - foreach (HbmColumn columnSchema in keyPropertySchema.column ?? new HbmColumn[0]) - { - Column col = new Column(); - col.Value = model; - col.TypeIndex = count++; - BindColumn(columnSchema, col, isNullable); - - col.Name = mappings.NamingStrategy.ColumnName(columnSchema.name); - if (table != null) - table.AddColumn(col); - //table=null -> an association, fill it in later - model.AddColumn(col); - - //column index - BindIndex(columnSchema.index, table, col); - //column group index (although it can serve as a separate column index) - - BindUniqueKey(columnSchema.uniquekey, table, col); - } + model.TypeName = keyPropertySchema.type1; } - else - { - Column col = new Column(); - col.Value = compositeId; - BindColumn(keyPropertySchema, col, isNullable); - col.Name = mappings.NamingStrategy.ColumnName(keyPropertySchema.column1); - if (table != null) - table.AddColumn(col); - model.AddColumn(col); - //column group index (although can serve as a separate column index) - } - - if (autoColumn && model.ColumnSpan == 0) - { - Column col = new Column(); - col.Value = model; - BindColumn(keyPropertySchema, col, isNullable); - col.Name = mappings.NamingStrategy.PropertyToColumnName(propertyPath); - model.Table.AddColumn(col); - model.AddColumn(col); - //column group index (although can serve as a separate column index) - } + new ColumnsBinder(model, Mappings).Bind(keyPropertySchema.Columns, isNullable, + () => new HbmColumn { name = mappings.NamingStrategy.PropertyToColumnName(path), length = keyPropertySchema.length }); } - private static void BindColumn(HbmKeyProperty keyPropertySchema, Column model, bool isNullable) - { - if (keyPropertySchema.length != null) - model.Length = int.Parse(keyPropertySchema.length); - - model.IsNullable = isNullable; - model.IsUnique = false; - model.CheckConstraint = string.Empty; - model.SqlType = null; - } - private Property CreateProperty(SimpleValue value, string propertyName, System.Type parentClass, - HbmKeyProperty keyPropertySchema) + HbmKeyProperty keyPropertySchema) { if (parentClass != null && value.IsSimpleValue) + { value.SetTypeUsingReflection(parentClass.AssemblyQualifiedName, propertyName, keyPropertySchema.access ?? mappings.DefaultAccess); + } // This is done here 'cos we might only know the type here (ugly!) var toOne = value as ToOne; @@ -356,7 +240,9 @@ { string propertyRef = toOne.ReferencedPropertyName; if (propertyRef != null) + { mappings.AddUniquePropertyReference(toOne.ReferencedEntityName, propertyRef); + } } value.CreateForeignKey(); @@ -371,7 +257,9 @@ property.Name = keyPropertySchema.name; if (property.Value.Type == null) + { throw new MappingException("could not determine a property type for: " + property.Name); + } property.PropertyAccessorName = keyPropertySchema.access ?? mappings.DefaultAccess; property.Cascade = mappings.DefaultCascade; Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs 2009-12-01 00:18:30 UTC (rev 4880) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs 2009-12-01 14:26:29 UTC (rev 4881) @@ -1,5 +1,5 @@ +using System; using System.Collections.Generic; -using System.Xml; using NHibernate.Cfg.MappingSchema; using NHibernate.Mapping; using NHibernate.Util; @@ -17,9 +17,16 @@ { if (idSchema != null) { - SimpleValue id = CreateIdentifier(idSchema, rootClass, table); + var id = new SimpleValue(table) { TypeName = idSchema.type1 }; + rootClass.Identifier = id; - AddColumns(idSchema, id); + Func<HbmColumn> defaultColumn = () => new HbmColumn + { + name = idSchema.name ?? RootClass.DefaultIdentifierColumnName, + length = idSchema.length + }; + new ColumnsBinder(id, Mappings).Bind(idSchema.Columns, false, defaultColumn); + CreateIdentifierProperty(idSchema, rootClass, id); VerifiyIdTypeIsValid(id, rootClass.EntityName); BindGenerator(idSchema, id); @@ -28,26 +35,6 @@ } } - private static SimpleValue CreateIdentifier(HbmId idSchema, PersistentClass rootClass, Table table) - { - SimpleValue iv = new SimpleValue(table); - iv.TypeName = idSchema.type1; - rootClass.Identifier = iv; - - return iv; - } - - private void AddColumns(HbmId idSchema, SimpleValue id) - { - if (idSchema.column1 != null) - AddColumnFromAttribute(idSchema, id); - else - AddColumnsFromList(idSchema, id); - - if (id.ColumnSpan == 0) - AddDefaultColumn(idSchema, id); - } - private void CreateIdentifierProperty(HbmId idSchema, PersistentClass rootClass, SimpleValue id) { if (idSchema.name != null) @@ -56,8 +43,7 @@ id.SetTypeUsingReflection(rootClass.MappedClass == null ? null : rootClass.MappedClass.AssemblyQualifiedName, idSchema.name, access); - Property property = new Property(id); - property.Name = idSchema.name; + var property = new Property(id) {Name = idSchema.name}; if (property.Value.Type == null) throw new MappingException("could not determine a property type for: " + property.Name); @@ -68,7 +54,7 @@ property.IsInsertable = true; property.IsOptimisticLocked = true; property.Generation = PropertyGeneration.Never; - property.MetaAttributes = GetMetas(idSchema); + property.MetaAttributes = GetMetas(idSchema, EmptyMeta); rootClass.IdentifierProperty = property; @@ -114,7 +100,7 @@ private IDictionary<string,string> GetGeneratorProperties(HbmId idSchema, IValue id) { - Dictionary<string, string> results = new Dictionary<string, string>(); + var results = new Dictionary<string, string>(); if (id.Table.Schema != null) results.Add(Id.PersistentIdGeneratorParmsNames.Schema, id.Table.Schema); @@ -131,110 +117,5 @@ { id.NullValue = idSchema.unsavedvalue ?? (id.IdentifierGeneratorStrategy == "assigned" ? "undefined" : null); } - - private void AddColumnFromAttribute(HbmId idSchema, SimpleValue id) - { - Column column = CreateColumn(idSchema); - column.Value = id; - column.Name = mappings.NamingStrategy.ColumnName(idSchema.column1); - - if (id.Table != null) - id.Table.AddColumn(column); - - id.AddColumn(column); - } - - private void AddColumnsFromList(HbmId idSchema, SimpleValue id) - { - int count = 0; - - foreach (HbmColumn columnSchema in idSchema.column ?? new HbmColumn[0]) - { - Column column = CreateColumn(columnSchema, id, count++); - column.Name = mappings.NamingStrategy.ColumnName(columnSchema.name); - - if (id.Table != null) - id.Table.AddColumn(column); - //table=null -> an association, fill it in later - - id.AddColumn(column); - - if (columnSchema.index != null && id.Table != null) - { - var tokens = new StringTokenizer(columnSchema.index, ",", false); - foreach (string token in tokens) - id.Table.GetOrCreateIndex(token.Trim()).AddColumn(column); - } - - if (columnSchema.uniquekey != null && id.Table != null) - { - var tokens = new StringTokenizer(columnSchema.uniquekey, ",", false); - foreach (string token in tokens) - id.Table.GetOrCreateUniqueKey(token.Trim()).AddColumn(column); - } - } - } - - private void AddDefaultColumn(HbmId idSchema, SimpleValue id) - { - Column column = CreateColumn(idSchema); - column.Value = id; - string propertyName = idSchema.name ?? RootClass.DefaultIdentifierColumnName; - column.Name = mappings.NamingStrategy.PropertyToColumnName(propertyName); - - id.Table.AddColumn(column); - id.AddColumn(column); - } - - private static IDictionary<string, MetaAttribute> GetMetas(HbmId idSchema) - { - Dictionary<string, MetaAttribute> map = new Dictionary<string, MetaAttribute>(); - - foreach (HbmMeta metaSchema in idSchema.meta ?? new HbmMeta[0]) - { - MetaAttribute meta; - if (!map.TryGetValue(metaSchema.attribute, out meta)) - { - meta = new MetaAttribute(metaSchema.attribute); - map[metaSchema.attribute] = meta; - } - - meta.AddValue(metaSchema.GetText()); - } - - return map; - } - - private static Column CreateColumn(HbmId idSchema) - { - Column column = new Column(); - - if (idSchema.length != null) - column.Length = int.Parse(idSchema.length); - - column.IsNullable = false; - column.IsUnique = false; - column.CheckConstraint = string.Empty; - column.SqlType = null; - - return column; - } - - private static Column CreateColumn(HbmColumn columnSchema, IValue type, int index) - { - Column column = new Column(); - column.Value = type; - column.TypeIndex = index; - - if (columnSchema.length != null) - column.Length = int.Parse(columnSchema.length); - - column.IsNullable = columnSchema.notnullSpecified ? !columnSchema.notnull : false; - column.IsUnique = columnSchema.uniqueSpecified && columnSchema.unique; - column.CheckConstraint = columnSchema.check ?? string.Empty; - column.SqlType = columnSchema.sqltype; - - return column; - } } } Added: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ColumnsBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ColumnsBinder.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ColumnsBinder.cs 2009-12-01 14:26:29 UTC (rev 4881) @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping; +using NHibernate.Util; + +namespace NHibernate.Cfg.XmlHbmBinding +{ + public class ColumnsBinder: Binder + { + private readonly SimpleValue value; + + public ColumnsBinder(SimpleValue value, Mappings mappings) + : base(mappings) + { + this.value = value; + } + + public void Bind(IEnumerable<HbmColumn> columns, bool isNullable, Func<HbmColumn> defaultColumnDelegate) + { + var table = value.Table; + int colIndex = 0; + foreach (var hbmColumn in columns) + { + BindColumn(hbmColumn, table, colIndex++, isNullable); + } + + if (value.ColumnSpan == 0 && defaultColumnDelegate != null) + { + BindColumn(defaultColumnDelegate(), table, colIndex, isNullable); + } + } + + private void BindColumn(HbmColumn hbmColumn, Table table, int colIndex, bool isNullable) + { + var col = new Column {Value = value, TypeIndex = colIndex}; + BindColumn(hbmColumn, col, isNullable); + + if (table != null) + table.AddColumn(col); + + value.AddColumn(col); + + //column index + BindIndex(hbmColumn.index, table, col); + //column group index (although it can serve as a separate column index) + BindUniqueKey(hbmColumn.uniquekey, table, col); + } + + private void BindColumn(HbmColumn columnMapping, Column column, bool isNullable) + { + column.Name = mappings.NamingStrategy.ColumnName(columnMapping.name); + + if (columnMapping.length != null) + column.Length = int.Parse(columnMapping.length); + if (columnMapping.scale != null) + column.Scale = int.Parse(columnMapping.scale); + if (columnMapping.precision != null) + column.Precision = int.Parse(columnMapping.precision); + + column.IsNullable = columnMapping.notnullSpecified ? !columnMapping.notnull : isNullable; + column.IsUnique = columnMapping.uniqueSpecified && columnMapping.unique; + column.CheckConstraint = columnMapping.check ?? string.Empty; + column.SqlType = columnMapping.sqltype; + column.DefaultValue = columnMapping.@default; + if (columnMapping.comment != null) + column.Comment = columnMapping.comment.Text.LinesToString().Trim(); + } + + private static void BindIndex(string indexAttribute, Table table, Column column) + { + if (indexAttribute != null && table != null) + { + var tokens = indexAttribute.Split(','); + System.Array.ForEach(tokens, t => table.GetOrCreateIndex(t.Trim()).AddColumn(column)); + } + } + + private static void BindUniqueKey(string uniqueKeyAttribute, Table table, Column column) + { + if (uniqueKeyAttribute != null && table != null) + { + var tokens = uniqueKeyAttribute.Split(','); + System.Array.ForEach(tokens, t => table.GetOrCreateUniqueKey(t.Trim()).AddColumn(column)); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 00:18:30 UTC (rev 4880) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 14:26:29 UTC (rev 4881) @@ -545,6 +545,7 @@ <Compile Include="Cfg\MappingSchema\HbmTimestamp.cs" /> <Compile Include="Cfg\MappingSchema\HbmVersion.cs" /> <Compile Include="Cfg\MappingSchema\IDecoratable.cs" /> + <Compile Include="Cfg\XmlHbmBinding\ColumnsBinder.cs" /> <Compile Include="Cfg\XmlHbmBinding\FiltersBinder.cs" /> <Compile Include="Cfg\XmlHbmBinding\PropertiesBinder.cs"> <SubType>Code</SubType> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-12-01 00:19:10
|
Revision: 4880 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4880&view=rev Author: fabiomaulo Date: 2009-12-01 00:18:30 +0000 (Tue, 01 Dec 2009) Log Message: ----------- Preparing other binders refactoring Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmVersion.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmCollectionId.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDiscriminator.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmElement.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndex.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndexManyToAny.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndexManyToMany.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKey.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyManyToOne.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyProperty.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmListIndex.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToAny.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToMany.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapKey.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapKeyManyToMany.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IColumnsMapping.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IFormulasMapping.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs 2009-11-30 20:31:06 UTC (rev 4879) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -1,8 +1,9 @@ using System; +using System.Collections.Generic; namespace NHibernate.Cfg.MappingSchema { - public partial class HbmAny : AbstractDecoratable, IEntityPropertyMapping + public partial class HbmAny : AbstractDecoratable, IEntityPropertyMapping, IColumnsMapping { #region Implementation of IEntityPropertyMapping @@ -31,5 +32,30 @@ } #endregion + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + index = index + }; + } + } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmCollectionId.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmCollectionId.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmCollectionId.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmCollectionId: IColumnsMapping + { + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if(string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + length = length, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDiscriminator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDiscriminator.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDiscriminator.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmDiscriminator: IColumnsMapping, IFormulasMapping + { + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get + { + if(Item as HbmColumn != null) + { + yield return (HbmColumn)Item; + } + else if (string.IsNullOrEmpty(column)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column, + length = length, + }; + } + } + } + + #endregion + + #region Implementation of IFormulasMapping + + public IEnumerable<HbmFormula> Formulas + { + get + { + if (Item as HbmFormula != null) + { + yield return (HbmFormula) Item; + } + else if (string.IsNullOrEmpty(formula)) + { + yield break; + } + else + { + yield return new HbmFormula {Text = new[] {formula}}; + } + } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmElement.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmElement.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmElement.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmElement: IColumnsMapping, IFormulasMapping + { + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return Items != null ? Items.OfType<HbmColumn>() : AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column, + length = length, + scale = scale, + precision = precision, + notnull = notnull, + unique = unique, + uniqueSpecified = true, + }; + } + } + + #region Implementation of IFormulasMapping + + public IEnumerable<HbmFormula> Formulas + { + get { return Items != null ? Items.OfType<HbmFormula>() : AsFormulas(); } + } + + private IEnumerable<HbmFormula> AsFormulas() + { + if (string.IsNullOrEmpty(formula)) + { + yield break; + } + else + { + yield return new HbmFormula { Text = new[] { formula } }; + } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmId.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmId: IColumnsMapping + { + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + length = length, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndex.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndex.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndex.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmIndex: IColumnsMapping + { + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + length = length, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndexManyToAny.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndexManyToAny.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndexManyToAny.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,31 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmIndexManyToAny: IColumnsMapping + { + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndexManyToMany.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndexManyToMany.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIndexManyToMany.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,31 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmIndexManyToMany: IColumnsMapping + { + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKey.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKey.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKey.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,35 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmKey: IColumnsMapping + { + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + notnull = notnull, + notnullSpecified = notnullSpecified, + unique = unique, + uniqueSpecified = uniqueSpecified, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyManyToOne.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyManyToOne.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyManyToOne.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmKeyManyToOne: IColumnsMapping + { + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyProperty.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyProperty.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmKeyProperty.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,33 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmKeyProperty: IColumnsMapping + { + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + length = length, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmListIndex.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmListIndex.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmListIndex.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,29 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmListIndex: IColumnsMapping + { + public IEnumerable<HbmColumn> Columns + { + get + { + if (column != null) + { + yield return column; + } + else if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + }; + } + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToAny.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToAny.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToAny.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmManyToAny: IColumnsMapping + { + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + }; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToMany.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToMany.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToMany.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Linq; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmManyToMany: IColumnsMapping + { + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return Items != null ? Items.OfType<HbmColumn>() : AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column, + }; + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs 2009-11-30 20:31:06 UTC (rev 4879) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -1,8 +1,10 @@ using System; +using System.Collections.Generic; +using System.Linq; namespace NHibernate.Cfg.MappingSchema { - public partial class HbmManyToOne : AbstractDecoratable, IEntityPropertyMapping + public partial class HbmManyToOne : AbstractDecoratable, IEntityPropertyMapping, IColumnsMapping, IFormulasMapping { #region Implementation of IEntityPropertyMapping @@ -32,5 +34,55 @@ #endregion + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return Items != null ? Items.OfType<HbmColumn>() : AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column, + notnull = notnull, + notnullSpecified = notnullSpecified, + unique = unique, + uniqueSpecified = true, + uniquekey = uniquekey, + index = index + }; + } + } + + #region Implementation of IFormulasMapping + + public IEnumerable<HbmFormula> Formulas + { + get { return Items != null ? Items.OfType<HbmFormula>() : AsFormulas(); } + } + + private IEnumerable<HbmFormula> AsFormulas() + { + if (string.IsNullOrEmpty(formula)) + { + yield break; + } + else + { + yield return new HbmFormula { Text = new[] { formula } }; + } + } + + #endregion } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapKey.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapKey.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapKey.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using System.Linq; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmMapKey: IColumnsMapping + { + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return Items != null ? Items.OfType<HbmColumn>() : AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column, + length = length, + }; + } + } + + #region Implementation of IFormulasMapping + + public IEnumerable<HbmFormula> Formulas + { + get { return Items != null ? Items.OfType<HbmFormula>() : AsFormulas(); } + } + + private IEnumerable<HbmFormula> AsFormulas() + { + if (string.IsNullOrEmpty(formula)) + { + yield break; + } + else + { + yield return new HbmFormula { Text = new[] { formula } }; + } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapKeyManyToMany.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapKeyManyToMany.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapKeyManyToMany.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using System.Linq; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmMapKeyManyToMany: IColumnsMapping, IFormulasMapping + { + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return Items != null ? Items.OfType<HbmColumn>() : AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column, + }; + } + } + + #region Implementation of IFormulasMapping + + public IEnumerable<HbmFormula> Formulas + { + get { return Items != null ? Items.OfType<HbmFormula>() : AsFormulas(); } + } + + private IEnumerable<HbmFormula> AsFormulas() + { + if (string.IsNullOrEmpty(formula)) + { + yield break; + } + else + { + yield return new HbmFormula { Text = new[] { formula } }; + } + } + + #endregion + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs 2009-11-30 20:31:06 UTC (rev 4879) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -1,6 +1,8 @@ +using System.Collections.Generic; + namespace NHibernate.Cfg.MappingSchema { - public partial class HbmOneToOne : AbstractDecoratable, IEntityPropertyMapping + public partial class HbmOneToOne : AbstractDecoratable, IEntityPropertyMapping, IFormulasMapping { #region Implementation of IEntityPropertyMapping @@ -30,5 +32,26 @@ #endregion + #region Implementation of IFormulasMapping + + public IEnumerable<HbmFormula> Formulas + { + get { return formula ?? AsFormulas(); } + } + + private IEnumerable<HbmFormula> AsFormulas() + { + if (string.IsNullOrEmpty(formula1)) + { + yield break; + } + else + { + yield return new HbmFormula { Text = new[] { formula1 } }; + } + } + + #endregion + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs 2009-11-30 20:31:06 UTC (rev 4879) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -1,6 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Linq; + namespace NHibernate.Cfg.MappingSchema { - public partial class HbmProperty : AbstractDecoratable, IEntityPropertyMapping + public partial class HbmProperty : AbstractDecoratable, IEntityPropertyMapping, IColumnsMapping, IFormulasMapping { #region Implementation of IEntityPropertyMapping @@ -29,5 +33,59 @@ } #endregion + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return Items != null ? Items.OfType<HbmColumn>() : AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if(string.IsNullOrEmpty(column)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column, + length = length, + scale = scale, + precision = precision, + notnull = notnull, + notnullSpecified = notnullSpecified, + unique = unique, + uniqueSpecified = true, + uniquekey = uniquekey, + index = index + }; + } + } + + #region Implementation of IFormulasMapping + + public IEnumerable<HbmFormula> Formulas + { + get { return Items != null ? Items.OfType<HbmFormula>() : AsFormulas(); } + } + + private IEnumerable<HbmFormula> AsFormulas() + { + if (string.IsNullOrEmpty(formula)) + { + yield break; + } + else + { + yield return new HbmFormula { Text = new[] { formula } }; + } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmVersion.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmVersion.cs 2009-11-30 20:31:06 UTC (rev 4879) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmVersion.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -1,10 +1,36 @@ +using System.Collections.Generic; + namespace NHibernate.Cfg.MappingSchema { - partial class HbmVersion : AbstractDecoratable + partial class HbmVersion : AbstractDecoratable, IColumnsMapping { protected override HbmMeta[] Metadatas { get { return meta ?? new HbmMeta[0]; } } + + #region Implementation of IColumnsMapping + + public IEnumerable<HbmColumn> Columns + { + get { return column ?? AsColumns(); } + } + + #endregion + + private IEnumerable<HbmColumn> AsColumns() + { + if (string.IsNullOrEmpty(column1)) + { + yield break; + } + else + { + yield return new HbmColumn + { + name = column1, + }; + } + } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IColumnsMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IColumnsMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IColumnsMapping.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + /// <summary> + /// Implemented by any mapping elemes supports simple and/or multicolumn mapping. + /// </summary> + public interface IColumnsMapping + { + IEnumerable<HbmColumn> Columns { get; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IFormulasMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IFormulasMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IFormulasMapping.cs 2009-12-01 00:18:30 UTC (rev 4880) @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace NHibernate.Cfg.MappingSchema +{ + public interface IFormulasMapping + { + IEnumerable<HbmFormula> Formulas { get; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-30 20:31:06 UTC (rev 4879) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 00:18:30 UTC (rev 4880) @@ -497,16 +497,31 @@ <Compile Include="Cfg\MappingSchema\HbmAny.cs" /> <Compile Include="Cfg\MappingSchema\HbmArray.cs" /> <Compile Include="Cfg\MappingSchema\HbmBag.cs" /> + <Compile Include="Cfg\MappingSchema\HbmCollectionId.cs" /> <Compile Include="Cfg\MappingSchema\HbmComponent.cs" /> <Compile Include="Cfg\MappingSchema\HbmDefinition.cs" /> + <Compile Include="Cfg\MappingSchema\HbmDiscriminator.cs" /> <Compile Include="Cfg\MappingSchema\HbmDynamicComponent.cs" /> + <Compile Include="Cfg\MappingSchema\HbmElement.cs" /> <Compile Include="Cfg\MappingSchema\HbmExtensions.cs" /> + <Compile Include="Cfg\MappingSchema\HbmId.cs" /> <Compile Include="Cfg\MappingSchema\HbmIdbag.cs" /> + <Compile Include="Cfg\MappingSchema\HbmIndex.cs" /> + <Compile Include="Cfg\MappingSchema\HbmIndexManyToAny.cs" /> + <Compile Include="Cfg\MappingSchema\HbmIndexManyToMany.cs" /> <Compile Include="Cfg\MappingSchema\HbmJoin.cs" /> <Compile Include="Cfg\MappingSchema\HbmJoinedSubclass.cs" /> + <Compile Include="Cfg\MappingSchema\HbmKey.cs" /> + <Compile Include="Cfg\MappingSchema\HbmKeyManyToOne.cs" /> + <Compile Include="Cfg\MappingSchema\HbmKeyProperty.cs" /> <Compile Include="Cfg\MappingSchema\HbmList.cs" /> + <Compile Include="Cfg\MappingSchema\HbmListIndex.cs" /> + <Compile Include="Cfg\MappingSchema\HbmManyToAny.cs" /> + <Compile Include="Cfg\MappingSchema\HbmManyToMany.cs" /> <Compile Include="Cfg\MappingSchema\HbmManyToOne.cs" /> <Compile Include="Cfg\MappingSchema\HbmMap.cs" /> + <Compile Include="Cfg\MappingSchema\HbmMapKey.cs" /> + <Compile Include="Cfg\MappingSchema\HbmMapKeyManyToMany.cs" /> <Compile Include="Cfg\MappingSchema\HbmNaturalId.cs" /> <Compile Include="Cfg\MappingSchema\HbmOneToOne.cs" /> <Compile Include="Cfg\MappingSchema\HbmPrimitiveArray.cs" /> @@ -515,10 +530,12 @@ <Compile Include="Cfg\MappingSchema\HbmSubclass.cs" /> <Compile Include="Cfg\MappingSchema\HbmUnionSubclass.cs" /> <Compile Include="Cfg\MappingSchema\ICollectionPropertyMapping.cs" /> + <Compile Include="Cfg\MappingSchema\IColumnsMapping.cs" /> <Compile Include="Cfg\MappingSchema\IEntityDiscriminableMapping.cs" /> <Compile Include="Cfg\MappingSchema\IEntityMapping.cs" /> <Compile Include="Cfg\MappingSchema\IEntityPropertyMapping.cs" /> <Compile Include="Cfg\MappingSchema\IEntitySqlsMapping.cs" /> + <Compile Include="Cfg\MappingSchema\IFormulasMapping.cs" /> <Compile Include="Cfg\MappingSchema\IPropertiesContainerMapping.cs" /> <Compile Include="Cfg\MappingSchema\IReferencePropertyMapping.cs" /> <Compile Include="Cfg\SchemaAutoAction.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-30 20:31:34
|
Revision: 4879 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4879&view=rev Author: fabiomaulo Date: 2009-11-30 20:31:06 +0000 (Mon, 30 Nov 2009) Log Message: ----------- binders refactoring -removed duplicated code Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs trunk/nhibernate/src/NHibernate/Mapping/Join.cs trunk/nhibernate/src/NHibernate/Mapping/PersistentClass.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Mapping/ISqlCustomizable.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-30 17:48:41 UTC (rev 4878) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-30 20:31:06 UTC (rev 4879) @@ -115,6 +115,8 @@ // CUSTOM SQL HandleCustomSQL(classMapping, model); + if (classMapping.SqlLoader != null) + model.LoaderName = classMapping.SqlLoader.queryref; foreach (var synchronize in classMapping.Synchronize) { @@ -219,9 +221,8 @@ HandleCustomSQL(joinMapping, join); } - private void HandleCustomSQL(IEntitySqlsMapping sqlsMapping, PersistentClass model) + private void HandleCustomSQL(IEntitySqlsMapping sqlsMapping, ISqlCustomizable model) { - // TODO : common interface between PersistentClass & Join for custom SQL var sqlInsert = sqlsMapping.SqlInsert; if (sqlInsert != null) { @@ -242,36 +243,8 @@ bool callable = sqlUpdate.callableSpecified && sqlUpdate.callable; model.SetCustomSQLUpdate(sqlUpdate.Text.LinesToString(), callable, GetResultCheckStyle(sqlUpdate)); } - - if (sqlsMapping.SqlLoader != null) - model.LoaderName = sqlsMapping.SqlLoader.queryref; } - private void HandleCustomSQL(IEntitySqlsMapping sqlsMapping, Join model) - { - // TODO : common interface between PersistentClass & Join for custom SQL - var sqlInsert = sqlsMapping.SqlInsert; - if (sqlInsert != null) - { - bool callable = sqlInsert.callableSpecified && sqlInsert.callable; - model.SetCustomSQLInsert(sqlInsert.Text.LinesToString(), callable, GetResultCheckStyle(sqlInsert)); - } - - var sqlDelete = sqlsMapping.SqlDelete; - if (sqlDelete != null) - { - bool callable = sqlDelete.callableSpecified && sqlDelete.callable; - model.SetCustomSQLDelete(sqlDelete.Text.LinesToString(), callable, GetResultCheckStyle(sqlDelete)); - } - - var sqlUpdate = sqlsMapping.SqlUpdate; - if (sqlUpdate != null) - { - bool callable = sqlUpdate.callableSpecified && sqlUpdate.callable; - model.SetCustomSQLUpdate(sqlUpdate.Text.LinesToString(), callable, GetResultCheckStyle(sqlUpdate)); - } - } - protected PersistentClass GetSuperclass(XmlNode subnode) { XmlAttribute extendsAttr = subnode.Attributes["extends"]; Added: trunk/nhibernate/src/NHibernate/Mapping/ISqlCustomizable.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ISqlCustomizable.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Mapping/ISqlCustomizable.cs 2009-11-30 20:31:06 UTC (rev 4879) @@ -0,0 +1,11 @@ +using NHibernate.Engine; + +namespace NHibernate.Mapping +{ + public interface ISqlCustomizable + { + void SetCustomSQLInsert(string sql, bool callable, ExecuteUpdateResultCheckStyle checkStyle); + void SetCustomSQLUpdate(string sql, bool callable, ExecuteUpdateResultCheckStyle checkStyle); + void SetCustomSQLDelete(string sql, bool callable, ExecuteUpdateResultCheckStyle checkStyle); + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Mapping/Join.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/Join.cs 2009-11-30 17:48:41 UTC (rev 4878) +++ trunk/nhibernate/src/NHibernate/Mapping/Join.cs 2009-11-30 20:31:06 UTC (rev 4879) @@ -7,7 +7,7 @@ namespace NHibernate.Mapping { [Serializable] - public class Join + public class Join : ISqlCustomizable { private static readonly Alias PK_ALIAS = new Alias(15, "PK"); Modified: trunk/nhibernate/src/NHibernate/Mapping/PersistentClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/PersistentClass.cs 2009-11-30 17:48:41 UTC (rev 4878) +++ trunk/nhibernate/src/NHibernate/Mapping/PersistentClass.cs 2009-11-30 20:31:06 UTC (rev 4879) @@ -14,7 +14,7 @@ /// <c><joined-subclass></c>. /// </summary> [Serializable] - public abstract class PersistentClass : IFilterable, IMetaAttributable + public abstract class PersistentClass : IFilterable, IMetaAttributable, ISqlCustomizable { private static readonly Alias PKAlias = new Alias(15, "PK"); Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-30 17:48:41 UTC (rev 4878) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-30 20:31:06 UTC (rev 4879) @@ -669,6 +669,7 @@ <Compile Include="Loader\Criteria\EntityCriteriaInfoProvider.cs" /> <Compile Include="Loader\Criteria\ICriteriaInfoProvider.cs" /> <Compile Include="Loader\Criteria\ScalarCollectionCriteriaInfoProvider.cs" /> + <Compile Include="Mapping\ISqlCustomizable.cs" /> <Compile Include="Param\AbstractExplicitParameterSpecification.cs" /> <Compile Include="Param\AggregatedIndexCollectionSelectorParameterSpecifications.cs" /> <Compile Include="Param\CollectionFilterKeyParameterSpecification.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-30 17:48:54
|
Revision: 4878 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4878&view=rev Author: fabiomaulo Date: 2009-11-30 17:48:41 +0000 (Mon, 30 Nov 2009) Log Message: ----------- binders refactoring -pushing down the XML parsing -removed duplicated code Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoin.cs Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoin.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoin.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoin.cs 2009-11-30 17:48:41 UTC (rev 4878) @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmJoin : IEntitySqlsMapping, IPropertiesContainerMapping + { + #region Implementation of IEntitySqlsMapping + + public HbmLoader SqlLoader + { + get { return null; } + } + + public HbmCustomSQL SqlInsert + { + get { return sqlinsert; } + } + + public HbmCustomSQL SqlUpdate + { + get { return sqlupdate; } + } + + public HbmCustomSQL SqlDelete + { + get { return sqldelete; } + } + + #endregion + + #region Implementation of IPropertiesContainerMapping + + public IEnumerable<IEntityPropertyMapping> Properties + { + get { return Items != null ? Items.Cast<IEntityPropertyMapping>() : new IEntityPropertyMapping[0]; } + } + + #endregion + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-30 17:10:42 UTC (rev 4877) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-30 17:48:41 UTC (rev 4878) @@ -176,117 +176,52 @@ foreach (var hbmJoin in joins) { var join = new Join { PersistentClass = persistentClass }; - BindJoin(Serialize(hbmJoin), join, inheritedMetas); + BindJoin(hbmJoin, join, inheritedMetas); persistentClass.AddJoin(join); } } - private void BindJoin(XmlNode node, Join join, IDictionary<string, MetaAttribute> inheritedMetas) + private void BindJoin(HbmJoin joinMapping, Join join, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass persistentClass = join.PersistentClass; - String path = persistentClass.EntityName; // TABLENAME + string schema = joinMapping.schema ?? mappings.SchemaName; + string catalog = joinMapping.catalog ?? mappings.CatalogName; - XmlAttribute schemaNode = node.Attributes["schema"]; - string schema = schemaNode == null ? mappings.SchemaName : schemaNode.Value; - XmlAttribute catalogNode = node.Attributes["catalog"]; - string catalog = catalogNode == null ? mappings.CatalogName : catalogNode.Value; + string action = "all"; // joinMapping.schemaaction ?? "all"; - XmlAttribute actionNode = node.Attributes["schema-action"]; - string action = actionNode == null ? "all" : actionNode.Value; - - string tableName = node.Attributes["table"] != null ? node.Attributes["table"].Value : null; + string tableName = joinMapping.table; Table table = mappings.AddTable(schema, catalog, GetClassTableName(persistentClass, tableName), null, false, action); join.Table = table; - XmlAttribute fetchNode = node.Attributes["fetch"]; - if (fetchNode != null) - join.IsSequentialSelect = "select".Equals(fetchNode.Value); + join.IsSequentialSelect = joinMapping.fetch == HbmJoinFetch.Select; + join.IsInverse = joinMapping.inverse; + join.IsOptional = joinMapping.optional; - XmlAttribute invNode = node.Attributes["inverse"]; - if (invNode != null) - join.IsInverse = "true".Equals(invNode.Value); - - XmlAttribute nullNode = node.Attributes["optional"]; - if (nullNode != null) - join.IsOptional = "true".Equals(nullNode.Value); - log.InfoFormat("Mapping class join: {0} -> {1}", persistentClass.EntityName, join.Table.Name); // KEY - XmlNode keyNode = node.SelectSingleNode(HbmConstants.nsKey, namespaceManager); SimpleValue key = new DependantValue(table, persistentClass.Identifier); join.Key = key; - if (keyNode.Attributes["on-delete"] != null) - key.IsCascadeDeleteEnabled = "cascade".Equals(keyNode.Attributes["on-delete"].Value); - BindSimpleValue(keyNode, key, false, persistentClass.EntityName); + key.IsCascadeDeleteEnabled = joinMapping.key.ondelete == HbmOndelete.Cascade; + BindSimpleValue(Serialize(joinMapping.key), key, false, persistentClass.EntityName); join.CreatePrimaryKey(dialect); join.CreateForeignKey(); // PROPERTIES - //PropertiesFromXML(node, persistentClass, mappings); - foreach (XmlNode subnode in node.ChildNodes) - { - //I am only concerned with elements that are from the nhibernate namespace - if (subnode.NamespaceURI != MappingSchemaXMLNS) - continue; + new PropertiesBinder(Mappings, persistentClass, namespaceManager, dialect).Bind(joinMapping.Properties, join.Table, + inheritedMetas, p => { }, + join.AddProperty); - string name = subnode.Name; - XmlAttribute nameAttribute = subnode.Attributes["name"]; - string propertyName = nameAttribute == null ? null : nameAttribute.Value; - IValue value = null; - var collectionBinder = new CollectionBinder(Mappings, namespaceManager, dialect); - if (collectionBinder.CanCreate(name)) - { - Mapping.Collection collection = collectionBinder.Create(name, subnode, persistentClass.EntityName, propertyName, - persistentClass, persistentClass.MappedClass, - inheritedMetas); - - mappings.AddCollection(collection); - value = collection; - } - else - { - switch (name) - { - case "many-to-one": - value = new ManyToOne(table); - BindManyToOne(subnode, (ManyToOne) value, propertyName, true); - break; - case "any": - value = new Any(table); - BindAny(subnode, (Any) value, true); - break; - case "property": - value = new SimpleValue(table); - BindSimpleValue(subnode, (SimpleValue) value, true, propertyName); - break; - case "component": - case "dynamic-component": - string subpath = StringHelper.Qualify(path, propertyName); - value = new Component(join); - BindComponent(subnode, (Component) value, join.PersistentClass.MappedClass, join.PersistentClass.ClassName, - propertyName, subpath, true, inheritedMetas); - break; - } - } - if (value != null) - { - var prop = CreateProperty(value, propertyName, persistentClass.MappedClass.AssemblyQualifiedName, subnode, - inheritedMetas); - prop.IsOptional = join.IsOptional; - join.AddProperty(prop); - } - } - // CUSTOM SQL - HandleCustomSQL(node, join); + HandleCustomSQL(joinMapping, join); } private void HandleCustomSQL(IEntitySqlsMapping sqlsMapping, PersistentClass model) { + // TODO : common interface between PersistentClass & Join for custom SQL var sqlInsert = sqlsMapping.SqlInsert; if (sqlInsert != null) { @@ -312,27 +247,28 @@ model.LoaderName = sqlsMapping.SqlLoader.queryref; } - private void HandleCustomSQL(XmlNode node, Join model) + private void HandleCustomSQL(IEntitySqlsMapping sqlsMapping, Join model) { - XmlNode element = node.SelectSingleNode(HbmConstants.nsSqlInsert, namespaceManager); - if (element != null) + // TODO : common interface between PersistentClass & Join for custom SQL + var sqlInsert = sqlsMapping.SqlInsert; + if (sqlInsert != null) { - bool callable = IsCallable(element); - model.SetCustomSQLInsert(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable)); + bool callable = sqlInsert.callableSpecified && sqlInsert.callable; + model.SetCustomSQLInsert(sqlInsert.Text.LinesToString(), callable, GetResultCheckStyle(sqlInsert)); } - element = node.SelectSingleNode(HbmConstants.nsSqlDelete, namespaceManager); - if (element != null) + var sqlDelete = sqlsMapping.SqlDelete; + if (sqlDelete != null) { - bool callable = IsCallable(element); - model.SetCustomSQLDelete(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable)); + bool callable = sqlDelete.callableSpecified && sqlDelete.callable; + model.SetCustomSQLDelete(sqlDelete.Text.LinesToString(), callable, GetResultCheckStyle(sqlDelete)); } - element = node.SelectSingleNode(HbmConstants.nsSqlUpdate, namespaceManager); - if (element != null) + var sqlUpdate = sqlsMapping.SqlUpdate; + if (sqlUpdate != null) { - bool callable = IsCallable(element); - model.SetCustomSQLUpdate(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable)); + bool callable = sqlUpdate.callableSpecified && sqlUpdate.callable; + model.SetCustomSQLUpdate(sqlUpdate.Text.LinesToString(), callable, GetResultCheckStyle(sqlUpdate)); } } Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs 2009-11-30 17:10:42 UTC (rev 4877) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs 2009-11-30 17:48:41 UTC (rev 4878) @@ -20,18 +20,33 @@ public void Bind(IEnumerable<IEntityPropertyMapping> properties, IDictionary<string, MetaAttribute> inheritedMetas) { - Bind(properties, inheritedMetas, null); + Bind(properties, inheritedMetas, p => { }); } public void Bind(IEnumerable<IEntityPropertyMapping> properties, IDictionary<string, MetaAttribute> inheritedMetas, Action<Property> modifier) { - Action<Property> action = modifier ?? (p => { }); + Bind(properties, model.Table, inheritedMetas, modifier, p => model.AddProperty(p)); + } + + public void Bind(IEnumerable<IEntityPropertyMapping> properties, Table table, IDictionary<string, MetaAttribute> inheritedMetas, Action<Property> modifier, Action<Property> addToModelAction) + { + if (table == null) + { + throw new ArgumentNullException("table"); + } + if (modifier == null) + { + throw new ArgumentNullException("modifier"); + } + if (addToModelAction == null) + { + throw new ArgumentNullException("addToModelAction"); + } string entityName = model.EntityName; - Table table = model.Table; foreach (var entityPropertyMapping in properties) { - Property property= null; + Property property = null; string propertyName = entityPropertyMapping.Name; @@ -106,9 +121,9 @@ BindAnyProperty(anyMapping, property); } - if(property != null) + if (property != null) { - action(property); + modifier(property); if (log.IsDebugEnabled) { string msg = "Mapped property: " + property.Name; @@ -119,9 +134,9 @@ msg += ", type: " + property.Type.Name; log.Debug(msg); } - model.AddProperty(property); + addToModelAction(property); } - } + } } private void BindValueProperty(HbmProperty propertyMapping, Property property) Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-30 17:10:42 UTC (rev 4877) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-30 17:48:41 UTC (rev 4878) @@ -502,6 +502,7 @@ <Compile Include="Cfg\MappingSchema\HbmDynamicComponent.cs" /> <Compile Include="Cfg\MappingSchema\HbmExtensions.cs" /> <Compile Include="Cfg\MappingSchema\HbmIdbag.cs" /> + <Compile Include="Cfg\MappingSchema\HbmJoin.cs" /> <Compile Include="Cfg\MappingSchema\HbmJoinedSubclass.cs" /> <Compile Include="Cfg\MappingSchema\HbmList.cs" /> <Compile Include="Cfg\MappingSchema\HbmManyToOne.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2009-11-30 17:10:51
|
Revision: 4877 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4877&view=rev Author: ricbrown Date: 2009-11-30 17:10:42 +0000 (Mon, 30 Nov 2009) Log Message: ----------- Added integration example demonstrating multiple projections and sub-queries inline. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-30 13:28:06 UTC (rev 4876) +++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-30 17:10:42 UTC (rev 4877) @@ -264,7 +264,7 @@ return this; } - QueryOverProjectionBuilder<QueryOver<TRoot,TSubType>, TRoot, TSubType> SelectList + public QueryOverProjectionBuilder<QueryOver<TRoot,TSubType>, TRoot, TSubType> SelectList { get { return new QueryOverProjectionBuilder<QueryOver<TRoot,TSubType>, TRoot, TSubType>(this, this); } } Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2009-11-30 13:28:06 UTC (rev 4876) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2009-11-30 17:10:42 UTC (rev 4877) @@ -205,6 +205,66 @@ } } + [Test] + public void SubQuery() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.Save(new Person() { Name = "Name 1", Age = 1 } + .AddChild(new Child() { Nickname = "Name 1.1", Age = 1})); + + s.Save(new Person() { Name = "Name 2", Age = 2 } + .AddChild(new Child() { Nickname = "Name 2.1", Age = 2}) + .AddChild(new Child() { Nickname = "Name 2.2", Age = 2})); + + s.Save(new Person() { Name = "Name 3", Age = 3 } + .AddChild(new Child() { Nickname = "Name 3.1", Age = 3})); + + t.Commit(); + } + + using (ISession s = OpenSession()) + { + Person personAlias = null; + object childCountAlias = null; + + QueryOver<Child> averageChildAge = + QueryOver.Of<Child>() + .SelectList + .SelectAvg(c => c.Age) + .EndSelect; + + QueryOver<Child> childCountQuery = + QueryOver.Of<Child>() + .Where(c => c.Parent.Id == personAlias.Id) + .Select(Projections.RowCount()); + + var nameAndChildCount = + s.QueryOver<Person>(() => personAlias) + .WithSubquery.Where(p => p.Age <= averageChildAge.As<int>()) + .SelectList + .Select(p => p.Name) + .SelectSubQuery(childCountQuery).WithAlias(() => childCountAlias) + .EndSelect + .OrderBy(() => childCountAlias).Desc + .List<object[]>() + .Select(props => new { + Name = (string)props[0], + ChildCount = (int)props[1], + }) + .ToList(); + + Assert.That(nameAndChildCount.Count, Is.EqualTo(2)); + + Assert.That(nameAndChildCount[0].Name, Is.EqualTo("Name 2")); + Assert.That(nameAndChildCount[0].ChildCount, Is.EqualTo(2)); + + Assert.That(nameAndChildCount[1].Name, Is.EqualTo("Name 1")); + Assert.That(nameAndChildCount[1].ChildCount, Is.EqualTo(1)); + } + } + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml 2009-11-30 13:28:06 UTC (rev 4876) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml 2009-11-30 17:10:42 UTC (rev 4877) @@ -21,6 +21,7 @@ <generator class="native"/> </id> <property name="Nickname" /> + <property name="Age" /> <many-to-one name="Parent" class="Person" /> </class> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2009-11-30 13:28:14
|
Revision: 4876 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4876&view=rev Author: ricbrown Date: 2009-11-30 13:28:06 +0000 (Mon, 30 Nov 2009) Log Message: ----------- Refactored generic type naming for IQueryOver and removed a couple of compiler warnings. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs trunk/nhibernate/src/NHibernate/IQueryOver.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/LambdaFixtureBase.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -9,35 +9,35 @@ namespace NHibernate.Criterion { - public class QueryOverFetchBuilder<S,T> : QueryOverFetchBuilderBase<QueryOver<S,T>, S, T> + public class QueryOverFetchBuilder<TRoot,TSubType> : QueryOverFetchBuilderBase<QueryOver<TRoot,TSubType>, TRoot, TSubType> { - public QueryOverFetchBuilder(QueryOver<S,T> root, Expression<Func<S, object>> path) + public QueryOverFetchBuilder(QueryOver<TRoot,TSubType> root, Expression<Func<TRoot, object>> path) : base(root, path) { } } - public class IQueryOverFetchBuilder<S,T> : QueryOverFetchBuilderBase<IQueryOver<S,T>, S, T> + public class IQueryOverFetchBuilder<TRoot,TSubType> : QueryOverFetchBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType> { - public IQueryOverFetchBuilder(IQueryOver<S,T> root, Expression<Func<S, object>> path) + public IQueryOverFetchBuilder(IQueryOver<TRoot,TSubType> root, Expression<Func<TRoot, object>> path) : base(root, path) { } } - public class QueryOverFetchBuilderBase<R, S, T> where R : IQueryOver<S,T> + public class QueryOverFetchBuilderBase<TReturn, TRoot, TSubType> where TReturn : IQueryOver<TRoot,TSubType> { - protected R root; + protected TReturn root; protected string path; - protected QueryOverFetchBuilderBase(R root, Expression<Func<S, object>> path) + protected QueryOverFetchBuilderBase(TReturn root, Expression<Func<TRoot, object>> path) { this.root = root; this.path = ExpressionProcessor.FindMemberExpression(path.Body); } - public R Eager + public TReturn Eager { get { @@ -46,7 +46,7 @@ } } - public R Lazy + public TReturn Lazy { get { @@ -55,7 +55,7 @@ } } - public R Default + public TReturn Default { get { Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -9,118 +9,118 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverJoinBuilder<S,T> : QueryOverJoinBuilderBase<QueryOver<S,T>, S, T> + public class QueryOverJoinBuilder<TRoot,TSubType> : QueryOverJoinBuilderBase<QueryOver<TRoot,TSubType>, TRoot, TSubType> { - public QueryOverJoinBuilder(QueryOver<S,T> root, JoinType joinType) : base(root, joinType) { } + public QueryOverJoinBuilder(QueryOver<TRoot,TSubType> root, JoinType joinType) : base(root, joinType) { } - public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } } - public class IQueryOverJoinBuilder<S,T> : QueryOverJoinBuilderBase<IQueryOver<S,T>, S, T> + public class IQueryOverJoinBuilder<TRoot,TSubType> : QueryOverJoinBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType> { - public IQueryOverJoinBuilder(IQueryOver<S,T> root, JoinType joinType) : base(root, joinType) { } + public IQueryOverJoinBuilder(IQueryOver<TRoot,TSubType> root, JoinType joinType) : base(root, joinType) { } - public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path) + public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + public IQueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } } - public class QueryOverJoinBuilderBase<R, S, T> where R : IQueryOver<S,T> + public class QueryOverJoinBuilderBase<TReturn, TRoot, TSubType> where TReturn : IQueryOver<TRoot,TSubType> { - protected R root; + protected TReturn root; protected JoinType joinType; - public QueryOverJoinBuilderBase(R root, JoinType joinType) + public QueryOverJoinBuilderBase(TReturn root, JoinType joinType) { this.root = root; this.joinType = joinType; } - public R JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) + public TReturn JoinAlias(Expression<Func<TSubType, object>> path, Expression<Func<object>> alias) { - return (R)root.JoinAlias(path, alias, joinType); + return (TReturn)root.JoinAlias(path, alias, joinType); } - public R JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) + public TReturn JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) { - return (R)root.JoinAlias(path, alias, joinType); + return (TReturn)root.JoinAlias(path, alias, joinType); } } Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -9,29 +9,29 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverLockBuilder<S,T> : QueryOverLockBuilderBase<QueryOver<S,T>, S, T> + public class QueryOverLockBuilder<TRoot,TSubType> : QueryOverLockBuilderBase<QueryOver<TRoot,TSubType>, TRoot, TSubType> { - public QueryOverLockBuilder(QueryOver<S,T> root, Expression<Func<object>> alias) + public QueryOverLockBuilder(QueryOver<TRoot,TSubType> root, Expression<Func<object>> alias) : base(root, alias) { } } - public class IQueryOverLockBuilder<S,T> : QueryOverLockBuilderBase<IQueryOver<S,T>, S, T> + public class IQueryOverLockBuilder<TRoot,TSubType> : QueryOverLockBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType> { - public IQueryOverLockBuilder(IQueryOver<S,T> root, Expression<Func<object>> alias) + public IQueryOverLockBuilder(IQueryOver<TRoot,TSubType> root, Expression<Func<object>> alias) : base(root, alias) { } } - public class QueryOverLockBuilderBase<R, S, T> where R : IQueryOver<S,T> + public class QueryOverLockBuilderBase<TReturn, TRoot, TSubType> where TReturn : IQueryOver<TRoot,TSubType> { - protected R root; + protected TReturn root; protected string alias; - protected QueryOverLockBuilderBase(R root, Expression<Func<object>> alias) + protected QueryOverLockBuilderBase(TReturn root, Expression<Func<object>> alias) { this.root = root; @@ -47,7 +47,7 @@ root.UnderlyingCriteria.SetLockMode(lockMode); } - public R Force + public TReturn Force { get { @@ -56,7 +56,7 @@ } } - public R None + public TReturn None { get { @@ -65,7 +65,7 @@ } } - public R Read + public TReturn Read { get { @@ -74,7 +74,7 @@ } } - public R Upgrade + public TReturn Upgrade { get { @@ -83,7 +83,7 @@ } } - public R UpgradeNoWait + public TReturn UpgradeNoWait { get { @@ -92,7 +92,7 @@ } } - public R Write + public TReturn Write { get { Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -9,47 +9,47 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverOrderBuilder<S,T> : QueryOverOrderBuilderBase<QueryOver<S,T>, S, T> + public class QueryOverOrderBuilder<TRoot,TSubType> : QueryOverOrderBuilderBase<QueryOver<TRoot,TSubType>, TRoot, TSubType> { - public QueryOverOrderBuilder(QueryOver<S,T> root, Expression<Func<T, object>> path) : base(root, path) + public QueryOverOrderBuilder(QueryOver<TRoot,TSubType> root, Expression<Func<TSubType, object>> path) : base(root, path) {} - public QueryOverOrderBuilder(QueryOver<S,T> root, Expression<Func<object>> path) : base(root, path) + public QueryOverOrderBuilder(QueryOver<TRoot,TSubType> root, Expression<Func<object>> path) : base(root, path) {} } - public class IQueryOverOrderBuilder<S,T> : QueryOverOrderBuilderBase<IQueryOver<S,T>, S, T> + public class IQueryOverOrderBuilder<TRoot,TSubType> : QueryOverOrderBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType> { - public IQueryOverOrderBuilder(IQueryOver<S,T> root, Expression<Func<T, object>> path) : base(root, path) + public IQueryOverOrderBuilder(IQueryOver<TRoot,TSubType> root, Expression<Func<TSubType, object>> path) : base(root, path) {} - public IQueryOverOrderBuilder(IQueryOver<S,T> root, Expression<Func<object>> path) : base(root, path) + public IQueryOverOrderBuilder(IQueryOver<TRoot,TSubType> root, Expression<Func<object>> path) : base(root, path) {} } - public class QueryOverOrderBuilderBase<R, S, T> where R : IQueryOver<S, T> + public class QueryOverOrderBuilderBase<TReturn, TRoot, TSubType> where TReturn : IQueryOver<TRoot, TSubType> { - protected R root; + protected TReturn root; protected LambdaExpression path; - protected QueryOverOrderBuilderBase(R root, Expression<Func<T, object>> path) + protected QueryOverOrderBuilderBase(TReturn root, Expression<Func<TSubType, object>> path) { this.root = root; this.path = path; } - protected QueryOverOrderBuilderBase(R root, Expression<Func<object>> path) + protected QueryOverOrderBuilderBase(TReturn root, Expression<Func<object>> path) { this.root = root; this.path = path; } - public R Asc + public TReturn Asc { get { @@ -58,7 +58,7 @@ } } - public R Desc + public TReturn Desc { get { Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -9,15 +9,15 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverProjectionBuilder<R, S, T> + public class QueryOverProjectionBuilder<TReturn, TRoot, TSubType> { - private R fluentReturn; - private IQueryOver<S,T> criteria; + private TReturn fluentReturn; + private IQueryOver<TRoot,TSubType> criteria; private ProjectionList projectionList; private IProjection lastProjection = null; - public QueryOverProjectionBuilder(R fluentReturn, IQueryOver<S,T> criteria) + public QueryOverProjectionBuilder(TReturn fluentReturn, IQueryOver<TRoot,TSubType> criteria) { this.fluentReturn = fluentReturn; this.criteria = criteria; @@ -39,7 +39,7 @@ /// <summary> /// Create the ProjectionList and return to the query /// </summary> - public R EndSelect + public TReturn EndSelect { get { @@ -52,7 +52,7 @@ /// <summary> /// Create an alias for the previous projection /// </summary> - public QueryOverProjectionBuilder<R, S, T> WithAlias(Expression<Func<object>> alias) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> WithAlias(Expression<Func<object>> alias) { string aliasContainer = ExpressionProcessor.FindMemberExpression(alias.Body); lastProjection = Projections.Alias(lastProjection, aliasContainer); @@ -62,7 +62,7 @@ /// <summary> /// Select an arbitrary projection /// </summary> - public QueryOverProjectionBuilder<R, S, T> Select(IProjection projection) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> Select(IProjection projection) { PushProjection(projection); return this; @@ -71,7 +71,7 @@ /// <summary> /// A property average value /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectAvg(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectAvg(Expression<Func<TSubType, object>> expression) { PushProjection(Projections.Avg(expression)); return this; @@ -80,7 +80,7 @@ /// <summary> /// A property average value /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectAvg(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectAvg(Expression<Func<object>> expression) { PushProjection(Projections.Avg(expression)); return this; @@ -89,7 +89,7 @@ /// <summary> /// A property value count /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectCount(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectCount(Expression<Func<TSubType, object>> expression) { PushProjection(Projections.Count(expression)); return this; @@ -98,7 +98,7 @@ /// <summary> /// A property value count /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectCount(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectCount(Expression<Func<object>> expression) { PushProjection(Projections.Count(expression)); return this; @@ -107,7 +107,7 @@ /// <summary> /// A distinct property value count /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectCountDistinct(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectCountDistinct(Expression<Func<TSubType, object>> expression) { PushProjection(Projections.CountDistinct(expression)); return this; @@ -116,7 +116,7 @@ /// <summary> /// A distinct property value count /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectCountDistinct(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectCountDistinct(Expression<Func<object>> expression) { PushProjection(Projections.CountDistinct(expression)); return this; @@ -125,7 +125,7 @@ /// <summary> /// A grouping property value /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectGroup(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectGroup(Expression<Func<TSubType, object>> expression) { PushProjection(Projections.Group(expression)); return this; @@ -134,7 +134,7 @@ /// <summary> /// A grouping property value /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectGroup(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectGroup(Expression<Func<object>> expression) { PushProjection(Projections.Group(expression)); return this; @@ -143,7 +143,7 @@ /// <summary> /// A property maximum value /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectMax(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectMax(Expression<Func<TSubType, object>> expression) { PushProjection(Projections.Max(expression)); return this; @@ -152,7 +152,7 @@ /// <summary> /// A property maximum value /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectMax(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectMax(Expression<Func<object>> expression) { PushProjection(Projections.Max(expression)); return this; @@ -161,7 +161,7 @@ /// <summary> /// A property minimum value /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectMin(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectMin(Expression<Func<TSubType, object>> expression) { PushProjection(Projections.Min(expression)); return this; @@ -170,7 +170,7 @@ /// <summary> /// A property minimum value /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectMin(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectMin(Expression<Func<object>> expression) { PushProjection(Projections.Min(expression)); return this; @@ -179,7 +179,7 @@ /// <summary> /// A projected property value /// </summary> - public QueryOverProjectionBuilder<R, S, T> Select(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> Select(Expression<Func<TSubType, object>> expression) { PushProjection(Projections.Property(expression)); return this; @@ -188,13 +188,13 @@ /// <summary> /// A projected property value /// </summary> - public QueryOverProjectionBuilder<R, S, T> Select(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> Select(Expression<Func<object>> expression) { PushProjection(Projections.Property(expression)); return this; } - public QueryOverProjectionBuilder<R, S, T> SelectSubQuery<U>(QueryOver<U> detachedQueryOver) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectSubQuery<U>(QueryOver<U> detachedQueryOver) { PushProjection(Projections.SubQuery(detachedQueryOver)); return this; @@ -203,7 +203,7 @@ /// <summary> /// A property value sum /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectSum(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectSum(Expression<Func<TSubType, object>> expression) { PushProjection(Projections.Sum(expression)); return this; @@ -212,7 +212,7 @@ /// <summary> /// A property value sum /// </summary> - public QueryOverProjectionBuilder<R, S, T> SelectSum(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<TReturn, TRoot, TSubType> SelectSum(Expression<Func<object>> expression) { PushProjection(Projections.Sum(expression)); return this; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -10,51 +10,51 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverRestrictionBuilder<S,T> : QueryOverRestrictionBuilderBase<QueryOver<S,T>, S, T> + public class QueryOverRestrictionBuilder<TRoot,TSubType> : QueryOverRestrictionBuilderBase<QueryOver<TRoot,TSubType>, TRoot, TSubType> { - public QueryOverRestrictionBuilder(QueryOver<S,T> root, string propertyName) + public QueryOverRestrictionBuilder(QueryOver<TRoot,TSubType> root, string propertyName) : base(root, propertyName) { } } - public class IQueryOverRestrictionBuilder<S,T> : QueryOverRestrictionBuilderBase<IQueryOver<S,T>, S, T> + public class IQueryOverRestrictionBuilder<TRoot,TSubType> : QueryOverRestrictionBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType> { - public IQueryOverRestrictionBuilder(IQueryOver<S,T> root, string propertyName) + public IQueryOverRestrictionBuilder(IQueryOver<TRoot,TSubType> root, string propertyName) : base(root, propertyName) { } } - public class QueryOverRestrictionBuilderBase<R,S,T> - where R : IQueryOver<S,T> + public class QueryOverRestrictionBuilderBase<TReturn,TRoot,TSubType> + where TReturn : IQueryOver<TRoot,TSubType> { public class LambdaBetweenBuilder { - private R root; + private TReturn root; private string propertyName; private object lo; - public LambdaBetweenBuilder(R root, string propertyName, object lo) + public LambdaBetweenBuilder(TReturn root, string propertyName, object lo) { this.root = root; this.propertyName = propertyName; this.lo = lo; } - public R And(object hi) + public TReturn And(object hi) { - return (R)root.And(Restrictions.Between(propertyName, lo, hi)); + return (TReturn)root.And(Restrictions.Between(propertyName, lo, hi)); } } - private R root; + private TReturn root; private string propertyName; /// <summary> /// Constructed with property name /// </summary> - public QueryOverRestrictionBuilderBase(R root, string propertyName) + public QueryOverRestrictionBuilderBase(TReturn root, string propertyName) { this.root = root; this.propertyName = propertyName; @@ -71,97 +71,97 @@ /// <summary> /// Apply an "in" constraint to the named property /// </summary> - public R IsIn(ICollection values) + public TReturn IsIn(ICollection values) { - return (R)root.And(Restrictions.In(propertyName, values)); + return (TReturn)root.And(Restrictions.In(propertyName, values)); } /// <summary> /// Apply an "in" constraint to the named property /// </summary> - public R IsIn(object[] values) + public TReturn IsIn(object[] values) { - return (R)root.And(Restrictions.In(propertyName, values)); + return (TReturn)root.And(Restrictions.In(propertyName, values)); } /// <summary> /// Apply an "in" constraint to the named property /// </summary> - public R IsInG<T>(ICollection<T> values) + public TReturn IsInG<T>(ICollection<T> values) { - return (R)root.And(Restrictions.InG(propertyName, values)); + return (TReturn)root.And(Restrictions.InG(propertyName, values)); } /// <summary> /// A case-insensitive "like", similar to Postgres "ilike" operator /// </summary> - public R IsInsensitiveLike(object value) + public TReturn IsInsensitiveLike(object value) { - return (R)root.And(Restrictions.InsensitiveLike(propertyName, value)); + return (TReturn)root.And(Restrictions.InsensitiveLike(propertyName, value)); } /// <summary> /// A case-insensitive "like", similar to Postgres "ilike" operator /// </summary> - public R IsInsensitiveLike(string value, MatchMode matchMode) + public TReturn IsInsensitiveLike(string value, MatchMode matchMode) { - return (R)root.And(Restrictions.InsensitiveLike(propertyName, value, matchMode)); + return (TReturn)root.And(Restrictions.InsensitiveLike(propertyName, value, matchMode)); } /// <summary> /// Apply an "is empty" constraint to the named property /// </summary> - public R IsEmpty + public TReturn IsEmpty { - get { return (R)root.And(Restrictions.IsEmpty(propertyName)); } + get { return (TReturn)root.And(Restrictions.IsEmpty(propertyName)); } } /// <summary> /// Apply a "not is empty" constraint to the named property /// </summary> - public R IsNotEmpty + public TReturn IsNotEmpty { - get { return (R)root.And(Restrictions.IsNotEmpty(propertyName)); } + get { return (TReturn)root.And(Restrictions.IsNotEmpty(propertyName)); } } /// <summary> /// Apply an "is null" constraint to the named property /// </summary> - public R IsNull + public TReturn IsNull { - get { return (R)root.And(Restrictions.IsNull(propertyName)); } + get { return (TReturn)root.And(Restrictions.IsNull(propertyName)); } } /// <summary> /// Apply an "not is null" constraint to the named property /// </summary> - public R IsNotNull + public TReturn IsNotNull { - get { return (R)root.And(Restrictions.IsNotNull(propertyName)); } + get { return (TReturn)root.And(Restrictions.IsNotNull(propertyName)); } } /// <summary> /// Apply a "like" constraint to the named property /// </summary> - public R IsLike(object value) + public TReturn IsLike(object value) { - return (R)root.And(Restrictions.Like(propertyName, value)); + return (TReturn)root.And(Restrictions.Like(propertyName, value)); } /// <summary> /// Apply a "like" constraint to the named property /// </summary> - public R IsLike(string value, MatchMode matchMode) + public TReturn IsLike(string value, MatchMode matchMode) { - return (R)root.And(Restrictions.Like(propertyName, value, matchMode)); + return (TReturn)root.And(Restrictions.Like(propertyName, value, matchMode)); } /// <summary> /// Apply a "like" constraint to the named property /// </summary> - public R IsLike(string value, MatchMode matchMode, char? escapeChar) + public TReturn IsLike(string value, MatchMode matchMode, char? escapeChar) { - return (R)root.And(Restrictions.Like(propertyName, value, matchMode, escapeChar)); + return (TReturn)root.And(Restrictions.Like(propertyName, value, matchMode, escapeChar)); } } Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -9,30 +9,30 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverSubqueryBuilder<S,T> : QueryOverSubqueryBuilderBase<QueryOver<S,T>, S, T, QueryOverSubqueryPropertyBuilder<S,T>> + public class QueryOverSubqueryBuilder<TRoot,TSubType> : QueryOverSubqueryBuilderBase<QueryOver<TRoot,TSubType>, TRoot, TSubType, QueryOverSubqueryPropertyBuilder<TRoot,TSubType>> { - public QueryOverSubqueryBuilder(QueryOver<S,T> root) + public QueryOverSubqueryBuilder(QueryOver<TRoot,TSubType> root) : base(root) { } } - public class IQueryOverSubqueryBuilder<S,T> : QueryOverSubqueryBuilderBase<IQueryOver<S,T>, S, T, IQueryOverSubqueryPropertyBuilder<S,T>> + public class IQueryOverSubqueryBuilder<TRoot,TSubType> : QueryOverSubqueryBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType, IQueryOverSubqueryPropertyBuilder<TRoot,TSubType>> { - public IQueryOverSubqueryBuilder(IQueryOver<S,T> root) + public IQueryOverSubqueryBuilder(IQueryOver<TRoot,TSubType> root) : base(root) { } } - public class QueryOverSubqueryBuilderBase<R, S, T, B> - where R : IQueryOver<S,T> - where B : QueryOverSubqueryPropertyBuilderBase, new() + public class QueryOverSubqueryBuilderBase<TReturn, TRoot, TSubType, TBuilderType> + where TReturn : IQueryOver<TRoot,TSubType> + where TBuilderType : QueryOverSubqueryPropertyBuilderBase, new() { - protected R root; + protected TReturn root; - protected QueryOverSubqueryBuilderBase(R root) + protected QueryOverSubqueryBuilderBase(TReturn root) { this.root = root; } @@ -40,7 +40,7 @@ /// <summary> /// Add an Exists subquery criterion /// </summary> - public R WhereExists<U>(QueryOver<U> detachedQuery) + public TReturn WhereExists<U>(QueryOver<U> detachedQuery) { root.And(Subqueries.Exists(detachedQuery.DetachedCriteria)); return root; @@ -49,7 +49,7 @@ /// <summary> /// Add a NotExists subquery criterion /// </summary> - public R WhereNotExists<U>(QueryOver<U> detachedQuery) + public TReturn WhereNotExists<U>(QueryOver<U> detachedQuery) { root.And(Subqueries.NotExists(detachedQuery.DetachedCriteria)); return root; @@ -59,9 +59,9 @@ /// Subquery expression in the format /// .Where(t => t.Property [==, !=, >, etc.] detachedQueryOver.As<propertyType>()) /// </summary> - public R Where(Expression<Func<T, bool>> expression) + public TReturn Where(Expression<Func<TSubType, bool>> expression) { - AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery<T>(LambdaSubqueryType.Exact, expression); + AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery<TSubType>(LambdaSubqueryType.Exact, expression); root.And(criterion); return root; } @@ -70,7 +70,7 @@ /// Subquery expression in the format /// .Where(() => alias.Property [==, !=, >, etc.] detachedQueryOver.As<propertyType>()) /// </summary> - public R Where(Expression<Func<bool>> expression) + public TReturn Where(Expression<Func<bool>> expression) { AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery(LambdaSubqueryType.Exact, expression); root.And(criterion); @@ -81,9 +81,9 @@ /// Subquery expression in the format /// .WhereAll(t => t.Property [==, !=, >, etc.] detachedQueryOver.As<propertyType>()) /// </summary> - public R WhereAll(Expression<Func<T, bool>> expression) + public TReturn WhereAll(Expression<Func<TSubType, bool>> expression) { - AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery<T>(LambdaSubqueryType.All, expression); + AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery<TSubType>(LambdaSubqueryType.All, expression); root.And(criterion); return root; } @@ -92,7 +92,7 @@ /// Subquery expression in the format /// .WhereAll(() => alias.Property [==, !=, >, etc.] detachedQueryOver.As<propertyType>()) /// </summary> - public R WhereAll(Expression<Func<bool>> expression) + public TReturn WhereAll(Expression<Func<bool>> expression) { AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery(LambdaSubqueryType.All, expression); root.And(criterion); @@ -103,9 +103,9 @@ /// Subquery expression in the format /// .WhereSome(t => t.Property [==, !=, >, etc.] detachedQueryOver.As<propertyType>()) /// </summary> - public R WhereSome(Expression<Func<T, bool>> expression) + public TReturn WhereSome(Expression<Func<TSubType, bool>> expression) { - AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery<T>(LambdaSubqueryType.Some, expression); + AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery<TSubType>(LambdaSubqueryType.Some, expression); root.And(criterion); return root; } @@ -114,28 +114,28 @@ /// Subquery expression in the format /// .WhereSome(() => alias.Property [==, !=, >, etc.] detachedQueryOver.As<propertyType>()) /// </summary> - public R WhereSome(Expression<Func<bool>> expression) + public TReturn WhereSome(Expression<Func<bool>> expression) { AbstractCriterion criterion = ExpressionProcessor.ProcessSubquery(LambdaSubqueryType.Some, expression); root.And(criterion); return root; } - public B WhereProperty(Expression<Func<T, object>> expression) + public TBuilderType WhereProperty(Expression<Func<TSubType, object>> expression) { string property = ExpressionProcessor.FindMemberExpression(expression.Body); - return (B)new B().Set(root, property, null); + return (TBuilderType)new TBuilderType().Set(root, property, null); } - public B WhereProperty(Expression<Func<object>> expression) + public TBuilderType WhereProperty(Expression<Func<object>> expression) { string property = ExpressionProcessor.FindMemberExpression(expression.Body); - return (B)new B().Set(root, property, null); + return (TBuilderType)new TBuilderType().Set(root, property, null); } - public B WhereValue(object value) + public TBuilderType WhereValue(object value) { - return (B)new B().Set(root, null, value); + return (TBuilderType)new TBuilderType().Set(root, null, value); } } Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -9,7 +9,7 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverSubqueryPropertyBuilder<S,T> : QueryOverSubqueryPropertyBuilderBase<QueryOver<S,T>, S, T> + public class QueryOverSubqueryPropertyBuilder<TRoot,TSubType> : QueryOverSubqueryPropertyBuilderBase<QueryOver<TRoot,TSubType>, TRoot, TSubType> { public QueryOverSubqueryPropertyBuilder() @@ -17,7 +17,7 @@ } - public class IQueryOverSubqueryPropertyBuilder<S,T> : QueryOverSubqueryPropertyBuilderBase<IQueryOver<S,T>, S, T> + public class IQueryOverSubqueryPropertyBuilder<TRoot,TSubType> : QueryOverSubqueryPropertyBuilderBase<IQueryOver<TRoot,TSubType>, TRoot, TSubType> { public IQueryOverSubqueryPropertyBuilder() @@ -32,11 +32,11 @@ internal abstract QueryOverSubqueryPropertyBuilderBase Set(object root, string path, object value); } - public class QueryOverSubqueryPropertyBuilderBase<R, S, T> : QueryOverSubqueryPropertyBuilderBase - where R : IQueryOver<S,T> + public class QueryOverSubqueryPropertyBuilderBase<TReturn, TRoot, TSubType> : QueryOverSubqueryPropertyBuilderBase + where TReturn : IQueryOver<TRoot,TSubType> { - protected R root; + protected TReturn root; protected string path; protected object value; @@ -46,7 +46,7 @@ internal override QueryOverSubqueryPropertyBuilderBase Set(object root, string path, object value) { - this.root = (R)root; + this.root = (TReturn)root; this.path = path; this.value = value; return this; @@ -71,7 +71,7 @@ /// Add a property equal subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R Eq<U>(QueryOver<U> detachedCriteria) + public TReturn Eq<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyEq, Subqueries.Eq, detachedCriteria); return root; @@ -81,7 +81,7 @@ /// Add a property equal all subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R EqAll<U>(QueryOver<U> detachedCriteria) + public TReturn EqAll<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyEqAll, Subqueries.EqAll, detachedCriteria); return root; @@ -91,7 +91,7 @@ /// Create a property greater than or equal subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R Ge<U>(QueryOver<U> detachedCriteria) + public TReturn Ge<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyGe, Subqueries.Ge, detachedCriteria); return root; @@ -101,7 +101,7 @@ /// Create a property greater than or equal all subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R GeAll<U>(QueryOver<U> detachedCriteria) + public TReturn GeAll<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyGeAll, Subqueries.GeAll, detachedCriteria); return root; @@ -111,7 +111,7 @@ /// Create a property greater than or equal some subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R GeSome<U>(QueryOver<U> detachedCriteria) + public TReturn GeSome<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyGeSome, Subqueries.GeSome, detachedCriteria); return root; @@ -121,7 +121,7 @@ /// Create a property greater than subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R Gt<U>(QueryOver<U> detachedCriteria) + public TReturn Gt<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyGt, Subqueries.Gt, detachedCriteria); return root; @@ -131,7 +131,7 @@ /// Create a property greater than all subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R GtAll<U>(QueryOver<U> detachedCriteria) + public TReturn GtAll<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyGtAll, Subqueries.GtAll, detachedCriteria); return root; @@ -141,7 +141,7 @@ /// Create a property greater than some subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R GtSome<U>(QueryOver<U> detachedCriteria) + public TReturn GtSome<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyGtSome, Subqueries.GtSome, detachedCriteria); return root; @@ -151,7 +151,7 @@ /// Create a property in subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R In<U>(QueryOver<U> detachedCriteria) + public TReturn In<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyIn, Subqueries.In, detachedCriteria); return root; @@ -161,7 +161,7 @@ /// Create a property less than or equal subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R Le<U>(QueryOver<U> detachedCriteria) + public TReturn Le<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyLe, Subqueries.Le, detachedCriteria); return root; @@ -171,7 +171,7 @@ /// Create a property less than or equal all subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R LeAll<U>(QueryOver<U> detachedCriteria) + public TReturn LeAll<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyLeAll, Subqueries.LeAll, detachedCriteria); return root; @@ -181,7 +181,7 @@ /// Create a property less than or equal some subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R LeSome<U>(QueryOver<U> detachedCriteria) + public TReturn LeSome<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyLeSome, Subqueries.LeSome, detachedCriteria); return root; @@ -191,7 +191,7 @@ /// Create a property less than subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R Lt<U>(QueryOver<U> detachedCriteria) + public TReturn Lt<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyLt, Subqueries.Lt, detachedCriteria); return root; @@ -201,7 +201,7 @@ /// Create a property less than all subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R LtAll<U>(QueryOver<U> detachedCriteria) + public TReturn LtAll<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyLtAll, Subqueries.LtAll, detachedCriteria); return root; @@ -211,7 +211,7 @@ /// Create a property less than some subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R LtSome<U>(QueryOver<U> detachedCriteria) + public TReturn LtSome<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyLtSome, Subqueries.LtSome, detachedCriteria); return root; @@ -221,7 +221,7 @@ /// Create a property not equal subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R Ne<U>(QueryOver<U> detachedCriteria) + public TReturn Ne<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyNe, Subqueries.Ne, detachedCriteria); return root; @@ -231,7 +231,7 @@ /// Create a property not in subquery criterion /// </summary> /// <param name="detachedCriteria">detached subquery</param> - public R NotIn<U>(QueryOver<U> detachedCriteria) + public TReturn NotIn<U>(QueryOver<U> detachedCriteria) { AddSubquery(Subqueries.PropertyNotIn, Subqueries.NotIn, detachedCriteria); return root; Modified: trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-30 03:21:02 UTC (rev 4875) +++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-30 13:28:06 UTC (rev 4876) @@ -4,6 +4,7 @@ using System.Linq.Expressions; using NHibernate.Criterion.Lambda; +using NHibernate.Engine; using NHibernate.Impl; using NHibernate.SqlCommand; @@ -14,8 +15,8 @@ public class QueryOver { - protected ICriteria _criteria; - protected CriteriaImpl _impl; + protected ICriteria criteria; + protected CriteriaImpl impl; protected QueryOver() { } @@ -31,74 +32,83 @@ public ICriteria UnderlyingCriteria { - get { return _criteria; } + get { return criteria; } } public DetachedCriteria DetachedCriteria { - get { return new DetachedCriteria(_impl, _impl); } + get { return new DetachedCriteria(impl, impl); } } } [Serializable] - public class QueryOver<T> : QueryOver, IQueryOver<T> + public class QueryOver<TRoot> : QueryOver, IQueryOver<TRoot> { - private IList<T> List() + private IList<TRoot> List() { - return _criteria.List<T>(); + return criteria.List<TRoot>(); } private IList<U> List<U>() { - return _criteria.List<U>(); + return criteria.List<U>(); } - private T UniqueResult() + private TRoot UniqueResult() { - return _criteria.UniqueResult<T>(); + return criteria.UniqueResult<TRoot>(); } private U UniqueResult<U>() { - return _criteria.UniqueResult<U>(); + return criteria.UniqueResult<U>(); } - private IEnumerable<T> Future() + private IEnumerable<TRoot> Future() { - return _criteria.Future<T>(); + return criteria.Future<TRoot>(); } private IEnumerable<U> Future<U>() { - return _criteria.Future<U>(); + return criteria.Future<U>(); } - private IFutureValue<T> FutureValue() + private IFutureValue<TRoot> FutureValue() { - return _criteria.FutureValue<T>(); + return criteria.FutureValue<TRoot>(); } private IFutureValue<U> FutureValue<U>() { - return _criteria.FutureValue<U>(); + return criteria.FutureValue<U>(); } /// <summary> - /// Get an executable instance of <c>IQueryOver<T></c>, + /// Get an executable instance of <c>IQueryOver<TRoot></c>, /// to actually run the query.</summary> - public IQueryOver<T> GetExecutableQueryOver(ISession session) + public IQueryOver<TRoot,TRoot> GetExecutableQueryOver(ISession session) { - _impl.Session = session.GetSessionImplementation(); - return this; + impl.Session = session.GetSessionImplementation(); + return new QueryOver<TRoot,TRoot>(impl); } /// <summary> + /// Get an executable instance of <c>IQueryOver<TRoot></c>, + /// to actually run the query.</summary> + public IQueryOver<TRoot,TRoot> GetExecutableQueryOver(IStatelessSession session) + { + impl.Session = (ISessionImplementor)session; + return new QueryOver<TRoot,TRoot>(impl); + } + + /// <summary> /// Method to allow comparison of detached query in Lambda expression /// e.g., p => p.Name == myQuery.As<string> /// </summary> - /// <typeparam name="S">type returned by query</typeparam> + /// <typeparam name="S">type returned (projected) by query</typeparam> /// <returns>throws an exception if evaluated directly at runtime.</returns> public S As<S>() { @@ -106,358 +116,358 @@ } - ICriteria IQueryOver<T>.UnderlyingCriteria + ICriteria IQueryOver<TRoot>.UnderlyingCriteria { get { return UnderlyingCriteria; } } - IList<T> IQueryOver<T>.List() + IList<TRoot> IQueryOver<TRoot>.List() { return List(); } - IList<U> IQueryOver<T>.List<U>() + IList<U> IQueryOver<TRoot>.List<U>() { return List<U>(); } - T IQueryOver<T>.UniqueResult() + TRoot IQueryOver<TRoot>.UniqueResult() { return UniqueResult(); } - U IQueryOver<T>.UniqueResult<U>() + U IQueryOver<TRoot>.UniqueResult<U>() { return UniqueResult<U>(); } - IEnumerable<T> IQueryOver<T>.Future() + IEnumerable<TRoot> IQueryOver<TRoot>.Future() { return Future(); } - IEnumerable<U> IQueryOver<T>.Future<U>() + IEnumerable<U> IQueryOver<TRoot>.Future<U>() { return Future<U>(); } - IFutureValue<T> IQueryOver<T>.FutureValue() + IFutureValue<TRoot> IQueryOver<TRoot>.FutureValue() { return FutureValue(); } - IFutureValue<U> IQueryOver<T>.FutureValue<U>() + IFutureValue<U> IQueryOver<TRoot>.FutureValue<U>() { return FutureValue<U>(); } } /// <summary> - /// Implementation of the <see cref="IQueryOver<T>"/> interface + /// Implementation of the <see cref="IQueryOver<TRoot, TSubType>"/> interface /// </summary> [Serializable] - public class QueryOver<R,T> : QueryOver<R>, IQueryOver<R,T> + public class QueryOver<TRoot,TSubType> : QueryOver<TRoot>, IQueryOver<TRoot,TSubType> { protected internal QueryOver() { - _impl = new CriteriaImpl(typeof(T), null); - _criteria = _impl; + impl = new CriteriaImpl(typeof(TRoot), null); + criteria = impl; } - protected internal QueryOver(Expression<Func<T>> alias) + protected internal QueryOver(Expression<Func<TSubType>> alias) { string aliasPath = ExpressionProcessor.FindMemberExpression(alias.Body); - _impl = new CriteriaImpl(typeof(T), aliasPath, null); - _criteria = _impl; + impl = new CriteriaImpl(typeof(TRoot), aliasPath, null); + criteria = impl; } protected internal QueryOver(CriteriaImpl impl) { - _impl = impl; - _criteria = impl; + this.impl = impl; + this.criteria = impl; } protected internal QueryOver(CriteriaImpl rootImpl, ICriteria criteria) { - _impl = rootImpl; - _criteria = criteria; + this.impl = rootImpl; + this.criteria = criteria; } - public QueryOver<R,T> And(Expression<Func<T, bool>> expression) + public QueryOver<TRoot,TSubType> And(Expression<Func<TSubType, bool>> expression) { return Add(expression); } - public QueryOver<R,T> And(Expression<Func<bool>> expression) + public QueryOver<TRoot,TSubType> And(Expression<Func<bool>> expression) { return Add(expression); } - public QueryOver<R,T> And(ICriterion expression) + public QueryOver<TRoot,TSubType> And(ICriterion expression) { return Add(expression); } - public QueryOver<R,T> AndNot(Expression<Func<T, bool>> expression) + public QueryOver<TRoot,TSubType> AndNot(Expression<Func<TSubType, bool>> expression) { return AddNot(expression); } - public QueryOver<R,T> AndNot(Expression<Func<bool>> expression) + public QueryOver<TRoot,TSubType> AndNot(Expression<Func<bool>> expression) { return AddNot(expression); } - public QueryOverRestrictionBuilder<R,T> AndRestrictionOn(Expression<Func<T, object>> expression) + public QueryOverRestrictionBuilder<TRoot,TSubType> AndRestrictionOn(Expression<Func<TSubType, object>> expression) { - return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOverRestrictionBuilder<R,T> AndRestrictionOn(Expression<Func<object>> expression) + public QueryOverRestrictionBuilder<TRoot,TSubType> AndRestrictionOn(Expression<Func<object>> expression) { - return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOver<R,T> Where(Expression<Func<T, bool>> expression) + public QueryOver<TRoot,TSubType> Where(Expression<Func<TSubType, bool>> expression) { return Add(expression); } - public QueryOver<R,T> Where(Expression<Func<bool>> expression) + public QueryOver<TRoot,TSubType> Where(Expression<Func<bool>> expression) { return Add(expression); } - public QueryOver<R,T> Where(ICriterion expression) + public QueryOver<TRoot,TSubType> Where(ICriterion expression) { return Add(expression); } - public QueryOver<R,T> WhereNot(Expression<Func<T, bool>> expression) + public QueryOver<TRoot,TSubType> WhereNot(Expression<Func<TSubType, bool>> expression) { return AddNot(expression); } - public QueryOver<R,T> WhereNot(Expression<Func<bool>> expression) + public QueryOver<TRoot,TSubType> WhereNot(Expression<Func<bool>> expression) { return AddNot(expression); } - public QueryOverRestrictionBuilder<R,T> WhereRestrictionOn(Expression<Func<T, object>> expression) + public QueryOverRestrictionBuilder<TRoot,TSubType> WhereRestrictionOn(Expression<Func<TSubType, object>> expression) { - return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOverRestrictionBuilder<R,T> WhereRestrictionOn(Expression<Func<object>> expression) + public QueryOverRestrictionBuilder<TRoot,TSubType> WhereRestrictionOn(Expression<Func<object>> expression) { - return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<TRoot,TSubType>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOver<R,T> Select(params Expression<Func<R, object>>[] projections) + public QueryOver<TRoot,TSubType> Select(params Expression<Func<TRoot, object>>[] projections) { List<IProjection> projectionList = new List<IProjection>(); foreach (var projection in projections) projectionList.Add(Projections.Property(ExpressionProcessor.FindMemberExpression(projection.Body))); - _criteria.SetProjection(projectionList.ToArray()); + criteria.SetProjection(projectionList.ToArray()); return this; } - public QueryOver<R,T> Select(params IProjection[] projections) + public QueryOver<TRoot,TSubType> Select(params IProjection[] projections) { - _criteria.SetProjection(projections); + criteria.SetProjection(projections); return this; } - QueryOverProjectionBuilder<QueryOver<R,T>, R, T> SelectList + QueryOverProjectionBuilder<QueryOver<TRoot,TSubType>, TRoot, TSubType> SelectList { - get { return new QueryOverProjectionBuilder<QueryOver<R,T>, R, T>(this, this); } + get { return new QueryOverProjectionBuilder<QueryOver<TRoot,TSubType>, TRoot, TSubType>(this, this); } } - public QueryOverOrderBuilder<R,T> OrderBy(Expression<Func<T, object>> path) + public QueryOverOrderBuilder<TRoot,TSubType> OrderBy(Expression<Func<TSubType, object>> path) { - return new QueryOverOrderBuilder<R,T>(this, path); + return new QueryOverOrderBuilder<TRoot,TSubType>(this, path); } - public QueryOverOrderBuilder<R,T> OrderBy(Expression<Func<object>> path) + public QueryOverOrderBuilder<TRoot,TSubType> OrderBy(Expression<Func<object>> path) { - return new QueryOverOrderBuilder<R,T>(this, path); + return new QueryOverOrderBuilder<TRoot,TSubType>(this, path); } - public QueryOverOrderBuilder<R,T> ThenBy(Expression<Func<T, object>> path) + public QueryOverOrderBuilder<TRoot,TSubType> ThenBy(Expression<Func<TSubType, object>> path) { - return new QueryOverOrderBuilder<R,T>(this, path); + return new QueryOverOrderBuilder<TRoot,TSubType>(this, path); } - public QueryOverOrderBuilder<R,T> ThenBy(Expression<Func<object>> path) + public QueryOverOrderBuilder<TRoot,TSubType> ThenBy(Expression<Func<object>> path) { - return new QueryOverOrderBuilder<R,T>(this, path); + return new QueryOverOrderBuilder<TRoot,TSubType>(this, path); } - public QueryOver<R,T> Skip(int firstResult) + public QueryOver<TRoot,TSubType> Skip(int firstResult) { - _criteria.SetFirstResult(firstResult); + criteria.SetFirstResult(firstResult); return this; } - public QueryOver<R,T> Take(int maxResults) + public QueryOver<TRoot,TSubType> Take(int maxResults) { - _criteria.SetMaxResults(maxResults); + criteria.SetMaxResults(maxResults); return this; } - public QueryOver<R,T> Cacheable() + public QueryOver<TRoot,TSubType> Cacheable() { - _criteria.SetCacheable(true); + criteria.SetCacheable(true); return this; } - public QueryOver<R,T> CacheMode(CacheMode cacheMode) + public QueryOver<TRoot,TSubType> CacheMode(CacheMode cacheMode) { - _criteria.SetCacheMode(cacheMode); + criteria.SetCacheMode(cacheMode); return this; } - public QueryOver<R,T> CacheRegion(string cacheRegion) + public QueryOver<TRoot,TSubType> CacheRegion(string cacheRegion) { - _criteria.SetCacheRegion(cacheRegion); + criteria.SetCacheRegion(cacheRegion); return this; } - public QueryOverSubqueryBuilder<R,T> WithSubquery + public QueryOverSubqueryBuilder<TRoot,TSubType> WithSubquery { - get { return new QueryOverSubqueryBuilder<R,T>(this); } + get { return new QueryOverSubqueryBuilder<TRoot,TSubType>(this); } } - public QueryOverFetchBuilder<R,T> Fetch(Expression<Func<R, object>> path) + public QueryOverFetchBuilder<TRoot,TSubType> Fetch(Expression<Func<TRoot, object>> path) { - return new QueryOverFetchBuilder<R,T>(this, path); + return new QueryOverFetchBuilder<TRoot,TSubType>(this, path); } - public QueryOverLockBuilder<R,T> Lock() + public QueryOverLockBuilder<TRoot,TSubType> Lock() { - return new QueryOverLockBuilder<R,T>(this, null); + return new QueryOverLockBuilder<TRoot,TSubType>(this, null); } - public QueryOverLockBuilder<R,T> Lock(Expression<Func<object>> alias) + public QueryOverLockBuilder<TRoot,TSubType> Lock(Expression<Func<object>> alias) { - return new QueryOverLockBuilder<R,T>(this, alias); + return new QueryOverLockBuilder<TRoot,TSubType>(this, alias); } - public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path) { - return new QueryOver<R,U>(_impl, - _criteria.CreateCriteria( + return new QueryOver<TRoot,U>(impl, + criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path) { - return new QueryOver<R,U>(_impl, - _criteria.CreateCriteria( + return new QueryOver<TRoot,U>(impl, + criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, Expression<Func<U>> alias) { - return new QueryOver<R,U>(_impl, - _criteria.CreateCriteria( + return new QueryOver<TRoot,U>(impl, + criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { - return new QueryOver<R,U>(_impl, - _criteria.CreateCriteria( + return new QueryOver<TRoot,U>(impl, + criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) + public QueryOver<TRoot,U> JoinQueryOver<U>(Expression<Func<TSubType, U>> path, JoinType joinType) { - return new QueryOver<R,U>(_impl, - _criteria.CreateCriteria( + return new QueryOver<TRoot,U>(impl, + criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path,... [truncated message content] |
From: <fab...@us...> - 2009-11-30 03:21:11
|
Revision: 4875 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4875&view=rev Author: fabiomaulo Date: 2009-11-30 03:21:02 +0000 (Mon, 30 Nov 2009) Log Message: ----------- binders refactoring (pushing down the XML parsing) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmArray.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmBag.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmComponent.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIdbag.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmList.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMap.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmNaturalId.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmPrimitiveArray.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSet.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ICollectionPropertyMapping.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityPropertyMapping.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/NamedQueryBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/NamedSQLQueryBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ResultSetMappingBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDynamicComponent.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IReferencePropertyMapping.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/FiltersBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,8 @@ +using System; + namespace NHibernate.Cfg.MappingSchema { - public partial class HbmAny : IEntityPropertyMapping + public partial class HbmAny : AbstractDecoratable, IEntityPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +11,25 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmArray.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmArray.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmArray.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,8 @@ +using System; + namespace NHibernate.Cfg.MappingSchema { - public partial class HbmArray : ICollectionPropertyMapping + public partial class HbmArray : AbstractDecoratable, ICollectionPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +11,35 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion + + #region Implementation of IReferencePropertyMapping + + public string Cascade + { + get { return cascade; } + } + + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmBag.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmBag.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmBag.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmBag : ICollectionPropertyMapping + public partial class HbmBag : AbstractDecoratable, ICollectionPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +9,34 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion + + #region Implementation of IReferencePropertyMapping + + public string Cascade + { + get { return cascade; } + } + + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -26,6 +26,26 @@ get { return Item1 as HbmTimestamp; } } + public IEnumerable<HbmJoin> Joins + { + get { return Items1 != null ? Items1.OfType<HbmJoin>(): new HbmJoin[0]; } + } + + public IEnumerable<HbmSubclass> Subclasses + { + get { return Items1 != null ? Items1.OfType<HbmSubclass>() : new HbmSubclass[0]; } + } + + public IEnumerable<HbmJoinedSubclass> JoinedSubclasses + { + get { return Items1 != null ? Items1.OfType<HbmJoinedSubclass>() : new HbmJoinedSubclass[0]; } + } + + public IEnumerable<HbmUnionSubclass> UnionSubclasses + { + get { return Items1 != null ? Items1.OfType<HbmUnionSubclass>() : new HbmUnionSubclass[0]; } + } + #region Implementation of IEntityMapping protected override HbmMeta[] Metadatas @@ -137,7 +157,7 @@ public IEnumerable<IEntityPropertyMapping> Properties { - get { return Items.Cast<IEntityPropertyMapping>(); } + get { return Items != null ? Items.Cast<IEntityPropertyMapping>(): new IEntityPropertyMapping[0]; } } #endregion Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmComponent.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmComponent.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmComponent.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -4,7 +4,7 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmComponent : IEntityPropertyMapping, IPropertiesContainerMapping + public partial class HbmComponent : AbstractDecoratable, IEntityPropertyMapping, IPropertiesContainerMapping { #region Implementation of IEntityPropertyMapping @@ -13,15 +13,35 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion #region Implementation of IPropertiesContainerMapping public IEnumerable<IEntityPropertyMapping> Properties { - get { return Items.Cast<IEntityPropertyMapping>(); } + get { return Items != null ? Items.Cast<IEntityPropertyMapping>() : new IEntityPropertyMapping[0]; } } #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDynamicComponent.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDynamicComponent.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmDynamicComponent.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using System.Linq; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmDynamicComponent: AbstractDecoratable, IEntityPropertyMapping, IPropertiesContainerMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + + #endregion + + #region Implementation of IPropertiesContainerMapping + + public IEnumerable<IEntityPropertyMapping> Properties + { + get { return Items != null ? Items.Cast<IEntityPropertyMapping>() : new IEntityPropertyMapping[0]; } + } + + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return new HbmMeta[0]; } + } + + #endregion + + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,4 +1,3 @@ -using System; using NHibernate.Engine; namespace NHibernate.Cfg.MappingSchema Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIdbag.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIdbag.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIdbag.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmIdbag : ICollectionPropertyMapping + public partial class HbmIdbag : AbstractDecoratable, ICollectionPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +9,34 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion + + #region Implementation of IReferencePropertyMapping + + public string Cascade + { + get { return cascade; } + } + + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -5,6 +5,11 @@ { public partial class HbmJoinedSubclass : AbstractDecoratable, IEntityMapping { + public IEnumerable<HbmJoinedSubclass> JoinedSubclasses + { + get { return joinedsubclass1 ?? new HbmJoinedSubclass[0]; } + } + #region Overrides of AbstractDecoratable protected override HbmMeta[] Metadatas @@ -110,7 +115,7 @@ public IEnumerable<IEntityPropertyMapping> Properties { - get { return Items.Cast<IEntityPropertyMapping>(); } + get { return Items != null ? Items.Cast<IEntityPropertyMapping>() : new IEntityPropertyMapping[0]; } } #endregion Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmList.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmList.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmList.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmList : ICollectionPropertyMapping + public partial class HbmList : AbstractDecoratable, ICollectionPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +9,35 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion + + #region Implementation of IReferencePropertyMapping + + public string Cascade + { + get { return cascade; } + } + + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,8 @@ +using System; + namespace NHibernate.Cfg.MappingSchema { - public partial class HbmManyToOne : IEntityPropertyMapping + public partial class HbmManyToOne : AbstractDecoratable, IEntityPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +11,26 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMap.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMap.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMap.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmMap : ICollectionPropertyMapping + public partial class HbmMap : AbstractDecoratable, ICollectionPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +9,35 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion + + #region Implementation of IReferencePropertyMapping + + public string Cascade + { + get { return cascade; } + } + + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmNaturalId.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmNaturalId.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmNaturalId.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -10,7 +10,7 @@ public IEnumerable<IEntityPropertyMapping> Properties { - get { return Items.Cast<IEntityPropertyMapping>(); } + get { return Items != null ? Items.Cast<IEntityPropertyMapping>() : new IEntityPropertyMapping[0]; } } #endregion Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmOneToOne : IEntityPropertyMapping + public partial class HbmOneToOne : AbstractDecoratable, IEntityPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +9,26 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return true; } + } + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmPrimitiveArray.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmPrimitiveArray.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmPrimitiveArray.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmPrimitiveArray : ICollectionPropertyMapping + public partial class HbmPrimitiveArray : AbstractDecoratable, ICollectionPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,7 +9,35 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion - + + #region Implementation of IReferencePropertyMapping + + public string Cascade + { + get { return "none"; } + } + + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmProperty : IEntityPropertyMapping + public partial class HbmProperty : AbstractDecoratable, IEntityPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +9,25 @@ get { return name; } } + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSet.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSet.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSet.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public partial class HbmSet : ICollectionPropertyMapping + public partial class HbmSet : AbstractDecoratable, ICollectionPropertyMapping { #region Implementation of IEntityPropertyMapping @@ -9,6 +9,35 @@ get { return name; } } - #endregion + public string Access + { + get { return access; } + } + + public bool OptimisticKock + { + get { return optimisticlock; } + } + + #endregion + + #region Implementation of IReferencePropertyMapping + + public string Cascade + { + get { return cascade; } + } + + #endregion + + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -5,6 +5,16 @@ { public partial class HbmSubclass : AbstractDecoratable, IEntityMapping, IEntityDiscriminableMapping { + public IEnumerable<HbmJoin> Joins + { + get { return join ?? new HbmJoin[0]; } + } + + public IEnumerable<HbmSubclass> Subclasses + { + get { return subclass1 ?? new HbmSubclass[0]; } + } + #region Overrides of AbstractDecoratable protected override HbmMeta[] Metadatas @@ -120,7 +130,7 @@ public IEnumerable<IEntityPropertyMapping> Properties { - get { return Items.Cast<IEntityPropertyMapping>(); } + get { return Items != null ? Items.Cast<IEntityPropertyMapping>() : new IEntityPropertyMapping[0]; } } #endregion Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -5,6 +5,11 @@ { public partial class HbmUnionSubclass : AbstractDecoratable, IEntityMapping { + public IEnumerable<HbmUnionSubclass> UnionSubclasses + { + get { return unionsubclass1 ?? new HbmUnionSubclass[0]; } + } + #region Overrides of AbstractDecoratable protected override HbmMeta[] Metadatas @@ -111,7 +116,7 @@ public IEnumerable<IEntityPropertyMapping> Properties { - get { return Items.Cast<IEntityPropertyMapping>(); } + get { return Items != null ? Items.Cast<IEntityPropertyMapping>() : new IEntityPropertyMapping[0]; } } #endregion Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ICollectionPropertyMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ICollectionPropertyMapping.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ICollectionPropertyMapping.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public interface ICollectionPropertyMapping: IEntityPropertyMapping + public interface ICollectionPropertyMapping : IEntityPropertyMapping, IReferencePropertyMapping { } Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityPropertyMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityPropertyMapping.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityPropertyMapping.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,7 +1,9 @@ namespace NHibernate.Cfg.MappingSchema { - public interface IEntityPropertyMapping + public interface IEntityPropertyMapping: IDecoratable { string Name { get; } + string Access { get; } + bool OptimisticKock { get; } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IReferencePropertyMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IReferencePropertyMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IReferencePropertyMapping.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -0,0 +1,7 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public interface IReferencePropertyMapping + { + string Cascade { get; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -25,14 +25,6 @@ protected readonly Mappings mappings; - protected Binder(Binder parent) - { - if (parent == null) - throw new ArgumentNullException("parent"); - - mappings = parent.mappings; - } - protected Binder(Mappings mappings) { if (mappings == null) @@ -41,6 +33,11 @@ this.mappings = mappings; } + public Mappings Mappings + { + get { return mappings; } + } + /// <summary> /// Converts a partial class name into a fully qualified one /// </summary> Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -16,127 +16,20 @@ protected readonly Dialect.Dialect dialect; protected readonly XmlNamespaceManager namespaceManager; - protected ClassBinder(Binder parent, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) - : base(parent) + protected ClassBinder(Mappings mappings, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) + : base(mappings) { this.dialect = dialect; this.namespaceManager = namespaceManager; } protected ClassBinder(ClassBinder parent) - : base(parent) + : base(parent.Mappings) { dialect = parent.dialect; namespaceManager = parent.namespaceManager; } - protected void PropertiesFromXML(XmlNode node, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) - { - PropertiesFromXML(node, model, inheritedMetas, null, true, true, false); - } - - protected void PropertiesFromXML(XmlNode node, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas, UniqueKey uniqueKey, bool mutable, bool nullable, bool naturalId) - { - string entityName = model.EntityName; - - Table table = model.Table; - - foreach (XmlNode subnode in node.ChildNodes) - { - //I am only concerned with elements that are from the nhibernate namespace - if (subnode.NamespaceURI != MappingSchemaXMLNS) - continue; - - string name = subnode.LocalName; //.Name; - string propertyName = GetPropertyName(subnode); - - IValue value = null; - CollectionBinder collectionBinder = new CollectionBinder(this); - if (collectionBinder.CanCreate(name)) - { - Mapping.Collection collection = collectionBinder.Create(name, subnode, entityName, propertyName, model, - model.MappedClass, inheritedMetas); - - mappings.AddCollection(collection); - value = collection; - } - else if ("many-to-one".Equals(name)) - { - value = new ManyToOne(table); - BindManyToOne(subnode, (ManyToOne) value, propertyName, true); - } - else if ("any".Equals(name)) - { - value = new Any(table); - BindAny(subnode, (Any) value, true); - } - else if ("one-to-one".Equals(name)) - { - value = new OneToOne(table, model); - BindOneToOne(subnode, (OneToOne) value); - } - else if ("property".Equals(name)) - { - value = new SimpleValue(table); - BindSimpleValue(subnode, (SimpleValue) value, true, propertyName); - } - else if ("component".Equals(name) || "dynamic-component".Equals(name)) - { - string subpath = StringHelper.Qualify(entityName, propertyName); - // NH: Modified from H2.1 to allow specifying the type explicitly using class attribute - System.Type reflectedClass = GetPropertyType(subnode, model.MappedClass, propertyName); - value = new Component(model); - BindComponent(subnode, (Component) value, reflectedClass, entityName, propertyName, subpath, true, inheritedMetas); - } - else if ("join".Equals(name)) - { - Join join = new Join(); - join.PersistentClass = model; - BindJoin(subnode, join, inheritedMetas); - model.AddJoin(join); - } - else if ("subclass".Equals(name)) - new SubclassBinder(this).HandleSubclass(model, subnode, Deserialize<HbmSubclass>(subnode) , inheritedMetas); - - else if ("joined-subclass".Equals(name)) - new JoinedSubclassBinder(this).HandleJoinedSubclass(model, subnode, Deserialize<HbmJoinedSubclass>(subnode), inheritedMetas); - - else if ("union-subclass".Equals(name)) - new UnionSubclassBinder(this).HandleUnionSubclass(model, subnode, Deserialize<HbmUnionSubclass>(subnode), inheritedMetas); - - else if ("filter".Equals(name)) - ParseFilter(subnode, model); - else if ("natural-id".Equals(name)) - { - UniqueKey uk = new UniqueKey(); - uk.Name = "_UniqueKey"; - uk.Table = table; - //by default, natural-ids are "immutable" (constant) - - bool mutableId = false; - if (subnode.Attributes["mutable"] != null) - { - mutableId = "true".Equals(subnode.Attributes["mutable"]); - } - - PropertiesFromXML(subnode, model, inheritedMetas, uk, mutableId, false, true); - table.AddUniqueKey(uk); - } - - if (value != null) - { - Property property = CreateProperty(value, propertyName, model.ClassName, subnode, inheritedMetas); - if (!mutable) - property.IsUpdateable = false; - if (naturalId) - property.IsNaturalIdentifier = true; - model.AddProperty(property); - if (uniqueKey != null) - uniqueKey.AddColumns(new SafetyEnumerable<Column>(property.ColumnIterator)); - } - } - } - protected void BindClass(IEntityMapping classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) { // handle the lazy attribute @@ -160,6 +53,30 @@ BindPersistentClassCommonValues(classMapping, model, inheritedMetas); } + protected void BindUnionSubclasses(IEnumerable<HbmUnionSubclass> unionSubclasses, PersistentClass persistentClass, IDictionary<string, MetaAttribute> inheritedMetas) + { + foreach (var unionSubclass in unionSubclasses) + { + new UnionSubclassBinder(this).HandleUnionSubclass(persistentClass, Serialize(unionSubclass), unionSubclass, inheritedMetas); + } + } + + protected void BindJoinedSubclasses(IEnumerable<HbmJoinedSubclass> joinedSubclasses, PersistentClass persistentClass, IDictionary<string, MetaAttribute> inheritedMetas) + { + foreach (var joinedSubclass in joinedSubclasses) + { + new JoinedSubclassBinder(this).HandleJoinedSubclass(persistentClass, Serialize(joinedSubclass), joinedSubclass, inheritedMetas); + } + } + + protected void BindSubclasses(IEnumerable<HbmSubclass> subclasses, PersistentClass persistentClass, IDictionary<string, MetaAttribute> inheritedMetas) + { + foreach (var subclass in subclasses) + { + new SubclassBinder(this).HandleSubclass(persistentClass, Serialize(subclass), subclass, inheritedMetas); + } + } + private void BindPersistentClassCommonValues(IEntityMapping classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) { // DISCRIMINATOR @@ -254,6 +171,16 @@ } } + protected void BindJoins(IEnumerable<HbmJoin> joins, PersistentClass persistentClass, IDictionary<string, MetaAttribute> inheritedMetas) + { + foreach (var hbmJoin in joins) + { + var join = new Join { PersistentClass = persistentClass }; + BindJoin(Serialize(hbmJoin), join, inheritedMetas); + persistentClass.AddJoin(join); + } + } + private void BindJoin(XmlNode node, Join join, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass persistentClass = join.PersistentClass; @@ -310,7 +237,7 @@ XmlAttribute nameAttribute = subnode.Attributes["name"]; string propertyName = nameAttribute == null ? null : nameAttribute.Value; IValue value = null; - var collectionBinder = new CollectionBinder(this); + var collectionBinder = new CollectionBinder(Mappings, namespaceManager, dialect); if (collectionBinder.CanCreate(name)) { Mapping.Collection collection = collectionBinder.Create(name, subnode, persistentClass.EntityName, propertyName, @@ -536,7 +463,7 @@ IValue value = null; - CollectionBinder binder = new CollectionBinder(this); + CollectionBinder binder = new CollectionBinder(Mappings, namespaceManager, dialect); if (binder.CanCreate(name)) { @@ -882,7 +809,7 @@ BindColumns(node, model, isNullable, false, null); } - private void BindOneToOne(XmlNode node, OneToOne model) + protected void BindOneToOne(XmlNode node, OneToOne model) { //BindColumns( node, model, isNullable, false, null, mappings ); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassIdBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -13,11 +13,6 @@ { } - public ClassIdBinder(Binder parent, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) - : base(parent, namespaceManager, dialect) - { - } - public void BindId(HbmId idSchema, PersistentClass rootClass, Table table) { if (idSchema != null) Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -31,8 +31,7 @@ return SupportedCollections.Contains(type); } - public CollectionBinder(ClassBinder parent) - : base(parent) + public CollectionBinder(Mappings mappings, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) : base(mappings, namespaceManager, dialect) { CreateCommandCollection(); } Added: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/FiltersBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/FiltersBinder.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/FiltersBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping; +using NHibernate.Util; + +namespace NHibernate.Cfg.XmlHbmBinding +{ + public class FiltersBinder: Binder + { + private readonly IFilterable filterable; + + public FiltersBinder(IFilterable filterable, Mappings mappings) : base(mappings) + { + this.filterable = filterable; + } + + public void Bind(IEnumerable<HbmFilter> filters) + { + if (filters == null) + { + return; + } + foreach (var filter in filters) + { + string name = filter.name; + if (name.IndexOf('.') > -1) + throw new MappingException("Filter name can't contain the character '.'(point): " + name); + + string condition = (filter.Text.LinesToString() ?? string.Empty).Trim(); + if (string.IsNullOrEmpty(condition)) + { + condition = filter.condition; + } + if (string.IsNullOrEmpty(condition)) + { + var fdef = mappings.GetFilterDefinition(name); + if (fdef != null) + { + // where immediately available, apply the condition + condition = fdef.DefaultFilterCondition; + } + } + + mappings.ExpectedFilterDefinition(filterable, name, condition); + + log.Debug(string.Format("Applying filter [{0}] as [{1}]", name, condition)); + filterable.AddFilter(name, condition); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -8,8 +8,8 @@ { public class JoinedSubclassBinder : ClassBinder { - public JoinedSubclassBinder(Binder parent, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) - : base(parent, namespaceManager, dialect) + public JoinedSubclassBinder(Mappings mappings, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) + : base(mappings, namespaceManager, dialect) { } @@ -68,8 +68,10 @@ mytable.AddCheckConstraint(joinedSubclassMapping.check); // properties - PropertiesFromXML(subnode, subclass, inheritedMetas); + new PropertiesBinder(mappings, subclass, namespaceManager, dialect).Bind(joinedSubclassMapping.Properties, inheritedMetas); + BindJoinedSubclasses(joinedSubclassMapping.JoinedSubclasses, subclass, inheritedMetas); + model.AddSubclass(subclass); mappings.AddClass(subclass); } Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -79,9 +79,9 @@ private void AddRootClasses(XmlNode parentNode, HbmClass rootClass, IDictionary<string, MetaAttribute> inheritedMetas) { - var binder = new RootClassBinder(this, GetNamespaceManager(parentNode), dialect); + var binder = new RootClassBinder(Mappings, GetNamespaceManager(parentNode), dialect); - binder.Bind(parentNode, rootClass, inheritedMetas); + binder.Bind(rootClass, inheritedMetas); } private XmlNamespaceManager GetNamespaceManager(XmlNode parentNode) @@ -98,7 +98,7 @@ private void AddUnionSubclasses(XmlNode parentNode, HbmUnionSubclass unionSubclass, IDictionary<string, MetaAttribute> inheritedMetas) { - var binder = new UnionSubclassBinder(this, GetNamespaceManager(parentNode), dialect); + var binder = new UnionSubclassBinder(Mappings, GetNamespaceManager(parentNode), dialect); binder.Bind(parentNode, unionSubclass, inheritedMetas); } @@ -106,7 +106,7 @@ private void AddJoinedSubclasses(XmlNode parentNode, HbmJoinedSubclass joinedSubclass, IDictionary<string, MetaAttribute> inheritedMetas) { - var binder = new JoinedSubclassBinder(this, GetNamespaceManager(parentNode), dialect); + var binder = new JoinedSubclassBinder(Mappings, GetNamespaceManager(parentNode), dialect); binder.Bind(parentNode, joinedSubclass, inheritedMetas); } @@ -120,13 +120,13 @@ private void AddQueries(HbmMapping mappingSchema) { - var binder = new NamedQueryBinder(this); + var binder = new NamedQueryBinder(Mappings); System.Array.ForEach(mappingSchema.HqlQueries, binder.AddQuery); } private void AddSqlQueries(HbmMapping mappingSchema) { - var binder = new NamedSQLQueryBinder(this); + var binder = new NamedSQLQueryBinder(Mappings); System.Array.ForEach(mappingSchema.SqlQueries, binder.AddSqlQuery); } @@ -169,7 +169,7 @@ private void AddResultSetMappingDefinitions(HbmMapping mappingSchema) { - var binder = new ResultSetMappingBinder(this); + var binder = new ResultSetMappingBinder(Mappings); foreach (HbmResultSet resultSetSchema in mappingSchema.ResultSets) { Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/NamedQueryBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/NamedQueryBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/NamedQueryBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -12,11 +12,6 @@ { } - public NamedQueryBinder(Binder parent) - : base(parent) - { - } - public void AddQuery(HbmQuery querySchema) { string queryName = querySchema.name; @@ -36,11 +31,9 @@ ? CacheModeConverter.GetCacheMode(querySchema.cachemode) : null; - - IDictionary<string,string> parameterTypes = new LinkedHashMap<string,string>(); - NamedQueryDefinition namedQuery = new NamedQueryDefinition(queryText, cacheable, region, timeout, + var namedQuery = new NamedQueryDefinition(queryText, cacheable, region, timeout, fetchSize, flushMode, cacheMode, readOnly, comment, parameterTypes); mappings.AddQuery(queryName, namedQuery); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/NamedSQLQueryBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/NamedSQLQueryBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/NamedSQLQueryBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -12,11 +12,6 @@ { } - public NamedSQLQueryBinder(Binder parent) - : base(parent) - { - } - public void AddSqlQuery(HbmSqlQuery querySchema) { mappings.AddSecondPass(delegate @@ -45,7 +40,7 @@ if (string.IsNullOrEmpty(resultSetRef)) { ResultSetMappingDefinition definition = - new ResultSetMappingBinder(this).Create(querySchema); + new ResultSetMappingBinder(Mappings).Create(querySchema); namedQuery = new NamedSQLQueryDefinition(queryText, definition.GetQueryReturns(), synchronizedTables, cacheable, region, timeout, Added: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -0,0 +1,254 @@ +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping; +using System; +using NHibernate.Util; + +namespace NHibernate.Cfg.XmlHbmBinding +{ + public class PropertiesBinder : ClassBinder + { + private readonly PersistentClass model; + + public PropertiesBinder(Mappings mappings, PersistentClass model, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) + : base(mappings, namespaceManager, dialect) + { + this.model = model; + } + + public void Bind(IEnumerable<IEntityPropertyMapping> properties, IDictionary<string, MetaAttribute> inheritedMetas) + { + Bind(properties, inheritedMetas, null); + } + + public void Bind(IEnumerable<IEntityPropertyMapping> properties, IDictionary<string, MetaAttribute> inheritedMetas, Action<Property> modifier) + { + Action<Property> action = modifier ?? (p => { }); + string entityName = model.EntityName; + Table table = model.Table; + + foreach (var entityPropertyMapping in properties) + { + Property property= null; + + string propertyName = entityPropertyMapping.Name; + + ICollectionPropertyMapping collectionMapping; + HbmManyToOne manyToOneMapping; + HbmAny anyMapping; + HbmOneToOne oneToOneMapping; + HbmProperty propertyMapping; + HbmComponent componentMapping; + HbmDynamicComponent dynamicComponentMapping; + + if ((propertyMapping = entityPropertyMapping as HbmProperty) != null) + { + var value = new SimpleValue(table); + BindSimpleValue(Serialize(propertyMapping), value, true, propertyName); + property = CreateProperty(entityPropertyMapping, model.ClassName, value, inheritedMetas); + BindValueProperty(propertyMapping, property); + } + else if ((collectionMapping = entityPropertyMapping as ICollectionPropertyMapping) != null) + { + var collectionBinder = new CollectionBinder(Mappings, namespaceManager, dialect); + + Mapping.Collection collection = collectionBinder.Create(collectionMapping, entityName, propertyName, model, + model.MappedClass, inheritedMetas); + + mappings.AddCollection(collection); + + property = CreateProperty(collectionMapping, model.ClassName, collection, inheritedMetas); + BindCollectionProperty(collectionMapping, property); + } + else if ((manyToOneMapping = entityPropertyMapping as HbmManyToOne) != null) + { + var value = new ManyToOne(table); + BindManyToOne(Serialize(manyToOneMapping), value, propertyName, true); + property = CreateProperty(entityPropertyMapping, model.ClassName, value, inheritedMetas); + BindManyToOneProperty(manyToOneMapping, property); + } + else if ((componentMapping = entityPropertyMapping as HbmComponent) != null) + { + string subpath = StringHelper.Qualify(entityName, propertyName); + var subnode = Serialize(componentMapping); + var value = new Component(model); + // NH: Modified from H2.1 to allow specifying the type explicitly using class attribute + System.Type reflectedClass = GetPropertyType(subnode, model.MappedClass, propertyName); + BindComponent(subnode, value, reflectedClass, entityName, propertyName, subpath, true, inheritedMetas); + property = CreateProperty(entityPropertyMapping, model.ClassName, value, inheritedMetas); + BindComponentProperty(componentMapping, property); + } + else if ((oneToOneMapping = entityPropertyMapping as HbmOneToOne) != null) + { + var value = new OneToOne(table, model); + BindOneToOne(Serialize(oneToOneMapping), value); + property = CreateProperty(entityPropertyMapping, model.ClassName, value, inheritedMetas); + BindOneToOneProperty(oneToOneMapping, property); + } + else if ((dynamicComponentMapping = entityPropertyMapping as HbmDynamicComponent) != null) + { + string subpath = StringHelper.Qualify(entityName, propertyName); + var subnode = Serialize(dynamicComponentMapping); + var value = new Component(model); + // NH: Modified from H2.1 to allow specifying the type explicitly using class attribute + System.Type reflectedClass = GetPropertyType(subnode, model.MappedClass, propertyName); + BindComponent(subnode, value, reflectedClass, entityName, propertyName, subpath, true, inheritedMetas); + property = CreateProperty(entityPropertyMapping, model.ClassName, value, inheritedMetas); + BindComponentProperty(dynamicComponentMapping, property); + } + else if ((anyMapping = entityPropertyMapping as HbmAny) != null) + { + var value = new Any(table); + BindAny(Serialize(anyMapping), value, true); + property = CreateProperty(entityPropertyMapping, model.ClassName, value, inheritedMetas); + BindAnyProperty(anyMapping, property); + } + + if(property != null) + { + action(property); + if (log.IsDebugEnabled) + { + string msg = "Mapped property: " + property.Name; + string columns = string.Join(",", property.Value.ColumnIterator.Select(c => c.Text).ToArray()); + if (columns.Length > 0) + msg += " -> " + columns; + if (property.Type != null) + msg += ", type: " + property.Type.Name; + log.Debug(msg); + } + model.AddProperty(property); + } + } + } + + private void BindValueProperty(HbmProperty propertyMapping, Property property) + { + property.IsUpdateable = propertyMapping.updateSpecified ? propertyMapping.update:true; + property.IsInsertable = propertyMapping.insertSpecified ? propertyMapping.insert:true; + PropertyGeneration generation; + switch (propertyMapping.generated) + { + case HbmPropertyGeneration.Never: + generation = PropertyGeneration.Never; + break; + case HbmPropertyGeneration.Insert: + generation = PropertyGeneration.Insert; + break; + case HbmPropertyGeneration.Always: + generation = PropertyGeneration.Always; + break; + default: + throw new ArgumentOutOfRangeException(); + } + property.Generation = generation; + + if (generation == PropertyGeneration.Always || generation == PropertyGeneration.Insert) + { + // generated properties can *never* be insertable... + if (propertyMapping.insertSpecified && property.IsInsertable) + { + // the user specifically supplied insert="true", + // which constitutes an illegal combo + throw new MappingException("cannot specify both insert=\"true\" and generated=\"" + generation + + "\" for property: " + propertyMapping.Name); + } + else + { + property.IsInsertable = false; + } + + // properties generated on update can never be updateable... + if (propertyMapping.updateSpecified && property.IsUpdateable && generation == PropertyGeneration.Always) + { + // the user specifically supplied update="true", + // which constitutes an illegal combo + throw new MappingException("cannot specify both update=\"true\" and generated=\"" + generation + + "\" for property: " + propertyMapping.Name); + } + else + { + property.IsUpdateable = false; + } + } + } + + private void BindAnyProperty(HbmAny anyMapping, Property property) + { + property.Cascade = anyMapping.cascade ?? mappings.DefaultCascade; + property.IsUpdateable = anyMapping.update; + property.IsInsertable = anyMapping.insert; + } + + private void BindOneToOneProperty(HbmOneToOne oneToOneMapping, Property property) + { + property.Cascade = oneToOneMapping.cascade ?? mappings.DefaultCascade; + var toOne = property.Value as ToOne; + if (toOne != null) + { + string propertyRef = toOne.ReferencedPropertyName; + if (propertyRef != null) + mappings.AddUniquePropertyReference(toOne.ReferencedEntityName, propertyRef); + toOne.CreateForeignKey(); + } + } + + private void BindComponentProperty(HbmDynamicComponent dynamicComponentMapping, Property property) + { + property.IsUpdateable = dynamicComponentMapping.update; + property.IsInsertable = dynamicComponentMapping.insert; + } + + private void BindComponentProperty(HbmComponent componentMapping, Property property) + { + property.IsUpdateable = componentMapping.update; + property.IsInsertable = componentMapping.insert; + } + + private void BindManyToOneProperty(HbmManyToOne manyToOneMapping, Property property) + { + property.Cascade = manyToOneMapping.cascade ?? mappings.DefaultCascade; + property.IsUpdateable = manyToOneMapping.update; + property.IsInsertable = manyToOneMapping.insert; + var toOne = property.Value as ToOne; + if (toOne != null) + { + string propertyRef = toOne.ReferencedPropertyName; + if (propertyRef != null) + mappings.AddUniquePropertyReference(toOne.ReferencedEntityName, propertyRef); + toOne.CreateForeignKey(); + } + } + + private void BindCollectionProperty(ICollectionPropertyMapping collectionMapping, Property property) + { + property.Cascade = collectionMapping.Cascade ?? mappings.DefaultCascade; + } + + private Property CreateProperty(IEntityPropertyMapping propertyMapping, string className, IValue value, IDictionary<string, MetaAttribute> inheritedMetas) + { + if (string.IsNullOrEmpty(propertyMapping.Name)) + { + throw new MappingException("A property mapping must define the name attribute [" + className + "]"); + } + + var propertyAccessorName = propertyMapping.Access ?? Mappings.DefaultAccess; + + if (!string.IsNullOrEmpty(className) && value.IsSimpleValue) + value.SetTypeUsingReflection(className, propertyMapping.Name, propertyAccessorName); + + var property = new Property + { + Name = propertyMapping.Name, + PropertyAccessorName = propertyAccessorName, + Value = value, + IsOptimisticLocked = propertyMapping.OptimisticKock, + MetaAttributes = GetMetas(propertyMapping, inheritedMetas) + }; + + return property; + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ResultSetMappingBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ResultSetMappingBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ResultSetMappingBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -18,11 +18,6 @@ { } - public ResultSetMappingBinder(Binder parent) - : base(parent) - { - } - public ResultSetMappingDefinition Create(HbmResultSet resultSetSchema) { return Create(resultSetSchema.name, resultSetSchema.Items); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Xml; using NHibernate.Cfg.MappingSchema; using NHibernate.Mapping; @@ -8,12 +9,12 @@ { public class RootClassBinder : ClassBinder { - public RootClassBinder(Binder parent, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) - : base(parent, namespaceManager, dialect) + public RootClassBinder(Mappings mappings, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) + : base(mappings, namespaceManager, dialect) { } - public void Bind(XmlNode node, HbmClass classSchema, IDictionary<string, MetaAttribute> inheritedMetas) + public void Bind(HbmClass classSchema, IDictionary<string, MetaAttribute> inheritedMetas) { RootClass rootClass = new RootClass(); BindClass(classSchema, rootClass, inheritedMetas); @@ -55,10 +56,40 @@ BindVersion(classSchema.Version, rootClass, table, inheritedMetas); rootClass.CreatePrimaryKey(dialect); - PropertiesFromXML(node, rootClass, inheritedMetas); + BindNaturalId(classSchema.naturalid, rootClass, inheritedMetas); + new PropertiesBinder(mappings, rootClass, namespaceManager, dialect).Bind(classSchema.Properties, inheritedMetas); + + BindJoins(classSchema.Joins, rootClass, inheritedMetas); + BindSubclasses(classSchema.Subclasses, rootClass, inheritedMetas); + BindJoinedSubclasses(classSchema.JoinedSubclasses, rootClass, inheritedMetas); + BindUnionSubclasses(classSchema.UnionSubclasses, rootClass, inheritedMetas); + + new FiltersBinder(rootClass, Mappings).Bind(classSchema.filter); + mappings.AddClass(rootClass); } + private void BindNaturalId(HbmNaturalId naturalid, PersistentClass rootClass, IDictionary<string, MetaAttribute> inheritedMetas) + { + if (naturalid == null) + { + return; + } + //by default, natural-ids are "immutable" (constant) + var propBinder = new PropertiesBinder(mappings, rootClass, namespaceManager, dialect); + var uk = new UniqueKey { Name = "_UniqueKey", Table = rootClass.Table }; + propBinder.Bind(naturalid.Properties, inheritedMetas, property => + { + if (!naturalid.mutable) + property.IsUpdateable = false; + property.IsNaturalIdentifier = true; + + uk.AddColumns(property.ColumnIterator.OfType<Column>()); + }); + + rootClass.Table.AddUniqueKey(uk); + } + private string GetClassTableName(PersistentClass model, HbmClass classSchema) { if (classSchema.table == null) Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -9,7 +9,7 @@ public class SubclassBinder : ClassBinder { public SubclassBinder(Binder parent, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) - : base(parent, namespaceManager, dialect) + : base(parent.Mappings, namespaceManager, dialect) { } @@ -37,7 +37,9 @@ log.InfoFormat("Mapping subclass: {0} -> {1}", subclass.EntityName, subclass.Table.Name); // properties - PropertiesFromXML(subnode, subclass, inheritedMetas); + new PropertiesBinder(mappings, subclass, namespaceManager, dialect).Bind(subClassMapping.Properties, inheritedMetas); + BindJoins(subClassMapping.Joins, subclass, inheritedMetas); + BindSubclasses(subClassMapping.Subclasses, subclass, inheritedMetas); model.AddSubclass(subclass); mappings.AddClass(subclass); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-11-30 03:21:02 UTC (rev 4875) @@ -8,8 +8,8 @@ { public class UnionSubclassBinder : ClassBinder { - public UnionSubclassBinder(Binder parent, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) - : base(parent, namespaceManager, dialect) + public UnionSubclassBinder(Mappings mappings, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) + : base(mappings, namespaceManager, dialect) { } @@ -48,7 +48,8 @@ log.InfoFormat("Mapping union-subclass: {0} -> {1}", unionSubclass.EntityName, unionSubclass.Table.Name); // properties - PropertiesFromXML(subnode, unionSubclass, inheritedMetas); + new PropertiesBinder(mappings, unionSubclass, namespaceManager, dialect).Bind(unionSubclassMapping.Properties, inheritedMetas); + BindUnionSubclasses(unionSubclassMapping.UnionSubclasses, unionSubclass, inheritedMetas); model.AddSubclass(unionSubclass); mappings.AddClass(unionSubclass); Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-29 20:47:58 UTC (rev 4874) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-30 03:21:02 UTC (rev 4875) @@ -499,6 +499,7 @@ <Compile Include="Cfg\MappingSchema\HbmBag.cs" /> <Compile Include="Cfg\MappingSchema\HbmComponent.cs" /> <Compile Include="Cfg\MappingSchema\HbmDefinition.cs" /> + <Compile Include="Cfg\MappingSchema\HbmDynamicComponent.cs" /> <Compile Include="Cfg\MappingSchema\HbmExtensions.cs" /> <Compile Include="Cfg\MappingSchema\HbmIdbag.cs" /> <Compile Include="Cfg\MappingSchema\HbmJoinedSubclass.cs" /> @@ -518,6 +519,7 @@ <Compile Include="Cfg\MappingSchema\IEntityPropertyMapping.cs" /> <Compile Include="Cfg\MappingSchema\IEntitySqlsMapping.cs" /> <Compile Include="Cfg\MappingSchema\IPropertiesContainerMapping.cs" /> + <Compile Include="Cfg\MappingSchema\IReferencePropertyMapping.cs" /> <Compile Include="Cfg\SchemaAutoAction.cs" /> <Compile Include="Cfg\SessionFactoryConfigurationBase.cs" /> <Compile Include="Cfg\ISessionFactoryConfiguration.cs" /> @@ -525,6 +527,10 @@ <Compile Include="Cfg\MappingSchema\HbmTimestamp.cs" /> <Compile Include="Cfg\MappingSchema\HbmVersion.cs" /> <Compile Include="Cfg\MappingSchema\IDecoratable.cs" /> + <Compile Include="Cfg\XmlHbmBinding\FiltersBinder.cs" /> + <Compile Include="Cfg\XmlHbmBinding\PropertiesBind... [truncated message content] |
From: <ric...@us...> - 2009-11-29 20:48:06
|
Revision: 4874 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4874&view=rev Author: ricbrown Date: 2009-11-29 20:47:58 +0000 (Sun, 29 Nov 2009) Log Message: ----------- Fix NH-2027 (Call Oracle procedures inside packages; using dot notation) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Engine/Query/CallableParser.cs trunk/nhibernate/src/NHibernate.Test/EngineTest/CallableParserFixture.cs Modified: trunk/nhibernate/src/NHibernate/Engine/Query/CallableParser.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Query/CallableParser.cs 2009-11-29 16:08:44 UTC (rev 4873) +++ trunk/nhibernate/src/NHibernate/Engine/Query/CallableParser.cs 2009-11-29 20:47:58 UTC (rev 4874) @@ -16,7 +16,7 @@ public string FunctionName; } - private static readonly Regex functionNameFinder = new Regex(@"\{[\S\s]*call[\s]+([\w]+)[^\w]"); + private static readonly Regex functionNameFinder = new Regex(@"\{[\S\s]*call[\s]+([\w\.]+)[^\w]"); private static readonly int NewLineLength = Environment.NewLine.Length; public static Detail Parse(string sqlString) Modified: trunk/nhibernate/src/NHibernate.Test/EngineTest/CallableParserFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/EngineTest/CallableParserFixture.cs 2009-11-29 16:08:44 UTC (rev 4873) +++ trunk/nhibernate/src/NHibernate.Test/EngineTest/CallableParserFixture.cs 2009-11-29 20:47:58 UTC (rev 4874) @@ -45,6 +45,15 @@ } [Test] + public void CanFindCallablePackageFunctionName() + { + string query = @"{ call myPackage.No2_Function(:name) }"; + + CallableParser.Detail detail = CallableParser.Parse(query); + Assert.That(detail.FunctionName, Is.EqualTo("myPackage.No2_Function")); + } + + [Test] public void CanDetermineHasReturn() { string query = @"{ ? = call myFunction(:name) }"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-29 16:09:03
|
Revision: 4873 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4873&view=rev Author: fabiomaulo Date: 2009-11-29 16:08:44 +0000 (Sun, 29 Nov 2009) Log Message: ----------- Preparing other binders refactoring Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmArray.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmBag.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmComponent.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIdbag.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmList.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMap.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmNaturalId.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmPrimitiveArray.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSet.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ICollectionPropertyMapping.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityPropertyMapping.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IPropertiesContainerMapping.cs Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmAny.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmAny : IEntityPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmArray.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmArray.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmArray.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmArray : ICollectionPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmBag.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmBag.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmBag.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmBag : ICollectionPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -1,3 +1,7 @@ +using System; +using System.Collections.Generic; +using System.Linq; + namespace NHibernate.Cfg.MappingSchema { partial class HbmClass : AbstractDecoratable, IEntityMapping, IEntityDiscriminableMapping @@ -128,5 +132,14 @@ } #endregion + + #region Implementation of IPropertiesContainerMapping + + public IEnumerable<IEntityPropertyMapping> Properties + { + get { return Items.Cast<IEntityPropertyMapping>(); } + } + + #endregion } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmComponent.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmComponent.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmComponent.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmComponent : IEntityPropertyMapping, IPropertiesContainerMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + + #region Implementation of IPropertiesContainerMapping + + public IEnumerable<IEntityPropertyMapping> Properties + { + get { return Items.Cast<IEntityPropertyMapping>(); } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIdbag.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIdbag.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmIdbag.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmIdbag : ICollectionPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -1,3 +1,6 @@ +using System.Collections.Generic; +using System.Linq; + namespace NHibernate.Cfg.MappingSchema { public partial class HbmJoinedSubclass : AbstractDecoratable, IEntityMapping @@ -102,5 +105,14 @@ } #endregion + + #region Implementation of IPropertiesContainerMapping + + public IEnumerable<IEntityPropertyMapping> Properties + { + get { return Items.Cast<IEntityPropertyMapping>(); } + } + + #endregion } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmList.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmList.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmList.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmList : ICollectionPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmManyToOne.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmManyToOne : IEntityPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMap.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMap.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMap.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmMap : ICollectionPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmNaturalId.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmNaturalId.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmNaturalId.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmNaturalId: IPropertiesContainerMapping + { + #region Implementation of IPropertiesContainerMapping + + public IEnumerable<IEntityPropertyMapping> Properties + { + get { return Items.Cast<IEntityPropertyMapping>(); } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmOneToOne : IEntityPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmPrimitiveArray.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmPrimitiveArray.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmPrimitiveArray.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,15 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmPrimitiveArray : ICollectionPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmProperty.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmProperty : IEntityPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSet.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSet.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSet.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,14 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmSet : ICollectionPropertyMapping + { + #region Implementation of IEntityPropertyMapping + + public string Name + { + get { return name; } + } + + #endregion + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -1,3 +1,6 @@ +using System.Collections.Generic; +using System.Linq; + namespace NHibernate.Cfg.MappingSchema { public partial class HbmSubclass : AbstractDecoratable, IEntityMapping, IEntityDiscriminableMapping @@ -113,5 +116,13 @@ #endregion + #region Implementation of IPropertiesContainerMapping + + public IEnumerable<IEntityPropertyMapping> Properties + { + get { return Items.Cast<IEntityPropertyMapping>(); } + } + + #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -1,3 +1,6 @@ +using System.Collections.Generic; +using System.Linq; + namespace NHibernate.Cfg.MappingSchema { public partial class HbmUnionSubclass : AbstractDecoratable, IEntityMapping @@ -104,5 +107,13 @@ #endregion + #region Implementation of IPropertiesContainerMapping + + public IEnumerable<IEntityPropertyMapping> Properties + { + get { return Items.Cast<IEntityPropertyMapping>(); } + } + + #endregion } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ICollectionPropertyMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ICollectionPropertyMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/ICollectionPropertyMapping.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,7 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public interface ICollectionPropertyMapping: IEntityPropertyMapping + { + + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - public interface IEntityMapping : IDecoratable, IEntitySqlsMapping + public interface IEntityMapping : IDecoratable, IEntitySqlsMapping, IPropertiesContainerMapping { string EntityName { get; } string Name { get; } Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityPropertyMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityPropertyMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityPropertyMapping.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,7 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public interface IEntityPropertyMapping + { + string Name { get; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IPropertiesContainerMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IPropertiesContainerMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IPropertiesContainerMapping.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -0,0 +1,8 @@ +using System.Collections.Generic; +namespace NHibernate.Cfg.MappingSchema +{ + public interface IPropertiesContainerMapping + { + IEnumerable<IEntityPropertyMapping> Properties { get; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -148,7 +148,14 @@ protected static XmlNode Serialize<T>(T hbmElement) { // TODO : this method is only for TEMPORAL usage; should be removed after refactorize all binders - var serializer = new XmlSerializer(typeof (T)); + var xmlTypeMapping = typeof (T); + return Serialize(xmlTypeMapping, hbmElement); + } + + protected static XmlNode Serialize(System.Type xmlTypeMapping, object hbmElement) + { + // TODO : this method is only for TEMPORAL usage; should be removed after refactorize all binders + var serializer = new XmlSerializer(xmlTypeMapping); using (var memStream = new MemoryStream(2000)) using (var xmlWriter = XmlWriter.Create(memStream)) { Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -7,14 +7,30 @@ using NHibernate.Util; using Array = NHibernate.Mapping.Array; +using NHibernate.Cfg.MappingSchema; namespace NHibernate.Cfg.XmlHbmBinding { public class CollectionBinder : ClassBinder { + private static readonly HashSet<System.Type> SupportedCollections = new HashSet<System.Type> + { + typeof (HbmMap), + typeof (HbmBag), + typeof (HbmIdbag), + typeof (HbmSet), + typeof (HbmList), + typeof (HbmArray), + typeof (HbmPrimitiveArray) + }; private readonly IDictionary<string, CreateCollectionCommand> createCollectionCommands = new Dictionary<string, CreateCollectionCommand>(); + public static bool IsSupported(System.Type type) + { + return SupportedCollections.Contains(type); + } + public CollectionBinder(ClassBinder parent) : base(parent) { @@ -37,6 +53,49 @@ return createCollectionCommands.ContainsKey(xmlTagName); } + public Mapping.Collection Create(ICollectionPropertyMapping collectionMapping, string className, + string path, PersistentClass owner, System.Type containingType, IDictionary<string, MetaAttribute> inheritedMetas) + { + var collectionType = collectionMapping.GetType(); + if (collectionType == typeof (HbmBag)) + { + return createCollectionCommands["bag"](Serialize(typeof (HbmBag), collectionMapping), className, path, owner, + containingType, inheritedMetas); + } + else if (collectionType == typeof (HbmSet)) + { + return createCollectionCommands["set"](Serialize(typeof(HbmSet), collectionMapping), className, path, owner, + containingType, inheritedMetas); + } + else if (collectionType == typeof (HbmList)) + { + return createCollectionCommands["list"](Serialize(typeof(HbmList), collectionMapping), className, path, owner, + containingType, inheritedMetas); + } + else if (collectionType == typeof (HbmMap)) + { + return createCollectionCommands["map"](Serialize(typeof(HbmMap), collectionMapping), className, path, owner, + containingType, inheritedMetas); + } + else if (collectionType == typeof (HbmIdbag)) + { + return createCollectionCommands["idbag"](Serialize(typeof(HbmIdbag), collectionMapping), className, path, owner, + containingType, inheritedMetas); + } + else if (collectionType == typeof (HbmArray)) + { + return createCollectionCommands["array"](Serialize(typeof(HbmArray), collectionMapping), className, path, owner, + containingType, inheritedMetas); + } + else if (collectionType == typeof (HbmPrimitiveArray)) + { + return createCollectionCommands["primitive-array"](Serialize(typeof(HbmPrimitiveArray), collectionMapping), className, path, owner, + containingType, inheritedMetas); + } + throw new MappingException("Not supported collection mapping element:" + collectionType); + } + + public Mapping.Collection Create(string xmlTagName, XmlNode node, string className, string path, PersistentClass owner, System.Type containingType, IDictionary<string, MetaAttribute> inheritedMetas) { Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 16:08:44 UTC (rev 4873) @@ -55,7 +55,6 @@ BindVersion(classSchema.Version, rootClass, table, inheritedMetas); rootClass.CreatePrimaryKey(dialect); - PropertiesFromXML(node, rootClass, inheritedMetas); mappings.AddClass(rootClass); } Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-29 13:10:49 UTC (rev 4872) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-29 16:08:44 UTC (rev 4873) @@ -494,14 +494,30 @@ <Compile Include="Cfg\Loquacious\ITypeDefConfiguration.cs" /> <Compile Include="Cfg\Loquacious\MappingsConfiguration.cs" /> <Compile Include="Cfg\Loquacious\ProxyConfiguration.cs" /> + <Compile Include="Cfg\MappingSchema\HbmAny.cs" /> + <Compile Include="Cfg\MappingSchema\HbmArray.cs" /> + <Compile Include="Cfg\MappingSchema\HbmBag.cs" /> + <Compile Include="Cfg\MappingSchema\HbmComponent.cs" /> <Compile Include="Cfg\MappingSchema\HbmDefinition.cs" /> <Compile Include="Cfg\MappingSchema\HbmExtensions.cs" /> + <Compile Include="Cfg\MappingSchema\HbmIdbag.cs" /> <Compile Include="Cfg\MappingSchema\HbmJoinedSubclass.cs" /> + <Compile Include="Cfg\MappingSchema\HbmList.cs" /> + <Compile Include="Cfg\MappingSchema\HbmManyToOne.cs" /> + <Compile Include="Cfg\MappingSchema\HbmMap.cs" /> + <Compile Include="Cfg\MappingSchema\HbmNaturalId.cs" /> + <Compile Include="Cfg\MappingSchema\HbmOneToOne.cs" /> + <Compile Include="Cfg\MappingSchema\HbmPrimitiveArray.cs" /> + <Compile Include="Cfg\MappingSchema\HbmProperty.cs" /> + <Compile Include="Cfg\MappingSchema\HbmSet.cs" /> <Compile Include="Cfg\MappingSchema\HbmSubclass.cs" /> <Compile Include="Cfg\MappingSchema\HbmUnionSubclass.cs" /> + <Compile Include="Cfg\MappingSchema\ICollectionPropertyMapping.cs" /> <Compile Include="Cfg\MappingSchema\IEntityDiscriminableMapping.cs" /> <Compile Include="Cfg\MappingSchema\IEntityMapping.cs" /> + <Compile Include="Cfg\MappingSchema\IEntityPropertyMapping.cs" /> <Compile Include="Cfg\MappingSchema\IEntitySqlsMapping.cs" /> + <Compile Include="Cfg\MappingSchema\IPropertiesContainerMapping.cs" /> <Compile Include="Cfg\SchemaAutoAction.cs" /> <Compile Include="Cfg\SessionFactoryConfigurationBase.cs" /> <Compile Include="Cfg\ISessionFactoryConfiguration.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-29 13:10:56
|
Revision: 4872 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4872&view=rev Author: fabiomaulo Date: 2009-11-29 13:10:49 +0000 (Sun, 29 Nov 2009) Log Message: ----------- Binders refactoring (removed unused methods) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-29 12:56:53 UTC (rev 4871) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-29 13:10:49 UTC (rev 4872) @@ -1,5 +1,4 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; @@ -187,7 +186,7 @@ model.BatchSize = classMapping.BatchSize.Value; // SELECT BEFORE UPDATE - model.SelectBeforeUpdate = classMapping.SelectBeforeUpdate;; + model.SelectBeforeUpdate = classMapping.SelectBeforeUpdate; // META ATTRIBUTES model.MetaAttributes = GetMetas(classMapping, inheritedMetas); @@ -255,17 +254,6 @@ } } - private XmlNode LocateTuplizerDefinition(XmlNode container, EntityMode mode) - { - string modeToFind = EntityModeHelper.ToString(mode); - foreach (XmlNode node in container.SelectNodes(HbmConstants.nsTuplizer, namespaceManager)) - { - if (modeToFind.Equals(node.Attributes["entity-mode"].Value)) - return node; - } - return null; - } - private void BindJoin(XmlNode node, Join join, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass persistentClass = join.PersistentClass; @@ -421,25 +409,6 @@ } } - private static Versioning.OptimisticLock GetOptimisticLockMode(XmlAttribute olAtt) - { - if (olAtt == null) - return Versioning.OptimisticLock.Version; - - string olMode = olAtt.Value; - - if (olMode == null || "version".Equals(olMode)) - return Versioning.OptimisticLock.Version; - else if ("dirty".Equals(olMode)) - return Versioning.OptimisticLock.Dirty; - else if ("all".Equals(olMode)) - return Versioning.OptimisticLock.All; - else if ("none".Equals(olMode)) - return Versioning.OptimisticLock.None; - else - throw new MappingException("Unsupported optimistic-lock style: " + olMode); - } - protected PersistentClass GetSuperclass(XmlNode subnode) { XmlAttribute extendsAttr = subnode.Attributes["extends"]; @@ -983,7 +952,6 @@ { case HbmCustomSQLCheck.None: return ExecuteUpdateResultCheckStyle.None; - break; case HbmCustomSQLCheck.Rowcount: return ExecuteUpdateResultCheckStyle.Count; case HbmCustomSQLCheck.Param: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-29 12:57:02
|
Revision: 4871 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4871&view=rev Author: fabiomaulo Date: 2009-11-29 12:56:53 +0000 (Sun, 29 Nov 2009) Log Message: ----------- Binders refactoring (removed method used only in one test and removed the test itself) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Removed Paths: ------------- trunk/nhibernate/src/NHibernate.Test/CfgTest/HbmBinderFixture.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 12:48:34 UTC (rev 4870) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 12:56:53 UTC (rev 4871) @@ -300,17 +300,6 @@ LogMappedProperty(property); } - public static void MakeVersion(XmlNode node, SimpleValue model) - { - if (node != null && node.Attributes != null) - { - XmlAttribute attribute = node.Attributes["unsaved-value"]; - model.NullValue = attribute == null ? null : attribute.Value; - } - else - model.NullValue = null; - } - private static void BindCache(HbmCache cacheSchema, RootClass rootClass) { if (cacheSchema != null) Deleted: trunk/nhibernate/src/NHibernate.Test/CfgTest/HbmBinderFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/CfgTest/HbmBinderFixture.cs 2009-11-29 12:48:34 UTC (rev 4870) +++ trunk/nhibernate/src/NHibernate.Test/CfgTest/HbmBinderFixture.cs 2009-11-29 12:56:53 UTC (rev 4871) @@ -1,59 +0,0 @@ -using System; -using System.IO; -using System.Xml; -using NHibernate.Cfg; -using NHibernate.Cfg.XmlHbmBinding; -using NHibernate.Mapping; -using NUnit.Framework; - -namespace NHibernate.Test.CfgTest -{ - [TestFixture] - public class HbmBinderFixture - { - private XmlDocument LoadAndValidate(string xml, string name) - { - using (StringReader stringReader = new StringReader(xml)) - { - XmlTextReader xmlReader = new XmlTextReader(stringReader); - Configuration cfg = new Configuration(); - return cfg.LoadMappingDocument(xmlReader, name).Document; - } - } - - private string GetXmlForTesting(string versionTag) - { - string XML_TEMPLATE = - @"<?xml version='1.0' ?> -<hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'> - <class name='class'> - <id column='id'> - <generator class='generator' /> - </id> - <{0} name='{0}' /> - </class> -</hibernate-mapping>"; - - return String.Format(XML_TEMPLATE, versionTag); - } - - private void CheckDefaultUnsavedValue(string versionTag) - { - string XML = GetXmlForTesting(versionTag); - XmlDocument document = LoadAndValidate(XML, versionTag); - XmlNode node = document.GetElementsByTagName(versionTag)[0]; - SimpleValue model = new SimpleValue(); - RootClassBinder.MakeVersion(node, model); - Assert.IsNull(model.NullValue, - "default unsaved-value for tag {0} should be null, but is '{1}'", - versionTag, model.NullValue); - } - - [Test] - public void DefaultUnsavedValueIsUndefined() - { - CheckDefaultUnsavedValue("version"); - CheckDefaultUnsavedValue("timestamp"); - } - } -} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-11-29 12:48:34 UTC (rev 4870) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-11-29 12:56:53 UTC (rev 4871) @@ -113,7 +113,6 @@ <Compile Include="CfgTest\ConfigurationSerializationTests.cs" /> <Compile Include="CfgTest\DefaultNsAssmFixture.cs" /> <Compile Include="CfgTest\EntityCacheUsageParserFixture.cs" /> - <Compile Include="CfgTest\HbmBinderFixture.cs" /> <Compile Include="CfgTest\HbmOrderingFixture.cs" /> <Compile Include="CfgTest\LocatedInTestAssembly.cs" /> <Compile Include="CfgTest\Loquacious\ConfigurationFixture.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-29 12:48:44
|
Revision: 4870 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4870&view=rev Author: fabiomaulo Date: 2009-11-29 12:48:34 +0000 (Sun, 29 Nov 2009) Log Message: ----------- Binders refactoring (removed "hack") Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-29 12:48:34 UTC (rev 4870) @@ -189,13 +189,6 @@ // SELECT BEFORE UPDATE model.SelectBeforeUpdate = classMapping.SelectBeforeUpdate;; - // OPTIMISTIC LOCK MODE (hack) - var hbmClass = classMapping as HbmClass; - if(hbmClass != null) - { - model.OptimisticLockMode = hbmClass.optimisticlock.ToOptimisticLock(); - } - // META ATTRIBUTES model.MetaAttributes = GetMetas(classMapping, inheritedMetas); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 12:48:34 UTC (rev 4870) @@ -17,6 +17,9 @@ { RootClass rootClass = new RootClass(); BindClass(classSchema, rootClass, inheritedMetas); + // OPTIMISTIC LOCK MODE + rootClass.OptimisticLockMode = classSchema.optimisticlock.ToOptimisticLock(); + inheritedMetas = GetMetas(classSchema, inheritedMetas, true); // get meta's from <class> //TABLENAME This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-29 00:01:11
|
Revision: 4869 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4869&view=rev Author: fabiomaulo Date: 2009-11-29 00:00:57 +0000 (Sun, 29 Nov 2009) Log Message: ----------- Binders refactoring Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs trunk/nhibernate/src/NHibernate/Mapping/Table.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate/Util/StringHelper.cs Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityDiscriminableMapping.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntitySqlsMapping.cs Removed Paths: ------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -1,8 +1,6 @@ -using System; - namespace NHibernate.Cfg.MappingSchema { - partial class HbmClass: AbstractDecoratable + partial class HbmClass : AbstractDecoratable, IEntityMapping, IEntityDiscriminableMapping { public HbmId Id { @@ -24,9 +22,111 @@ get { return Item1 as HbmTimestamp; } } + #region Implementation of IEntityMapping + protected override HbmMeta[] Metadatas { get { return meta ?? new HbmMeta[0]; } } + + public string EntityName + { + get { return entityname; } + } + + public string Name + { + get { return name; } + } + + public string Node + { + get { return node; } + } + + public string Proxy + { + get { return proxy; } + } + + public bool? UseLazy + { + get { return lazySpecified ? lazy : (bool?)null; } + } + + public HbmTuplizer[] Tuplizers + { + get { return tuplizer ?? new HbmTuplizer[0]; } + } + + public bool DynamicUpdate + { + get { return dynamicupdate; } + } + + public bool DynamicInsert + { + get { return dynamicinsert; } + } + + public int? BatchSize + { + get { return batchsizeSpecified ? batchsize : (int?) null; } + } + + public bool SelectBeforeUpdate + { + get { return selectbeforeupdate; } + } + + public string Persister + { + get { return persister; } + } + + public bool? IsAbstract + { + get { return abstractSpecified ? @abstract : (bool?) null; } + } + + public HbmSynchronize[] Synchronize + { + get { return synchronize ?? new HbmSynchronize[0]; } + } + + #endregion + + #region Implementation of IEntityDiscriminableMapping + + public string DiscriminatorValue + { + get { return discriminatorvalue; } + } + + #endregion + + #region Implementation of IEntitySqlsMapping + + public HbmLoader SqlLoader + { + get { return loader; } + } + + public HbmCustomSQL SqlInsert + { + get { return sqlinsert; } + } + + public HbmCustomSQL SqlUpdate + { + get { return sqlupdate; } + } + + public HbmCustomSQL SqlDelete + { + get { return sqldelete; } + } + + #endregion } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -0,0 +1,25 @@ +using System; +using NHibernate.Engine; + +namespace NHibernate.Cfg.MappingSchema +{ + public static class HbmExtensions + { + public static Versioning.OptimisticLock ToOptimisticLock(this HbmOptimisticLockMode hbmOptimisticLockMode) + { + switch (hbmOptimisticLockMode) + { + case HbmOptimisticLockMode.None: + return Versioning.OptimisticLock.None; + case HbmOptimisticLockMode.Version: + return Versioning.OptimisticLock.Version; + case HbmOptimisticLockMode.Dirty: + return Versioning.OptimisticLock.Dirty; + case HbmOptimisticLockMode.All: + return Versioning.OptimisticLock.All; + default: + return Versioning.OptimisticLock.Version; + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -0,0 +1,106 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmJoinedSubclass : AbstractDecoratable, IEntityMapping + { + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + + #region Implementation of IEntityMapping + + public string EntityName + { + get { return entityname; } + } + + public string Name + { + get { return name; } + } + + public string Node + { + get { return node; } + } + + public string Proxy + { + get { return proxy; } + } + + public bool? UseLazy + { + get { return lazySpecified ? lazy : (bool?)null; } + } + + public HbmTuplizer[] Tuplizers + { + get { return tuplizer ?? new HbmTuplizer[0]; } + } + public bool DynamicUpdate + { + get { return dynamicupdate; } + } + + public bool DynamicInsert + { + get { return dynamicinsert; } + } + + public int? BatchSize + { + get { return !string.IsNullOrEmpty(batchsize) ? int.Parse(batchsize) : (int?)null; } + } + + public bool SelectBeforeUpdate + { + get { return selectbeforeupdate; } + } + + public string Persister + { + get { return persister; } + } + + public bool? IsAbstract + { + get { return abstractSpecified ? @abstract : (bool?)null; } + } + + public HbmSynchronize[] Synchronize + { + get { return synchronize ?? new HbmSynchronize[0]; } + } + + #endregion + + #region Implementation of IEntitySqlsMapping + + public HbmLoader SqlLoader + { + get { return loader; } + } + + public HbmCustomSQL SqlInsert + { + get { return sqlinsert; } + } + + public HbmCustomSQL SqlUpdate + { + get { return sqlupdate; } + } + + public HbmCustomSQL SqlDelete + { + get { return sqldelete; } + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -0,0 +1,117 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmSubclass : AbstractDecoratable, IEntityMapping, IEntityDiscriminableMapping + { + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + + #region Implementation of IEntityMapping + + public string EntityName + { + get { return entityname; } + } + + public string Name + { + get { return name; } + } + + public string Node + { + get { return node; } + } + + public string Proxy + { + get { return proxy; } + } + + public bool? UseLazy + { + get { return lazySpecified ? lazy : (bool?)null; } + } + + public HbmTuplizer[] Tuplizers + { + get { return tuplizer ?? new HbmTuplizer[0]; } + } + + public bool DynamicUpdate + { + get { return dynamicupdate; } + } + + public bool DynamicInsert + { + get { return dynamicinsert; } + } + + public int? BatchSize + { + get { return !string.IsNullOrEmpty(batchsize) ? int.Parse(batchsize) : (int?)null; } + } + + public bool SelectBeforeUpdate + { + get { return selectbeforeupdate; } + } + + public string Persister + { + get { return persister; } + } + + public bool? IsAbstract + { + get { return abstractSpecified ? @abstract : (bool?)null; } + } + + public HbmSynchronize[] Synchronize + { + get { return synchronize ?? new HbmSynchronize[0]; } + } + + #endregion + + #region Implementation of IEntityDiscriminableMapping + + public string DiscriminatorValue + { + get { return discriminatorvalue; } + } + + #endregion + + #region Implementation of IEntitySqlsMapping + + public HbmLoader SqlLoader + { + get { return loader; } + } + + public HbmCustomSQL SqlInsert + { + get { return sqlinsert; } + } + + public HbmCustomSQL SqlUpdate + { + get { return sqlupdate; } + } + + public HbmCustomSQL SqlDelete + { + get { return sqldelete; } + } + + #endregion + + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -0,0 +1,108 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public partial class HbmUnionSubclass : AbstractDecoratable, IEntityMapping + { + #region Overrides of AbstractDecoratable + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + + #endregion + + #region Implementation of IEntityMapping + + public string EntityName + { + get { return entityname; } + } + + public string Name + { + get { return name; } + } + + public string Node + { + get { return node; } + } + + public string Proxy + { + get { return proxy; } + } + + public bool? UseLazy + { + get { return lazySpecified ? lazy : (bool?)null; } + } + + public HbmTuplizer[] Tuplizers + { + get { return tuplizer ?? new HbmTuplizer[0]; } + } + + public bool DynamicUpdate + { + get { return dynamicupdate; } + } + + public bool DynamicInsert + { + get { return dynamicinsert; } + } + + public int? BatchSize + { + get { return !string.IsNullOrEmpty(batchsize) ? int.Parse(batchsize) : (int?)null; } + } + + public bool SelectBeforeUpdate + { + get { return selectbeforeupdate; } + } + + public string Persister + { + get { return persister; } + } + + public bool? IsAbstract + { + get { return abstractSpecified ? @abstract : (bool?)null; } + } + + public HbmSynchronize[] Synchronize + { + get { return synchronize ?? new HbmSynchronize[0]; } + } + + #endregion + + #region Implementation of IEntitySqlsMapping + + public HbmLoader SqlLoader + { + get { return loader; } + } + + public HbmCustomSQL SqlInsert + { + get { return sqlinsert; } + } + + public HbmCustomSQL SqlUpdate + { + get { return sqlupdate; } + } + + public HbmCustomSQL SqlDelete + { + get { return sqldelete; } + } + + #endregion + + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityDiscriminableMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityDiscriminableMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityDiscriminableMapping.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -0,0 +1,7 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public interface IEntityDiscriminableMapping + { + string DiscriminatorValue { get; } + } +} \ No newline at end of file Copied: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs (from rev 4867, trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs) =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -0,0 +1,19 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public interface IEntityMapping : IDecoratable, IEntitySqlsMapping + { + string EntityName { get; } + string Name { get; } + string Node { get; } + string Proxy { get; } + bool? UseLazy { get; } + HbmTuplizer[] Tuplizers { get; } + bool DynamicUpdate { get; } + bool DynamicInsert { get; } + int? BatchSize { get; } + bool SelectBeforeUpdate { get; } + string Persister { get; } + bool? IsAbstract { get; } + HbmSynchronize[] Synchronize { get; } + } +} \ No newline at end of file Deleted: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -1,7 +0,0 @@ -namespace NHibernate.Cfg.MappingSchema -{ - public interface IEntityMetadata - { - - } -} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntitySqlsMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntitySqlsMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntitySqlsMapping.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -0,0 +1,10 @@ +namespace NHibernate.Cfg.MappingSchema +{ + public interface IEntitySqlsMapping + { + HbmLoader SqlLoader { get; } + HbmCustomSQL SqlInsert { get; } + HbmCustomSQL SqlUpdate { get; } + HbmCustomSQL SqlDelete { get; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Linq; using System.Text; using System.Xml; using NHibernate.Cfg.MappingSchema; @@ -96,13 +97,13 @@ model.AddJoin(join); } else if ("subclass".Equals(name)) - new SubclassBinder(this).HandleSubclass(model, subnode, inheritedMetas); + new SubclassBinder(this).HandleSubclass(model, subnode, Deserialize<HbmSubclass>(subnode) , inheritedMetas); else if ("joined-subclass".Equals(name)) - new JoinedSubclassBinder(this).HandleJoinedSubclass(model, subnode, inheritedMetas); + new JoinedSubclassBinder(this).HandleJoinedSubclass(model, subnode, Deserialize<HbmJoinedSubclass>(subnode), inheritedMetas); else if ("union-subclass".Equals(name)) - new UnionSubclassBinder(this).HandleUnionSubclass(model, subnode, inheritedMetas); + new UnionSubclassBinder(this).HandleUnionSubclass(model, subnode, Deserialize<HbmUnionSubclass>(subnode), inheritedMetas); else if ("filter".Equals(name)) ParseFilter(subnode, model); @@ -137,18 +138,15 @@ } } - protected void BindClass(XmlNode node, IDecoratable classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) + protected void BindClass(IEntityMapping classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) { - // transfer an explicitly defined entity name // handle the lazy attribute - XmlAttribute lazyNode = node.Attributes["lazy"]; - bool lazy = lazyNode == null ? mappings.DefaultLazy : "true".Equals(lazyNode.Value); // go ahead and set the lazy here, since pojo.proxy can override it. - model.IsLazy = lazy; + model.IsLazy = classMapping.UseLazy.HasValue ? classMapping.UseLazy.Value : mappings.DefaultLazy; - string entityName = (node.Attributes["entity-name"] != null ? node.Attributes["entity-name"].Value : null) - ?? - ClassForNameChecked(node.Attributes["name"].Value, mappings, "persistent class {0} not found"). + // transfer an explicitly defined entity name + string entityName = classMapping.EntityName ?? + ClassForNameChecked(classMapping.Name, mappings, "persistent class {0} not found"). FullName; if (entityName == null) { @@ -156,26 +154,24 @@ } model.EntityName = entityName; - BindPocoRepresentation(node, model); - BindXmlRepresentation(node, model); - BindMapRepresentation(node, model); + BindPocoRepresentation(classMapping, model); + BindXmlRepresentation(classMapping, model); + BindMapRepresentation(classMapping, model); - BindPersistentClassCommonValues(node, classMapping, model, inheritedMetas); + BindPersistentClassCommonValues(classMapping, model, inheritedMetas); } - private void BindPersistentClassCommonValues(XmlNode node, IDecoratable classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) + private void BindPersistentClassCommonValues(IEntityMapping classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) { // DISCRIMINATOR - XmlAttribute discriminatorNode = node.Attributes["discriminator-value"]; - model.DiscriminatorValue = (discriminatorNode == null) ? model.EntityName : discriminatorNode.Value; + var discriminable = classMapping as IEntityDiscriminableMapping; + model.DiscriminatorValue = (discriminable == null || string.IsNullOrEmpty(discriminable.DiscriminatorValue)) ? model.EntityName : discriminable.DiscriminatorValue; // DYNAMIC UPDATE - XmlAttribute dynamicNode = node.Attributes["dynamic-update"]; - model.DynamicUpdate = (dynamicNode == null) ? false : "true".Equals(dynamicNode.Value); + model.DynamicUpdate = classMapping.DynamicUpdate; // DYNAMIC INSERT - XmlAttribute insertNode = node.Attributes["dynamic-insert"]; - model.DynamicInsert = (insertNode == null) ? false : "true".Equals(insertNode.Value); + model.DynamicInsert = classMapping.DynamicInsert; // IMPORT // For entities, the EntityName is the key to find a persister @@ -187,102 +183,81 @@ mappings.AddImport(qualifiedName, StringHelper.Unqualify(model.EntityName)); // BATCH SIZE - XmlAttribute batchNode = node.Attributes["batch-size"]; - if (batchNode != null) - model.BatchSize = int.Parse(batchNode.Value); + if (classMapping.BatchSize.HasValue) + model.BatchSize = classMapping.BatchSize.Value; // SELECT BEFORE UPDATE - XmlAttribute sbuNode = node.Attributes["select-before-update"]; - if (sbuNode != null) - model.SelectBeforeUpdate = "true".Equals(sbuNode.Value); + model.SelectBeforeUpdate = classMapping.SelectBeforeUpdate;; - // OPTIMISTIC LOCK MODE - XmlAttribute olNode = node.Attributes["optimistic-lock"]; - model.OptimisticLockMode = GetOptimisticLockMode(olNode); + // OPTIMISTIC LOCK MODE (hack) + var hbmClass = classMapping as HbmClass; + if(hbmClass != null) + { + model.OptimisticLockMode = hbmClass.optimisticlock.ToOptimisticLock(); + } // META ATTRIBUTES - model.MetaAttributes = classMapping != null - ? GetMetas(classMapping, inheritedMetas) - : GetMetas(node.SelectNodes(HbmConstants.nsMeta, namespaceManager), inheritedMetas); + model.MetaAttributes = GetMetas(classMapping, inheritedMetas); // PERSISTER - XmlAttribute persisterNode = node.Attributes["persister"]; - if (persisterNode == null) - { - //persister = typeof( EntityPersister ); - } - else - model.EntityPersisterClass = ClassForNameChecked(persisterNode.Value, mappings, + if(!string.IsNullOrEmpty(classMapping.Persister)) + model.EntityPersisterClass = ClassForNameChecked(classMapping.Persister, mappings, "could not instantiate persister class: {0}"); // CUSTOM SQL - HandleCustomSQL(node, model); + HandleCustomSQL(classMapping, model); - foreach (XmlNode syncNode in node.SelectNodes(HbmConstants.nsSynchronize, namespaceManager)) - model.AddSynchronizedTable(XmlHelper.GetAttributeValue(syncNode, "table")); - - bool? isAbstract = null; - XmlAttribute abstractNode = node.Attributes["abstract"]; - if (abstractNode != null) + foreach (var synchronize in classMapping.Synchronize) { - if ("true".Equals(abstractNode.Value) || "1".Equals(abstractNode.Value)) - isAbstract = true; - else if ("false".Equals(abstractNode.Value) || "0".Equals(abstractNode.Value)) - isAbstract = false; + model.AddSynchronizedTable(synchronize.table); } - model.IsAbstract = isAbstract; + + model.IsAbstract = classMapping.IsAbstract; } - private void BindMapRepresentation(XmlNode node, PersistentClass entity) + private void BindMapRepresentation(IEntityMapping classMapping, PersistentClass entity) { - XmlNode tuplizer = LocateTuplizerDefinition(node, EntityMode.Map); + HbmTuplizer tuplizer = classMapping.Tuplizers.FirstOrDefault(tp => tp.entitymode == HbmTuplizerEntitymode.DynamicMap); if (tuplizer != null) { - string tupClassName = FullQualifiedClassName(tuplizer.Attributes["class"].Value, mappings); + string tupClassName = FullQualifiedClassName(tuplizer.@class, mappings); entity.AddTuplizer(EntityMode.Map, tupClassName); } } - private void BindXmlRepresentation(XmlNode node, PersistentClass entity) + private void BindXmlRepresentation(IEntityMapping classMapping, PersistentClass entity) { - string nodeName = null; - XmlAttribute nodeAtt = node.Attributes["node"]; - if(nodeAtt != null) - nodeName = nodeAtt.Value; - if (nodeName == null) - nodeName = StringHelper.Unqualify(entity.EntityName); - entity.NodeName = nodeName; + entity.NodeName = string.IsNullOrEmpty(classMapping.Node) ? StringHelper.Unqualify(entity.EntityName): classMapping.Node; - XmlNode tuplizer = LocateTuplizerDefinition(node, EntityMode.Xml); + HbmTuplizer tuplizer = classMapping.Tuplizers.FirstOrDefault(tp => tp.entitymode == HbmTuplizerEntitymode.Xml); if (tuplizer != null) { - string tupClassName = FullQualifiedClassName(tuplizer.Attributes["class"].Value, mappings); + string tupClassName = FullQualifiedClassName(tuplizer.@class, mappings); entity.AddTuplizer(EntityMode.Xml, tupClassName); } } - private void BindPocoRepresentation(XmlNode node, PersistentClass entity) + private void BindPocoRepresentation(IEntityMapping classMapping, PersistentClass entity) { - string className = node.Attributes["name"] == null + string className = classMapping.Name == null ? null - : ClassForNameChecked(node.Attributes["name"].Value, mappings, "persistent class {0} not found"). + : ClassForNameChecked(classMapping.Name, mappings, "persistent class {0} not found"). AssemblyQualifiedName; entity.ClassName = className; - XmlAttribute proxyNode = node.Attributes["proxy"]; - if (proxyNode != null) + if (!string.IsNullOrEmpty(classMapping.Proxy)) { - entity.ProxyInterfaceName = ClassForNameChecked(proxyNode.Value, mappings, "proxy class not found: {0}").AssemblyQualifiedName; + entity.ProxyInterfaceName = ClassForNameChecked(classMapping.Proxy, mappings, "proxy class not found: {0}").AssemblyQualifiedName; entity.IsLazy = true; } else if (entity.IsLazy) entity.ProxyInterfaceName = className; - XmlNode tuplizer = LocateTuplizerDefinition(node, EntityMode.Poco); + HbmTuplizer tuplizer = classMapping.Tuplizers.FirstOrDefault(tp=> tp.entitymode == HbmTuplizerEntitymode.Poco); if (tuplizer != null) { - string tupClassName = FullQualifiedClassName(tuplizer.Attributes["class"].Value, mappings); + string tupClassName = FullQualifiedClassName(tuplizer.@class, mappings); entity.AddTuplizer(EntityMode.Poco, tupClassName); } } @@ -313,7 +288,8 @@ XmlAttribute actionNode = node.Attributes["schema-action"]; string action = actionNode == null ? "all" : actionNode.Value; - Table table = mappings.AddTable(schema, catalog, GetClassTableName(persistentClass, node), null, false, action); + string tableName = node.Attributes["table"] != null ? node.Attributes["table"].Value : null; + Table table = mappings.AddTable(schema, catalog, GetClassTableName(persistentClass, tableName), null, false, action); join.Table = table; XmlAttribute fetchNode = node.Attributes["fetch"]; @@ -401,33 +377,31 @@ HandleCustomSQL(node, join); } - private void HandleCustomSQL(XmlNode node, PersistentClass model) + private void HandleCustomSQL(IEntitySqlsMapping sqlsMapping, PersistentClass model) { - XmlNode element = node.SelectSingleNode(HbmConstants.nsSqlInsert, namespaceManager); - - if (element != null) + var sqlInsert = sqlsMapping.SqlInsert; + if (sqlInsert != null) { - bool callable = IsCallable(element); - model.SetCustomSQLInsert(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable)); + bool callable = sqlInsert.callableSpecified && sqlInsert.callable; + model.SetCustomSQLInsert(sqlInsert.Text.LinesToString(), callable, GetResultCheckStyle(sqlInsert)); } - element = node.SelectSingleNode(HbmConstants.nsSqlDelete, namespaceManager); - if (element != null) + var sqlDelete = sqlsMapping.SqlDelete; + if (sqlDelete != null) { - bool callable = IsCallable(element); - model.SetCustomSQLDelete(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable)); + bool callable = sqlDelete.callableSpecified && sqlDelete.callable; + model.SetCustomSQLDelete(sqlDelete.Text.LinesToString(), callable, GetResultCheckStyle(sqlDelete)); } - element = node.SelectSingleNode(HbmConstants.nsSqlUpdate, namespaceManager); - if (element != null) + var sqlUpdate = sqlsMapping.SqlUpdate; + if (sqlUpdate != null) { - bool callable = IsCallable(element); - model.SetCustomSQLUpdate(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable)); + bool callable = sqlUpdate.callableSpecified && sqlUpdate.callable; + model.SetCustomSQLUpdate(sqlUpdate.Text.LinesToString(), callable, GetResultCheckStyle(sqlUpdate)); } - element = node.SelectSingleNode(HbmConstants.nsLoader, namespaceManager); - if (element != null) - model.LoaderName = XmlHelper.GetAttributeValue(element, "query-ref"); + if (sqlsMapping.SqlLoader != null) + model.LoaderName = sqlsMapping.SqlLoader.queryref; } private void HandleCustomSQL(XmlNode node, Join model) @@ -494,13 +468,11 @@ return superModel; } - protected string GetClassTableName(PersistentClass model, XmlNode node) + protected string GetClassTableName(PersistentClass model, string mappedTableName) { - XmlAttribute tableNameNode = node.Attributes["table"]; - if (tableNameNode == null) - return mappings.NamingStrategy.ClassToTableName(model.EntityName); - else - return mappings.NamingStrategy.TableName(tableNameNode.Value); + return string.IsNullOrEmpty(mappedTableName) + ? mappings.NamingStrategy.ClassToTableName(model.EntityName) + : mappings.NamingStrategy.TableName(mappedTableName); } protected void MakeIdentifier(XmlNode node, SimpleValue model) @@ -1004,6 +976,31 @@ return ExecuteUpdateResultCheckStyle.Parse(attr.Value); } + protected static ExecuteUpdateResultCheckStyle GetResultCheckStyle(HbmCustomSQL customSQL) + { + if (customSQL != null) + { + if (!customSQL.checkSpecified) + { + return ExecuteUpdateResultCheckStyle.Count; + } + else + { + switch (customSQL.check) + { + case HbmCustomSQLCheck.None: + return ExecuteUpdateResultCheckStyle.None; + break; + case HbmCustomSQLCheck.Rowcount: + return ExecuteUpdateResultCheckStyle.Count; + case HbmCustomSQLCheck.Param: + return null; // not supported + } + } + } + return null; + } + protected void ParseFilter(XmlNode filterElement, IFilterable filterable) { string name = GetPropertyName(filterElement); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -1,5 +1,5 @@ using System.Xml; - +using NHibernate.Cfg.MappingSchema; using NHibernate.Mapping; using NHibernate.Persister.Entity; using System.Collections.Generic; @@ -18,32 +18,32 @@ { } - public void Bind(XmlNode node, IDictionary<string, MetaAttribute> inheritedMetas) + public void Bind(XmlNode node, HbmJoinedSubclass joinedSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass superModel = GetSuperclass(node); - HandleJoinedSubclass(superModel, node, inheritedMetas); + HandleJoinedSubclass(superModel, node, joinedSubclassMapping, inheritedMetas); } - public void HandleJoinedSubclass(PersistentClass model, XmlNode subnode, IDictionary<string, MetaAttribute> inheritedMetas) + public void HandleJoinedSubclass(PersistentClass model, XmlNode subnode, HbmJoinedSubclass joinedSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { JoinedSubclass subclass = new JoinedSubclass(model); - BindClass(subnode, null, subclass, inheritedMetas); - inheritedMetas = GetMetas(subnode.SelectNodes(HbmConstants.nsMeta, namespaceManager), inheritedMetas, true); // get meta's from <joined-subclass> + BindClass(joinedSubclassMapping, subclass, inheritedMetas); + inheritedMetas = GetMetas(joinedSubclassMapping, inheritedMetas, true); // get meta's from <joined-subclass> + // joined subclass if (subclass.EntityPersisterClass == null) subclass.RootClazz.EntityPersisterClass = typeof(JoinedSubclassEntityPersister); //table + schema names - XmlAttribute schemaNode = subnode.Attributes["schema"]; - string schema = schemaNode == null ? mappings.SchemaName : schemaNode.Value; - XmlAttribute catalogNode = subnode.Attributes["catalog"]; - string catalog = catalogNode == null ? mappings.CatalogName : catalogNode.Value; + string schema = joinedSubclassMapping.schema ?? mappings.SchemaName; + string catalog = joinedSubclassMapping.catalog ?? mappings.CatalogName; + // TODO: very strange, the schema does not support it XmlAttribute actionNode = subnode.Attributes["schema-action"]; string action = actionNode == null ? "all" : actionNode.Value; - - Table mytable = mappings.AddTable(schema, catalog, GetClassTableName(subclass, subnode), null, false, action); + + Table mytable = mappings.AddTable(schema, catalog, GetClassTableName(subclass, joinedSubclassMapping.table), null, false, action); ((ITableOwner)subclass).Table = mytable; log.InfoFormat("Mapping joined-subclass: {0} -> {1}", subclass.EntityName, subclass.Table.Name); @@ -64,11 +64,8 @@ subclass.Table.Name + ", the same table as its base class."); subclass.CreateForeignKey(); - // CHECK - XmlAttribute chNode = subnode.Attributes["check"]; - if (chNode != null) - mytable.AddCheckConstraint(chNode.Value); + mytable.AddCheckConstraint(joinedSubclassMapping.check); // properties PropertiesFromXML(subnode, subclass, inheritedMetas); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -100,7 +100,7 @@ { var binder = new UnionSubclassBinder(this, GetNamespaceManager(parentNode), dialect); - binder.Bind(parentNode, inheritedMetas); + binder.Bind(parentNode, unionSubclass, inheritedMetas); } private void AddJoinedSubclasses(XmlNode parentNode, HbmJoinedSubclass joinedSubclass, @@ -108,14 +108,14 @@ { var binder = new JoinedSubclassBinder(this, GetNamespaceManager(parentNode), dialect); - binder.Bind(parentNode, inheritedMetas); + binder.Bind(parentNode, joinedSubclass, inheritedMetas); } private void AddSubclasses(XmlNode parentNode, HbmSubclass subClass, IDictionary<string, MetaAttribute> inheritedMetas) { var binder = new SubclassBinder(this, GetNamespaceManager(parentNode), dialect); - binder.Bind(parentNode, inheritedMetas); + binder.Bind(parentNode, subClass, inheritedMetas); } private void AddQueries(HbmMapping mappingSchema) Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -16,7 +16,7 @@ public void Bind(XmlNode node, HbmClass classSchema, IDictionary<string, MetaAttribute> inheritedMetas) { RootClass rootClass = new RootClass(); - BindClass(node, classSchema, rootClass, inheritedMetas); + BindClass(classSchema, rootClass, inheritedMetas); inheritedMetas = GetMetas(classSchema, inheritedMetas, true); // get meta's from <class> //TABLENAME Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.Xml; - +using NHibernate.Cfg.MappingSchema; using NHibernate.Mapping; using NHibernate.Persister.Entity; @@ -18,20 +18,19 @@ { } - public void Bind(XmlNode node, IDictionary<string, MetaAttribute> inheritedMetas) + public void Bind(XmlNode node, HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass superModel = GetSuperclass(node); - HandleSubclass(superModel, node, inheritedMetas); + HandleSubclass(superModel, node, subClassMapping, inheritedMetas); } - public void HandleSubclass(PersistentClass model, XmlNode subnode, IDictionary<string, MetaAttribute> inheritedMetas) + public void HandleSubclass(PersistentClass model, XmlNode subnode, HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { Subclass subclass = new SingleTableSubclass(model); - BindClass(subnode, null, subclass, inheritedMetas); + BindClass(subClassMapping, subclass, inheritedMetas); + inheritedMetas = GetMetas(subClassMapping, inheritedMetas, true); // get meta's from <subclass> - inheritedMetas = GetMetas(subnode.SelectNodes(HbmConstants.nsMeta, namespaceManager), inheritedMetas, true); // get meta's from <subclass> - if (subclass.EntityPersisterClass == null) subclass.RootClazz.EntityPersisterClass = typeof(SingleTableEntityPersister); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Xml; +using NHibernate.Cfg.MappingSchema; using NHibernate.Mapping; using NHibernate.Persister.Entity; @@ -17,32 +18,30 @@ { } - public void Bind(XmlNode node, IDictionary<string, MetaAttribute> inheritedMetas) + public void Bind(XmlNode node, HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass superModel = GetSuperclass(node); - HandleUnionSubclass(superModel, node, inheritedMetas); + HandleUnionSubclass(superModel, node, unionSubclassMapping, inheritedMetas); } - public void HandleUnionSubclass(PersistentClass model, XmlNode subnode, IDictionary<string, MetaAttribute> inheritedMetas) + public void HandleUnionSubclass(PersistentClass model, XmlNode subnode, HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { var unionSubclass = new UnionSubclass(model); - BindClass(subnode, null, unionSubclass, inheritedMetas); - inheritedMetas = GetMetas(subnode.SelectNodes(HbmConstants.nsMeta, namespaceManager), inheritedMetas, true); // get meta's from <union-subclass> + BindClass(unionSubclassMapping, unionSubclass, inheritedMetas); + inheritedMetas = GetMetas(unionSubclassMapping, inheritedMetas, true); // get meta's from <union-subclass> // union subclass if (unionSubclass.EntityPersisterClass == null) unionSubclass.RootClazz.EntityPersisterClass = typeof(UnionSubclassEntityPersister); //table + schema names - XmlAttribute schemaNode = subnode.Attributes["schema"]; - string schema = schemaNode == null ? mappings.SchemaName : schemaNode.Value; - XmlAttribute catalogNode = subnode.Attributes["catalog"]; - string catalog = catalogNode == null ? mappings.CatalogName : catalogNode.Value; + string schema = unionSubclassMapping.schema ?? mappings.SchemaName; + string catalog = unionSubclassMapping.catalog ?? mappings.CatalogName; Table denormalizedSuperTable = unionSubclass.Superclass.Table; Table mytable = - mappings.AddDenormalizedTable(schema, catalog, GetClassTableName(unionSubclass, subnode), + mappings.AddDenormalizedTable(schema, catalog, GetClassTableName(unionSubclass, unionSubclassMapping.table), unionSubclass.IsAbstract.GetValueOrDefault(), null, denormalizedSuperTable); ((ITableOwner)unionSubclass).Table = mytable; Modified: trunk/nhibernate/src/NHibernate/Mapping/Table.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/Table.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Mapping/Table.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -832,7 +832,10 @@ /// <param name="constraint"></param> public void AddCheckConstraint(string constraint) { - checkConstraints.Add(constraint); + if (!string.IsNullOrEmpty(constraint)) + { + checkConstraints.Add(constraint); + } } internal void SetHasDenormalizedTables() Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-29 00:00:57 UTC (rev 4869) @@ -495,7 +495,13 @@ <Compile Include="Cfg\Loquacious\MappingsConfiguration.cs" /> <Compile Include="Cfg\Loquacious\ProxyConfiguration.cs" /> <Compile Include="Cfg\MappingSchema\HbmDefinition.cs" /> - <Compile Include="Cfg\MappingSchema\IEntityMetadata.cs" /> + <Compile Include="Cfg\MappingSchema\HbmExtensions.cs" /> + <Compile Include="Cfg\MappingSchema\HbmJoinedSubclass.cs" /> + <Compile Include="Cfg\MappingSchema\HbmSubclass.cs" /> + <Compile Include="Cfg\MappingSchema\HbmUnionSubclass.cs" /> + <Compile Include="Cfg\MappingSchema\IEntityDiscriminableMapping.cs" /> + <Compile Include="Cfg\MappingSchema\IEntityMapping.cs" /> + <Compile Include="Cfg\MappingSchema\IEntitySqlsMapping.cs" /> <Compile Include="Cfg\SchemaAutoAction.cs" /> <Compile Include="Cfg\SessionFactoryConfigurationBase.cs" /> <Compile Include="Cfg\ISessionFactoryConfiguration.cs" /> Modified: trunk/nhibernate/src/NHibernate/Util/StringHelper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Util/StringHelper.cs 2009-11-28 21:09:24 UTC (rev 4868) +++ trunk/nhibernate/src/NHibernate/Util/StringHelper.cs 2009-11-29 00:00:57 UTC (rev 4869) @@ -6,13 +6,8 @@ namespace NHibernate.Util { /// <summary></summary> - public sealed class StringHelper + public static class StringHelper { - private StringHelper() - { - // not creatable - } - public const string WhiteSpace = " \n\r\f\t"; /// <summary></summary> @@ -394,6 +389,21 @@ return buf.Append(NullSafeToString(array[len - 1])).ToString(); } + public static string LinesToString(this string[] text) + { + if(text == null) + { + return null; + } + if(text.Length == 1) + { + return text[0]; + } + var sb = new StringBuilder(200); + Array.ForEach(text, t => sb.AppendLine(t)); + return sb.ToString(); + } + /// <summary> /// /// </summary> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2009-11-28 21:09:32
|
Revision: 4868 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4868&view=rev Author: ricbrown Date: 2009-11-28 21:09:24 +0000 (Sat, 28 Nov 2009) Log Message: ----------- Expanded IQueryOver to maintain both the original, and sub-criteria types. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs trunk/nhibernate/src/NHibernate/IQueryOver.cs trunk/nhibernate/src/NHibernate/ISession.cs trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/LambdaFixtureBase.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,29 +9,29 @@ namespace NHibernate.Criterion { - public class QueryOverFetchBuilder<T> : QueryOverFetchBuilderBase<QueryOver<T>, T> + public class QueryOverFetchBuilder<S,T> : QueryOverFetchBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverFetchBuilder(QueryOver<T> root, Expression<Func<T, object>> path) + public QueryOverFetchBuilder(QueryOver<S,T> root, Expression<Func<S, object>> path) : base(root, path) { } } - public class IQueryOverFetchBuilder<T> : QueryOverFetchBuilderBase<IQueryOver<T>, T> + public class IQueryOverFetchBuilder<S,T> : QueryOverFetchBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverFetchBuilder(IQueryOver<T> root, Expression<Func<T, object>> path) + public IQueryOverFetchBuilder(IQueryOver<S,T> root, Expression<Func<S, object>> path) : base(root, path) { } } - public class QueryOverFetchBuilderBase<R, T> where R : IQueryOver<T> + public class QueryOverFetchBuilderBase<R, S, T> where R : IQueryOver<S,T> { protected R root; protected string path; - protected QueryOverFetchBuilderBase(R root, Expression<Func<T, object>> path) + protected QueryOverFetchBuilderBase(R root, Expression<Func<S, object>> path) { this.root = root; this.path = ExpressionProcessor.FindMemberExpression(path.Body); Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -8,100 +8,100 @@ namespace NHibernate.Criterion.Lambda { - - public class QueryOverJoinBuilder<T> : QueryOverJoinBuilderBase<QueryOver<T>, T> + + public class QueryOverJoinBuilder<S,T> : QueryOverJoinBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverJoinBuilder(QueryOver<T> root, JoinType joinType) : base(root, joinType) { } + public QueryOverJoinBuilder(QueryOver<S,T> root, JoinType joinType) : base(root, joinType) { } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } } - public class IQueryOverJoinBuilder<T> : QueryOverJoinBuilderBase<IQueryOver<T>, T> + public class IQueryOverJoinBuilder<S,T> : QueryOverJoinBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverJoinBuilder(IQueryOver<T> root, JoinType joinType) : base(root, joinType) { } + public IQueryOverJoinBuilder(IQueryOver<S,T> root, JoinType joinType) : base(root, joinType) { } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } } - public class QueryOverJoinBuilderBase<R, T> where R : IQueryOver<T> + public class QueryOverJoinBuilderBase<R, S, T> where R : IQueryOver<S,T> { protected R root; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,23 +9,23 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverLockBuilder<T> : QueryOverLockBuilderBase<QueryOver<T>, T> + public class QueryOverLockBuilder<S,T> : QueryOverLockBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverLockBuilder(QueryOver<T> root, Expression<Func<object>> alias) + public QueryOverLockBuilder(QueryOver<S,T> root, Expression<Func<object>> alias) : base(root, alias) { } } - public class IQueryOverLockBuilder<T> : QueryOverLockBuilderBase<IQueryOver<T>, T> + public class IQueryOverLockBuilder<S,T> : QueryOverLockBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverLockBuilder(IQueryOver<T> root, Expression<Func<object>> alias) + public IQueryOverLockBuilder(IQueryOver<S,T> root, Expression<Func<object>> alias) : base(root, alias) { } } - public class QueryOverLockBuilderBase<R, T> where R : IQueryOver<T> + public class QueryOverLockBuilderBase<R, S, T> where R : IQueryOver<S,T> { protected R root; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,29 +9,29 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverOrderBuilder<T> : QueryOverOrderBuilderBase<QueryOver<T>, T> + public class QueryOverOrderBuilder<S,T> : QueryOverOrderBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverOrderBuilder(QueryOver<T> root, Expression<Func<T, object>> path) : base(root, path) + public QueryOverOrderBuilder(QueryOver<S,T> root, Expression<Func<T, object>> path) : base(root, path) {} - public QueryOverOrderBuilder(QueryOver<T> root, Expression<Func<object>> path) : base(root, path) + public QueryOverOrderBuilder(QueryOver<S,T> root, Expression<Func<object>> path) : base(root, path) {} } - public class IQueryOverOrderBuilder<T> : QueryOverOrderBuilderBase<IQueryOver<T>, T> + public class IQueryOverOrderBuilder<S,T> : QueryOverOrderBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverOrderBuilder(IQueryOver<T> root, Expression<Func<T, object>> path) : base(root, path) + public IQueryOverOrderBuilder(IQueryOver<S,T> root, Expression<Func<T, object>> path) : base(root, path) {} - public IQueryOverOrderBuilder(IQueryOver<T> root, Expression<Func<object>> path) : base(root, path) + public IQueryOverOrderBuilder(IQueryOver<S,T> root, Expression<Func<object>> path) : base(root, path) {} } - public class QueryOverOrderBuilderBase<R, T> where R : IQueryOver<T> + public class QueryOverOrderBuilderBase<R, S, T> where R : IQueryOver<S, T> { protected R root; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,15 +9,15 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverProjectionBuilder<R, T> + public class QueryOverProjectionBuilder<R, S, T> { private R fluentReturn; - private IQueryOver<T> criteria; + private IQueryOver<S,T> criteria; private ProjectionList projectionList; private IProjection lastProjection = null; - public QueryOverProjectionBuilder(R fluentReturn, IQueryOver<T> criteria) + public QueryOverProjectionBuilder(R fluentReturn, IQueryOver<S,T> criteria) { this.fluentReturn = fluentReturn; this.criteria = criteria; @@ -52,7 +52,7 @@ /// <summary> /// Create an alias for the previous projection /// </summary> - public QueryOverProjectionBuilder<R, T> WithAlias(Expression<Func<object>> alias) + public QueryOverProjectionBuilder<R, S, T> WithAlias(Expression<Func<object>> alias) { string aliasContainer = ExpressionProcessor.FindMemberExpression(alias.Body); lastProjection = Projections.Alias(lastProjection, aliasContainer); @@ -62,7 +62,7 @@ /// <summary> /// Select an arbitrary projection /// </summary> - public QueryOverProjectionBuilder<R, T> Select(IProjection projection) + public QueryOverProjectionBuilder<R, S, T> Select(IProjection projection) { PushProjection(projection); return this; @@ -71,7 +71,7 @@ /// <summary> /// A property average value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectAvg(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectAvg(Expression<Func<T, object>> expression) { PushProjection(Projections.Avg(expression)); return this; @@ -80,7 +80,7 @@ /// <summary> /// A property average value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectAvg(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectAvg(Expression<Func<object>> expression) { PushProjection(Projections.Avg(expression)); return this; @@ -89,7 +89,7 @@ /// <summary> /// A property value count /// </summary> - public QueryOverProjectionBuilder<R, T> SelectCount(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectCount(Expression<Func<T, object>> expression) { PushProjection(Projections.Count(expression)); return this; @@ -98,7 +98,7 @@ /// <summary> /// A property value count /// </summary> - public QueryOverProjectionBuilder<R, T> SelectCount(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectCount(Expression<Func<object>> expression) { PushProjection(Projections.Count(expression)); return this; @@ -107,7 +107,7 @@ /// <summary> /// A distinct property value count /// </summary> - public QueryOverProjectionBuilder<R, T> SelectCountDistinct(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectCountDistinct(Expression<Func<T, object>> expression) { PushProjection(Projections.CountDistinct(expression)); return this; @@ -116,7 +116,7 @@ /// <summary> /// A distinct property value count /// </summary> - public QueryOverProjectionBuilder<R, T> SelectCountDistinct(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectCountDistinct(Expression<Func<object>> expression) { PushProjection(Projections.CountDistinct(expression)); return this; @@ -125,7 +125,7 @@ /// <summary> /// A grouping property value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectGroup(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectGroup(Expression<Func<T, object>> expression) { PushProjection(Projections.Group(expression)); return this; @@ -134,7 +134,7 @@ /// <summary> /// A grouping property value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectGroup(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectGroup(Expression<Func<object>> expression) { PushProjection(Projections.Group(expression)); return this; @@ -143,7 +143,7 @@ /// <summary> /// A property maximum value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectMax(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectMax(Expression<Func<T, object>> expression) { PushProjection(Projections.Max(expression)); return this; @@ -152,7 +152,7 @@ /// <summary> /// A property maximum value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectMax(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectMax(Expression<Func<object>> expression) { PushProjection(Projections.Max(expression)); return this; @@ -161,7 +161,7 @@ /// <summary> /// A property minimum value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectMin(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectMin(Expression<Func<T, object>> expression) { PushProjection(Projections.Min(expression)); return this; @@ -170,7 +170,7 @@ /// <summary> /// A property minimum value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectMin(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectMin(Expression<Func<object>> expression) { PushProjection(Projections.Min(expression)); return this; @@ -179,7 +179,7 @@ /// <summary> /// A projected property value /// </summary> - public QueryOverProjectionBuilder<R, T> Select(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> Select(Expression<Func<T, object>> expression) { PushProjection(Projections.Property(expression)); return this; @@ -188,13 +188,13 @@ /// <summary> /// A projected property value /// </summary> - public QueryOverProjectionBuilder<R, T> Select(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> Select(Expression<Func<object>> expression) { PushProjection(Projections.Property(expression)); return this; } - public QueryOverProjectionBuilder<R, T> SelectSubQuery<U>(QueryOver<U> detachedQueryOver) + public QueryOverProjectionBuilder<R, S, T> SelectSubQuery<U>(QueryOver<U> detachedQueryOver) { PushProjection(Projections.SubQuery(detachedQueryOver)); return this; @@ -203,7 +203,7 @@ /// <summary> /// A property value sum /// </summary> - public QueryOverProjectionBuilder<R, T> SelectSum(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectSum(Expression<Func<T, object>> expression) { PushProjection(Projections.Sum(expression)); return this; @@ -212,7 +212,7 @@ /// <summary> /// A property value sum /// </summary> - public QueryOverProjectionBuilder<R, T> SelectSum(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectSum(Expression<Func<object>> expression) { PushProjection(Projections.Sum(expression)); return this; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -10,24 +10,24 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverRestrictionBuilder<T> : QueryOverRestrictionBuilderBase<QueryOver<T>, T> + public class QueryOverRestrictionBuilder<S,T> : QueryOverRestrictionBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverRestrictionBuilder(QueryOver<T> root, string propertyName) + public QueryOverRestrictionBuilder(QueryOver<S,T> root, string propertyName) : base(root, propertyName) { } } - public class IQueryOverRestrictionBuilder<T> : QueryOverRestrictionBuilderBase<IQueryOver<T>, T> + public class IQueryOverRestrictionBuilder<S,T> : QueryOverRestrictionBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverRestrictionBuilder(IQueryOver<T> root, string propertyName) + public IQueryOverRestrictionBuilder(IQueryOver<S,T> root, string propertyName) : base(root, propertyName) { } } - public class QueryOverRestrictionBuilderBase<R, T> - where R : IQueryOver<T> + public class QueryOverRestrictionBuilderBase<R,S,T> + where R : IQueryOver<S,T> { public class LambdaBetweenBuilder { Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,25 +9,25 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverSubqueryBuilder<T> : QueryOverSubqueryBuilderBase<QueryOver<T>, T, QueryOverSubqueryPropertyBuilder<T>> + public class QueryOverSubqueryBuilder<S,T> : QueryOverSubqueryBuilderBase<QueryOver<S,T>, S, T, QueryOverSubqueryPropertyBuilder<S,T>> { - public QueryOverSubqueryBuilder(QueryOver<T> root) + public QueryOverSubqueryBuilder(QueryOver<S,T> root) : base(root) { } } - public class IQueryOverSubqueryBuilder<T> : QueryOverSubqueryBuilderBase<IQueryOver<T>, T, IQueryOverSubqueryPropertyBuilder<T>> + public class IQueryOverSubqueryBuilder<S,T> : QueryOverSubqueryBuilderBase<IQueryOver<S,T>, S, T, IQueryOverSubqueryPropertyBuilder<S,T>> { - public IQueryOverSubqueryBuilder(IQueryOver<T> root) + public IQueryOverSubqueryBuilder(IQueryOver<S,T> root) : base(root) { } } - public class QueryOverSubqueryBuilderBase<R, T, S> - where R : IQueryOver<T> - where S : QueryOverSubqueryPropertyBuilderBase, new() + public class QueryOverSubqueryBuilderBase<R, S, T, B> + where R : IQueryOver<S,T> + where B : QueryOverSubqueryPropertyBuilderBase, new() { protected R root; @@ -121,21 +121,21 @@ return root; } - public S WhereProperty(Expression<Func<T, object>> expression) + public B WhereProperty(Expression<Func<T, object>> expression) { string property = ExpressionProcessor.FindMemberExpression(expression.Body); - return (S)new S().Set(root, property, null); + return (B)new B().Set(root, property, null); } - public S WhereProperty(Expression<Func<object>> expression) + public B WhereProperty(Expression<Func<object>> expression) { string property = ExpressionProcessor.FindMemberExpression(expression.Body); - return (S)new S().Set(root, property, null); + return (B)new B().Set(root, property, null); } - public S WhereValue(object value) + public B WhereValue(object value) { - return (S)new S().Set(root, null, value); + return (B)new B().Set(root, null, value); } } Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,7 +9,7 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverSubqueryPropertyBuilder<T> : QueryOverSubqueryPropertyBuilderBase<QueryOver<T>, T> + public class QueryOverSubqueryPropertyBuilder<S,T> : QueryOverSubqueryPropertyBuilderBase<QueryOver<S,T>, S, T> { public QueryOverSubqueryPropertyBuilder() @@ -17,7 +17,7 @@ } - public class IQueryOverSubqueryPropertyBuilder<T> : QueryOverSubqueryPropertyBuilderBase<IQueryOver<T>, T> + public class IQueryOverSubqueryPropertyBuilder<S,T> : QueryOverSubqueryPropertyBuilderBase<IQueryOver<S,T>, S, T> { public IQueryOverSubqueryPropertyBuilder() @@ -32,8 +32,8 @@ internal abstract QueryOverSubqueryPropertyBuilderBase Set(object root, string path, object value); } - public class QueryOverSubqueryPropertyBuilderBase<R, T> : QueryOverSubqueryPropertyBuilderBase - where R : IQueryOver<T> + public class QueryOverSubqueryPropertyBuilderBase<R, S, T> : QueryOverSubqueryPropertyBuilderBase + where R : IQueryOver<S,T> { protected R root; Modified: trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -19,14 +19,14 @@ protected QueryOver() { } - public static QueryOver<T> Of<T>() + public static QueryOver<T,T> Of<T>() { - return new QueryOver<T>(); + return new QueryOver<T,T>(); } - public static QueryOver<T> Of<T>(Expression<Func<T>> alias) + public static QueryOver<T,T> Of<T>(Expression<Func<T>> alias) { - return new QueryOver<T>(alias); + return new QueryOver<T,T>(alias); } public ICriteria UnderlyingCriteria @@ -41,11 +41,105 @@ } + [Serializable] + public class QueryOver<T> : QueryOver, IQueryOver<T> + { + + private IList<T> List() + { + return _criteria.List<T>(); + } + + private IList<U> List<U>() + { + return _criteria.List<U>(); + } + + private T UniqueResult() + { + return _criteria.UniqueResult<T>(); + } + + private U UniqueResult<U>() + { + return _criteria.UniqueResult<U>(); + } + + private IEnumerable<T> Future() + { + return _criteria.Future<T>(); + } + + private IEnumerable<U> Future<U>() + { + return _criteria.Future<U>(); + } + + private IFutureValue<T> FutureValue() + { + return _criteria.FutureValue<T>(); + } + + private IFutureValue<U> FutureValue<U>() + { + return _criteria.FutureValue<U>(); + } + + /// <summary> + /// Get an executable instance of <c>IQueryOver<T></c>, + /// to actually run the query.</summary> + public IQueryOver<T> GetExecutableQueryOver(ISession session) + { + _impl.Session = session.GetSessionImplementation(); + return this; + } + + /// <summary> + /// Method to allow comparison of detached query in Lambda expression + /// e.g., p => p.Name == myQuery.As<string> + /// </summary> + /// <typeparam name="S">type returned by query</typeparam> + /// <returns>throws an exception if evaluated directly at runtime.</returns> + public S As<S>() + { + throw new HibernateException("Incorrect syntax; .As<T> method is for use in Lambda expressions only."); + } + + + ICriteria IQueryOver<T>.UnderlyingCriteria + { get { return UnderlyingCriteria; } } + + IList<T> IQueryOver<T>.List() + { return List(); } + + IList<U> IQueryOver<T>.List<U>() + { return List<U>(); } + + T IQueryOver<T>.UniqueResult() + { return UniqueResult(); } + + U IQueryOver<T>.UniqueResult<U>() + { return UniqueResult<U>(); } + + IEnumerable<T> IQueryOver<T>.Future() + { return Future(); } + + IEnumerable<U> IQueryOver<T>.Future<U>() + { return Future<U>(); } + + IFutureValue<T> IQueryOver<T>.FutureValue() + { return FutureValue(); } + + IFutureValue<U> IQueryOver<T>.FutureValue<U>() + { return FutureValue<U>(); } + + } + /// <summary> /// Implementation of the <see cref="IQueryOver<T>"/> interface /// </summary> [Serializable] - public class QueryOver<T> : QueryOver, IQueryOver<T> + public class QueryOver<R,T> : QueryOver<R>, IQueryOver<R,T> { protected internal QueryOver() @@ -73,88 +167,77 @@ _criteria = criteria; } - /// <summary> - /// Method to allow comparison of detached query in Lambda expression - /// e.g., p => p.Name == myQuery.As<string> - /// </summary> - /// <typeparam name="R">type returned by query</typeparam> - /// <returns>throws an exception if evaluated directly at runtime.</returns> - public R As<R>() + public QueryOver<R,T> And(Expression<Func<T, bool>> expression) { - throw new HibernateException("Incorrect syntax; .As<T> method is for use in Lambda expressions only."); - } - - public QueryOver<T> And(Expression<Func<T, bool>> expression) - { return Add(expression); } - public QueryOver<T> And(Expression<Func<bool>> expression) + public QueryOver<R,T> And(Expression<Func<bool>> expression) { return Add(expression); } - public QueryOver<T> And(ICriterion expression) + public QueryOver<R,T> And(ICriterion expression) { return Add(expression); } - public QueryOver<T> AndNot(Expression<Func<T, bool>> expression) + public QueryOver<R,T> AndNot(Expression<Func<T, bool>> expression) { return AddNot(expression); } - public QueryOver<T> AndNot(Expression<Func<bool>> expression) + public QueryOver<R,T> AndNot(Expression<Func<bool>> expression) { return AddNot(expression); } - public QueryOverRestrictionBuilder<T> AndRestrictionOn(Expression<Func<T, object>> expression) + public QueryOverRestrictionBuilder<R,T> AndRestrictionOn(Expression<Func<T, object>> expression) { - return new QueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOverRestrictionBuilder<T> AndRestrictionOn(Expression<Func<object>> expression) + public QueryOverRestrictionBuilder<R,T> AndRestrictionOn(Expression<Func<object>> expression) { - return new QueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOver<T> Where(Expression<Func<T, bool>> expression) + public QueryOver<R,T> Where(Expression<Func<T, bool>> expression) { return Add(expression); } - public QueryOver<T> Where(Expression<Func<bool>> expression) + public QueryOver<R,T> Where(Expression<Func<bool>> expression) { return Add(expression); } - public QueryOver<T> Where(ICriterion expression) + public QueryOver<R,T> Where(ICriterion expression) { return Add(expression); } - public QueryOver<T> WhereNot(Expression<Func<T, bool>> expression) + public QueryOver<R,T> WhereNot(Expression<Func<T, bool>> expression) { return AddNot(expression); } - public QueryOver<T> WhereNot(Expression<Func<bool>> expression) + public QueryOver<R,T> WhereNot(Expression<Func<bool>> expression) { return AddNot(expression); } - public QueryOverRestrictionBuilder<T> WhereRestrictionOn(Expression<Func<T, object>> expression) + public QueryOverRestrictionBuilder<R,T> WhereRestrictionOn(Expression<Func<T, object>> expression) { - return new QueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOverRestrictionBuilder<T> WhereRestrictionOn(Expression<Func<object>> expression) + public QueryOverRestrictionBuilder<R,T> WhereRestrictionOn(Expression<Func<object>> expression) { - return new QueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOver<T> Select(params Expression<Func<T, object>>[] projections) + public QueryOver<R,T> Select(params Expression<Func<R, object>>[] projections) { List<IProjection> projectionList = new List<IProjection>(); @@ -165,216 +248,216 @@ return this; } - public QueryOver<T> Select(params IProjection[] projections) + public QueryOver<R,T> Select(params IProjection[] projections) { _criteria.SetProjection(projections); return this; } - QueryOverProjectionBuilder<QueryOver<T>, T> SelectList + QueryOverProjectionBuilder<QueryOver<R,T>, R, T> SelectList { - get { return new QueryOverProjectionBuilder<QueryOver<T>, T>(this, this); } + get { return new QueryOverProjectionBuilder<QueryOver<R,T>, R, T>(this, this); } } - public QueryOverOrderBuilder<T> OrderBy(Expression<Func<T, object>> path) + public QueryOverOrderBuilder<R,T> OrderBy(Expression<Func<T, object>> path) { - return new QueryOverOrderBuilder<T>(this, path); + return new QueryOverOrderBuilder<R,T>(this, path); } - public QueryOverOrderBuilder<T> OrderBy(Expression<Func<object>> path) + public QueryOverOrderBuilder<R,T> OrderBy(Expression<Func<object>> path) { - return new QueryOverOrderBuilder<T>(this, path); + return new QueryOverOrderBuilder<R,T>(this, path); } - public QueryOverOrderBuilder<T> ThenBy(Expression<Func<T, object>> path) + public QueryOverOrderBuilder<R,T> ThenBy(Expression<Func<T, object>> path) { - return new QueryOverOrderBuilder<T>(this, path); + return new QueryOverOrderBuilder<R,T>(this, path); } - public QueryOverOrderBuilder<T> ThenBy(Expression<Func<object>> path) + public QueryOverOrderBuilder<R,T> ThenBy(Expression<Func<object>> path) { - return new QueryOverOrderBuilder<T>(this, path); + return new QueryOverOrderBuilder<R,T>(this, path); } - public QueryOver<T> Skip(int firstResult) + public QueryOver<R,T> Skip(int firstResult) { _criteria.SetFirstResult(firstResult); return this; } - public QueryOver<T> Take(int maxResults) + public QueryOver<R,T> Take(int maxResults) { _criteria.SetMaxResults(maxResults); return this; } - public QueryOver<T> Cacheable() + public QueryOver<R,T> Cacheable() { _criteria.SetCacheable(true); return this; } - public QueryOver<T> CacheMode(CacheMode cacheMode) + public QueryOver<R,T> CacheMode(CacheMode cacheMode) { _criteria.SetCacheMode(cacheMode); return this; } - public QueryOver<T> CacheRegion(string cacheRegion) + public QueryOver<R,T> CacheRegion(string cacheRegion) { _criteria.SetCacheRegion(cacheRegion); return this; } - public QueryOverSubqueryBuilder<T> WithSubquery + public QueryOverSubqueryBuilder<R,T> WithSubquery { - get { return new QueryOverSubqueryBuilder<T>(this); } + get { return new QueryOverSubqueryBuilder<R,T>(this); } } - public QueryOverFetchBuilder<T> Fetch(Expression<Func<T, object>> path) + public QueryOverFetchBuilder<R,T> Fetch(Expression<Func<R, object>> path) { - return new QueryOverFetchBuilder<T>(this, path); + return new QueryOverFetchBuilder<R,T>(this, path); } - public QueryOverLockBuilder<T> Lock() + public QueryOverLockBuilder<R,T> Lock() { - return new QueryOverLockBuilder<T>(this, null); + return new QueryOverLockBuilder<R,T>(this, null); } - public QueryOverLockBuilder<T> Lock(Expression<Func<object>> alias) + public QueryOverLockBuilder<R,T> Lock(Expression<Func<object>> alias) { - return new QueryOverLockBuilder<T>(this, alias); + return new QueryOverLockBuilder<R,T>(this, alias); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<T> JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) + public QueryOver<R,T> JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) { return AddAlias( ExpressionProcessor.FindMemberExpression(path.Body), @@ -382,7 +465,7 @@ JoinType.InnerJoin); } - public QueryOver<T> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) + public QueryOver<R,T> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) { return AddAlias( ExpressionProcessor.FindMemberExpression(path.Body), @@ -390,7 +473,7 @@ JoinType.InnerJoin); } - public QueryOver<T> JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType) + public QueryOver<R,T> JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType) { return AddAlias( ExpressionProcessor.FindMemberExpression(path.Body), @@ -398,7 +481,7 @@ joinType); } - public QueryOver<T> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType) + public QueryOver<R,T> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType) { return AddAlias( ExpressionProcessor.FindMemberExpression(path.Body), @@ -406,301 +489,225 @@ joinType); } - public QueryOverJoinBuilder<T> Inner + public QueryOverJoinBuilder<R,T> Inner { - get { return new QueryOverJoinBuilder<T>(this, JoinType.InnerJoin); } + get { return new QueryOverJoinBuilder<R,T>(this, JoinType.InnerJoin); } } - public QueryOverJoinBuilder<T> Left + public QueryOverJoinBuilder<R,T> Left { - get { return new QueryOverJoinBuilder<T>(this, JoinType.LeftOuterJoin); } + get { return new QueryOverJoinBuilder<R,T>(this, JoinType.LeftOuterJoin); } } - public QueryOverJoinBuilder<T> Right + public QueryOverJoinBuilder<R,T> Right { - get { return new QueryOverJoinBuilder<T>(this, JoinType.RightOuterJoin); } + get { return new QueryOverJoinBuilder<R,T>(this, JoinType.RightOuterJoin); } } - public QueryOverJoinBuilder<T> Full + public QueryOverJoinBuilder<R,T> Full { - get { return new QueryOverJoinBuilder<T>(this, JoinType.FullJoin); } + get { return new QueryOverJoinBuilder<R,T>(this, JoinType.FullJoin); } } - public IList<T> List() + private QueryOver<R,T> AddAlias(string path, string alias, JoinType joinType) { - return _criteria.List<T>(); - } - - public IList<U> List<U>() - { - return _criteria.List<U>(); - } - - public T UniqueResult() - { - return _criteria.UniqueResult<T>(); - } - - public U UniqueResult<U>() - { - return _criteria.UniqueResult<U>(); - } - - IEnumerable<T> Future() - { - return _criteria.Future<T>(); - } - - IEnumerable<U> Future<U>() - { - return _criteria.Future<U>(); - } - - IFutureValue<T> FutureValue() - { - return _criteria.FutureValue<T>(); - } - - IFutureValue<U> FutureValue<U>() - { - return _criteria.FutureValue<U>(); - } - - /// <summary> - /// Get an executable instance of <c>IQueryOver<T></c>, - /// to actually run the query.</summary> - public IQueryOver<T> GetExecutableQueryOver(ISession session) - { - _impl.Session = session.GetSessionImplementation(); - return this; - } - - private QueryOver<T> AddAlias(string path, string alias, JoinType joinType) - { _criteria.CreateAlias(path, alias, joinType); return this; } - private QueryOver<T> Add(Expression<Func<T, bool>> expression) + private QueryOver<R,T> Add(Expression<Func<T, bool>> expression) { _criteria.Add(ExpressionProcessor.ProcessExpression<T>(expression)); return this; } - private QueryOver<T> Add(Expression<Func<bool>> expression) + private QueryOver<R,T> Add(Expression<Func<bool>> expression) { _criteria.Add(ExpressionProcessor.ProcessExpression(expression)); return this; } - private QueryOver<T> Add(ICriterion expression) + private QueryOver<R,T> Add(ICriterion expression) { _criteria.Add(expression); return this; } - private QueryOver<T> AddNot(Expression<Func<T, bool>> expression) + private QueryOver<R,T> AddNot(Expression<Func<T, bool>> expression) { _criteria.Add(Restrictions.Not(ExpressionProcessor.ProcessExpression<T>(expression))); return this; } - private QueryOver<T> AddNot(Expression<Func<bool>> expression) + private QueryOver<R,T> AddNot(Expression<Func<bool>> expression) { _criteria.Add(Restrictions.Not(ExpressionProcessor.ProcessExpression(expression))); return this; } - ICriteria IQueryOver<T>.UnderlyingCriteria - { get { return UnderlyingCriteria; } } - - IQueryOver<T> IQueryOver<T>.And(Expression<Func<T, bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.And(Expression<Func<T, bool>> expression) { return And(expression); } - IQueryOver<T> IQueryOver<T>.And(Expression<Func<bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.And(Expression<Func<bool>> expression) { return And(expression); } - IQueryOver<T> IQueryOver<T>.And(ICriterion expression) + IQueryOver<R,T> IQueryOver<R,T>.And(ICriterion expression) { return And(expression); } - IQueryOver<T> IQueryOver<T>.AndNot(Expression<Func<T, bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.AndNot(Expression<Func<T, bool>> expression) { return AndNot(expression); } - IQueryOver<T> IQueryOver<T>.AndNot(Expression<Func<bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.AndNot(Expression<Func<bool>> expression) { return AndNot(expression); } - IQueryOverRestrictionBuilder<T> IQueryOver<T>.AndRestrictionOn(Expression<Func<T, object>> expression) - { return new IQueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } + IQueryOverRestrictionBuilder<R,T> IQueryOver<R,T>.AndRestrictionOn(Expression<Func<T, object>> expression) + { return new IQueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - IQueryOverRestrictionBuilder<T> IQueryOver<T>.AndRestrictionOn(Expression<Func<object>> expression) - { return new IQueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } + IQueryOverRestrictionBuilder<R,T> IQueryOver<R,T>.AndRestrictionOn(Expression<Func<object>> expression) + { return new IQueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - IQueryOver<T> IQueryOver<T>.Where(Expression<Func<T, bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.Where(Expression<Func<T, bool>> expression) { return Where(expression); } - IQueryOver<T> IQueryOver<T>.Where(Expression<Func<bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.Where(Expression<Func<bool>> expression) { return Where(expression); } - IQueryOver<T> IQueryOver<T>.Where(ICriterion expression) + IQueryOver<R,T> IQueryOver<R,T>.Where(ICriterion expression) { return Where(expression); } - IQueryOver<T> IQueryOver<T>.WhereNot(Expression<Func<T, bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.WhereNot(Expression<Func<T, bool>> expression) { return WhereNot(expression); } - IQueryOver<T> IQueryOver<T>.WhereNot(Expression<Func<bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.WhereNot(Expression<Func<bool>> expression) { return WhereNot(expression); } - IQueryOverRestrictionBuilder<T> IQueryOver<T>.WhereRestrictionOn(Expression<Func<T, object>> expression) - { return new IQueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } + IQueryOverRestrictionBuilder<R,T> IQueryOver<R,T>.WhereRestrictionOn(Expression<Func<T, object>> expression) + { return new IQueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - IQueryOverRestrictionBuilder<T> IQueryOver<T>.WhereRestrictionOn(Expression<Func<object>> expression) - { return new IQueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } + IQueryOverRestrictionBuilder<R,T> IQueryOver<R,T>.WhereRestrictionOn(Expression<Func<object>> expression) + { return new IQueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - IQueryOver<T> IQueryOver<T>.Select(params Expression<Func<T, object>>[] projections) + IQueryOver<R,T> IQueryOver<R,T>.Select(params Expression<Func<R, object>>[] projections) { return Select(projections); } - IQueryOver<T> IQueryOver<T>.Select(params IProjection[] projections) + IQueryOver<R,T> IQueryOver<R,T>.Select(params IProjection[] projections) { return Select(projections); } - QueryOverProjectionBuilder<IQueryOver<T>, T> IQueryOver<T>.SelectList - { get { return new QueryOverProjectionBuilder<IQueryOver<T>,T>(this, this); } } + QueryOverProjectionBuilder<IQueryOver<R,T>, R, T> IQueryOver<R,T>.SelectList + { get { return new QueryOverProjectionBuilder<IQueryOver<R,T>,R,T>(this, this); } } - IQueryOverOrderBuilder<T> IQueryOver<T>.OrderBy(Expression<Func<T, object>> path) - { return new IQueryOverOrderBuilder<T>(this, path); } + IQueryOverOrderBuilder<R,T> IQueryOver<R,T>.OrderBy(Expression<Func<T, object>> path) + { return new IQueryOverOrderBuilder<R,T>(this, path); } - IQueryOverOrderBuilder<T> IQueryOver<T>.OrderBy(Expression<Func<object>> path) - { return new IQueryOverOrderBuilder<T>(this, path); } + IQueryOverOrderBuilder<R,T> IQueryOver<R,T>.OrderBy(Expression<Func<object>> path) + { return new IQueryOverOrderBuilder<R,T>(this, path); } - IQueryOverOrderBuilder<T> IQueryOver<T>.ThenBy(Expression<Func<T, object>> path) - { return new IQueryOverOrderBuilder<T>(this, path); } + IQueryOverOrderBuilder<R,T> IQueryOver<R,T>.ThenBy(Expression<Func<T, object>> path) + { return new IQueryOverOrderBuilder<R,T>(this, path); } - IQueryOverOrderBuilder<T> IQueryOver<T>.ThenBy(Expression<Func<object>> path) - { return new IQueryOverOrderBuilder<T>(this, path); } + IQueryOverOrderBuilder<R,T> IQueryOver<R,T>.ThenBy(Expression<Func<object>> path) + { return new IQueryOverOrderBuilder<R,T>(this, path); } - IQueryOver<T> IQueryOver<T>.Skip(int firstResult) + IQueryOver<R,T> IQueryOver<R,T>.Skip(int firstResult) { return Skip(firstResult); } - IQueryOver<T> IQueryOver<T>.Take(int maxResults) + IQueryOver<R,T> IQueryOver<R,T>.Take(int maxResults) { return Take(maxResults); } - IQueryOver<T> IQueryOver<T>.Cacheable() + IQueryOver<R,T> IQueryOver<R,T>.Cacheable() { return Cacheable(); } - IQueryOver<T> IQueryOver<T>.CacheMode(CacheMode cacheMode) + IQueryOver<R,T> IQueryOver<R,T>.CacheMode(CacheMode cacheMode) { return CacheMode(cacheMode); } - IQueryOver<T> IQueryOver<T>.CacheRegion(string cacheRegion) + IQueryOver<R,T> IQueryOver<R,T>.CacheRegion(string cacheRegion) { return CacheRegion(cacheRegion); } - IQueryOverSubqueryBuilder<T> IQueryOver<T>.WithSubquery - { get { return new IQueryOverSubqueryBuilder<T>(this); } } + IQueryOverSubqueryBuilder<R,T> IQueryOver<R,T>.WithSubquery + { get { return new IQueryOverSubqueryBuilder<R,T>(this); } } - IQueryOverFetchBuilder<T> IQueryOver<T>.Fetch(Expression<Func<T, object>> path) - { return new IQueryOverFetchBuilder<T>(this, path); } + IQueryOverFetchBuilder<R,T> IQueryOver<R,T>.Fetch(Expression<Func<R, object>> path) + { return new IQueryOverFetchBuilder<R,T>(this, path); } - IQueryOverLockBuilder<T> IQueryOver<T>.Lock() - { return new IQueryOverLockBuilder<T>(this, null); } + IQueryOverLockBuilder<R,T> IQueryOver<R,T>.Lock() + { return new IQueryOverLockBuilder<R,T>(this, null); } - IQueryOverLockBuilder<T> IQueryOver<T>.Lock(Expression<Func<object>> alias) - { return new IQueryOverLockBuilder<T>(this, alias); } + IQueryOverLockBuilder<R,T> IQueryOver<R,T>.Lock(Expression<Func<object>> alias) + { return new IQueryOverLockBuilder<R,T>(this, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, U>> path) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, U>> path) { return JoinQueryOver(path); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<U>> path) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<U>> path) { return JoinQueryOver(path); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) { return JoinQueryOver(path, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { return JoinQueryOver(path, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) { return JoinQueryOver(path, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<U>> path, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<U>> path, JoinType joinType) { return JoinQueryOver(path, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias, JoinType joinType) { return JoinQueryOver(path, alias, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType) { return JoinQueryOver(path, alias, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) { return JoinQueryOver(path); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { return JoinQueryOver(path); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) { return JoinQueryOver(path, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { return JoinQueryOver(path, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, JoinType joinType) { return JoinQueryOver(path, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, JoinType joinType) { return JoinQueryOver(path, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) { return JoinQueryOver(path, alias, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) { return JoinQueryOver(path, alias, joinType); } - IQueryOver<T> IQueryOver<T>.JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) + IQueryOver<R,T> IQueryOver<R,T>.JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) { return JoinAlias(path, alias); } - IQueryOver<T> IQueryOver<T>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) + IQueryOver<R,T> IQueryOver<R,T>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) { return JoinAlias(path, alias); } - IQueryOver<T> IQueryOver<T>.JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType) + IQueryOver<R,T> IQueryOver<R,T>.JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType) { return JoinAlias(path, alias, joinType); } - IQueryOver<T> IQueryOver<T>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType) + IQueryOver<R,T> IQueryOver<R,T>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType) { return JoinAlias(path, alias, joinType); } - IQueryOverJoinBuilder<T> IQueryOver<T>.Inner - { get { return new IQueryOverJoinBuilder<T>(this, JoinType.InnerJoin); } } + IQueryOverJoinBuilder<R,T> IQueryOver<R,T>.Inner + { get { return new IQueryOverJoinBuilder<R,T>(this, JoinType.InnerJoin); } } - IQueryOverJoinBuilder<T> IQueryOver<T>.Left - { get { return new IQueryOverJoinBuilder<T>(this, JoinType.LeftOuterJoin); } } + IQueryOverJoinBuilder<R,T> IQueryOver<R,T>.Left + { get { return new IQueryOverJoinBuilder<R,T>(this, JoinType.LeftOuterJoin); } } - IQueryOverJoinBuilder<T> IQueryOver<T>.Right - { get { return new IQueryOverJoinBuilder<T>(this, JoinType.RightOuterJoin); } } + IQueryOverJoinBuilder<R,T> IQueryOver<R,T>.Right + { get { return new IQueryOverJoinBuilder<R,T>(this, JoinType.RightOuterJoin); } } - IQueryOverJoinBuilder<T> IQueryOver<T>.Full - { get { return new IQueryOverJoinBuilder<T>(this, JoinType.FullJoin); } } + IQueryOverJoinBuilder<R,T> IQueryOver<R,T>.Full + { get { return new IQueryOverJoinBuilder<R,T>(this, JoinType.FullJoin); } } - IList<T> IQueryOver<T>.List() - { return List(); } - - IList<U> IQueryOver<T>.List<U>() - { return List<U>(); } - - T IQueryOver<T>.UniqueResult() - { return UniqueResult(); } - - U IQueryOver<T>.UniqueResult<U>() - { return UniqueResult<U>(); } - - IEnumerable<T> IQueryOver<T... [truncated message content] |
From: <fab...@us...> - 2009-11-28 14:04:51
|
Revision: 4867 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4867&view=rev Author: fabiomaulo Date: 2009-11-28 14:04:43 +0000 (Sat, 28 Nov 2009) Log Message: ----------- - Binders refactoring - new advanced feature : see Configuration.AddDeserializedMapping Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/ClassExtractor.cs trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/ClassExtractor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/ClassExtractor.cs 2009-11-28 13:15:02 UTC (rev 4866) +++ trunk/nhibernate/src/NHibernate/Cfg/ClassExtractor.cs 2009-11-28 14:04:43 UTC (rev 4867) @@ -1,4 +1,5 @@ using System.Xml; +using NHibernate.Cfg.XmlHbmBinding; using NHibernate.Util; using System.Collections.Generic; using Iesi.Collections.Generic; @@ -92,7 +93,7 @@ // TODO this should be extracted into a utility method since there's similar // code in Configuration XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable); - nsmgr.AddNamespace(HbmConstants.nsPrefix, Configuration.MappingSchemaXMLNS); + nsmgr.AddNamespace(HbmConstants.nsPrefix, Binder.MappingSchemaXMLNS); // Since the document is validated, no error checking is done in this method. HashedSet<ClassEntry> classEntries = new HashedSet<ClassEntry>(); Modified: trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2009-11-28 13:15:02 UTC (rev 4866) +++ trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2009-11-28 14:04:43 UTC (rev 4867) @@ -51,9 +51,6 @@ [Serializable] public class Configuration:ISerializable { - /// <summary>The XML Namespace for the nhibernate-mapping</summary> - public const string MappingSchemaXMLNS = "urn:nhibernate-mapping-2.2"; - /// <summary>Default name for hibernate configuration file.</summary> public const string DefaultHibernateCfgFileName = "hibernate.cfg.xml"; @@ -497,36 +494,52 @@ /// <param name="doc">The NamedXmlDocument that contains the <b>validated</b> mapping XML file.</param> private void AddValidatedDocument(NamedXmlDocument doc) { + HbmMapping mappingMeta = null; try { - // note that the prefix has absolutely nothing to do with what the user - // selects as their prefix in the document. It is the prefix we use to - // build the XPath and the nsmgr takes care of translating our prefix into - // the user defined prefix... - var namespaceManager = new XmlNamespaceManager(doc.Document.NameTable); - namespaceManager.AddNamespace(HbmConstants.nsPrefix, MappingSchemaXMLNS); - - Dialect.Dialect dialect = Dialect.Dialect.GetDialect(properties); - Mappings mappings = CreateMappings(dialect); - // TODO : The mappingMeta should be the property of NamedXmlDocument // A validated document IS a deserialized doc and we don't need to deserialize it more than one time. - HbmMapping mappingMeta; using (var reader = new StringReader(doc.Document.DocumentElement.OuterXml)) { - mappingMeta= (HbmMapping) new XmlSerializer(typeof (HbmMapping)).Deserialize(reader); + mappingMeta = (HbmMapping) new XmlSerializer(typeof (HbmMapping)).Deserialize(reader); } - - new MappingRootBinder(mappings, namespaceManager, dialect).Bind(mappingMeta); } catch (Exception e) { string nameFormatted = doc.Name ?? "(unknown)"; LogAndThrow(new MappingException("Could not compile the mapping document: " + nameFormatted, e)); } + AddDeserializedMapping(mappingMeta, doc.Name); } /// <summary> + /// Add mapping data using deserialized class. + /// </summary> + /// <param name="mappingDocument">Mapping metadata.</param> + /// <param name="documentFileName">XML file's name where available; otherwise null.</param> + public void AddDeserializedMapping(HbmMapping mappingDocument, string documentFileName) + { + if (mappingDocument == null) + { + throw new ArgumentNullException("mappingDocument"); + } + try + { + Dialect.Dialect dialect = Dialect.Dialect.GetDialect(properties); + Mappings mappings = CreateMappings(dialect); + + new MappingRootBinder(mappings, dialect).Bind(mappingDocument); + } + catch (Exception e) + { + var message = documentFileName == null + ? "Could not compile deserialized mapping document." + : "Could not compile the mapping document: " + documentFileName; + LogAndThrow(new MappingException(message, e)); + } + } + + /// <summary> /// Create a new <see cref="Mappings" /> to add classes and collection /// mappings to. /// </summary> Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2009-11-28 13:15:02 UTC (rev 4866) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2009-11-28 14:04:43 UTC (rev 4867) @@ -15,6 +15,9 @@ { public abstract class Binder { + /// <summary>The XML Namespace for the nhibernate-mapping</summary> + public const string MappingSchemaXMLNS = "urn:nhibernate-mapping-2.2"; + protected static readonly ILog log = LogManager.GetLogger(typeof (Binder)); protected static readonly IDictionary<string, MetaAttribute> EmptyMeta = @@ -155,6 +158,13 @@ { var hbmDocument = new XmlDocument(); hbmDocument.Load(reader); + // note that the prefix has absolutely nothing to do with what the user + // selects as their prefix in the document. It is the prefix we use to + // build the XPath and the nsmgr takes care of translating our prefix into + // the user defined prefix... + var namespaceManager = new XmlNamespaceManager(hbmDocument.NameTable); + namespaceManager.AddNamespace(HbmConstants.nsPrefix, MappingSchemaXMLNS); + return hbmDocument.DocumentElement; } } Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-28 13:15:02 UTC (rev 4866) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-28 14:04:43 UTC (rev 4867) @@ -44,7 +44,7 @@ foreach (XmlNode subnode in node.ChildNodes) { //I am only concerned with elements that are from the nhibernate namespace - if (subnode.NamespaceURI != Configuration.MappingSchemaXMLNS) + if (subnode.NamespaceURI != MappingSchemaXMLNS) continue; string name = subnode.LocalName; //.Name; @@ -346,7 +346,7 @@ foreach (XmlNode subnode in node.ChildNodes) { //I am only concerned with elements that are from the nhibernate namespace - if (subnode.NamespaceURI != Configuration.MappingSchemaXMLNS) + if (subnode.NamespaceURI != MappingSchemaXMLNS) continue; string name = subnode.Name; @@ -593,7 +593,7 @@ foreach (XmlNode subnode in node.ChildNodes) { //I am only concerned with elements that are from the nhibernate namespace - if (subnode.NamespaceURI != Configuration.MappingSchemaXMLNS) + if (subnode.NamespaceURI != MappingSchemaXMLNS) continue; string name = subnode.LocalName; //.Name; Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2009-11-28 13:15:02 UTC (rev 4866) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2009-11-28 14:04:43 UTC (rev 4867) @@ -299,7 +299,7 @@ string name = subnode.LocalName; //.Name; //I am only concerned with elements that are from the nhibernate namespace - if (subnode.NamespaceURI != Configuration.MappingSchemaXMLNS) + if (subnode.NamespaceURI != MappingSchemaXMLNS) continue; switch (name) @@ -500,7 +500,7 @@ foreach (XmlNode subnode in node.ChildNodes) { //I am only concerned with elements that are from the nhibernate namespace - if (subnode.NamespaceURI != Configuration.MappingSchemaXMLNS) + if (subnode.NamespaceURI != MappingSchemaXMLNS) continue; string name = subnode.LocalName; //.Name; @@ -563,7 +563,7 @@ foreach (XmlNode subnode in node.ChildNodes) { //I am only concerned with elements that are from the nhibernate namespace - if (subnode.NamespaceURI != Configuration.MappingSchemaXMLNS) + if (subnode.NamespaceURI != MappingSchemaXMLNS) continue; string name = subnode.LocalName; //.Name; Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-28 13:15:02 UTC (rev 4866) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-28 14:04:43 UTC (rev 4867) @@ -10,12 +10,10 @@ public class MappingRootBinder : Binder { private readonly Dialect.Dialect dialect; - private readonly XmlNamespaceManager namespaceManager; - public MappingRootBinder(Mappings mappings, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) + public MappingRootBinder(Mappings mappings, Dialect.Dialect dialect) : base(mappings) { - this.namespaceManager = namespaceManager; this.dialect = dialect; } @@ -81,15 +79,26 @@ private void AddRootClasses(XmlNode parentNode, HbmClass rootClass, IDictionary<string, MetaAttribute> inheritedMetas) { - var binder = new RootClassBinder(this, namespaceManager, dialect); + var binder = new RootClassBinder(this, GetNamespaceManager(parentNode), dialect); binder.Bind(parentNode, rootClass, inheritedMetas); } + private XmlNamespaceManager GetNamespaceManager(XmlNode parentNode) + { + // note that the prefix has absolutely nothing to do with what the user + // selects as their prefix in the document. It is the prefix we use to + // build the XPath and the nsmgr takes care of translating our prefix into + // the user defined prefix... + var namespaceManager = new XmlNamespaceManager(parentNode.OwnerDocument.NameTable); + namespaceManager.AddNamespace(HbmConstants.nsPrefix, MappingSchemaXMLNS); + return namespaceManager; + } + private void AddUnionSubclasses(XmlNode parentNode, HbmUnionSubclass unionSubclass, IDictionary<string, MetaAttribute> inheritedMetas) { - var binder = new UnionSubclassBinder(this, namespaceManager, dialect); + var binder = new UnionSubclassBinder(this, GetNamespaceManager(parentNode), dialect); binder.Bind(parentNode, inheritedMetas); } @@ -97,14 +106,14 @@ private void AddJoinedSubclasses(XmlNode parentNode, HbmJoinedSubclass joinedSubclass, IDictionary<string, MetaAttribute> inheritedMetas) { - var binder = new JoinedSubclassBinder(this, namespaceManager, dialect); + var binder = new JoinedSubclassBinder(this, GetNamespaceManager(parentNode), dialect); binder.Bind(parentNode, inheritedMetas); } private void AddSubclasses(XmlNode parentNode, HbmSubclass subClass, IDictionary<string, MetaAttribute> inheritedMetas) { - var binder = new SubclassBinder(this, namespaceManager, dialect); + var binder = new SubclassBinder(this, GetNamespaceManager(parentNode), dialect); binder.Bind(parentNode, inheritedMetas); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-28 13:15:12
|
Revision: 4866 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4866&view=rev Author: fabiomaulo Date: 2009-11-28 13:15:02 +0000 (Sat, 28 Nov 2009) Log Message: ----------- Binders refactoring (explicit properties in HbmMapping) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/AbstractDecoratable.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmTimestamp.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmVersion.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/AbstractDecoratable.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/AbstractDecoratable.cs 2009-11-28 12:57:59 UTC (rev 4865) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/AbstractDecoratable.cs 2009-11-28 13:15:02 UTC (rev 4866) @@ -26,7 +26,7 @@ { if (mappedMetaData == null) { - CreateMappedMetadata(GetMetadataField()); + CreateMappedMetadata(Metadatas); } return mappedMetaData; } @@ -39,7 +39,7 @@ { if (mappedMetaData == null) { - CreateMappedMetadata(GetMetadataField()); + CreateMappedMetadata(Metadatas); } return inheritableMetaData; } @@ -75,6 +75,6 @@ } } - protected abstract HbmMeta[] GetMetadataField(); + protected abstract HbmMeta[] Metadatas { get; } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-28 12:57:59 UTC (rev 4865) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-28 13:15:02 UTC (rev 4866) @@ -24,9 +24,9 @@ get { return Item1 as HbmTimestamp; } } - protected override HbmMeta[] GetMetadataField() + protected override HbmMeta[] Metadatas { - return meta; + get { return meta ?? new HbmMeta[0]; } } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs 2009-11-28 12:57:59 UTC (rev 4865) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs 2009-11-28 13:15:02 UTC (rev 4866) @@ -4,21 +4,36 @@ { partial class HbmMapping : AbstractDecoratable { - public HbmDatabaseObject[] ListDatabaseObjects() + public HbmDatabaseObject[] DatabaseObjects { - return databaseobject ?? new HbmDatabaseObject[0]; + get { return databaseobject ?? new HbmDatabaseObject[0]; } } - public HbmFilterDef[] ListFilterDefs() + public HbmFilterDef[] FilterDefinitions { - return filterdef ?? new HbmFilterDef[0]; + get { return filterdef ?? new HbmFilterDef[0]; } } - protected override HbmMeta[] GetMetadataField() + public HbmResultSet[] ResultSets { - return meta; + get { return resultset ?? new HbmResultSet[0]; } } + public HbmTypedef[] TypeDefinitions + { + get { return typedef ?? new HbmTypedef[0]; } + } + + public HbmImport[] Imports + { + get { return import ?? new HbmImport[0]; } + } + + protected override HbmMeta[] Metadatas + { + get { return meta ?? new HbmMeta[0]; } + } + public HbmClass[] RootClasses { get { return Items != null ? Items.OfType<HbmClass>().ToArray():new HbmClass[0]; } Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmTimestamp.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmTimestamp.cs 2009-11-28 12:57:59 UTC (rev 4865) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmTimestamp.cs 2009-11-28 13:15:02 UTC (rev 4866) @@ -2,9 +2,9 @@ { partial class HbmTimestamp : AbstractDecoratable { - protected override HbmMeta[] GetMetadataField() + protected override HbmMeta[] Metadatas { - return meta; + get { return meta ?? new HbmMeta[0]; } } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmVersion.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmVersion.cs 2009-11-28 12:57:59 UTC (rev 4865) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmVersion.cs 2009-11-28 13:15:02 UTC (rev 4866) @@ -2,9 +2,9 @@ { partial class HbmVersion : AbstractDecoratable { - protected override HbmMeta[] GetMetadataField() + protected override HbmMeta[] Metadatas { - return meta; + get { return meta ?? new HbmMeta[0]; } } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-28 12:57:59 UTC (rev 4865) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-28 13:15:02 UTC (rev 4866) @@ -72,7 +72,7 @@ private void AddFilterDefinitions(HbmMapping mappingSchema) { - foreach (HbmFilterDef filterDefSchema in mappingSchema.ListFilterDefs()) + foreach (HbmFilterDef filterDefSchema in mappingSchema.FilterDefinitions) { FilterDefinition definition = FilterDefinitionFactory.CreateFilterDefinition(filterDefSchema); mappings.AddFilterDefinition(definition); @@ -123,7 +123,7 @@ public void AddImports(HbmMapping mappingSchema) { - foreach (HbmImport importSchema in mappingSchema.import ?? new HbmImport[0]) + foreach (HbmImport importSchema in mappingSchema.Imports) { string fullClassName = FullQualifiedClassName(importSchema.@class, mappings); string rename = importSchema.rename ?? StringHelper.GetClassname(fullClassName); @@ -135,7 +135,7 @@ public void AddTypeDefs(HbmMapping mappingSchema) { - foreach (HbmTypedef typedef in mappingSchema.typedef ?? new HbmTypedef[0]) + foreach (HbmTypedef typedef in mappingSchema.TypeDefinitions) { string typeClass = FullQualifiedClassName(typedef.@class, mappings); string typeName = typedef.name; @@ -151,7 +151,7 @@ private void AddAuxiliaryDatabaseObjects(HbmMapping mappingSchema) { - foreach (HbmDatabaseObject objectSchema in mappingSchema.ListDatabaseObjects()) + foreach (HbmDatabaseObject objectSchema in mappingSchema.DatabaseObjects) { IAuxiliaryDatabaseObject dbObject = AuxiliaryDatabaseObjectFactory.Create(mappings, objectSchema); mappings.AddAuxiliaryDatabaseObject(dbObject); @@ -162,7 +162,7 @@ { var binder = new ResultSetMappingBinder(this); - foreach (HbmResultSet resultSetSchema in mappingSchema.resultset ?? new HbmResultSet[0]) + foreach (HbmResultSet resultSetSchema in mappingSchema.ResultSets) { // Do not inline this variable or the anonymous method will not work correctly. HbmResultSet tempResultSetSchema = resultSetSchema; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-11-28 12:58:08
|
Revision: 4865 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4865&view=rev Author: fabiomaulo Date: 2009-11-28 12:57:59 +0000 (Sat, 28 Nov 2009) Log Message: ----------- Binders refactoring Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs 2009-11-28 12:32:05 UTC (rev 4864) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs 2009-11-28 12:57:59 UTC (rev 4865) @@ -38,5 +38,15 @@ { get { return Items != null ? Items.OfType<HbmUnionSubclass>().ToArray(): new HbmUnionSubclass[0]; } } + + public HbmQuery[] HqlQueries + { + get { return Items1 != null ? Items1.OfType<HbmQuery>().ToArray() : new HbmQuery[0]; } + } + + public HbmSqlQuery[] SqlQueries + { + get { return Items1 != null ? Items1.OfType<HbmSqlQuery>().ToArray() : new HbmSqlQuery[0]; } + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-28 12:32:05 UTC (rev 4864) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-28 12:57:59 UTC (rev 4865) @@ -112,31 +112,13 @@ private void AddQueries(HbmMapping mappingSchema) { var binder = new NamedQueryBinder(this); - - foreach (object item in mappingSchema.Items1 ?? new object[0]) - { - var querySchema = item as HbmQuery; - - if (querySchema != null) - { - binder.AddQuery(querySchema); - } - } + System.Array.ForEach(mappingSchema.HqlQueries, binder.AddQuery); } private void AddSqlQueries(HbmMapping mappingSchema) { var binder = new NamedSQLQueryBinder(this); - - foreach (object item in mappingSchema.Items1 ?? new object[0]) - { - var sqlQuerySchema = item as HbmSqlQuery; - - if (sqlQuerySchema != null) - { - binder.AddSqlQuery(sqlQuerySchema); - } - } + System.Array.ForEach(mappingSchema.SqlQueries, binder.AddSqlQuery); } public void AddImports(HbmMapping mappingSchema) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |