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...> - 2010-09-28 21:23:14
|
Revision: 5228 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5228&view=rev Author: fabiomaulo Date: 2010-09-28 21:23:08 +0000 (Tue, 28 Sep 2010) Log Message: ----------- Fix NH-2352 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2010-09-26 18:06:04 UTC (rev 5227) +++ trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2010-09-28 21:23:08 UTC (rev 5228) @@ -1841,7 +1841,11 @@ protected virtual string GetDefaultConfigurationFilePath() { string baseDir = AppDomain.CurrentDomain.BaseDirectory; - string relativeSearchPath = AppDomain.CurrentDomain.RelativeSearchPath.Split(';').First(); + + // Note RelativeSearchPath can be null even if the doc say something else; don't remove the check + var searchPath = AppDomain.CurrentDomain.RelativeSearchPath ?? string.Empty; + + string relativeSearchPath = searchPath.Split(';').First(); string binPath = Path.Combine(baseDir, relativeSearchPath); return Path.Combine(binPath, DefaultHibernateCfgFileName); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-26 18:06:10
|
Revision: 5227 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5227&view=rev Author: fabiomaulo Date: 2010-09-26 18:06:04 +0000 (Sun, 26 Sep 2010) Log Message: ----------- Changed release of current trunk Modified Paths: -------------- trunk/nhibernate/build-common/common.xml Modified: trunk/nhibernate/build-common/common.xml =================================================================== --- trunk/nhibernate/build-common/common.xml 2010-09-26 17:52:48 UTC (rev 5226) +++ trunk/nhibernate/build-common/common.xml 2010-09-26 18:06:04 UTC (rev 5227) @@ -84,7 +84,7 @@ effectively SP0). --> - <property name="project.version" value="3.0.0.Alpha3" overwrite="false" /> + <property name="project.version" value="3.0.0.Beta1" overwrite="false" /> <!-- Compute short project version (major.minor) using a regex --> <regex input="${project.version}" pattern="^(?'shortversion'\d+\.\d+)" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-26 17:52:57
|
Revision: 5226 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5226&view=rev Author: fabiomaulo Date: 2010-09-26 17:52:48 +0000 (Sun, 26 Sep 2010) Log Message: ----------- Preparing release 3.0.0Alpha3 Modified Paths: -------------- trunk/nhibernate/releasenotes.txt Modified: trunk/nhibernate/releasenotes.txt =================================================================== --- trunk/nhibernate/releasenotes.txt 2010-09-26 17:49:15 UTC (rev 5225) +++ trunk/nhibernate/releasenotes.txt 2010-09-26 17:52:48 UTC (rev 5226) @@ -1,6 +1,6 @@ Build 3.0.0.Alpha3 ============================= -** Known BREAKING CHANGES from NH2.1.1.GA to NH3.0.0.Alpha3 +** Known BREAKING CHANGES from NH2.1.1.GA to NH3.0.0 ##### Run time ##### * [NH-2199] - null values in maps/dictionaries are no longer silenty ignored/deleted * [NH-1894] - SybaseAnywhereDialect has been removed, and replaced with SybaseASA9Dialect. @@ -8,7 +8,66 @@ ##### Possible Breaking Changes ##### * [NH-2251] - Signature change for GetLimitString in Dialect + * [NH-2284] - Obsolete members removed +Build 3.0.0.Alpha3 (rev5226) +============================= + +** Bug + * [NH-1927] - Criteria generates wrong sql when eager fetching one-to-many with filter + * [NH-1928] - SQL line comments swallow next line + * [NH-2024] - Max results parameter could not provided to subquery + * [NH-2061] - Merge operation causes null exception for null components that contain many-to-many relations + * [NH-2096] - IndexOutOfRangeException reading zero-length binary value from MySQL + * [NH-2112] - Update executed on the DB during a Session.Merge of an unmodified entity + * [NH-2138] - Entity name support in custom SQL is broken: sql-query/return/@entity-name attribute is ignored + * [NH-2147] - default_batch_fetch_size has no effect + * [NH-2188] - Exception occurs when configuration searches default config file and multiple search path were defined for current AppDomain. + * [NH-2202] - Unable to use ICriteria with projection property that references a composite key relationship + * [NH-2258] - Paging params in subquery breaks query execution. + * [NH-2265] - Any linq query using oracle fails when restricting the number of results returned + * [NH-2270] - NHibernatethrows MappingException on Linux/Mono 2.7 + * [NH-2279] - PersistentIdentifierBag fails to maintain ID map in many cases + * [NH-2288] - The drop scripts from SchemaExport in SQL2005 dialect will not work for constraints when using DefaultSchema setting other than dbo + * [NH-2289] - Linq query fail when using contains from ICollection<T> or IList<T> + * [NH-2302] - MsSql Dialect, mapping an nvarchar(max) using string(10000) causes string truncation + * [NH-2303] - Regression bug: hibernate-mapping/subclass element can no longer extend hibernate-mapping/class//subclass element + * [NH-2322] - Performing updates in OnPostUpdate event causes enumeration error + * [NH-2339] - After rev 5139 (apply NH-2335) NHibernate does not work under Medium Trust + * [NH-2343] - NHibernate.Type.GenericBagType<T>.Wrap() incorrectly assumes collection implements IList<T> + * [NH-2344] - Coalesce expression does not work on linq provider + +** Improvement + * [NH-626] - Adding XmlDoc to NH types + * [NH-1618] - Lazy loading for one-to-one association + * [NH-1894] - New SQL Anywhere NHibernate dialect + * [NH-2135] - Compatible with Mono + * [NH-2292] - Set Initialize in AbstractLazyInitializer as virtual + * [NH-2301] - Castle Bytecode with last released 2.5 + * [NH-2321] - Recommended method for xml intellisense + * [NH-2340] - Workaround, for some DataProviders, in AbstractCharType for char? + +** New Feature + * [NH-866] - SQL Server 2005 XML Support + * [NH-2348] - Support polymorphism with Get and Load + +** Patch + * [NH-2006] - Additional test to use-many-to-one + * [NH-2111] - PersistentIdentifierBag has null reference exception when accessing SyncRoot on lazy loaded collection + * [NH-2278] - PersistentGenericIdentifierBag instantiates wrong list type + * [NH-2284] - Obsolete members can be removed + * [NH-2293] - When query has only a "from" throw QuerySyntaxException instead of InvalidCastException + * [NH-2307] - Fix ByteCode Framework Targets + * [NH-2332] - Update SybaseAnywhereMetaData.cs to support fetching the reserved words + * [NH-2335] - ReflectiveHttpContext support for different .NET versions + * [NH-2336] - Leading and trailing ansi trim emulation functions are reversed + * [NH-2346] - Dialect.TableTypeString is not used when creating schema. + +** Task + * [NH-2161] - Breaking change in naming strategy from 2.0 to 2.1 + * [NH-2315] - Spring version does not match antlr version + * [NH-2338] - Upgrade to Castle.Core 2.5.1 + Build 3.0.0.Alpha2 (rev5159) ============================= This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-26 17:49:26
|
Revision: 5225 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5225&view=rev Author: fabiomaulo Date: 2010-09-26 17:49:15 +0000 (Sun, 26 Sep 2010) Log Message: ----------- Renamed internal logger interface to make happy Castle's logging facility Modified Paths: -------------- trunk/nhibernate/src/NHibernate/AdoNet/AbstractBatcher.cs trunk/nhibernate/src/NHibernate/AdoNet/ConnectionManager.cs trunk/nhibernate/src/NHibernate/AdoNet/Util/SqlStatementLogger.cs trunk/nhibernate/src/NHibernate/Bytecode/CodeDom/BytecodeProviderImpl.cs trunk/nhibernate/src/NHibernate/Cache/CacheFactory.cs trunk/nhibernate/src/NHibernate/Cache/NoCacheProvider.cs trunk/nhibernate/src/NHibernate/Cache/NonstrictReadWriteCache.cs trunk/nhibernate/src/NHibernate/Cache/ReadOnlyCache.cs trunk/nhibernate/src/NHibernate/Cache/ReadWriteCache.cs trunk/nhibernate/src/NHibernate/Cache/StandardQueryCache.cs trunk/nhibernate/src/NHibernate/Cache/UpdateTimestampsCache.cs trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs trunk/nhibernate/src/NHibernate/Cfg/ConfigurationSchema/HibernateConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Environment.cs trunk/nhibernate/src/NHibernate/Cfg/Mappings.cs trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/FilterDefinitionFactory.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingLogExtensions.cs trunk/nhibernate/src/NHibernate/Collection/PersistentArrayHolder.cs trunk/nhibernate/src/NHibernate/Connection/ConnectionProvider.cs trunk/nhibernate/src/NHibernate/Connection/ConnectionProviderFactory.cs trunk/nhibernate/src/NHibernate/Connection/DriverConnectionProvider.cs trunk/nhibernate/src/NHibernate/Connection/UserSuppliedConnectionProvider.cs trunk/nhibernate/src/NHibernate/Context/ThreadLocalSessionContext.cs trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs trunk/nhibernate/src/NHibernate/Dialect/Lock/UpdateLockingStrategy.cs trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractTableMetadata.cs trunk/nhibernate/src/NHibernate/Driver/DriverBase.cs trunk/nhibernate/src/NHibernate/Driver/NHybridDataReader.cs trunk/nhibernate/src/NHibernate/Engine/ActionQueue.cs trunk/nhibernate/src/NHibernate/Engine/Cascade.cs trunk/nhibernate/src/NHibernate/Engine/CascadingAction.cs trunk/nhibernate/src/NHibernate/Engine/CollectionEntry.cs trunk/nhibernate/src/NHibernate/Engine/Collections.cs trunk/nhibernate/src/NHibernate/Engine/ForeignKeys.cs trunk/nhibernate/src/NHibernate/Engine/IdentifierValue.cs trunk/nhibernate/src/NHibernate/Engine/Loading/CollectionLoadContext.cs trunk/nhibernate/src/NHibernate/Engine/Loading/LoadContexts.cs trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs trunk/nhibernate/src/NHibernate/Engine/Query/NativeSQLQueryPlan.cs trunk/nhibernate/src/NHibernate/Engine/Query/QueryPlanCache.cs trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs trunk/nhibernate/src/NHibernate/Engine/StatefulPersistenceContext.cs trunk/nhibernate/src/NHibernate/Engine/Transaction/Isolater.cs trunk/nhibernate/src/NHibernate/Engine/TwoPhaseLoad.cs trunk/nhibernate/src/NHibernate/Engine/VersionValue.cs trunk/nhibernate/src/NHibernate/Engine/Versioning.cs trunk/nhibernate/src/NHibernate/Event/Default/AbstractFlushingEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/AbstractLockUpgradeEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/AbstractReassociateEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/AbstractSaveEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultAutoFlushEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultDeleteEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultDirtyCheckEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultEvictEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultFlushEntityEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultInitializeCollectionEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultLoadEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultPersistEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultRefreshEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultReplicateEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/DefaultSaveOrUpdateEventListener.cs trunk/nhibernate/src/NHibernate/Event/Default/EvictVisitor.cs trunk/nhibernate/src/NHibernate/Event/Default/ReattachVisitor.cs trunk/nhibernate/src/NHibernate/Event/Default/WrapVisitor.cs trunk/nhibernate/src/NHibernate/Exceptions/SQLExceptionConverterFactory.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/ErrorCounter.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Exec/AbstractStatementExecutor.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Exec/BasicExecutor.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Exec/MultiTableDeleteExecutor.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Exec/MultiTableUpdateExecutor.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlParser.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/AbstractRestrictableStatement.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DeleteStatement.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromClause.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementFactory.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementType.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromReferenceNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/IndexNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/MethodNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/QueryNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/UpdateStatement.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Util/LiteralProcessor.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Util/PathHelper.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Util/SyntheticAndFactory.cs trunk/nhibernate/src/NHibernate/Hql/Classic/QueryTranslator.cs trunk/nhibernate/src/NHibernate/Hql/QuerySplitter.cs trunk/nhibernate/src/NHibernate/Id/Enhanced/OptimizerFactory.cs trunk/nhibernate/src/NHibernate/Id/Enhanced/SequenceStructure.cs trunk/nhibernate/src/NHibernate/Id/Enhanced/SequenceStyleGenerator.cs trunk/nhibernate/src/NHibernate/Id/Enhanced/TableStructure.cs trunk/nhibernate/src/NHibernate/Id/IdentifierGeneratorFactory.cs trunk/nhibernate/src/NHibernate/Id/IncrementGenerator.cs trunk/nhibernate/src/NHibernate/Id/NativeGuidGenerator.cs trunk/nhibernate/src/NHibernate/Id/SequenceGenerator.cs trunk/nhibernate/src/NHibernate/Id/SequenceHiLoGenerator.cs trunk/nhibernate/src/NHibernate/Id/TableGenerator.cs trunk/nhibernate/src/NHibernate/Id/TableHiLoGenerator.cs trunk/nhibernate/src/NHibernate/Impl/AbstractSessionImpl.cs trunk/nhibernate/src/NHibernate/Impl/EnumerableImpl.cs trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs trunk/nhibernate/src/NHibernate/Impl/Printer.cs trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs trunk/nhibernate/src/NHibernate/Impl/SessionFactoryObjectFactory.cs trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs trunk/nhibernate/src/NHibernate/Linq/Functions/LinqToHqlGeneratorsRegistryFactory.cs trunk/nhibernate/src/NHibernate/Loader/Collection/BasicCollectionLoader.cs trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyLoader.cs trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaJoinWalker.cs trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs trunk/nhibernate/src/NHibernate/Loader/Custom/Sql/SQLCustomQuery.cs trunk/nhibernate/src/NHibernate/Loader/Custom/Sql/SQLQueryReturnProcessor.cs trunk/nhibernate/src/NHibernate/Loader/Entity/AbstractEntityLoader.cs trunk/nhibernate/src/NHibernate/Loader/Entity/CollectionElementLoader.cs trunk/nhibernate/src/NHibernate/Loader/Loader.cs trunk/nhibernate/src/NHibernate/Logging.cs trunk/nhibernate/src/NHibernate/Mapping/RootClass.cs trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs trunk/nhibernate/src/NHibernate/Persister/Collection/NamedQueryCollectionInitializer.cs trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs trunk/nhibernate/src/NHibernate/Persister/Entity/NamedQueryLoader.cs trunk/nhibernate/src/NHibernate/SqlCommand/InsertSelect.cs trunk/nhibernate/src/NHibernate/SqlCommand/SqlDeleteBuilder.cs trunk/nhibernate/src/NHibernate/SqlCommand/SqlInsertBuilder.cs trunk/nhibernate/src/NHibernate/SqlCommand/SqlSelectBuilder.cs trunk/nhibernate/src/NHibernate/SqlCommand/SqlUpdateBuilder.cs trunk/nhibernate/src/NHibernate/Stat/StatisticsImpl.cs trunk/nhibernate/src/NHibernate/Tool/hbm2ddl/DatabaseMetadata.cs trunk/nhibernate/src/NHibernate/Tool/hbm2ddl/SchemaExport.cs trunk/nhibernate/src/NHibernate/Tool/hbm2ddl/SchemaUpdate.cs trunk/nhibernate/src/NHibernate/Tool/hbm2ddl/SchemaValidator.cs trunk/nhibernate/src/NHibernate/Transaction/AdoNetTransactionFactory.cs trunk/nhibernate/src/NHibernate/Transaction/AdoNetWithDistributedTransactionFactory.cs trunk/nhibernate/src/NHibernate/Transaction/AdoTransaction.cs trunk/nhibernate/src/NHibernate/Transform/DistinctRootEntityResultTransformer.cs trunk/nhibernate/src/NHibernate/Tuple/Component/AbstractComponentTuplizer.cs trunk/nhibernate/src/NHibernate/Tuple/Entity/AbstractEntityTuplizer.cs trunk/nhibernate/src/NHibernate/Tuple/Entity/DynamicMapEntityTuplizer.cs trunk/nhibernate/src/NHibernate/Tuple/Entity/EntityMetamodel.cs trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs trunk/nhibernate/src/NHibernate/Tuple/PocoInstantiator.cs trunk/nhibernate/src/NHibernate/Type/DbTimestampType.cs trunk/nhibernate/src/NHibernate/Type/NullableType.cs trunk/nhibernate/src/NHibernate/Util/ADOExceptionReporter.cs trunk/nhibernate/src/NHibernate/Util/IdentityMap.cs trunk/nhibernate/src/NHibernate/Util/JoinedEnumerable.cs trunk/nhibernate/src/NHibernate/Util/ReflectHelper.cs trunk/nhibernate/src/NHibernate.ByteCode.Castle/ProxyFactory.cs trunk/nhibernate/src/NHibernate.ByteCode.LinFu/ProxyFactory.cs Modified: trunk/nhibernate/src/NHibernate/AdoNet/AbstractBatcher.cs =================================================================== --- trunk/nhibernate/src/NHibernate/AdoNet/AbstractBatcher.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/AdoNet/AbstractBatcher.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -21,7 +21,7 @@ /// </summary> public abstract class AbstractBatcher : IBatcher { - protected static readonly ILogger log = LoggerProvider.LoggerFor(typeof(AbstractBatcher)); + protected static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(AbstractBatcher)); private static int openCommandCount; private static int openReaderCount; Modified: trunk/nhibernate/src/NHibernate/AdoNet/ConnectionManager.cs =================================================================== --- trunk/nhibernate/src/NHibernate/AdoNet/ConnectionManager.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/AdoNet/ConnectionManager.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -17,7 +17,7 @@ [Serializable] public class ConnectionManager : ISerializable, IDeserializationCallback { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ConnectionManager)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ConnectionManager)); public interface Callback { Modified: trunk/nhibernate/src/NHibernate/AdoNet/Util/SqlStatementLogger.cs =================================================================== --- trunk/nhibernate/src/NHibernate/AdoNet/Util/SqlStatementLogger.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/AdoNet/Util/SqlStatementLogger.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -8,7 +8,7 @@ /// <summary> Centralize logging handling for SQL statements. </summary> public class SqlStatementLogger { - private static readonly ILogger log = LoggerProvider.LoggerFor("NHibernate.SQL"); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor("NHibernate.SQL"); /// <summary> Constructs a new SqlStatementLogger instance.</summary> public SqlStatementLogger() : this(false, false) { } Modified: trunk/nhibernate/src/NHibernate/Bytecode/CodeDom/BytecodeProviderImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Bytecode/CodeDom/BytecodeProviderImpl.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Bytecode/CodeDom/BytecodeProviderImpl.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -13,7 +13,7 @@ /// </summary> public class BytecodeProviderImpl : AbstractBytecodeProvider { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof (BytecodeProviderImpl)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (BytecodeProviderImpl)); #region IBytecodeProvider Members Modified: trunk/nhibernate/src/NHibernate/Cache/CacheFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cache/CacheFactory.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cache/CacheFactory.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -9,7 +9,7 @@ /// </summary> public static class CacheFactory { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(CacheFactory)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(CacheFactory)); public const string ReadOnly = "read-only"; public const string ReadWrite = "read-write"; Modified: trunk/nhibernate/src/NHibernate/Cache/NoCacheProvider.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cache/NoCacheProvider.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cache/NoCacheProvider.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -9,7 +9,7 @@ /// </summary> public class NoCacheProvider : ICacheProvider { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(NoCacheProvider)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(NoCacheProvider)); public const string WarnMessage = "Second-level cache is enabled in a class, but no cache provider was selected. Fake cache used."; Modified: trunk/nhibernate/src/NHibernate/Cache/NonstrictReadWriteCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cache/NonstrictReadWriteCache.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cache/NonstrictReadWriteCache.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -16,7 +16,7 @@ { private ICache cache; - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(NonstrictReadWriteCache)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(NonstrictReadWriteCache)); /// <summary> /// Gets the cache region name. Modified: trunk/nhibernate/src/NHibernate/Cache/ReadOnlyCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cache/ReadOnlyCache.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cache/ReadOnlyCache.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -10,7 +10,7 @@ public class ReadOnlyCache : ICacheConcurrencyStrategy { private ICache cache; - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ReadOnlyCache)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ReadOnlyCache)); /// <summary> /// Gets the cache region name. Modified: trunk/nhibernate/src/NHibernate/Cache/ReadWriteCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cache/ReadWriteCache.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cache/ReadWriteCache.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -30,7 +30,7 @@ bool IsPuttable(long txTimestamp, object newVersion, IComparer comparator); } - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ReadWriteCache)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ReadWriteCache)); private readonly object _lockObject = new object(); private ICache cache; Modified: trunk/nhibernate/src/NHibernate/Cache/StandardQueryCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cache/StandardQueryCache.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cache/StandardQueryCache.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -18,7 +18,7 @@ /// </summary> public class StandardQueryCache : IQueryCache { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof (StandardQueryCache)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (StandardQueryCache)); private readonly ICache queryCache; private readonly string regionName; private readonly UpdateTimestampsCache updateTimestampsCache; Modified: trunk/nhibernate/src/NHibernate/Cache/UpdateTimestampsCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cache/UpdateTimestampsCache.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cache/UpdateTimestampsCache.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -16,7 +16,7 @@ /// </summary> public class UpdateTimestampsCache { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(UpdateTimestampsCache)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(UpdateTimestampsCache)); private ICache updateTimestamps; private readonly string regionName = typeof(UpdateTimestampsCache).Name; Modified: trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -76,7 +76,7 @@ protected IDictionary<string, Mappings.TableDescription> tableNameBinding; protected IDictionary<Table, Mappings.ColumnNames> columnNameBindingPerTable; - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(Configuration)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(Configuration)); protected internal SettingsFactory settingsFactory; Modified: trunk/nhibernate/src/NHibernate/Cfg/ConfigurationSchema/HibernateConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/ConfigurationSchema/HibernateConfiguration.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cfg/ConfigurationSchema/HibernateConfiguration.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -23,7 +23,7 @@ /// </summary> public class HibernateConfiguration : IHibernateConfiguration { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(HibernateConfiguration)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(HibernateConfiguration)); /// <summary> /// Initializes a new instance of the <see cref="HibernateConfiguration"/> class. Modified: trunk/nhibernate/src/NHibernate/Cfg/Environment.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Environment.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cfg/Environment.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -167,7 +167,7 @@ private static IBytecodeProvider BytecodeProviderInstance; private static bool EnableReflectionOptimizer; - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof (Environment)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (Environment)); /// <summary> /// Issue warnings to user when any obsolete property names are used. Modified: trunk/nhibernate/src/NHibernate/Cfg/Mappings.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Mappings.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cfg/Mappings.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -47,7 +47,7 @@ #endregion - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(Mappings)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(Mappings)); private readonly IDictionary<string, PersistentClass> classes; private readonly IDictionary<string, Mapping.Collection> collections; Modified: trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -22,7 +22,7 @@ [Serializable] public sealed class SettingsFactory { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(SettingsFactory)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(SettingsFactory)); private static readonly string DefaultCacheProvider = typeof(NoCacheProvider).AssemblyQualifiedName; public Settings BuildSettings(IDictionary<string, string> properties) Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -10,7 +10,7 @@ { public abstract class Binder { - protected static readonly ILogger log = LoggerProvider.LoggerFor(typeof (Binder)); + protected static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (Binder)); protected static readonly IDictionary<string, MetaAttribute> EmptyMeta = new CollectionHelper.EmptyMapClass<string, MetaAttribute>(); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/FilterDefinitionFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/FilterDefinitionFactory.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/FilterDefinitionFactory.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -8,7 +8,7 @@ { public class FilterDefinitionFactory { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof (FilterDefinitionFactory)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (FilterDefinitionFactory)); public static FilterDefinition CreateFilterDefinition(HbmFilterDef filterDefSchema) { Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingLogExtensions.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingLogExtensions.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingLogExtensions.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -5,7 +5,7 @@ { public static class MappingLogExtensions { - public static void LogMapped(this Mapping.Property property, ILogger log) + public static void LogMapped(this Mapping.Property property, IInternalLogger log) { if (log.IsDebugEnabled) { Modified: trunk/nhibernate/src/NHibernate/Collection/PersistentArrayHolder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Collection/PersistentArrayHolder.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Collection/PersistentArrayHolder.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -20,7 +20,7 @@ [DebuggerTypeProxy(typeof (CollectionProxy))] public class PersistentArrayHolder : AbstractPersistentCollection, ICollection { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof (PersistentArrayHolder)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (PersistentArrayHolder)); private Array array; Modified: trunk/nhibernate/src/NHibernate/Connection/ConnectionProvider.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Connection/ConnectionProvider.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Connection/ConnectionProvider.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -15,7 +15,7 @@ /// </summary> public abstract class ConnectionProvider : IConnectionProvider { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ConnectionProvider)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ConnectionProvider)); private string connString; private IDriver driver; Modified: trunk/nhibernate/src/NHibernate/Connection/ConnectionProviderFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Connection/ConnectionProviderFactory.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Connection/ConnectionProviderFactory.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -11,7 +11,7 @@ /// </summary> public sealed class ConnectionProviderFactory { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ConnectionProviderFactory)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ConnectionProviderFactory)); // cannot be instantiated private ConnectionProviderFactory() Modified: trunk/nhibernate/src/NHibernate/Connection/DriverConnectionProvider.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Connection/DriverConnectionProvider.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Connection/DriverConnectionProvider.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -9,7 +9,7 @@ /// </summary> public class DriverConnectionProvider : ConnectionProvider { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DriverConnectionProvider)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DriverConnectionProvider)); /// <summary> /// Closes and Disposes of the <see cref="IDbConnection"/>. Modified: trunk/nhibernate/src/NHibernate/Connection/UserSuppliedConnectionProvider.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Connection/UserSuppliedConnectionProvider.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Connection/UserSuppliedConnectionProvider.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -14,7 +14,7 @@ /// </remarks> public class UserSuppliedConnectionProvider : ConnectionProvider { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(UserSuppliedConnectionProvider)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(UserSuppliedConnectionProvider)); /// <summary> /// Throws an <see cref="InvalidOperationException"/> if this method is called Modified: trunk/nhibernate/src/NHibernate/Context/ThreadLocalSessionContext.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Context/ThreadLocalSessionContext.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Context/ThreadLocalSessionContext.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -30,7 +30,7 @@ [Serializable] public class ThreadLocalSessionContext : ICurrentSessionContext { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ThreadLocalSessionContext)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ThreadLocalSessionContext)); [ThreadStatic] protected static IDictionary<ISessionFactory, ISession> context; Modified: trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -31,7 +31,7 @@ /// </remarks> public abstract class Dialect { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(Dialect)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(Dialect)); private readonly TypeNames typeNames = new TypeNames(); private readonly TypeNames hibernateTypeNames = new TypeNames(); Modified: trunk/nhibernate/src/NHibernate/Dialect/Lock/UpdateLockingStrategy.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/Lock/UpdateLockingStrategy.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Dialect/Lock/UpdateLockingStrategy.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -15,7 +15,7 @@ /// <remarks> This strategy is not valid for read style locks. </remarks> public class UpdateLockingStrategy : ILockingStrategy { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(UpdateLockingStrategy)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(UpdateLockingStrategy)); private readonly ILockable lockable; private readonly LockMode lockMode; private readonly SqlString sql; Modified: trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractTableMetadata.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractTableMetadata.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractTableMetadata.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -7,7 +7,7 @@ { public abstract class AbstractTableMetadata : ITableMetadata { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ITableMetadata)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ITableMetadata)); private string catalog; private string schema; private string name; Modified: trunk/nhibernate/src/NHibernate/Driver/DriverBase.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Driver/DriverBase.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Driver/DriverBase.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -14,7 +14,7 @@ /// </summary> public abstract class DriverBase : IDriver, ISqlParameterFormatter { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DriverBase)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DriverBase)); private int commandTimeout; private bool prepareSql; Modified: trunk/nhibernate/src/NHibernate/Driver/NHybridDataReader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Driver/NHybridDataReader.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Driver/NHybridDataReader.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -22,7 +22,7 @@ /// </remarks> public class NHybridDataReader : IDataReader { - private ILogger log = LoggerProvider.LoggerFor(typeof(NHybridDataReader)); + private IInternalLogger log = LoggerProvider.LoggerFor(typeof(NHybridDataReader)); private IDataReader _reader; private bool _isMidstream = false; Modified: trunk/nhibernate/src/NHibernate/Engine/ActionQueue.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/ActionQueue.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/ActionQueue.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -21,7 +21,7 @@ [Serializable] public class ActionQueue { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ActionQueue)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ActionQueue)); private const int InitQueueListSize = 5; private ISessionImplementor session; Modified: trunk/nhibernate/src/NHibernate/Engine/Cascade.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Cascade.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Cascade.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -70,7 +70,7 @@ /// </summary> public sealed class Cascade { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(Cascade)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(Cascade)); private CascadePoint point; private readonly IEventSource eventSource; Modified: trunk/nhibernate/src/NHibernate/Engine/CascadingAction.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/CascadingAction.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/CascadingAction.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -14,7 +14,7 @@ /// </summary> public abstract class CascadingAction { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(CascadingAction)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(CascadingAction)); #region The CascadingAction contract Modified: trunk/nhibernate/src/NHibernate/Engine/CollectionEntry.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/CollectionEntry.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/CollectionEntry.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -14,7 +14,7 @@ [Serializable] public class CollectionEntry { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof (CollectionEntry)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (CollectionEntry)); /// <summary>session-start/post-flush persistent state</summary> private object snapshot; Modified: trunk/nhibernate/src/NHibernate/Engine/Collections.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Collections.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Collections.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -8,7 +8,7 @@ { public static class Collections { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(Collections)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(Collections)); /// <summary> /// Record the fact that this collection was dereferenced Modified: trunk/nhibernate/src/NHibernate/Engine/ForeignKeys.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/ForeignKeys.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/ForeignKeys.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -9,7 +9,7 @@ /// <summary> Algorithms related to foreign key constraint transparency </summary> public static class ForeignKeys { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(ForeignKeys)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(ForeignKeys)); public class Nullifier { Modified: trunk/nhibernate/src/NHibernate/Engine/IdentifierValue.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/IdentifierValue.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/IdentifierValue.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -9,7 +9,7 @@ /// </summary> public class IdentifierValue { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(IdentifierValue)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(IdentifierValue)); private readonly object value; Modified: trunk/nhibernate/src/NHibernate/Engine/Loading/CollectionLoadContext.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Loading/CollectionLoadContext.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Loading/CollectionLoadContext.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -22,7 +22,7 @@ /// </remarks> public class CollectionLoadContext { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(CollectionLoadContext)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(CollectionLoadContext)); private readonly LoadContexts loadContexts; private readonly IDataReader resultSet; private readonly ISet<CollectionKey> localLoadingCollectionKeys = new HashedSet<CollectionKey>(); Modified: trunk/nhibernate/src/NHibernate/Engine/Loading/LoadContexts.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Loading/LoadContexts.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Loading/LoadContexts.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -26,7 +26,7 @@ /// </remarks> public class LoadContexts { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(LoadContexts)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(LoadContexts)); [NonSerialized] private readonly IPersistenceContext persistenceContext; Modified: trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -31,7 +31,7 @@ [Serializable] public class HQLQueryPlan : IQueryPlan { - protected static readonly ILogger Log = LoggerProvider.LoggerFor(typeof(HQLQueryPlan)); + protected static readonly IInternalLogger Log = LoggerProvider.LoggerFor(typeof(HQLQueryPlan)); private readonly string _sourceQuery; Modified: trunk/nhibernate/src/NHibernate/Engine/Query/NativeSQLQueryPlan.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Query/NativeSQLQueryPlan.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Query/NativeSQLQueryPlan.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -19,7 +19,7 @@ [Serializable] public class NativeSQLQueryPlan { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(NativeSQLQueryPlan)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(NativeSQLQueryPlan)); private readonly string sourceQuery; private readonly SQLCustomQuery customQuery; Modified: trunk/nhibernate/src/NHibernate/Engine/Query/QueryPlanCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Query/QueryPlanCache.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Query/QueryPlanCache.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -11,7 +11,7 @@ [Serializable] public class QueryPlanCache { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(QueryPlanCache)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(QueryPlanCache)); private readonly ISessionFactoryImplementor factory; Modified: trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -22,7 +22,7 @@ { public delegate int[] GetNamedParameterLocations(string parameterName); - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof (QueryParameters)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (QueryParameters)); private IType[] _positionalParameterTypes; private object[] _positionalParameterValues; Modified: trunk/nhibernate/src/NHibernate/Engine/StatefulPersistenceContext.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/StatefulPersistenceContext.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/StatefulPersistenceContext.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -32,8 +32,8 @@ public class StatefulPersistenceContext : IPersistenceContext, ISerializable, IDeserializationCallback { private const int InitCollectionSize = 8; - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(StatefulPersistenceContext)); - private static readonly ILogger ProxyWarnLog = LoggerProvider.LoggerFor(typeof(StatefulPersistenceContext).FullName + ".ProxyWarnLog"); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(StatefulPersistenceContext)); + private static readonly IInternalLogger ProxyWarnLog = LoggerProvider.LoggerFor(typeof(StatefulPersistenceContext).FullName + ".ProxyWarnLog"); public static readonly object NoRow = new object(); Modified: trunk/nhibernate/src/NHibernate/Engine/Transaction/Isolater.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Transaction/Isolater.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Transaction/Isolater.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -28,7 +28,7 @@ /// </remarks> public class Isolater { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(Isolater)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(Isolater)); /// <summary> /// Ensures that all processing actually performed by the given work will Modified: trunk/nhibernate/src/NHibernate/Engine/TwoPhaseLoad.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/TwoPhaseLoad.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/TwoPhaseLoad.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -18,7 +18,7 @@ /// </summary> public static class TwoPhaseLoad { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(TwoPhaseLoad)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(TwoPhaseLoad)); /// <summary> /// Register the "hydrated" state of an entity instance, after the first step of 2-phase loading. Modified: trunk/nhibernate/src/NHibernate/Engine/VersionValue.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/VersionValue.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/VersionValue.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -11,7 +11,7 @@ /// </summary> public class VersionValue { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(VersionValue)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(VersionValue)); private readonly object value; Modified: trunk/nhibernate/src/NHibernate/Engine/Versioning.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/Versioning.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Engine/Versioning.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -17,7 +17,7 @@ All = 2 } - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(Versioning)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(Versioning)); /// <summary> /// Increment the given version number Modified: trunk/nhibernate/src/NHibernate/Event/Default/AbstractFlushingEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/AbstractFlushingEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/AbstractFlushingEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -18,7 +18,7 @@ [Serializable] public abstract class AbstractFlushingEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof (AbstractFlushingEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (AbstractFlushingEventListener)); protected virtual object Anything { Modified: trunk/nhibernate/src/NHibernate/Event/Default/AbstractLockUpgradeEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/AbstractLockUpgradeEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/AbstractLockUpgradeEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -16,7 +16,7 @@ [Serializable] public class AbstractLockUpgradeEventListener : AbstractReassociateEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(AbstractLockUpgradeEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(AbstractLockUpgradeEventListener)); /// <summary> /// Performs a pessimistic lock upgrade on a given entity, if needed. Modified: trunk/nhibernate/src/NHibernate/Event/Default/AbstractReassociateEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/AbstractReassociateEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/AbstractReassociateEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -15,7 +15,7 @@ [Serializable] public class AbstractReassociateEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(AbstractReassociateEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(AbstractReassociateEventListener)); /// <summary> /// Associates a given entity (either transient or associated with another session) to the given session. Modified: trunk/nhibernate/src/NHibernate/Event/Default/AbstractSaveEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/AbstractSaveEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/AbstractSaveEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -28,7 +28,7 @@ [Serializable] public abstract class AbstractSaveEventListener : AbstractReassociateEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(AbstractSaveEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(AbstractSaveEventListener)); protected virtual bool? AssumedUnsaved { Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultAutoFlushEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultAutoFlushEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultAutoFlushEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -11,7 +11,7 @@ [Serializable] public class DefaultAutoFlushEventListener : AbstractFlushingEventListener, IAutoFlushEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultAutoFlushEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultAutoFlushEventListener)); #region IAutoFlushEventListener Members Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultDeleteEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultDeleteEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultDeleteEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -19,7 +19,7 @@ [Serializable] public class DefaultDeleteEventListener : IDeleteEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultDeleteEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultDeleteEventListener)); #region IDeleteEventListener Members Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultDirtyCheckEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultDirtyCheckEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultDirtyCheckEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -10,7 +10,7 @@ [Serializable] public class DefaultDirtyCheckEventListener : AbstractFlushingEventListener, IDirtyCheckEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultDirtyCheckEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultDirtyCheckEventListener)); public virtual void OnDirtyCheck(DirtyCheckEvent @event) { Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultEvictEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultEvictEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultEvictEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -16,7 +16,7 @@ [Serializable] public class DefaultEvictEventListener : IEvictEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultEvictEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultEvictEventListener)); public virtual void OnEvict(EvictEvent @event) { Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultFlushEntityEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultFlushEntityEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultFlushEntityEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -16,7 +16,7 @@ [Serializable] public class DefaultFlushEntityEventListener : IFlushEntityEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultFlushEntityEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultFlushEntityEventListener)); /// <summary> /// Flushes a single entity's state to the database, by scheduling an update action, if necessary Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultInitializeCollectionEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultInitializeCollectionEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultInitializeCollectionEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -13,7 +13,7 @@ [Serializable] public class DefaultInitializeCollectionEventListener : IInitializeCollectionEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultInitializeCollectionEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultInitializeCollectionEventListener)); /// <summary> called by a collection that wants to initialize itself</summary> public virtual void OnInitializeCollection(InitializeCollectionEvent @event) Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultLoadEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultLoadEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultLoadEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -19,7 +19,7 @@ [Serializable] public class DefaultLoadEventListener : AbstractLockUpgradeEventListener, ILoadEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultLoadEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultLoadEventListener)); public static readonly object RemovedEntityMarker = new object(); public static readonly object InconsistentRTNClassMarker= new object(); public static readonly LockMode DefaultLockMode = LockMode.None; Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -18,7 +18,7 @@ [Serializable] public class DefaultMergeEventListener : AbstractSaveEventListener, IMergeEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultMergeEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultMergeEventListener)); protected override CascadingAction CascadeAction { Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultPersistEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultPersistEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultPersistEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -15,7 +15,7 @@ [Serializable] public class DefaultPersistEventListener : AbstractSaveEventListener, IPersistEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultPersistEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultPersistEventListener)); protected override CascadingAction CascadeAction { Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultRefreshEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultRefreshEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultRefreshEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -17,7 +17,7 @@ [Serializable] public class DefaultRefreshEventListener : IRefreshEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultRefreshEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultRefreshEventListener)); public virtual void OnRefresh(RefreshEvent @event) { Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultReplicateEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultReplicateEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultReplicateEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -13,7 +13,7 @@ [Serializable] public class DefaultReplicateEventListener : AbstractSaveEventListener, IReplicateEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultReplicateEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultReplicateEventListener)); public virtual void OnReplicate(ReplicateEvent @event) { Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultSaveOrUpdateEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultSaveOrUpdateEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultSaveOrUpdateEventListener.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -14,7 +14,7 @@ [Serializable] public class DefaultSaveOrUpdateEventListener : AbstractSaveEventListener, ISaveOrUpdateEventListener { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(DefaultSaveOrUpdateEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(DefaultSaveOrUpdateEventListener)); protected override CascadingAction CascadeAction { Modified: trunk/nhibernate/src/NHibernate/Event/Default/EvictVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/EvictVisitor.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/EvictVisitor.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -13,7 +13,7 @@ /// </summary> public class EvictVisitor : AbstractVisitor { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(EvictVisitor)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(EvictVisitor)); public EvictVisitor(IEventSource session) : base(session) { } Modified: trunk/nhibernate/src/NHibernate/Event/Default/ReattachVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/ReattachVisitor.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/ReattachVisitor.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -13,7 +13,7 @@ { private readonly object ownerIdentifier; private readonly object owner; - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(AbstractFlushingEventListener)); + private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(AbstractFlushingEventListener)); protected ReattachVisitor(IEventSource session, object ownerIdentifier, object owner) : base(session) Modified: trunk/nhibernate/src/NHibernate/Event/Default/WrapVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/WrapVisitor.cs 2010-09-26 16:54:16 UTC (rev 5224) +++ trunk/nhibernate/src/NHibernate/Event/Default/WrapVisitor.cs 2010-09-26 17:49:15 UTC (rev 5225) @@ -12,7 +12,7 @@ /// </summary> public class WrapVisitor : ProxyVisitor { - private static readonly ILogger log = LoggerProvider.LoggerFor(typeof(WrapVisitor)); + priv... [truncated message content] |
From: <fab...@us...> - 2010-09-26 16:54:22
|
Revision: 5224 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5224&view=rev Author: fabiomaulo Date: 2010-09-26 16:54:16 +0000 (Sun, 26 Sep 2010) Log Message: ----------- Fix NH-2348 (thanks to Patrick Earl for the idea) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Event/Default/DefaultLoadEventListener.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/ trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/Domain.cs trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/PolymorphicGetAndLoadTest.cs Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultLoadEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultLoadEventListener.cs 2010-09-26 14:26:22 UTC (rev 5223) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultLoadEventListener.cs 2010-09-26 16:54:16 UTC (rev 5224) @@ -1,6 +1,6 @@ using System; using System.Diagnostics; - +using System.Text; using NHibernate.Cache; using NHibernate.Cache.Access; using NHibernate.Cache.Entry; @@ -36,7 +36,7 @@ } else { - persister = source.Factory.GetEntityPersister(@event.EntityClassName); + persister = GetEntityPersister(source.Factory, @event.EntityClassName); } if (persister == null) @@ -384,7 +384,7 @@ } if (options.IsAllowNulls) { - IEntityPersister persister = @event.Session.Factory.GetEntityPersister(@event.EntityClassName); + IEntityPersister persister = GetEntityPersister(@event.Session.Factory, @event.EntityClassName); if (!persister.IsInstance(old, @event.Session.EntityMode)) { return InconsistentRTNClassMarker; @@ -493,5 +493,32 @@ } return result; } + + protected virtual IEntityPersister GetEntityPersister(ISessionFactoryImplementor factory, string entityName) + { + // Check for an exact match. + IEntityPersister persister = factory.TryGetEntityPersister(entityName); + if (persister != null) + { + return persister; + } + + // Couldn't find persister through exact name, try finding a single implementing class. + string[] implementors = factory.GetImplementors(entityName); + if (implementors.Length > 1) + { + var messageBuilder = new StringBuilder(512); + messageBuilder.AppendLine(string.Format("Ambiguous persister for {0} implemented by more than one hierarchy: ", + entityName)); + Array.ForEach(implementors, s=> messageBuilder.AppendLine(s)); + + throw new HibernateException(messageBuilder.ToString()); + } + if (implementors.Length == 0) + { + return null; + } + return factory.GetEntityPersister(implementors[0]); + } } } Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-26 14:26:22 UTC (rev 5223) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-26 16:54:16 UTC (rev 5224) @@ -517,6 +517,8 @@ <Compile Include="NHSpecificTest\NH2331\Person.cs" /> <Compile Include="NHSpecificTest\NH2344\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2344\Model.cs" /> + <Compile Include="PolymorphicGetAndLoad\Domain.cs" /> + <Compile Include="PolymorphicGetAndLoad\PolymorphicGetAndLoadTest.cs" /> <Compile Include="TypesTest\CharClass.cs" /> <Compile Include="TypesTest\CharClassFixture.cs" /> <Compile Include="TypesTest\DateTimeClass.cs" /> @@ -2312,6 +2314,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="PolymorphicGetAndLoad\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2331\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2324\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2344\Mappings.hbm.xml" /> @@ -2655,7 +2658,6 @@ <EmbeddedResource Include="DynamicEntity\Tuplizer\Customer.hbm.xml" /> </ItemGroup> <ItemGroup> - <Folder Include="NHSpecificTest\NH2202" /> <Folder Include="Properties\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> Added: trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/Domain.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/Domain.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/Domain.cs 2010-09-26 16:54:16 UTC (rev 5224) @@ -0,0 +1,41 @@ +namespace NHibernate.Test.PolymorphicGetAndLoad +{ + public class A: INamed + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } + + public interface IOccuped + { + string Occupation { get; set; } + } + + public class B: A, IOccuped + { + public virtual string Occupation { get; set; } + } + + public interface INamed + { + string Name { get; set; } + } + + public class GraphA : IMultiGraphNamed + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } + + public class GraphB : IMultiGraphNamed + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } + + public interface IMultiGraphNamed + { + string Name { get; set; } + } + +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/Mappings.hbm.xml 2010-09-26 16:54:16 UTC (rev 5224) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.PolymorphicGetAndLoad"> + + <class name="A"> + <id name="Id"> + <generator class="hilo" /> + </id> + <property name="Name"/> + <joined-subclass name="B"> + <key column="AId"/> + <property name="Occupation"/> + </joined-subclass> + </class> + + <class name="GraphA"> + <id name="Id"> + <generator class="hilo" /> + </id> + <property name="Name"/> + </class> + + <class name="GraphB"> + <id name="Id"> + <generator class="hilo" /> + </id> + <property name="Name"/> + </class> + +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/PolymorphicGetAndLoadTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/PolymorphicGetAndLoadTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/PolymorphicGetAndLoad/PolymorphicGetAndLoadTest.cs 2010-09-26 16:54:16 UTC (rev 5224) @@ -0,0 +1,260 @@ +using System; +using System.Collections; +using NHibernate.Engine; +using NHibernate.Proxy; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.PolymorphicGetAndLoad +{ + public class PolymorphicGetAndLoadTest: TestCase + { + protected override string MappingsAssembly + { + get { return "NHibernate.Test"; } + } + + protected override IList Mappings + { + get { return new[] { "PolymorphicGetAndLoad.Mappings.hbm.xml" }; } + } + + public class ScenarioWithA : IDisposable + { + private readonly ISessionFactory factory; + private readonly A a; + + public ScenarioWithA(ISessionFactory factory) + { + this.factory = factory; + a = new A { Name = "Patrick" }; + using (var s = factory.OpenSession()) + { + s.Save(a); + s.Flush(); + } + } + + public A A + { + get { return a; } + } + + public void Dispose() + { + using (var s = factory.OpenSession()) + { + s.Delete(a); + s.Flush(); + } + } + } + + public class ScenarioWithB : IDisposable + { + private readonly ISessionFactory factory; + private readonly B b; + + public ScenarioWithB(ISessionFactory factory) + { + this.factory = factory; + b = new B { Name = "Patrick", Occupation = "hincha pelotas (en el buen sentido), but good candidate to be committer."}; + using (var s = factory.OpenSession()) + { + s.Save(b); + s.Flush(); + } + } + + public B B + { + get { return b; } + } + + public void Dispose() + { + using (var s = factory.OpenSession()) + { + s.Delete(b); + s.Flush(); + } + } + } + + [Test] + public void WhenSaveDeleteBaseClassCastedToInterfaceThenNotThrows() + { + INamed a = new A { Name = "Patrick" }; + Executing.This(() => + { + using (var s = OpenSession()) + { + s.Save(a); + s.Flush(); + } + }).Should().NotThrow(); + + Executing.This(() => + { + using (var s = OpenSession()) + { + s.Delete(a); + s.Flush(); + } + }).Should().NotThrow(); + + } + + [Test] + public void WhenLoadBaseClassUsingInterfaceThenNotThrows() + { + using (var scenario = new ScenarioWithA(Sfi)) + { + using (var s = OpenSession()) + { + s.Executing(session => session.Load<INamed>(scenario.A.Id)).NotThrows(); + } + } + } + + [Test] + public void WhenGetBaseClassUsingInterfaceThenNotThrows() + { + using (var scenario = new ScenarioWithA(Sfi)) + { + using (var s = OpenSession()) + { + s.Executing(session => session.Get<INamed>(scenario.A.Id)).NotThrows(); + } + } + } + + [Test] + public void WhenLoadInheritedClassUsingInterfaceThenNotThrows() + { + using (var scenario = new ScenarioWithB(Sfi)) + { + using (var s = OpenSession()) + { + Executing.This(()=> s.Load<INamed>(scenario.B.Id) ).Should().NotThrow(); + } + } + } + + [Test] + public void WhenLoadInheritedClassUsingInterfaceThenShouldAllowNarrowingProxy() + { + using (var scenario = new ScenarioWithB(Sfi)) + { + using (var s = OpenSession()) + { + INamed loadedEntity = null; + Executing.This(() => loadedEntity = s.Load<INamed>(scenario.B.Id)).Should().NotThrow(); + NHibernateProxyHelper.GetClassWithoutInitializingProxy(loadedEntity).Should().Be(typeof(A)); + + var narrowedProxy = s.Load<B>(scenario.B.Id); + + NHibernateProxyHelper.GetClassWithoutInitializingProxy(narrowedProxy).Should().Be(typeof(B)); + + var firstLoadedImpl = ((INHibernateProxy)loadedEntity).HibernateLazyInitializer.GetImplementation((ISessionImplementor)s); + var secondLoadedImpl = ((INHibernateProxy)narrowedProxy).HibernateLazyInitializer.GetImplementation((ISessionImplementor)s); + firstLoadedImpl.Should().Be.SameInstanceAs(secondLoadedImpl); + } + } + } + + [Test] + public void WhenLoadInterfaceThenShouldAllowNarrowingProxy() + { + using (var scenario = new ScenarioWithB(Sfi)) + { + using (var s = OpenSession()) + { + INamed loadedEntity = null; + Executing.This(() => loadedEntity = s.Load<INamed>(scenario.B.Id)).Should().NotThrow(); + NHibernateProxyHelper.GetClassWithoutInitializingProxy(loadedEntity).Should().Be(typeof(A)); + + var narrowedProxy = s.Load<IOccuped>(scenario.B.Id); + + NHibernateProxyHelper.GetClassWithoutInitializingProxy(narrowedProxy).Should().Be(typeof(B)); + + var firstLoadedImpl = ((INHibernateProxy)loadedEntity).HibernateLazyInitializer.GetImplementation((ISessionImplementor)s); + var secondLoadedImpl = ((INHibernateProxy)narrowedProxy).HibernateLazyInitializer.GetImplementation((ISessionImplementor)s); + firstLoadedImpl.Should().Be.SameInstanceAs(secondLoadedImpl); + } + } + } + + [Test] + public void WhenGetInheritedClassUsingInterfaceThenNotThrows() + { + using (var scenario = new ScenarioWithB(Sfi)) + { + using (var s = OpenSession()) + { + INamed loadedEntity = null; + Executing.This(() => loadedEntity = s.Get<INamed>(scenario.B.Id)).Should().NotThrow(); + loadedEntity.Should().Be.OfType<B>(); + } + } + } + + [Test] + public void WhenLoadClassUsingInterfaceOfMultippleHierarchyThenThrows() + { + using (var s = OpenSession()) + { + Executing.This(() => s.Load<IMultiGraphNamed>(1)) + .Should().Throw<HibernateException>() + .And.ValueOf.Message.Should() + .Contain("Ambiguous") + .And.Contain("GraphA") + .And.Contain("GraphB") + .And.Contain("IMultiGraphNamed"); + } + } + + [Test] + public void WhenGetClassUsingInterfaceOfMultippleHierarchyThenThrows() + { + using (var s = OpenSession()) + { + Executing.This(() => s.Get<IMultiGraphNamed>(1)) + .Should().Throw<HibernateException>() + .And.ValueOf.Message.Should() + .Contain("Ambiguous") + .And.Contain("GraphA") + .And.Contain("GraphB") + .And.Contain("IMultiGraphNamed"); + } + } + + [Test] + public void WhenGetBaseClassUsingInterfaceFromSessionCacheThenNotThrows() + { + using (var scenario = new ScenarioWithA(Sfi)) + { + using (var s = OpenSession()) + { + var id = scenario.A.Id; + s.Get<A>(id); + s.Executing(session => session.Get<INamed>(id)).NotThrows(); + } + } + } + + [Test] + public void WhenGetInheritedClassUsingInterfaceFromSessionCacheThenNotThrows() + { + using (var scenario = new ScenarioWithB(Sfi)) + { + using (var s = OpenSession()) + { + var id = scenario.B.Id; + s.Get<B>(id); + s.Executing(session => session.Get<INamed>(id)).NotThrows(); + } + } + } + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-26 14:26:30
|
Revision: 5223 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5223&view=rev Author: fabiomaulo Date: 2010-09-26 14:26:22 +0000 (Sun, 26 Sep 2010) Log Message: ----------- Test for NH-2331 Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Forum.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/MemberGroup.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Nh2331Test.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Person.cs Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Forum.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Forum.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Forum.cs 2010-09-26 14:26:22 UTC (rev 5223) @@ -0,0 +1,11 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.NH2331 +{ + public class Forum + { + public virtual Guid Id { get; set; } + public virtual string Name { get; set; } + public virtual double Dollars { get; set; } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Mappings.hbm.xml 2010-09-26 14:26:22 UTC (rev 5223) @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2331" default-access="property" + default-lazy="false"> + + <class name="NHibernate.Test.NHSpecificTest.NH2331.Forum"> + + <id name="Id"> + <generator class="guid" /> + </id> + + <property name="Name" type="string" /> + <property name="Dollars" type="double" /> + + </class> + + + <class name="NHibernate.Test.NHSpecificTest.NH2331.MemberGroup"> + + <id name="Id"> + <generator class="guid" /> + </id> + + <property name="Name" type="System.String" /> + + <bag + name="Members" + table="Group2Members" + > + <key> + <column name="GroupId" /> + </key> + <many-to-many + class="NHibernate.Test.NHSpecificTest.NH2331.Person"> + <column name="PersonId" /> + </many-to-many> + </bag> + + <bag + name="Forums" + table="Group2Forums" + > + <key> + <column name="GroupId" /> + </key> + <many-to-many + class="NHibernate.Test.NHSpecificTest.NH2331.Forum"> + <column name="ForumId" /> + </many-to-many> + </bag> + + </class> + + + <class name="NHibernate.Test.NHSpecificTest.NH2331.Person"> + + <id name="Id"> + <generator class="guid" /> + </id> + + <property name="Name" type="System.String" /> + + </class> + +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/MemberGroup.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/MemberGroup.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/MemberGroup.cs 2010-09-26 14:26:22 UTC (rev 5223) @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH2331 +{ + public class MemberGroup + { + public virtual Guid Id { get; set; } + public virtual string Name { get; set; } + public virtual IList<Person> Members { get; set; } + public virtual IList<Forum> Forums { get; set; } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Nh2331Test.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Nh2331Test.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Nh2331Test.cs 2010-09-26 14:26:22 UTC (rev 5223) @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using NHibernate.Criterion; +using NHibernate.Transform; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2331 +{ + public class Bar + { + public string Name { get; set; } + public double Sum { get; set; } + } + + [TestFixture, Ignore("Not fixed yet.")] + public class Nh2331Test : BugTestCase + { + private Guid person0Id; + private Guid person1Id; + + protected override void OnSetUp() + { + base.OnSetUp(); + + var person0 = new Person + { + Name = "Schorsch", + }; + + var person1 = new Person + { + Name = "Sepp", + }; + + var person2 = new Person + { + Name = "Detlef", + }; + + var forum0 = new Forum + { + Name = "Oof", + Dollars = 1887.00, + }; + + var forum1 = new Forum + { + Name = "Rab", + Dollars = 33.00, + }; + + var forum2 = new Forum + { + Name = "Main", + Dollars = 42.42, + }; + + var group0 = new MemberGroup + { + Name = "Gruppe Bla", + Members = new List<Person>(), + Forums = new List<Forum>(), + }; + group0.Members.Add(person0); + group0.Forums.Add(forum0); + group0.Forums.Add(forum1); + + var group1 = new MemberGroup + { + Name = "Gruppe Blub", + Members = new List<Person>(), + Forums = new List<Forum>(), + }; + group1.Members.Add(person1); + group1.Members.Add(person2); + group1.Forums.Add(forum2); + + using (ISession session = OpenSession()) + { + person0Id = (Guid) session.Save(person0); + person1Id = (Guid) session.Save(person1); + + session.Flush(); + } + } + + protected override void OnTearDown() + { + base.OnTearDown(); + using (ISession session = OpenSession()) + { + string hql = "from System.Object"; + session.Delete(hql); + session.Flush(); + } + } + + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return (true); + } + + [Test] + public void DetachedCriteriaCorrelatedQueryExplodes() + { + using (ISession session = OpenSession()) + { + DetachedCriteria memberGroupCriteria + = DetachedCriteria + .For<MemberGroup>() + .CreateAlias("Members", "m") + .CreateAlias("Forums", "f") + .Add(Restrictions.EqProperty("m.Id", "p.Id")) + .SetProjection(Projections.Property("f.Id")) + ; + + var ids = new List<Guid>(); + ids.Add(person0Id); + ids.Add(person1Id); + + DetachedCriteria forumCriteria + = DetachedCriteria + .For<Forum>("fff") + .Add(Restrictions.NotEqProperty("Id", "p.Id")) + .Add(Subqueries.PropertyIn("Id", memberGroupCriteria)) + .SetProjection + ( + Projections.Sum("Dollars") + ) + ; + + DetachedCriteria personCriteria + = DetachedCriteria + .For<Person>("p") + .Add(Restrictions.InG("Id", ids)) + .SetProjection + ( + Projections + .ProjectionList() + .Add(Projections.Property("Name"), "Name") + .Add(Projections.SubQuery(forumCriteria), "Sum") + ) + .SetResultTransformer(Transformers.AliasToBean(typeof (Bar))) + ; + + ICriteria criteria = personCriteria.GetExecutableCriteria(session); + criteria.Executing(c => c.List()).NotThrows(); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Person.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Person.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Person.cs 2010-09-26 14:26:22 UTC (rev 5223) @@ -0,0 +1,10 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.NH2331 +{ + public class Person + { + public virtual Guid Id { get; set; } + public virtual string Name { get; set; } + } +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-26 03:53:27 UTC (rev 5222) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-26 14:26:22 UTC (rev 5223) @@ -511,6 +511,10 @@ <Compile Include="NHSpecificTest\NH2324\CompositeUserType.cs" /> <Compile Include="NHSpecificTest\NH2324\Entity.cs" /> <Compile Include="NHSpecificTest\NH2324\BulkUpdateWithCustomCompositeType.cs" /> + <Compile Include="NHSpecificTest\NH2331\Forum.cs" /> + <Compile Include="NHSpecificTest\NH2331\MemberGroup.cs" /> + <Compile Include="NHSpecificTest\NH2331\Nh2331Test.cs" /> + <Compile Include="NHSpecificTest\NH2331\Person.cs" /> <Compile Include="NHSpecificTest\NH2344\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2344\Model.cs" /> <Compile Include="TypesTest\CharClass.cs" /> @@ -2308,6 +2312,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2331\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2324\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2344\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2112\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jul...@us...> - 2010-09-26 03:53:34
|
Revision: 5222 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5222&view=rev Author: julian-maughan Date: 2010-09-26 03:53:27 +0000 (Sun, 26 Sep 2010) Log Message: ----------- Fixed "QueryException thrown when grouping by component". Port of HHH-5082 (r19183). Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/ICriteriaQuery.cs trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/ICriteriaQuery.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/ICriteriaQuery.cs 2010-09-26 03:00:13 UTC (rev 5221) +++ trunk/nhibernate/src/NHibernate/Criterion/ICriteriaQuery.cs 2010-09-26 03:53:27 UTC (rev 5222) @@ -13,8 +13,11 @@ { ISessionFactoryImplementor Factory { get; } - /// <summary> Get the names of the columns mapped by a property path, ignoring projection aliases </summary> + /// <summary> Get the name of the column mapped by a property path, ignoring projection alias</summary> string GetColumn(ICriteria criteria, string propertyPath); + + /// <summary> Get the names of the columns mapped by a property path, ignoring projection aliases</summary> + string[] GetColumns(ICriteria criteria, string propertyPath); /// <summary> Get the type of a property path, ignoring projection aliases</summary> IType GetType(ICriteria criteria, string propertyPath); @@ -75,4 +78,4 @@ /// </summary> int? CreatePagingParameter(int value); } -} +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs 2010-09-26 03:00:13 UTC (rev 5221) +++ trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs 2010-09-26 03:53:27 UTC (rev 5222) @@ -2,6 +2,7 @@ using System.Collections.Generic; using NHibernate.SqlCommand; using NHibernate.Type; +using NHibernate.Util; namespace NHibernate.Criterion { @@ -72,7 +73,7 @@ { throw new InvalidOperationException("not a grouping projection"); } - return new SqlString(criteriaQuery.GetColumn(criteria, propertyName)); + return new SqlString(StringHelper.Join(",", criteriaQuery.GetColumns(criteria, propertyName))); } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs 2010-09-26 03:00:13 UTC (rev 5221) +++ trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs 2010-09-26 03:53:27 UTC (rev 5222) @@ -530,7 +530,7 @@ public string GetColumn(ICriteria criteria, string propertyName) { - string[] cols = GetColumns(propertyName, criteria); + string[] cols = GetColumns(criteria, propertyName); if (cols.Length != 1) { throw new QueryException("property does not map to a single column: " + propertyName); @@ -546,7 +546,7 @@ // NH Different behavior: we don't use the projection alias for NH-1023 try { - return GetColumns(propertyName, subcriteria); + return GetColumns(subcriteria, propertyName); } catch (HibernateException) { @@ -579,7 +579,7 @@ return new TypedValue(loadable.IdentifierType, value, EntityMode.Poco); } - private string[] GetColumns(string propertyName, ICriteria subcriteria) + public string[] GetColumns(ICriteria subcriteria, string propertyName) { string entName = GetEntityName(subcriteria, propertyName); if (entName == null) @@ -795,7 +795,7 @@ //look for a property try { - return GetColumns(propertyName, subcriteria); + return GetColumns(subcriteria, propertyName); } catch (HibernateException) { Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2010-09-26 03:00:13 UTC (rev 5221) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2010-09-26 03:53:27 UTC (rev 5222) @@ -239,9 +239,170 @@ } [Test] - [Ignore("To be implemented")] public void SubselectWithComponent() { + Course course = null; + Student gavin = null; + DetachedCriteria dc = null; + CityState odessaWa = null; + Enrolment enrolment2 = null; + + using (ISession session = OpenSession()) + using (ITransaction t = session.BeginTransaction()) + { + course = new Course(); + course.CourseCode = "HIB"; + course.Description = "Hibernate Training"; + session.Save(course); + + odessaWa = new CityState("Odessa", "WA"); + + gavin = new Student(); + gavin.Name = "Gavin King"; + gavin.StudentNumber = 232; + gavin.CityState = odessaWa; + session.Save(gavin); + + enrolment2 = new Enrolment(); + enrolment2.Course = course; + enrolment2.CourseCode = course.CourseCode; + enrolment2.Semester = 3; + enrolment2.Year = 1998; + enrolment2.Student = gavin; + enrolment2.StudentNumber = gavin.StudentNumber; + gavin.Enrolments.Add(enrolment2); + + session.Persist(enrolment2); + + dc = DetachedCriteria.For<Student>() + .Add(Property.ForName("CityState").Eq(odessaWa)) + .SetProjection(Property.ForName("CityState")); + + session.CreateCriteria<Student>() + .Add(Subqueries.Exists(dc)) + .List(); + + t.Commit(); + } + + using (ISession session = OpenSession()) + using (ITransaction t = session.BeginTransaction()) + { + try + { + session.CreateCriteria<Student>() + .Add(Subqueries.PropertyEqAll("CityState", dc)) + .List(); + + Assert.Fail("should have failed because cannot compare subquery results with multiple columns"); + } + catch (QueryException ex) + { + // expected + } + t.Rollback(); + } + + using (ISession session = OpenSession()) + using (ITransaction t = session.BeginTransaction()) + { + try + { + session.CreateCriteria<Student>() + .Add(Property.ForName("CityState").EqAll(dc)) + .List(); + + Assert.Fail("should have failed because cannot compare subquery results with multiple columns"); + } + catch (QueryException ex) + { + // expected + } + finally + { + t.Rollback(); + } + } + + using (ISession session = OpenSession()) + using (ITransaction t = session.BeginTransaction()) + { + try + { + session.CreateCriteria<Student>() + .Add(Subqueries.In(odessaWa, dc)) + .List(); + + Assert.Fail("should have failed because cannot compare subquery results with multiple columns"); + } + catch (NHibernate.Exceptions.GenericADOException ex) + { + // expected + } + finally + { + t.Rollback(); + } + } + + using (ISession session = OpenSession()) + using (ITransaction t = session.BeginTransaction()) + { + DetachedCriteria dc2 = DetachedCriteria.For<Student>("st1") + .Add(Property.ForName("st1.CityState").EqProperty("st2.CityState")) + .SetProjection(Property.ForName("CityState")); + + try + { + session.CreateCriteria<Student>("st2") + .Add( Subqueries.Eq(odessaWa, dc2)) + .List(); + Assert.Fail("should have failed because cannot compare subquery results with multiple columns"); + } + catch (NHibernate.Exceptions.GenericADOException ex) + { + // expected + } + finally + { + t.Rollback(); + } + } + + using (ISession session = OpenSession()) + using (ITransaction t = session.BeginTransaction()) + { + DetachedCriteria dc3 = DetachedCriteria.For<Student>("st") + .CreateCriteria("Enrolments") + .CreateCriteria("Course") + .Add(Property.ForName("Description").Eq("Hibernate Training")) + .SetProjection(Property.ForName("st.CityState")); + try + { + session.CreateCriteria<Enrolment>("e") + .Add(Subqueries.Eq(odessaWa, dc3)) + .List(); + + Assert.Fail("should have failed because cannot compare subquery results with multiple columns"); + } + catch (NHibernate.Exceptions.GenericADOException ex) + { + // expected + } + finally + { + t.Rollback(); + } + } + + using (ISession session = OpenSession()) + using (ITransaction t = session.BeginTransaction()) + { + session.Delete(enrolment2); + session.Delete(gavin); + session.Delete(course); + t.Commit(); + } } [Test] @@ -1090,11 +1251,15 @@ Course course = new Course(); course.CourseCode = "HIB"; course.Description = "Hibernate Training"; + course.CourseMeetings.Add(new CourseMeeting(course, "Monday", 1, "1313 Mockingbird Lane")); s.Save(course); Student gavin = new Student(); gavin.Name = "Gavin King"; gavin.StudentNumber = 667; + CityState odessaWa = new CityState("Odessa", "WA"); + gavin.CityState = odessaWa; + gavin.PreferredCourse = course; s.Save(gavin); Student xam = new Student(); @@ -1123,11 +1288,92 @@ s.Save(enrolment); s.Flush(); + // Subtest #1 + IList resultList = s.CreateCriteria<Enrolment>() + .SetProjection(Projections.ProjectionList() + .Add(Property.ForName("Student"), "student") + .Add(Property.ForName("Course"), "course") + .Add(Property.ForName("Semester"), "semester") + .Add(Property.ForName("Year"), "year") + ).List(); + + Assert.That(resultList.Count, Is.EqualTo(2)); + + foreach (object[] objects in resultList) + { + Assert.That(objects.Length, Is.EqualTo(4)); + Assert.That(objects[0], Is.InstanceOf<Student>()); + Assert.That(objects[1], Is.InstanceOf<Course>()); + Assert.That(objects[2], Is.InstanceOf<short>()); + Assert.That(objects[3], Is.InstanceOf<short>()); + } + + // Subtest #2 + resultList = s.CreateCriteria<Student>() + .SetProjection(Projections.ProjectionList() + .Add(Projections.Id().As("StudentNumber")) + .Add(Property.ForName("Name"), "name") + .Add(Property.ForName("CityState"), "cityState") + .Add(Property.ForName("PreferredCourse"), "preferredCourse") + ).List(); + + Assert.That(resultList.Count, Is.EqualTo(2)); + + foreach(object[] objects in resultList) + { + Assert.That(objects.Length, Is.EqualTo(4)); + Assert.That(objects[0], Is.InstanceOf<long>()); + Assert.That(objects[1], Is.InstanceOf<string>()); + + if ("Gavin King".Equals(objects[1])) + { + Assert.That(objects[2], Is.InstanceOf<CityState>()); + Assert.That(objects[3], Is.InstanceOf<Course>()); + } + else + { + Assert.That(objects[2], Is.Null); + Assert.That(objects[3], Is.Null); + } + } + + // Subtest #3 + resultList = s.CreateCriteria<Student>() + .Add(Restrictions.Eq("Name", "Gavin King")) + .SetProjection(Projections.ProjectionList() + .Add(Projections.Id().As("StudentNumber")) + .Add(Property.ForName("Name"), "name") + .Add(Property.ForName("CityState"), "cityState") + .Add(Property.ForName("PreferredCourse"), "preferredCourse") + ).List(); + + Assert.That(resultList.Count, Is.EqualTo(1)); + + // Subtest #4 + object[] aResult = (object[])s.CreateCriteria<Student>() + .Add(Restrictions.IdEq(667L)) + .SetProjection(Projections.ProjectionList() + .Add(Projections.Id().As("StudentNumber")) + .Add(Property.ForName("Name"), "name") + .Add(Property.ForName("CityState"), "cityState") + .Add(Property.ForName("PreferredCourse"), "preferredCourse") + ).UniqueResult(); + + Assert.That(aResult, Is.Not.Null); + Assert.That(aResult.Length, Is.EqualTo(4)); + Assert.That(aResult[0], Is.InstanceOf<long>()); + Assert.That(aResult[1], Is.InstanceOf<string>()); + Assert.That(aResult[2], Is.InstanceOf<CityState>()); + Assert.That(aResult[3], Is.InstanceOf<Course>()); + + // Subtest #5 int count = (int)s.CreateCriteria(typeof(Enrolment)) .SetProjection(Property.ForName("StudentNumber").Count().SetDistinct()) .UniqueResult(); + Assert.AreEqual(2, count); + // Subtest #6 object obj = s.CreateCriteria(typeof(Enrolment)) .SetProjection(Projections.ProjectionList() .Add(Property.ForName("StudentNumber").Count()) @@ -1136,6 +1382,7 @@ .Add(Property.ForName("StudentNumber").Avg()) ) .UniqueResult(); + object[] result = (object[])obj; Assert.AreEqual(2, result[0]); @@ -1143,7 +1390,7 @@ Assert.AreEqual(101L, result[2]); Assert.AreEqual(384.0D, (double)result[3], 0.01D); - + // Subtest #7 s.CreateCriteria(typeof(Enrolment)) .Add(Property.ForName("StudentNumber").Gt(665L)) .Add(Property.ForName("StudentNumber").Lt(668L)) @@ -1152,6 +1399,7 @@ .AddOrder(Property.ForName("StudentNumber").Asc()) .UniqueResult(); + // Subtest #8 IList resultWithMaps = s.CreateCriteria(typeof(Enrolment)) .SetProjection(Projections.ProjectionList() .Add(Property.ForName("StudentNumber").As("stNumber")) @@ -1164,11 +1412,12 @@ .List(); Assert.AreEqual(1, resultWithMaps.Count); + IDictionary m1 = (IDictionary)resultWithMaps[0]; - Assert.AreEqual(667L, m1["stNumber"]); Assert.AreEqual(course.CourseCode, m1["cCode"]); + // Subtest #9 resultWithMaps = s.CreateCriteria(typeof(Enrolment)) .SetProjection(Property.ForName("StudentNumber").As("stNumber")) .AddOrder(Order.Desc("stNumber")) @@ -1176,19 +1425,19 @@ .List(); Assert.AreEqual(2, resultWithMaps.Count); + IDictionary m0 = (IDictionary)resultWithMaps[0]; m1 = (IDictionary)resultWithMaps[1]; - Assert.AreEqual(101L, m1["stNumber"]); Assert.AreEqual(667L, m0["stNumber"]); - + // Subtest #10 IList resultWithAliasedBean = s.CreateCriteria(typeof(Enrolment)) .CreateAlias("Student", "st") .CreateAlias("Course", "co") .SetProjection(Projections.ProjectionList() - .Add(Property.ForName("st.Name").As("studentName")) - .Add(Property.ForName("co.Description").As("courseDescription")) + .Add(Property.ForName("st.Name").As("studentName")) + .Add(Property.ForName("co.Description").As("courseDescription")) ) .AddOrder(Order.Desc("studentName")) .SetResultTransformer(Transformers.AliasToBean(typeof(StudentDTO))) @@ -1196,10 +1445,29 @@ Assert.AreEqual(2, resultWithAliasedBean.Count); + // Subtest #11 StudentDTO dto = (StudentDTO)resultWithAliasedBean[0]; Assert.IsNotNull(dto.Description); Assert.IsNotNull(dto.Name); + // Subtest #12 + CourseMeeting courseMeetingDto = s.CreateCriteria<CourseMeeting>() + .SetProjection(Projections.ProjectionList() + .Add(Property.ForName("Id").As("id")) + .Add(Property.ForName("Course").As("course")) + ) + .AddOrder(Order.Desc("id")) + .SetResultTransformer(Transformers.AliasToBean<CourseMeeting>()) + .UniqueResult<CourseMeeting>(); + + Assert.That(courseMeetingDto.Id, Is.Not.Null); + Assert.That(courseMeetingDto.Id.CourseCode, Is.EqualTo(course.CourseCode)); + Assert.That(courseMeetingDto.Id.Day, Is.EqualTo("Monday")); + Assert.That(courseMeetingDto.Id.Location, Is.EqualTo("1313 Mockingbird Lane")); + Assert.That(courseMeetingDto.Id.Period, Is.EqualTo(1)); + Assert.That(courseMeetingDto.Course.Description, Is.EqualTo(course.Description)); + + // Subtest #13 s.CreateCriteria(typeof(Student)) .Add(Expression.Like("Name", "Gavin", MatchMode.Start)) .AddOrder(Order.Asc("Name")) @@ -1209,14 +1477,15 @@ .CreateCriteria("Course", "c") .AddOrder(Order.Asc("Description")) .SetProjection(Projections.ProjectionList() - .Add(Property.ForName("this.Name")) - .Add(Property.ForName("e.Year")) - .Add(Property.ForName("e.Semester")) - .Add(Property.ForName("c.CourseCode")) - .Add(Property.ForName("c.Description")) + .Add(Property.ForName("this.Name")) + .Add(Property.ForName("e.Year")) + .Add(Property.ForName("e.Semester")) + .Add(Property.ForName("c.CourseCode")) + .Add(Property.ForName("c.Description")) ) .UniqueResult(); + // Subtest #14 ProjectionList p1 = Projections.ProjectionList() .Add(Property.ForName("StudentNumber").Count()) .Add(Property.ForName("StudentNumber").Max()) @@ -1226,10 +1495,10 @@ .Add(Property.ForName("StudentNumber").Min()) .Add(Property.ForName("StudentNumber").Avg()) .Add(Projections.SqlProjection( - "1 as constOne, count(*) as countStar", - new String[] { "constOne", "countStar" }, - new IType[] { NHibernateUtil.Int32, NHibernateUtil.Int32 } - )); + "1 as constOne, count(*) as countStar", + new String[] { "constOne", "countStar" }, + new IType[] { NHibernateUtil.Int32, NHibernateUtil.Int32 } + )); object[] array = (object[])s.CreateCriteria(typeof(Enrolment)) .SetProjection(Projections.ProjectionList().Add(p1).Add(p2)) @@ -1237,18 +1506,49 @@ Assert.AreEqual(7, array.Length); + // Subtest #15 IList list = s.CreateCriteria(typeof(Enrolment)) .CreateAlias("Student", "st") .CreateAlias("Course", "co") .SetProjection(Projections.ProjectionList() - .Add(Property.ForName("co.CourseCode").Group()) - .Add(Property.ForName("st.StudentNumber").Count().SetDistinct()) - .Add(Property.ForName("Year").Group()) + .Add(Property.ForName("co.CourseCode").Group()) + .Add(Property.ForName("st.StudentNumber").Count().SetDistinct()) + .Add(Property.ForName("Year").Group()) ) .List(); Assert.AreEqual(2, list.Count); + // Subtest #16 + list = s.CreateCriteria<Enrolment>() + .CreateAlias("Student", "st") + .CreateAlias("Course", "co") + .SetProjection(Projections.ProjectionList() + .Add(Property.ForName("co.CourseCode").Group().As("courseCode")) + .Add(Property.ForName("st.StudentNumber").Count().SetDistinct().As("studentNumber")) + .Add(Property.ForName("Year").Group()) + ) + .AddOrder(Order.Asc("courseCode")) + .AddOrder(Order.Asc("studentNumber")) + .List(); + + Assert.That(list.Count, Is.EqualTo(2)); + + // Subtest #17 + list = s.CreateCriteria<Enrolment>() + .CreateAlias("Student", "st") + .CreateAlias("Course", "co") + .SetProjection(Projections.ProjectionList() + .Add(Property.ForName("co.CourseCode").Group().As("cCode")) + .Add(Property.ForName("st.StudentNumber").Count().SetDistinct().As("stNumber")) + .Add(Property.ForName("Year").Group()) + ) + .AddOrder(Order.Asc("cCode")) + .AddOrder(Order.Asc("stNumber")) + .List(); + + Assert.That(list.Count, Is.EqualTo(2)); + s.Delete(gavin); s.Delete(xam); s.Delete(course); @@ -1258,15 +1558,272 @@ } [Test] - [Ignore("To be implemented")] public void DistinctProjectionsOfComponents() { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + Course course = new Course(); + course.CourseCode = "HIB"; + course.Description = "Hibernate Training"; + s.Save(course); + + Student gavin = new Student(); + gavin.Name = "Gavin King"; + gavin.StudentNumber = 667; + gavin.CityState = new CityState("Odessa", "WA");; + s.Save(gavin); + + Student xam = new Student(); + xam.Name = "Max Rydahl Andersen"; + xam.StudentNumber = 101; + xam.PreferredCourse = course; + xam.CityState = new CityState("Odessa", "WA");; + s.Save(xam); + + Enrolment enrolment = new Enrolment(); + enrolment.Course = course; + enrolment.CourseCode = course.CourseCode; + enrolment.Semester = 1; + enrolment.Year = 1999; + enrolment.Student = xam; + enrolment.StudentNumber = xam.StudentNumber; + xam.Enrolments.Add(enrolment); + s.Save(enrolment); + + enrolment = new Enrolment(); + enrolment.Course = course; + enrolment.CourseCode = course.CourseCode; + enrolment.Semester = 3; + enrolment.Year = 1998; + enrolment.Student = gavin; + enrolment.StudentNumber = gavin.StudentNumber; + gavin.Enrolments.Add(enrolment); + s.Save(enrolment); + s.Flush(); + + object result = s.CreateCriteria<Student>() + .SetProjection(Projections.Distinct(Property.ForName("CityState"))) + .UniqueResult(); + + Assert.That(result, Is.InstanceOf<CityState>()); + Assert.That(((CityState)result).City, Is.EqualTo("Odessa")); + Assert.That(((CityState)result).State, Is.EqualTo("WA")); + + result = s.CreateCriteria<Student>() + .SetProjection(Projections.Distinct(Property.ForName("CityState").As("cityState"))) + .AddOrder(Order.Asc("cityState")) + .UniqueResult(); + + Assert.That(result, Is.InstanceOf<CityState>()); + Assert.That(((CityState)result).City, Is.EqualTo("Odessa")); + Assert.That(((CityState)result).State, Is.EqualTo("WA")); + + result = s.CreateCriteria<Student>() + .SetProjection(Projections.Count("CityState.City")) + .UniqueResult(); + + Assert.That(result, Is.EqualTo(2)); + + result = s.CreateCriteria<Student>() + .SetProjection(Projections.CountDistinct("CityState.City")) + .UniqueResult(); + + Assert.That(result, Is.EqualTo(1)); + + t.Commit(); + s.Close(); + +// s = OpenSession(); +// t = s.BeginTransaction(); +// try +// { +// result = s.CreateCriteria<Student>() +// .SetProjection(Projections.Count("CityState")) +// .UniqueResult(); +// +// if (!Dialect.SupportsTupleCounts) +// { +// fail( "expected SQLGrammarException" ); +// } +// +// Assert.That((long)result, Is.EqualTo(1L)); +// } +// catch (NHibernate.Exceptions.SQLGrammarException ex) +// { +// throw ex; +// if (!Dialect.SupportsTupleCounts) +// { +// // expected +// } +// else +// { +// throw ex; +// } +// } +// finally +// { +// t.Rollback(); +// s.Close(); +// } + +// s = OpenSession(); +// t = s.BeginTransaction(); +// try +// { +// result = s.CreateCriteria<Student>() +// .SetProjection(Projections.CountDistinct("CityState")) +// .UniqueResult(); +// +// if (!Dialect.SupportsTupleDistinctCounts) +// { +// fail("expected SQLGrammarException"); +// } +// +// Assert.That((long)result, Is.EqualTo(1L)); +// } +// catch (NHibernate.Exceptions.SQLGrammarException ex) +// { +// throw ex; +// if (Dialect.SupportsTupleDistinctCounts) +// { +// // expected +// } +// else +// { +// throw ex; +// } +// } +// finally +// { +// t.Rollback(); +// s.Close(); +// } + + s = OpenSession(); + t = s.BeginTransaction(); + s.Delete(gavin); + s.Delete(xam); + s.Delete(course); + + t.Commit(); + s.Close(); } [Test] - [Ignore("To be implemented")] public void GroupByComponent() { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + Course course = new Course(); + course.CourseCode = "HIB"; + course.Description = "Hibernate Training"; + s.Save(course); + + Student gavin = new Student(); + gavin.Name = "Gavin King"; + gavin.StudentNumber = 667; + gavin.CityState = new CityState("Odessa", "WA");; + s.Save(gavin); + + Student xam = new Student(); + xam.Name = "Max Rydahl Andersen"; + xam.StudentNumber = 101; + xam.PreferredCourse = course; + xam.CityState = new CityState("Odessa", "WA");; + s.Save(xam); + + Enrolment enrolment = new Enrolment(); + enrolment.Course = course; + enrolment.CourseCode = course.CourseCode; + enrolment.Semester = 1; + enrolment.Year = 1999; + enrolment.Student = xam; + enrolment.StudentNumber = xam.StudentNumber; + xam.Enrolments.Add(enrolment); + s.Save(enrolment); + + enrolment = new Enrolment(); + enrolment.Course = course; + enrolment.CourseCode = course.CourseCode; + enrolment.Semester = 3; + enrolment.Year = 1998; + enrolment.Student = gavin; + enrolment.StudentNumber = gavin.StudentNumber; + gavin.Enrolments.Add(enrolment); + s.Save(enrolment); + s.Flush(); + + object result = s.CreateCriteria<Student>() + .SetProjection(Projections.GroupProperty("CityState")) + .UniqueResult(); + + Assert.That(result, Is.InstanceOf<CityState>()); + Assert.That(((CityState)result).City, Is.EqualTo("Odessa")); + Assert.That(((CityState)result).State, Is.EqualTo("WA")); + + result = s.CreateCriteria<Student>("st") + .SetProjection(Projections.GroupProperty("st.CityState")) + .UniqueResult(); + + Assert.That(result, Is.InstanceOf<CityState>()); + Assert.That(((CityState)result).City, Is.EqualTo("Odessa")); + Assert.That(((CityState)result).State, Is.EqualTo("WA")); + + result = s.CreateCriteria<Student>("st") + .SetProjection(Projections.GroupProperty("st.CityState")) + .AddOrder(Order.Asc("CityState")) + .UniqueResult(); + + Assert.That(result, Is.InstanceOf<CityState>()); + Assert.That(((CityState)result).City, Is.EqualTo("Odessa")); + Assert.That(((CityState)result).State, Is.EqualTo("WA")); + + result = s.CreateCriteria<Student>("st") + .SetProjection(Projections.GroupProperty("st.CityState").As("cityState")) + .AddOrder(Order.Asc("cityState")) + .UniqueResult(); + + Assert.That(result, Is.InstanceOf<CityState>()); + Assert.That(((CityState)result).City, Is.EqualTo("Odessa")); + Assert.That(((CityState)result).State, Is.EqualTo("WA")); + + result = s.CreateCriteria<Student>("st") + .SetProjection(Projections.GroupProperty("st.CityState").As("cityState")) + .AddOrder(Order.Asc("cityState")) + .UniqueResult(); + + Assert.That(result, Is.InstanceOf<CityState>()); + Assert.That(((CityState)result).City, Is.EqualTo("Odessa")); + Assert.That(((CityState)result).State, Is.EqualTo("WA")); + + result = s.CreateCriteria<Student>("st") + .SetProjection(Projections.GroupProperty("st.CityState").As("cityState")) + .Add(Restrictions.Eq("st.CityState", new CityState("Odessa", "WA"))) + .AddOrder(Order.Asc("cityState")) + .UniqueResult(); + + Assert.That(result, Is.InstanceOf<CityState>()); + Assert.That(((CityState)result).City, Is.EqualTo("Odessa")); + Assert.That(((CityState)result).State, Is.EqualTo("WA")); + + IList list = s.CreateCriteria<Enrolment>() + .CreateAlias("Student", "st") + .CreateAlias("Course", "co") + .SetProjection(Projections.ProjectionList() + .Add(Property.ForName("co.CourseCode").Group()) + .Add(Property.ForName("st.CityState").Group()) + .Add(Property.ForName("Year").Group()) + ) + .List(); + + s.Delete(gavin); + s.Delete(xam); + s.Delete(course); + + t.Commit(); + s.Close(); } [Test] @@ -1624,9 +2181,24 @@ } [Test] - [Ignore("To be implemented")] public void ProjectedCompositeIdWithAlias() { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + Course course = new Course(); + course.CourseCode = "HIB"; + course.Description = "Hibernate Training"; + course.CourseMeetings.Add(new CourseMeeting(course, "Monday", 1, "1313 Mockingbird Lane")); + s.Save(course); + s.Flush(); + + IList data = (IList)s.CreateCriteria<CourseMeeting>() + .SetProjection(Projections.Id().As("id")) + .List(); + + t.Rollback(); + } } [Test] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jul...@us...> - 2010-09-26 03:00:19
|
Revision: 5221 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5221&view=rev Author: julian-maughan Date: 2010-09-26 03:00:13 +0000 (Sun, 26 Sep 2010) Log Message: ----------- Document breaking change: removal of Sybase ASE dialects (see r5188) Modified Paths: -------------- trunk/nhibernate/releasenotes.txt Modified: trunk/nhibernate/releasenotes.txt =================================================================== --- trunk/nhibernate/releasenotes.txt 2010-09-26 02:53:50 UTC (rev 5220) +++ trunk/nhibernate/releasenotes.txt 2010-09-26 03:00:13 UTC (rev 5221) @@ -2,11 +2,12 @@ ============================= ** Known BREAKING CHANGES from NH2.1.1.GA to NH3.0.0.Alpha3 ##### Run time ##### - * (NH-2199) - null values in maps/dictionaries are no longer silenty ignored/deleted - * (NH-1894) - SybaseAnywhereDialect has been removed, and replaced with SybaseASA9Dialect + * [NH-2199] - null values in maps/dictionaries are no longer silenty ignored/deleted + * [NH-1894] - SybaseAnywhereDialect has been removed, and replaced with SybaseASA9Dialect. + - Sybase Adaptive Server Enterprise (ASE) dialects removed. ##### Possible Breaking Changes ##### - * (NH-2251) - Signature change for GetLimitString in Dialect + * [NH-2251] - Signature change for GetLimitString in Dialect Build 3.0.0.Alpha2 (rev5159) ============================= This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jul...@us...> - 2010-09-26 02:53:59
|
Revision: 5220 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5220&view=rev Author: julian-maughan Date: 2010-09-26 02:53:50 +0000 (Sun, 26 Sep 2010) Log Message: ----------- Added support for projections using composite keys and components (NH-2202). See also HHH-1088 (r19110). Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/AliasedProjection.cs trunk/nhibernate/src/NHibernate/Criterion/Distinct.cs trunk/nhibernate/src/NHibernate/Criterion/IProjection.cs trunk/nhibernate/src/NHibernate/Criterion/ProjectionList.cs trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs trunk/nhibernate/src/NHibernate/Criterion/SimpleProjection.cs trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate.Test/Criteria/Course.cs trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Enrolment.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Enrolment.hbm.xml trunk/nhibernate/src/NHibernate.Test/Criteria/Student.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Criterion/IEnhancedProjection.cs trunk/nhibernate/src/NHibernate.Test/Criteria/CityState.cs trunk/nhibernate/src/NHibernate.Test/Criteria/CourseMeeting.cs trunk/nhibernate/src/NHibernate.Test/Criteria/CourseMeetingId.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Model.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/AliasedProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/AliasedProjection.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/Criterion/AliasedProjection.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -1,14 +1,14 @@ using System; +using System.Collections.Generic; + using NHibernate.SqlCommand; +using NHibernate.Engine; using NHibernate.Type; namespace NHibernate.Criterion { - using System.Collections.Generic; - using Engine; - [Serializable] - public class AliasedProjection : IProjection + public class AliasedProjection : IEnhancedProjection { private readonly IProjection projection; private readonly string alias; @@ -36,9 +36,9 @@ public virtual IType[] GetTypes(String alias, ICriteria criteria, ICriteriaQuery criteriaQuery) { - return this.alias.Equals(alias) ? - GetTypes(criteria, criteriaQuery) : - null; + return this.alias.Equals(alias) + ? GetTypes(criteria, criteriaQuery) + : null; } public virtual string[] GetColumnAliases(int loc) @@ -48,10 +48,24 @@ public virtual string[] GetColumnAliases(string alias, int loc) { - return this.alias.Equals(alias) ? - GetColumnAliases(loc) : - null; + return this.alias.Equals(alias) + ? GetColumnAliases(loc) + : null; } + + public string[] GetColumnAliases(int position, ICriteria criteria, ICriteriaQuery criteriaQuery) + { + return projection is IEnhancedProjection + ? ((IEnhancedProjection)projection).GetColumnAliases(position, criteria, criteriaQuery) + : this.GetColumnAliases(position); + } + + public string[] GetColumnAliases(string alias, int position, ICriteria criteria, ICriteriaQuery criteriaQuery) + { + return this.alias.Equals(alias) + ? GetColumnAliases(position, criteria, criteriaQuery) + : null; + } public virtual string[] Aliases { @@ -84,4 +98,4 @@ return projection.ToString() + " as " + alias; } } -} +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Criterion/Distinct.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Distinct.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/Criterion/Distinct.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -1,14 +1,13 @@ using System; +using System.Collections.Generic; +using NHibernate.Engine; using NHibernate.SqlCommand; using NHibernate.Type; namespace NHibernate.Criterion { - using System.Collections.Generic; - using Engine; - [Serializable] - public class Distinct : IProjection + public class Distinct : IEnhancedProjection { private readonly IProjection projection; @@ -42,11 +41,25 @@ { return projection.GetColumnAliases(loc); } + + public virtual string[] GetColumnAliases(int position, ICriteria criteria, ICriteriaQuery criteriaQuery) + { + return projection is IEnhancedProjection + ? ((IEnhancedProjection)projection).GetColumnAliases(position, criteria, criteriaQuery) + : GetColumnAliases(position); + } public virtual string[] GetColumnAliases(string alias, int loc) { return projection.GetColumnAliases(alias, loc); } + + public virtual string[] GetColumnAliases(string alias, int position, ICriteria criteria, ICriteriaQuery criteriaQuery) + { + return projection is IEnhancedProjection + ? ((IEnhancedProjection)projection).GetColumnAliases(alias, position, criteria, criteriaQuery) + : GetColumnAliases(alias, position); + } public virtual string[] Aliases { @@ -79,4 +92,4 @@ return "distinct " + projection.ToString(); } } -} +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Criterion/IEnhancedProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/IEnhancedProjection.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Criterion/IEnhancedProjection.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -0,0 +1,33 @@ +using System; + +namespace NHibernate.Criterion +{ + /// <summary> + /// An "enhanced" Projection for a <see cref="ICriteria" /> query. + /// </summary> + public interface IEnhancedProjection : IProjection + { + /// <summary> + /// Get the SQL column aliases used by this projection for the columns it writes for inclusion into the + /// <code>SELECT</code> clause <see cref="IProjection.ToSqlString" />. NHibernate always uses column aliases + /// to extract data from the <see cref="System.Data.IDataReader" />, so it is important that these be implemented + /// correctly in order for NHibernate to be able to extract these values correctly. + /// </summary> + /// <param name="position">Just as in <see cref="IProjection.ToSqlString" />, represents the number of columns rendered prior to this projection.</param> + /// <param name="criteria">The local criteria to which this project is attached (for resolution).</param> + /// <param name="criteriaQuery">The overall criteria query instance.</param> + /// <returns>The columns aliases.</returns> + string[] GetColumnAliases(int position, ICriteria criteria, ICriteriaQuery criteriaQuery); + + /// <summary> + /// Get the SQL column aliases used by this projection for the columns it writes for inclusion into the + /// <code>SELECT</code> clause (<see cref="IProjection.ToSqlString" />) for a particular criteria-level alias. + /// </summary> + /// <param name="alias">The criteria-level alias.</param> + /// <param name="position">Just as in <see cref="IProjection.ToSqlString" />, represents the number of columns rendered prior to this projection.</param> + /// <param name="criteria">The local criteria to which this project is attached (for resolution).</param> + /// <param name="criteriaQuery">The overall criteria query instance.</param> + /// <returns>The columns aliases.</returns> + string[] GetColumnAliases(string alias, int position, ICriteria criteria, ICriteriaQuery criteriaQuery); + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Criterion/IProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/IProjection.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/Criterion/IProjection.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -1,13 +1,12 @@ using System; +using System.Collections.Generic; using NHibernate.SqlCommand; +using NHibernate.Engine; +using NHibernate.Loader.Criteria; using NHibernate.Type; namespace NHibernate.Criterion { - using System.Collections.Generic; - using Engine; - using NHibernate.Loader.Criteria; - public interface IProjection { /// <summary> Modified: trunk/nhibernate/src/NHibernate/Criterion/ProjectionList.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/ProjectionList.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/Criterion/ProjectionList.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -1,16 +1,18 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq.Expressions; + +using NHibernate.Engine; using NHibernate.Impl; using NHibernate.SqlCommand; using NHibernate.Type; +using NHibernate.Util; namespace NHibernate.Criterion { - using Engine; - [Serializable] - public class ProjectionList : IProjection + public class ProjectionList : IEnhancedProjection { private IList<IProjection> elements = new List<IProjection>(); @@ -60,8 +62,8 @@ for (int i = 0; i < Length; i++) { IProjection proj = this[i]; - buf.Add(proj.ToSqlString(criteria, loc, criteriaQuery,enabledFilters)); - loc += proj.GetColumnAliases(loc).Length; + buf.Add(proj.ToSqlString(criteria, loc, criteriaQuery, enabledFilters)); + loc += GetColumnAliases(loc, criteria, criteriaQuery, proj).Length; if (i < elements.Count - 1) { buf.Add(", "); @@ -89,7 +91,7 @@ return buf.ToSqlString(); } - public String[] GetColumnAliases(int loc) + public string[] GetColumnAliases(int loc) { IList<string> aliases = new List<string>(Length); @@ -105,7 +107,7 @@ return result; } - public String[] GetColumnAliases(string alias, int loc) + public string[] GetColumnAliases(string alias, int loc) { for (int i = 0; i < Length; i++) { @@ -115,7 +117,44 @@ } return null; } + + public string[] GetColumnAliases(int position, ICriteria criteria, ICriteriaQuery criteriaQuery) + { + IList result = new ArrayList(this.Length); + for (int i = 0; i < this.Length; i++) + { + string[] colAliases = ProjectionList.GetColumnAliases(position, criteria, criteriaQuery, this[i]); + ArrayHelper.AddAll(result, colAliases); + position += colAliases.Length; + } + return ArrayHelper.ToStringArray(result); + } + + public string[] GetColumnAliases(string alias, int position, ICriteria criteria, ICriteriaQuery criteriaQuery) + { + for (int i = 0; i < this.Length; i++) + { + string[] result = GetColumnAliases(alias, position, criteria, criteriaQuery, this[i]); + if (result != null) return result; + position += GetColumnAliases(position, criteria, criteriaQuery, this[i]).Length; + } + return null; + } + + private static string[] GetColumnAliases(int position, ICriteria criteria, ICriteriaQuery criteriaQuery, IProjection projection) + { + return projection is IEnhancedProjection + ? ((IEnhancedProjection)projection).GetColumnAliases(position, criteria, criteriaQuery) + : projection.GetColumnAliases(position); + } + private static string[] GetColumnAliases(string alias, int position, ICriteria criteria, ICriteriaQuery criteriaQuery, IProjection projection) + { + return projection is IEnhancedProjection + ? ((IEnhancedProjection)projection).GetColumnAliases(alias, position, criteria, criteriaQuery) + : projection.GetColumnAliases(alias, position); + } + public IType[] GetTypes(string alias, ICriteria criteria, ICriteriaQuery criteriaQuery) { for (int i = 0; i < Length; i++) Modified: trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -1,11 +1,10 @@ using System; +using System.Collections.Generic; using NHibernate.SqlCommand; using NHibernate.Type; namespace NHibernate.Criterion { - using System.Collections.Generic; - /// <summary> /// A property value, or grouped property value /// </summary> @@ -53,13 +52,18 @@ public override SqlString ToSqlString(ICriteria criteria, int loc, ICriteriaQuery criteriaQuery, IDictionary<string, IFilter> enabledFilters) { - return new SqlString(new object[] - { - criteriaQuery.GetColumn(criteria, propertyName), - " as y", - loc.ToString(), - "_" - }); + SqlStringBuilder s = new SqlStringBuilder(); + string[] cols = criteriaQuery.GetColumnsUsingProjection(criteria, propertyName); + for (int i = 0; i < cols.Length; i++) + { + s.Add(cols[i]); + s.Add(" as y"); + s.Add((loc + i).ToString()); + s.Add("_"); + if (i < cols.Length - 1) + s.Add(", "); + } + return s.ToSqlString(); } public override SqlString ToGroupSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary<string, IFilter> enabledFilters) @@ -71,4 +75,4 @@ return new SqlString(criteriaQuery.GetColumn(criteria, propertyName)); } } -} +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Criterion/SimpleProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/SimpleProjection.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/Criterion/SimpleProjection.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -1,17 +1,16 @@ using System; +using System.Collections.Generic; using NHibernate.SqlCommand; +using NHibernate.Engine; using NHibernate.Type; namespace NHibernate.Criterion { - using System.Collections.Generic; - using Engine; - /// <summary> /// A single-column projection that may be aliased /// </summary> [Serializable] - public abstract class SimpleProjection : IProjection + public abstract class SimpleProjection : IEnhancedProjection { public IProjection As(string alias) { @@ -32,7 +31,24 @@ { return new string[] {"y" + loc + "_"}; } + + public string[] GetColumnAliases(string alias, int position, ICriteria criteria, ICriteriaQuery criteriaQuery) + { + return GetColumnAliases(alias, position); + } + public String[] GetColumnAliases(int position, ICriteria criteria, ICriteriaQuery criteriaQuery) + { + int numColumns = this.GetColumnCount(criteria, criteriaQuery); + string[] aliases = new string[numColumns]; + for (int i = 0; i < numColumns; i++) + { + aliases[i] = "y" + position + "_"; + position++; + } + return aliases; + } + public virtual string[] Aliases { get { return new String[1]; } @@ -44,7 +60,6 @@ public abstract bool IsAggregate { get; } - /// <summary> /// Gets the typed values for parameters in this projection /// </summary> @@ -59,5 +74,16 @@ public abstract SqlString ToSqlString(ICriteria criteria, int position, ICriteriaQuery criteriaQuery, IDictionary<string, IFilter> enabledFilters); public abstract IType[] GetTypes(ICriteria criteria, ICriteriaQuery criteriaQuery); + + private int GetColumnCount(ICriteria criteria, ICriteriaQuery criteriaQuery) + { + IType[] types = this.GetTypes(criteria, criteriaQuery); + int count = 0; + for (int i = 0; i < types.Length; i++) + { + count += types[i].GetColumnSpan(criteriaQuery.Factory); + } + return count; + } } } Modified: trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -8,6 +8,7 @@ using NHibernate.SqlCommand; using NHibernate.Transform; using NHibernate.Type; +using NHibernate.Util; namespace NHibernate.Loader.Criteria { @@ -84,10 +85,21 @@ IType[] types = translator.ProjectedTypes; result = new object[types.Length]; string[] columnAliases = translator.ProjectedColumnAliases; - - for (int i = 0; i < result.Length; i++) + + for (int i = 0, position = 0; i < result.Length; i++) { - result[i] = types[i].NullSafeGet(rs, columnAliases[i], session, null); + int numColumns = types[i].GetColumnSpan(session.Factory); + + if ( numColumns > 1 ) + { + string[] typeColumnAliases = ArrayHelper.Slice(columnAliases, position, numColumns); + result[i] = types[i].NullSafeGet(rs, typeColumnAliases, session, null); + } + else + { + result[i] = types[i].NullSafeGet(rs, columnAliases[position], session, null); + } + position += numColumns; } aliases = translator.ProjectedAliases; } Modified: trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Text; using Iesi.Collections.Generic; - using NHibernate.Criterion; using NHibernate.Engine; using NHibernate.Hql.Util; @@ -172,7 +171,12 @@ public string[] ProjectedColumnAliases { - get { return rootCriteria.Projection.GetColumnAliases(0); } + get + { + return rootCriteria.Projection is IEnhancedProjection + ? ((IEnhancedProjection)rootCriteria.Projection).GetColumnAliases(0, rootCriteria, this) + : rootCriteria.Projection.GetColumnAliases(0); + } } public string[] ProjectedAliases @@ -402,7 +406,7 @@ IType type = lastEntity.ToType(componentPath); if (type.IsAssociationType) { - if(type.IsCollectionType) + if(type.IsCollectionType) { // ignore joinables for composite collections var collectionType = (CollectionType)type; @@ -535,8 +539,7 @@ } /// <summary> - /// Get the names of the columns constrained - /// by this criterion. + /// Get the names of the columns constrained by this criterion. /// </summary> public string[] GetColumnsUsingProjection(ICriteria subcriteria, string propertyName) { Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-09-26 02:53:50 UTC (rev 5220) @@ -109,6 +109,7 @@ <Compile Include="Connection\DriverConnectionProvider.cs" /> <Compile Include="Connection\IConnectionProvider.cs" /> <Compile Include="Connection\UserSuppliedConnectionProvider.cs" /> + <Compile Include="Criterion\IEnhancedProjection.cs" /> <Compile Include="Dialect\DB2Dialect.cs" /> <Compile Include="Dialect\Dialect.cs" /> <Compile Include="Dialect\FirebirdDialect.cs" /> Added: trunk/nhibernate/src/NHibernate.Test/Criteria/CityState.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/CityState.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/CityState.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -0,0 +1,31 @@ +using System; + +namespace NHibernate.Test.Criteria +{ + [Serializable] + public class CityState + { + private string city; + private string state; + + public CityState() {} + + public CityState(string city, string state) + { + this.city = city; + this.state = state; + } + + public virtual string City + { + get { return this.city; } + set { this.city = value; } + } + + public virtual string State + { + get { return this.state; } + set { this.state = value; } + } + } +} Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Course.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Course.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Course.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -1,23 +1,30 @@ using System; +using Iesi.Collections.Generic; namespace NHibernate.Test.Criteria { public class Course { private string courseCode; - + private string description; + private ISet<CourseMeeting> courseMeetings = new HashedSet<CourseMeeting>(); + public virtual string CourseCode { get { return courseCode; } set { courseCode = value; } } - private string description; - public virtual string Description { get { return description; } set { description = value; } } + + public virtual ISet<CourseMeeting> CourseMeetings + { + get { return courseMeetings; } + set { courseMeetings = value; } + } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Criteria/CourseMeeting.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/CourseMeeting.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/CourseMeeting.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -0,0 +1,28 @@ +namespace NHibernate.Test.Criteria +{ + public class CourseMeeting + { + private CourseMeetingId id; + private Course course; + + public CourseMeeting() { } + + public CourseMeeting(Course course, string day, int period, string location) + { + this.id = new CourseMeetingId(course, day, period, location); + this.course = course; + } + + public virtual CourseMeetingId Id + { + get { return id; } + set { id = value; } + } + + public virtual Course Course + { + get { return course; } + set { course = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Criteria/CourseMeetingId.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/CourseMeetingId.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/CourseMeetingId.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -0,0 +1,60 @@ +using System; + +namespace NHibernate.Test.Criteria +{ + [Serializable] + public class CourseMeetingId + { + private string courseCode; + private string day; + private int period; + private string location; + + public CourseMeetingId() { } + + public CourseMeetingId(Course course, string day, int period, string location) + { + this.courseCode = course.CourseCode; + this.day = day; + this.period = period; + this.location = location; + } + + public virtual string CourseCode + { + get { return courseCode; } + set { courseCode = value; } + } + + public virtual string Day + { + get { return day; } + set { day = value; } + } + + public virtual int Period + { + get { return period; } + set { period = value; } + } + + public virtual string Location + { + get { return location; } + set { location = value; } + } + + public override bool Equals(object obj) + { + CourseMeetingId that = obj as CourseMeetingId; + if (that == null) + return false; + return courseCode == that.CourseCode && day == that.Day && period == that.Period && location == that.Location; + } + + public override int GetHashCode() + { + return courseCode.GetHashCode() ^ day.GetHashCode() ^ period.GetHashCode() ^ location.GetHashCode(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -67,7 +67,7 @@ using (ISession session = OpenSession()) { - // finds all courses which contain '%' as the first char in the description + // finds all courses which contain '%' as the first char in the description Course example = new Course(); example.Description = "&%%"; IList result = @@ -237,8 +237,14 @@ t.Commit(); session.Close(); } - + [Test] + [Ignore("To be implemented")] + public void SubselectWithComponent() + { + } + + [Test] public void CloningCriteria() { ISession s = OpenSession(); @@ -255,7 +261,7 @@ } [Test] - public void CloningCriteria_AddCount_RemoveOrderring() + public void CloningCriteria_AddCount_RemoveOrdering() { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); @@ -353,7 +359,7 @@ [Test] public void SubqueryPagination() - { + { using (ISession session = OpenSession()) using (ITransaction t = session.BeginTransaction()) { @@ -690,7 +696,7 @@ Enrolment key = new Enrolment(); key.CourseCode = "HIB"; - key.StudentNumber = 101;// xam + key.StudentNumber = 101;// xam //since we didn't load xam's entrollments before (skipped by orderring) //it should not be already loaded Enrolment shouldNotBeLoaded = (Enrolment)s.Load(typeof(Enrolment), key); @@ -1228,6 +1234,7 @@ object[] array = (object[])s.CreateCriteria(typeof(Enrolment)) .SetProjection(Projections.ProjectionList().Add(p1).Add(p2)) .UniqueResult(); + Assert.AreEqual(7, array.Length); IList list = s.CreateCriteria(typeof(Enrolment)) @@ -1249,8 +1256,20 @@ t.Commit(); s.Close(); } + + [Test] + [Ignore("To be implemented")] + public void DistinctProjectionsOfComponents() + { + } [Test] + [Ignore("To be implemented")] + public void GroupByComponent() + { + } + + [Test] public void CloningProjectionsUsingProperty() { ISession s = OpenSession(); @@ -1479,8 +1498,182 @@ t.Rollback(); s.Close(); } + + [Test] + public void ProjectedEmbeddedCompositeId() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + Course course = new Course(); + course.CourseCode = "HIB"; + course.Description = "Hibernate Training"; + s.Save(course); + + Student gavin = new Student(); + gavin.Name = "Gavin King"; + gavin.StudentNumber = 667; + s.Save(gavin); + + Student xam = new Student(); + xam.Name = "Max Rydahl Andersen"; + xam.StudentNumber = 101; + s.Save(xam); + + Enrolment enrolment = new Enrolment(); + enrolment.Course = course; + enrolment.CourseCode = course.CourseCode; + enrolment.Semester = 1; + enrolment.Year = 1999; + enrolment.Student = xam; + enrolment.StudentNumber = xam.StudentNumber; + gavin.Enrolments.Add(enrolment); + s.Save(enrolment); + + enrolment = new Enrolment(); + enrolment.Course = course; + enrolment.CourseCode = course.CourseCode; + enrolment.Semester = 3; + enrolment.Year = 1998; + enrolment.Student = gavin; + enrolment.StudentNumber = gavin.StudentNumber; + gavin.Enrolments.Add(enrolment); + s.Save(enrolment); + + s.Flush(); + + IList enrolments = (IList)s.CreateCriteria<Enrolment>() + .SetProjection(Projections.Id()) + .List(); + + t.Rollback(); + } + } + + [Test] + public void ProjectedListIncludesEmbeddedCompositeId() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + Course course = new Course(); + course.CourseCode = "HIB"; + course.Description = "Hibernate Training"; + s.Save(course); + + Student gavin = new Student(); + gavin.Name = "Gavin King"; + gavin.StudentNumber = 667; + s.Save(gavin); + + Student xam = new Student(); + xam.Name = "Max Rydahl Andersen"; + xam.StudentNumber = 101; + s.Save(xam); + + Enrolment enrolment = new Enrolment(); + enrolment.Course = course; + enrolment.CourseCode = course.CourseCode; + enrolment.Semester = 1; + enrolment.Year = 1999; + enrolment.Student = xam; + enrolment.StudentNumber = xam.StudentNumber; + gavin.Enrolments.Add(enrolment); + s.Save(enrolment); + + enrolment = new Enrolment(); + enrolment.Course = course; + enrolment.CourseCode = course.CourseCode; + enrolment.Semester = 3; + enrolment.Year = 1998; + enrolment.Student = gavin; + enrolment.StudentNumber = gavin.StudentNumber; + gavin.Enrolments.Add(enrolment); + s.Save(enrolment); + + s.Flush(); + + IList data = (IList)s.CreateCriteria<Enrolment>() + .SetProjection(Projections.ProjectionList() + .Add(Projections.Property("Semester")) + .Add(Projections.Property("Year")) + .Add(Projections.Id())) + .List(); + + t.Rollback(); + } + } + + [Test] + public void ProjectedCompositeId() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + Course course = new Course(); + course.CourseCode = "HIB"; + course.Description = "Hibernate Training"; + course.CourseMeetings.Add(new CourseMeeting(course, "Monday", 1, "1313 Mockingbird Lane")); + s.Save(course); + s.Flush(); + + IList data = (IList)s.CreateCriteria<CourseMeeting>().SetProjection(Projections.Id()).List(); + t.Rollback(); + } + } + [Test] + [Ignore("To be implemented")] + public void ProjectedCompositeIdWithAlias() + { + } + + [Test] + public void ProjectedComponent() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + Student gaith = new Student(); + gaith.Name = "Gaith Bell"; + gaith.StudentNumber = 123; + gaith.CityState = new CityState("Chicago", "Illinois"); + s.Save(gaith); + s.Flush(); + + IList cityStates = (IList)s.CreateCriteria<Student>() + .SetProjection(Projections.Property("CityState")) + .List(); + + t.Rollback(); + } + } + + [Test] + public void ProjectedListIncludesComponent() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + Student gaith = new Student(); + gaith.Name = "Gaith Bell"; + gaith.StudentNumber = 123; + gaith.CityState = new CityState("Chicago", "Illinois"); + s.Save(gaith); + s.Flush(); + + IList data = (IList)s.CreateCriteria<Student>() + .SetProjection(Projections.ProjectionList() + .Add(Projections.Property("CityState")) + .Add(Projections.Property("Name"))) + .List(); + + t.Rollback(); + } + } + + [Test] public void CloningProjectedId() { ISession s = OpenSession(); @@ -1871,7 +2064,7 @@ t.Commit(); } } - + [Test] public void TransformToRowCountTest() { @@ -1910,53 +2103,53 @@ } [Test] - public void OrderProjectionAliasedTest() - { - ISession session = OpenSession(); - ITransaction t = session.BeginTransaction(); + public void OrderProjectionAliasedTest() + { + ISession session = OpenSession(); + ITransaction t = session.BeginTransaction(); - Course courseA = new Course(); - courseA.CourseCode = "HIB-A"; - courseA.Description = "Hibernate Training A"; - session.Save(courseA); + Course courseA = new Course(); + courseA.CourseCode = "HIB-A"; + courseA.Description = "Hibernate Training A"; + session.Save(courseA); - Student gavin = new Student(); - gavin.Name = "Gavin King"; - gavin.StudentNumber = 232; - gavin.PreferredCourse = courseA; - session.Save(gavin); + Student gavin = new Student(); + gavin.Name = "Gavin King"; + gavin.StudentNumber = 232; + gavin.PreferredCourse = courseA; + session.Save(gavin); - Student leonardo = new Student(); - leonardo.Name = "Leonardo Quijano"; - leonardo.StudentNumber = 233; - leonardo.PreferredCourse = courseA; - session.Save(leonardo); + Student leonardo = new Student(); + leonardo.Name = "Leonardo Quijano"; + leonardo.StudentNumber = 233; + leonardo.PreferredCourse = courseA; + session.Save(leonardo); - Student johnDoe = new Student(); - johnDoe.Name = "John Doe"; - johnDoe.StudentNumber = 235; - johnDoe.PreferredCourse = null; - session.Save(johnDoe); + Student johnDoe = new Student(); + johnDoe.Name = "John Doe"; + johnDoe.StudentNumber = 235; + johnDoe.PreferredCourse = null; + session.Save(johnDoe); - IProjection conditional = + IProjection conditional = Projections.Conditional( - Restrictions.Eq("Name", "Gavin King"), - Projections.Constant("Name"), + Restrictions.Eq("Name", "Gavin King"), + Projections.Constant("Name"), Projections.Constant("AnotherName")); - ICriteria criteria = session.CreateCriteria(typeof(Student)); - criteria.SetMaxResults(1); - criteria.SetFirstResult(1); - IList result = criteria.SetProjection(Projections.Alias(conditional, "CheckName")) - .AddOrder(Order.Asc("CheckName")) - .List(); + ICriteria criteria = session.CreateCriteria(typeof(Student)); + criteria.SetMaxResults(1); + criteria.SetFirstResult(1); + IList result = criteria.SetProjection(Projections.Alias(conditional, "CheckName")) + .AddOrder(Order.Asc("CheckName")) + .List(); - session.Delete(gavin); - session.Delete(leonardo); - session.Delete(johnDoe); - session.Delete(courseA); - t.Commit(); - session.Close(); + session.Delete(gavin); + session.Delete(leonardo); + session.Delete(johnDoe); + session.Delete(courseA); + t.Commit(); + session.Close(); } [Test] Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Enrolment.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Enrolment.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Enrolment.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -6,47 +6,42 @@ public class Enrolment { private Student student; - + private Course course; + private long studentNumber; + private string courseCode = string.Empty; + private short year; + private short semester; + public virtual Student Student { get { return student; } set { student = value; } } - private Course course; - public virtual Course Course { get { return course; } set { course = value; } } - private long studentNumber; - public virtual long StudentNumber { get { return studentNumber; } set { studentNumber = value; } } - private string courseCode = string.Empty; - public virtual string CourseCode { get { return courseCode; } set { courseCode = value; } } - private short year; - public virtual short Year { get { return year; } set { year = value; } } - private short semester; - public virtual short Semester { get { return semester; } Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Enrolment.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Enrolment.hbm.xml 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Enrolment.hbm.xml 2010-09-26 02:53:50 UTC (rev 5220) @@ -1,5 +1,6 @@ <?xml version="1.0"?> -<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" namespace="NHibernate.Test.Criteria"> @@ -8,19 +9,39 @@ <generator class="assigned"/> </id> <property name="Description"/> + <set name="CourseMeetings" inverse="true" cascade="all-delete-orphan"> + <key column="CourseCode"/> + <one-to-many class="CourseMeeting"/> + </set> </class> + <class name="CourseMeeting"> + <composite-id name="Id" class="CourseMeetingId"> + <key-property name="CourseCode"/> + <key-property name="Day"/> + <key-property name="Period"/> + <key-property name="Location"/> + </composite-id> + <many-to-one name="Course" insert="false" update="false"> + <column name="courseCode"/> + </many-to-one> + </class> + <class name="Student"> <id name="StudentNumber"> - <column name="studentId"/> + <column name="studentId"/> <generator class="assigned"/> </id> <property name="Name" not-null="true"/> + <component name="CityState"> + <property name="City" column="address_city"/> + <property name="State" column="address_state"/> + </component> <set name="Enrolments" inverse="true" cascade="delete" fetch="subselect"> <key column="studentId"/> <one-to-many class="Enrolment"/> </set> - <many-to-one name="PreferredCourse" column="preferredCourseCode"/> + <many-to-one name="PreferredCourse" column="preferredCourseCode"/> </class> <class name="Enrolment"> Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Student.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Student.cs 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Student.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -6,31 +6,35 @@ public class Student { private long studentNumber; - + private string name; + private CityState cityState; + private Course preferredCourse; + private ISet enrolments = new HashedSet(); + public virtual long StudentNumber { get { return studentNumber; } set { studentNumber = value; } } - private string name; - public virtual string Name { get { return name; } set { name = value; } } + + public virtual CityState CityState + { + get { return cityState; } + set { cityState = value; } + } - private Course preferredCourse; - public virtual Course PreferredCourse { get { return preferredCourse; } set { preferredCourse = value; } } - private ISet enrolments = new HashedSet(); - public virtual ISet Enrolments { get { return enrolments; } Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202 ___________________________________________________________________ Added: bugtraq:url + http://jira.nhibernate.org/browse/%BUGID% Added: bugtraq:logregex + NH-\d+ Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Fixture.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -0,0 +1,58 @@ +namespace NHibernate.Test.NHSpecificTest.NH2202 +{ + using System.Linq; + using Criterion; + using NUnit.Framework; + + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnSetUp() + { + base.OnSetUp(); + + using (var s = OpenSession()) + using (var tx = s.BeginTransaction()) + { + var emp = new Employee() {EmployeeId = 1, NationalId = 1000}; + emp.Addresses.Add(new EmployeeAddress() { Employee = emp, Type = "Postal" }); + emp.Addresses.Add(new EmployeeAddress() { Employee = emp, Type = "Shipping" }); + s.Save(emp); + tx.Commit(); + } + } + + protected override void OnTearDown() + { + using (var s = OpenSession()) + using (var tx = s.BeginTransaction()) + { + s.Delete("from EmployeeAddress"); + tx.Commit(); + } + + using (var s = OpenSession()) + using (var tx = s.BeginTransaction()) + { + s.Delete("from Employee"); + tx.Commit(); + } + + base.OnTearDown(); + } + + [Test] + public void CanProjectEmployeeFromAddressUsingCriteria() + { + using (var s = OpenSession()) + { + var employees = s.CreateCriteria<EmployeeAddress>("x3") + .Add(Restrictions.Eq("Type", "Postal")) + .SetProjection(Projections.Property("Employee")) + .List<Employee>(); + + Assert.That(employees.FirstOrDefault(), Is.InstanceOf<Employee>()); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Mappings.hbm.xml 2010-09-26 02:53:50 UTC (rev 5220) @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2202"> + + <class name="Employee"> + + <composite-id> + <key-property name="NationalId" /> + <key-property name="EmployeeId" /> + </composite-id> + + <set name="Addresses" cascade="save-update"> + <key> + <column name="NationalId" /> + <column name="EmployeeId" /> + </key> + <one-to-many class="EmployeeAddress"/> + </set> + + </class> + + <class name="EmployeeAddress"> + + <composite-id> + <key-many-to-one name="Employee" class="Employee"> + <column name="NationalId" /> + <column name="EmployeeId" /> + </key-many-to-one> + <key-property name="Type" /> + </composite-id> + + </class> + +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2202/Model.cs 2010-09-26 02:53:50 UTC (rev 5220) @@ -0,0 +1,77 @@ +using System; +using Iesi.Collections; + +namespace NHibernate.Test.NHSpecificTest.NH2202 +{ + public class Employee + { + private ISet _addresses; + + public virtual int NationalId { get; set; } + public virtual int EmployeeId { get; set; } + + public virtual ISet Addresses + { + get + { + return _addresses ?? (_addresses = new HashedSet()); + } + set + { + _addresses = value; + } + } + + public virtual bool Equals(Employee other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other.NationalId == NationalId && other.EmployeeId == EmployeeId; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof (Employee)) return false; + return Equals((Employee) obj); + } + + public override int GetHashCode() + { + unchecked + { + return (NationalId*397) ^ EmployeeId; + } + } + } + + public class EmployeeAddress + { + public virtual Employee Employee { get; set; } + public virtual string Type { get; set; } + + public virtual bool Equals(EmployeeAddress other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Equals(other.Employee, Employee) && Equals(other.Type, Type); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof (EmployeeAddress)) return false; + return Equals((EmployeeAddress) obj); + } + + public override int GetHashCode() + { + unchecked + { + return ((Employee != null ? Employee.GetHashCode() : 0)*397) ^ (Type != null ? Type.GetHashCode() : 0); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-25 20:07:30 UTC (rev 5219) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-26 02:53:50 UTC (rev 5220) @@ -164,7 +164,10 @@ <Compile Include="ConventionsTestCase.cs" /> <Compile Include="Criteria\AddNumberProjection.cs" /> <Compile Include="Criteria\Animal.cs" /> + <Compile Include="Criteria\CityState.cs" /> <Compile Include="Criteria\Course.cs" /> + <Compile Include="Criteria\CourseMeeting.cs" /> + <Compile Include="Criteria\CourseMeetingId.cs" /> <Compile Include="Criteria\CriteriaQueryTest.cs" /> <Compile Include="Criteria\DetachedCriteriaSerializable.cs" /> <Compile Include="Criteria\Enrolment.cs" /> @@ -474,6 +477,8 @@ <Compile Include="NHSpecificTest\NH2148\BugFixture.cs" /> <Compile Include="NHSpecificTest\NH2148\Domain.cs" /> <Compile Include="NHSpecificTest\NH2188\AppDomainWithMultipleSearchPath.cs" /> + <Compile Include="NHSpecificTest\NH2202\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2202\Model.cs" /> <Compile Include="NHSpecificTest\NH2224\Domain.cs" /> <Compile Include="NHSpecificTest\NH2224\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2245\Fixture.cs" /> @@ -1791,6 +1796,7 @@ <EmbeddedResource Include="NHSpecificTest\NH2322\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2278\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1136\Mappings.hbm.xml" /> + <EmbeddedResource Include="NHSpecificTest\NH2202\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\NHibernate.ByteCode.Castle\NHibernate.ByteCode.Castle.csproj"> @@ -2644,6 +2650,7 @@ <EmbeddedResource Include="DynamicEntity\Tuplizer\Customer.hbm.xml" /> </ItemGroup> <ItemGroup> + <Folder Include="NHSpecificTest\NH2202" /> <Folder Include="Properties\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-25 20:07:36
|
Revision: 5219 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5219&view=rev Author: fabiomaulo Date: 2010-09-25 20:07:30 +0000 (Sat, 25 Sep 2010) Log Message: ----------- Lazy-property was implemented the feature is now supported. Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/LazyOneToOne/LazyOneToOneTest.cs Modified: trunk/nhibernate/src/NHibernate.Test/LazyOneToOne/LazyOneToOneTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/LazyOneToOne/LazyOneToOneTest.cs 2010-09-25 18:06:13 UTC (rev 5218) +++ trunk/nhibernate/src/NHibernate.Test/LazyOneToOne/LazyOneToOneTest.cs 2010-09-25 20:07:30 UTC (rev 5219) @@ -6,7 +6,7 @@ namespace NHibernate.Test.LazyOneToOne { - [TestFixture, Ignore("Not supported.")] + [TestFixture] public class LazyOneToOneTest : TestCase { protected override IList Mappings @@ -19,15 +19,17 @@ get { return "NHibernate.Test"; } } - protected override bool AppliesTo(Dialect.Dialect dialect) - { - // this test work only with Field interception (NH-1618) - return FieldInterceptionHelper.IsInstrumented( new Person() ); - } + //protected override bool AppliesTo(Dialect.Dialect dialect) + //{ + // // this test work only with Field interception (NH-1618) + // return FieldInterceptionHelper.IsInstrumented( new Person() ); + //} protected override void Configure(Cfg.Configuration configuration) { - cfg.SetProperty(Environment.MaxFetchDepth, "2"); - cfg.SetProperty(Environment.UseSecondLevelCache, "false"); + configuration.SetProperty(Environment.ProxyFactoryFactoryClass, + typeof(NHibernate.ByteCode.Castle.ProxyFactoryFactory).AssemblyQualifiedName); + configuration.SetProperty(Environment.MaxFetchDepth, "2"); + configuration.SetProperty(Environment.UseSecondLevelCache, "false"); } protected override string CacheConcurrencyStrategy @@ -53,7 +55,7 @@ s = OpenSession(); t = s.BeginTransaction(); p = s.CreateQuery("from Person where name='Gavin'").UniqueResult<Person>(); - //Assert.That(!NHibernateUtil.IsPropertyInitialized(p, "Employee")); + Assert.That(!NHibernateUtil.IsPropertyInitialized(p, "Employee")); Assert.That(p.Employee.Person, Is.SameAs(p)); Assert.That(NHibernateUtil.IsInitialized(p.Employee.Employments)); @@ -67,7 +69,7 @@ s = OpenSession(); t = s.BeginTransaction(); p = s.Get<Person>("Gavin"); - //Assert.That(!NHibernateUtil.IsPropertyInitialized(p, "Employee")); + Assert.That(!NHibernateUtil.IsPropertyInitialized(p, "Employee")); Assert.That(p.Employee.Person, Is.SameAs(p)); Assert.That(NHibernateUtil.IsInitialized(p.Employee.Employments)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-25 18:06:20
|
Revision: 5218 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5218&view=rev Author: fabiomaulo Date: 2010-09-25 18:06:13 +0000 (Sat, 25 Sep 2010) Log Message: ----------- Fix NH-2188 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2188/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2188/AppDomainWithMultipleSearchPath.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2010-09-25 15:47:16 UTC (rev 5217) +++ trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2010-09-25 18:06:13 UTC (rev 5218) @@ -4,6 +4,7 @@ using System.Configuration; using System.Diagnostics; using System.IO; +using System.Linq; using System.Reflection; using System.Text; using System.Xml; @@ -1837,11 +1838,11 @@ LogAndThrow(new MappingException(message, args.Exception)); } - private static string GetDefaultConfigurationFilePath() + protected virtual string GetDefaultConfigurationFilePath() { string baseDir = AppDomain.CurrentDomain.BaseDirectory; - string relativeSearchPath = AppDomain.CurrentDomain.RelativeSearchPath; - string binPath = relativeSearchPath == null ? baseDir : Path.Combine(baseDir, relativeSearchPath); + string relativeSearchPath = AppDomain.CurrentDomain.RelativeSearchPath.Split(';').First(); + string binPath = Path.Combine(baseDir, relativeSearchPath); return Path.Combine(binPath, DefaultHibernateCfgFileName); } Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2188/AppDomainWithMultipleSearchPath.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2188/AppDomainWithMultipleSearchPath.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2188/AppDomainWithMultipleSearchPath.cs 2010-09-25 18:06:13 UTC (rev 5218) @@ -0,0 +1,37 @@ +using System; +using System.IO; +using NHibernate.Cfg; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2188 +{ + public class AppDomainWithMultipleSearchPath + { + public class MyNhConfiguration: Configuration + { + public string DefaultConfigurationFilePath() + { + return GetDefaultConfigurationFilePath(); + } + } + [Test] + public void WhenSerchInMultiplePathsThenNotThrows() + { + string binPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"); + var expected = Path.Combine(binPath, Configuration.DefaultHibernateCfgFileName); + + try + { + AppDomain.CurrentDomain.AppendPrivatePath("bin"); + AppDomain.CurrentDomain.AppendPrivatePath("DbScripts"); + var configuration = new MyNhConfiguration(); + configuration.DefaultConfigurationFilePath().Should().Be(expected); + } + finally + { + AppDomain.CurrentDomain.ClearPrivatePath(); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-25 15:47:16 UTC (rev 5217) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-25 18:06:13 UTC (rev 5218) @@ -473,6 +473,7 @@ <Compile Include="NHSpecificTest\NH2147\DefaultBatchSize.cs" /> <Compile Include="NHSpecificTest\NH2148\BugFixture.cs" /> <Compile Include="NHSpecificTest\NH2148\Domain.cs" /> + <Compile Include="NHSpecificTest\NH2188\AppDomainWithMultipleSearchPath.cs" /> <Compile Include="NHSpecificTest\NH2224\Domain.cs" /> <Compile Include="NHSpecificTest\NH2224\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2245\Fixture.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-25 15:47:22
|
Revision: 5217 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5217&view=rev Author: fabiomaulo Date: 2010-09-25 15:47:16 +0000 (Sat, 25 Sep 2010) Log Message: ----------- Fix NH-2340 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Type/AbstractCharType.cs Modified: trunk/nhibernate/src/NHibernate/Type/AbstractCharType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/AbstractCharType.cs 2010-09-25 15:24:43 UTC (rev 5216) +++ trunk/nhibernate/src/NHibernate/Type/AbstractCharType.cs 2010-09-25 15:47:16 UTC (rev 5217) @@ -21,14 +21,12 @@ public override object Get(IDataReader rs, int index) { string dbValue = Convert.ToString(rs[index]); - if (dbValue == null) + // The check of the Length is a workaround see NH-2340 + if (dbValue.Length > 0) { - return null; - } - else - { return dbValue[0]; } + return '\0'; // This line should never be executed } public override object Get(IDataReader rs, string name) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-25 15:24:50
|
Revision: 5216 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5216&view=rev Author: fabiomaulo Date: 2010-09-25 15:24:43 +0000 (Sat, 25 Sep 2010) Log Message: ----------- Example for NH-2324 (only to show the right syntax) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/BulkUpdateWithCustomCompositeType.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/CompositeData.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/CompositeUserType.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/Entity.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/Mappings.hbm.xml Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/BulkUpdateWithCustomCompositeType.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/BulkUpdateWithCustomCompositeType.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/BulkUpdateWithCustomCompositeType.cs 2010-09-25 15:24:43 UTC (rev 5216) @@ -0,0 +1,60 @@ +using System; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2324 +{ + public class BulkUpdateWithCustomCompositeType: BugTestCase + { + public class Scenario: IDisposable + { + private readonly ISessionFactory factory; + + public Scenario(ISessionFactory factory) + { + this.factory = factory; + using (ISession s = factory.OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + var e = new Entity + { + Data = new CompositeData {DataA = new DateTime(2010, 1, 1), DataB = new DateTime(2010, 2, 2)} + }; + s.Save(e); + t.Commit(); + } + } + + public void Dispose() + { + using (ISession s = factory.OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.CreateQuery("delete from Entity").ExecuteUpdate(); + t.Commit(); + } + } + } + + [Test] + public void ShouldAllowBulkupdateWithCompositeUserType() + { + using (new Scenario(Sfi)) + { + string queryString = @"update Entity m set m.Data.DataA = :dataA, m.Data.DataB = :dataB"; + + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + var query = s.CreateQuery(queryString) + .SetDateTime("dataA", new DateTime(2010, 3, 3)) + .SetDateTime("dataB", new DateTime(2010, 4, 4)); + + query.Executing(q => q.ExecuteUpdate()).NotThrows(); + + t.Commit(); + } + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/CompositeData.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/CompositeData.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/CompositeData.cs 2010-09-25 15:24:43 UTC (rev 5216) @@ -0,0 +1,10 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.NH2324 +{ + public class CompositeData + { + public virtual DateTime DataA { get; set; } + public virtual DateTime DataB { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/CompositeUserType.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/CompositeUserType.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/CompositeUserType.cs 2010-09-25 15:24:43 UTC (rev 5216) @@ -0,0 +1,225 @@ +using System; +using System.Data; +using NHibernate.Engine; +using NHibernate.Type; +using NHibernate.UserTypes; + +namespace NHibernate.Test.NHSpecificTest.NH2324 +{ + public class CompositeUserType : ICompositeUserType + { + #region ICompositeUserType Members + + /// <summary> + /// Compare two instances of the class mapped by this type for persistence + /// "equality", ie. equality of persistent state. + /// </summary> + /// <param name="x"></param> + /// <param name="y"></param> + /// <returns></returns> + public new bool Equals(object x, object y) + { + if (ReferenceEquals(x, y)) + { + return true; + } + else if (x == null || + y == null) + { + return false; + } + else + { + return x.Equals(y); + } + } + + /// <summary> + /// Get the "property names" that may be used in a query. + /// </summary> + /// <value></value> + public string[] PropertyNames + { + get + { + return new[] + { + "DataA", + "DataB" + }; + } + } + + /// <summary> + /// Get the corresponding "property types" + /// </summary> + /// <value></value> + public IType[] PropertyTypes + { + get + { + return new IType[] + { + NHibernateUtil.DateTime, + NHibernateUtil.DateTime + }; + } + } + + /// <summary> + /// Get the value of a property + /// </summary> + /// <param name="component">an instance of class mapped by this "type"</param> + /// <param name="property"></param> + /// <returns>the property value</returns> + public object GetPropertyValue(object component, int property) + { + var p = (CompositeData) component; + if (property == 0) + { + return p.DataA; + } + else + { + return p.DataB; + } + } + + /// <summary> + /// Set the value of a property + /// </summary> + /// <param name="component">an instance of class mapped by this "type"</param> + /// <param name="property"></param> + /// <param name="value">the value to set</param> + public void SetPropertyValue(object component, int property, object value) + { + throw new NotImplementedException(); + } + + /// <summary> + /// The class returned by NullSafeGet(). + /// </summary> + /// <value></value> + public System.Type ReturnedClass + { + get { return typeof (CompositeData); } + } + + /// <summary> + /// Get a hashcode for the instance, consistent with persistence "equality" + /// </summary> + /// <param name="x"></param> + /// <returns></returns> + public int GetHashCode(object x) + { + return x.GetHashCode(); + } + + /// <summary> + /// Retrieve an instance of the mapped class from a IDataReader. Implementors + /// should handle possibility of null values. + /// </summary> + /// <param name="dr">IDataReader</param> + /// <param name="names">the column names</param> + /// <param name="session"></param> + /// <param name="owner">the containing entity</param> + /// <returns></returns> + public object NullSafeGet(IDataReader dr, string[] names, ISessionImplementor session, object owner) + { + var data = new CompositeData(); + data.DataA = (DateTime) NHibernateUtil.DateTime.NullSafeGet(dr, new[] {names[0]}, session, owner); + data.DataB = (DateTime) NHibernateUtil.DateTime.NullSafeGet(dr, new[] {names[1]}, session, owner); + + return data; + } + + /// <summary> + /// Write an instance of the mapped class to a prepared statement. + /// Implementors should handle possibility of null values. + /// A multi-column type should be written to parameters starting from index. + /// </summary> + /// <param name="cmd"></param> + /// <param name="value"></param> + /// <param name="index"></param> + /// <param name="session"></param> + public void NullSafeSet(IDbCommand cmd, object value, int index, ISessionImplementor session) + { + if (value == null) + { + ((IDataParameter) cmd.Parameters[index]).Value = DBNull.Value; + ((IDataParameter) cmd.Parameters[index + 1]).Value = DBNull.Value; + } + else + { + var data = (CompositeData) value; + NHibernateUtil.DateTime.Set(cmd, data.DataA, index); + NHibernateUtil.DateTime.Set(cmd, data.DataB, index + 1); + } + } + + /// <summary> + /// Return a deep copy of the persistent state, stopping at entities and at collections. + /// </summary> + /// <param name="value">generally a collection element or entity field</param> + /// <returns></returns> + public object DeepCopy(object value) + { + return value; + } + + /// <summary> + /// Are objects of this type mutable? + /// </summary> + /// <value></value> + public bool IsMutable + { + get { return true; } + } + + /// <summary> + /// Transform the object into its cacheable representation. + /// At the very least this method should perform a deep copy. + /// That may not be enough for some implementations, method should perform a deep copy. That may not be enough for some implementations, however; for example, associations must be cached as identifier values. (optional operation) + /// </summary> + /// <param name="value">the object to be cached</param> + /// <param name="session"></param> + /// <returns></returns> + public object Disassemble(object value, ISessionImplementor session) + { + return DeepCopy(value); + } + + /// <summary> + /// Reconstruct an object from the cacheable representation. + /// At the very least this method should perform a deep copy. (optional operation) + /// </summary> + /// <param name="cached">the object to be cached</param> + /// <param name="session"></param> + /// <param name="owner"></param> + /// <returns></returns> + public object Assemble(object cached, ISessionImplementor session, object owner) + { + return DeepCopy(cached); + } + + /// <summary> + /// During merge, replace the existing (target) value in the entity we are merging to + /// with a new (original) value from the detached entity we are merging. For immutable + /// objects, or null values, it is safe to simply return the first parameter. For + /// mutable objects, it is safe to return a copy of the first parameter. However, since + /// composite user types often define component values, it might make sense to recursively + /// replace component values in the target object. + /// </summary> + /// <param name="original"></param> + /// <param name="target"></param> + /// <param name="session"></param> + /// <param name="owner"></param> + /// <returns></returns> + public object Replace(object original, object target, ISessionImplementor session, object owner) + { + return original; + } + + #endregion + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/Entity.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/Entity.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/Entity.cs 2010-09-25 15:24:43 UTC (rev 5216) @@ -0,0 +1,9 @@ +namespace NHibernate.Test.NHSpecificTest.NH2324 +{ + public class Entity + { + public virtual long Id { get; set; } + + public virtual CompositeData Data { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2324/Mappings.hbm.xml 2010-09-25 15:24:43 UTC (rev 5216) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.NH2324" + assembly="NHibernate.Test"> + + <class name="Entity"> + <id name="Id"> + <generator class="hilo" > + <param name="max_lo">100</param> + </generator> + </id> + + <property name="Data" type="CompositeUserType"> + <column name="DataA"/> + <column name="DataB"/> + </property> + </class> + +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 13:45:53 UTC (rev 5215) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-25 15:24:43 UTC (rev 5216) @@ -501,6 +501,10 @@ <Compile Include="NHSpecificTest\NH2322\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2322\Model.cs" /> <Compile Include="NHSpecificTest\NH2322\PostUpdateEventListener.cs" /> + <Compile Include="NHSpecificTest\NH2324\CompositeData.cs" /> + <Compile Include="NHSpecificTest\NH2324\CompositeUserType.cs" /> + <Compile Include="NHSpecificTest\NH2324\Entity.cs" /> + <Compile Include="NHSpecificTest\NH2324\BulkUpdateWithCustomCompositeType.cs" /> <Compile Include="NHSpecificTest\NH2344\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2344\Model.cs" /> <Compile Include="TypesTest\CharClass.cs" /> @@ -2297,6 +2301,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2324\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2344\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2112\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2147\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-24 13:46:00
|
Revision: 5215 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5215&view=rev Author: fabiomaulo Date: 2010-09-24 13:45:53 +0000 (Fri, 24 Sep 2010) Log Message: ----------- fix NH-2344 (thanks to Jose Romaniello) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Model.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-09-24 12:30:53 UTC (rev 5214) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -420,5 +420,10 @@ { return new HqlBitwiseOr(_factory, lhs, rhs); } + + public HqlTreeNode Coalesce(HqlExpression lhs, HqlExpression rhs) + { + return new HqlCoalesce(_factory, lhs, rhs); + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-09-24 12:30:53 UTC (rev 5214) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -595,6 +595,16 @@ } } + public class HqlCoalesce : HqlExpression + { + public HqlCoalesce(IASTFactory factory, HqlExpression lhs, HqlExpression rhs) + : base(HqlSqlWalker.METHOD_CALL, "coalesce", factory) + { + AddChild(new HqlIdent(factory, "coalesce")); + AddChild(new HqlExpressionList(factory, lhs, rhs)); + } + } + public class HqlExpressionList : HqlStatement { public HqlExpressionList(IASTFactory factory, params HqlExpression[] expressions) Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-09-24 12:30:53 UTC (rev 5214) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -325,6 +325,9 @@ case ExpressionType.GreaterThanOrEqual: return _hqlTreeBuilder.GreaterThanOrEqual(lhs, rhs); + + case ExpressionType.Coalesce: + return _hqlTreeBuilder.Coalesce(lhs, rhs); } throw new InvalidOperationException(); Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Fixture.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -0,0 +1,44 @@ +using System.Linq; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2344 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnTearDown() + { + using (ISession s = OpenSession()) + { + s.Delete("from Person"); + s.Flush(); + } + base.OnTearDown(); + } + + [Test] + public void CoalesceShouldWork() + { + int personId; + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + var p1 = new Person { Name = "inserted name" }; + var p2 = new Person { Name = null}; + + s.Save(p1); + s.Save(p2); + personId = p2.Id; + tx.Commit(); + } + + using (ISession s = OpenSession()) + using (s.BeginTransaction()) + { + var person = s.Query<Person>().Where(p => (p.Name ?? "e") == "e").First(); + Assert.AreEqual(personId, person.Id); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Mappings.hbm.xml 2010-09-24 13:45:53 UTC (rev 5215) @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2344"> + + <class name="Person"> + <id name="Id"> + <generator class="hilo" /> + </id> + <property name="Name"/> + </class> + +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Model.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -0,0 +1,8 @@ +namespace NHibernate.Test.NHSpecificTest.NH2344 +{ + public class Person + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 12:30:53 UTC (rev 5214) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 13:45:53 UTC (rev 5215) @@ -501,6 +501,8 @@ <Compile Include="NHSpecificTest\NH2322\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2322\Model.cs" /> <Compile Include="NHSpecificTest\NH2322\PostUpdateEventListener.cs" /> + <Compile Include="NHSpecificTest\NH2344\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2344\Model.cs" /> <Compile Include="TypesTest\CharClass.cs" /> <Compile Include="TypesTest\CharClassFixture.cs" /> <Compile Include="TypesTest\DateTimeClass.cs" /> @@ -2295,6 +2297,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2344\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2112\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2147\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2138\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-24 12:30:59
|
Revision: 5214 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5214&view=rev Author: fabiomaulo Date: 2010-09-24 12:30:53 +0000 (Fri, 24 Sep 2010) Log Message: ----------- Fix NH-2346 (checked with H3.2.6) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/Table.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/Table.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/Table.cs 2010-09-24 12:18:20 UTC (rev 5213) +++ trunk/nhibernate/src/NHibernate/Mapping/Table.cs 2010-09-24 12:30:53 UTC (rev 5214) @@ -433,6 +433,7 @@ { buf.Append(dialect.GetTableComment(comment)); } + buf.Append(dialect.TableTypeString); return buf.ToString(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-24 12:18:27
|
Revision: 5213 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5213&view=rev Author: fabiomaulo Date: 2010-09-24 12:18:20 +0000 (Fri, 24 Sep 2010) Log Message: ----------- Fix NH-2096 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Type/AbstractBinaryType.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/BinaryBlobTypeFixture.cs Modified: trunk/nhibernate/src/NHibernate/Type/AbstractBinaryType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/AbstractBinaryType.cs 2010-09-24 04:51:37 UTC (rev 5212) +++ trunk/nhibernate/src/NHibernate/Type/AbstractBinaryType.cs 2010-09-24 12:18:20 UTC (rev 5213) @@ -83,7 +83,11 @@ { int length = (int)rs.GetBytes(index, 0, null, 0, 0); byte[] buffer = new byte[length]; - rs.GetBytes(index, 0, buffer, 0, length); + if (length > 0) + { + // The "if" is to make happy MySQL NH-2096 + rs.GetBytes(index, 0, buffer, 0, length); + } return ToExternalFormat(buffer); } Modified: trunk/nhibernate/src/NHibernate.Test/TypesTest/BinaryBlobTypeFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/BinaryBlobTypeFixture.cs 2010-09-24 04:51:37 UTC (rev 5212) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/BinaryBlobTypeFixture.cs 2010-09-24 12:18:20 UTC (rev 5213) @@ -1,6 +1,7 @@ using System; using System.Text; using NUnit.Framework; +using SharpTestsEx; namespace NHibernate.Test.TypesTest { @@ -50,5 +51,26 @@ s.Flush(); s.Close(); } + + [Test] + public void ReadWriteZeroLen() + { + object savedId; + using (ISession s = OpenSession()) + { + BinaryBlobClass b = new BinaryBlobClass(); + b.BinaryBlob = new byte[0]; + savedId = s.Save(b); + s.Flush(); + } + + using (var s = OpenSession()) + { + var b = s.Get<BinaryBlobClass>(savedId); + b.BinaryBlob.Should().Not.Be.Null().And.Have.Count.EqualTo(0); + s.Delete(b); + s.Flush(); + } + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-24 04:51:42
|
Revision: 5212 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5212&view=rev Author: fabiomaulo Date: 2010-09-24 04:51:37 +0000 (Fri, 24 Sep 2010) Log Message: ----------- Ups! Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/App.config Modified: trunk/nhibernate/src/NHibernate.Test/App.config =================================================================== --- trunk/nhibernate/src/NHibernate.Test/App.config 2010-09-24 04:50:50 UTC (rev 5211) +++ trunk/nhibernate/src/NHibernate.Test/App.config 2010-09-24 04:51:37 UTC (rev 5212) @@ -126,7 +126,7 @@ </logger> <logger name="NHibernate.SQL"> - <level value="DEBUG" /> + <level value="OFF" /> </logger> <logger name="NHibernate.AdoNet.AbstractBatcher"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-24 04:50:58
|
Revision: 5211 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5211&view=rev Author: fabiomaulo Date: 2010-09-24 04:50:50 +0000 (Fri, 24 Sep 2010) Log Message: ----------- Fix NH-2112 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Type/GenericMapType.cs trunk/nhibernate/src/NHibernate/Type/MapType.cs trunk/nhibernate/src/NHibernate.Test/App.config trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Model.cs Modified: trunk/nhibernate/src/NHibernate/Type/GenericMapType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/GenericMapType.cs 2010-09-24 03:01:49 UTC (rev 5210) +++ trunk/nhibernate/src/NHibernate/Type/GenericMapType.cs 2010-09-24 04:50:50 UTC (rev 5211) @@ -79,6 +79,14 @@ result[key] = value; } + var originalPc = original as IPersistentCollection; + var resultPc = result as IPersistentCollection; + if (originalPc != null && resultPc != null) + { + if (!originalPc.IsDirty) + resultPc.ClearDirty(); + } + return result; } Modified: trunk/nhibernate/src/NHibernate/Type/MapType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/MapType.cs 2010-09-24 03:01:49 UTC (rev 5210) +++ trunk/nhibernate/src/NHibernate/Type/MapType.cs 2010-09-24 04:50:50 UTC (rev 5211) @@ -89,6 +89,14 @@ result[key] = value; } + var originalPc = original as IPersistentCollection; + var resultPc = result as IPersistentCollection; + if (originalPc != null && resultPc != null) + { + if (!originalPc.IsDirty) + resultPc.ClearDirty(); + } + return result; } Modified: trunk/nhibernate/src/NHibernate.Test/App.config =================================================================== --- trunk/nhibernate/src/NHibernate.Test/App.config 2010-09-24 03:01:49 UTC (rev 5210) +++ trunk/nhibernate/src/NHibernate.Test/App.config 2010-09-24 04:50:50 UTC (rev 5211) @@ -126,7 +126,7 @@ </logger> <logger name="NHibernate.SQL"> - <level value="OFF" /> + <level value="DEBUG" /> </logger> <logger name="NHibernate.AdoNet.AbstractBatcher"> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Fixture.cs 2010-09-24 04:50:50 UTC (rev 5211) @@ -0,0 +1,78 @@ +using NUnit.Framework; +using NHibernate.Cfg; + +namespace NHibernate.Test.NHSpecificTest.NH2112 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void Configure(Configuration configuration) + { + configuration.SetProperty(Environment.GenerateStatistics, "true"); + configuration.SetProperty(Environment.BatchSize, "0"); + } + + protected override void OnTearDown() + { + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + s.CreateSQLQuery("DELETE FROM AMapB").ExecuteUpdate(); + s.CreateSQLQuery("DELETE FROM TableA").ExecuteUpdate(); + s.CreateSQLQuery("DELETE FROM TableB").ExecuteUpdate(); + tx.Commit(); + } + } + + [Test] + public void Test() + { + A a; + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + a = new A(); + a.Name = "A"; + B b1 = new B{ Name = "B1"}; + s.Save(b1); + B b2 = new B{ Name = "B2"}; + s.Save(b2); + a.Map.Add(b1 , "B1Text"); + a.Map.Add(b2, "B2Text"); + s.Save(a); + s.Flush(); + tx.Commit(); + } + ClearCounts(); + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + A aCopy = (A)s.Merge(a); + s.Flush(); + tx.Commit(); + } + AssertUpdateCount(0); + AssertInsertCount(0); + } + protected void ClearCounts() + { + sessions.Statistics.Clear(); + } + + protected void AssertInsertCount(long expected) + { + Assert.That(sessions.Statistics.EntityInsertCount, Is.EqualTo(expected), "unexpected insert count"); + } + + protected void AssertUpdateCount(int expected) + { + Assert.That(sessions.Statistics.EntityUpdateCount, Is.EqualTo(expected), "unexpected update count"); + } + + protected void AssertDeleteCount(int expected) + { + Assert.That(sessions.Statistics.EntityDeleteCount, Is.EqualTo(expected), "unexpected delete count"); + } + + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Mappings.hbm.xml 2010-09-24 04:50:50 UTC (rev 5211) @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.NH2112" + assembly="NHibernate.Test"> + + <class name="A" table="TableA"> + <id name="Id"> + <generator class="native"/> + </id> + <version name="Version" column="Version"/> + <property name="Name"/> + <map name="Map" table ="AMapB" cascade="all-delete-orphan" lazy="true"> + <key column="AId"/> + <index-many-to-many class="B" column="BId"/> + <element column="Text" type="System.String"/> + </map> + </class> + + <class name="B" table="TableB"> + <id name="Id"> + <generator class="native"/> + </id> + <property name="Name"/> + </class> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Model.cs 2010-09-24 04:50:50 UTC (rev 5211) @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH2112 +{ + [Serializable] + public abstract class BaseEntity<TEntity, TKey> : IEquatable<TEntity> + where TEntity : BaseEntity<TEntity, TKey> + where TKey : struct + { + public virtual TKey? Id { get; set; } + + public virtual bool Equals(TEntity other) + { + if (other == null) return false; + if (object.ReferenceEquals(this, other)) return true; + if (Id != null && other.Id == null) return false; + if (Id == null && other.Id != null) return false; + if (Id == null && other.Id == null) + return object.ReferenceEquals(this, other); + else + return Id.Value.Equals(other.Id.Value); + } + public override bool Equals(object obj) + { + + return this.Equals(obj as TEntity); + } + private int? mHashCode; + public override int GetHashCode() + { + if (mHashCode == null) // le hashcode retourné doit être le meme tout le long de la vie de l'objet + { + if (this.Id != null) + mHashCode = this.Id.GetHashCode(); + else mHashCode = base.GetHashCode(); + } + return mHashCode.Value; + } + public virtual bool IsNew + { + get + { + return (Id == null); + } + } + } + + public class A : BaseEntity<A, int> + { + public A() + { + Map = new Dictionary<B, string>(); + } + + private int version; + public virtual int Version + { + get { return version; } + set { version = value; } + } + + public virtual string Name { get; set; } + public virtual IDictionary<B, string> Map { get; set; } + + } + + public class B : BaseEntity<B, int> + { + public virtual string Name { get; set; } + } +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 03:01:49 UTC (rev 5210) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 04:50:50 UTC (rev 5211) @@ -467,6 +467,8 @@ <Compile Include="NHSpecificTest\NH1836\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2111\A.cs" /> <Compile Include="NHSpecificTest\NH2111\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2112\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2112\Model.cs" /> <Compile Include="NHSpecificTest\NH2138\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2147\DefaultBatchSize.cs" /> <Compile Include="NHSpecificTest\NH2148\BugFixture.cs" /> @@ -2293,6 +2295,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2112\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2147\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2138\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2288\AclassWithDefault.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-24 03:01:55
|
Revision: 5210 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5210&view=rev Author: fabiomaulo Date: 2010-09-24 03:01:49 +0000 (Fri, 24 Sep 2010) Log Message: ----------- Fix NH-2161 Modified Paths: -------------- trunk/nhibernate/releasenotes.txt Modified: trunk/nhibernate/releasenotes.txt =================================================================== --- trunk/nhibernate/releasenotes.txt 2010-09-24 02:46:33 UTC (rev 5209) +++ trunk/nhibernate/releasenotes.txt 2010-09-24 03:01:49 UTC (rev 5210) @@ -230,6 +230,7 @@ * Antlr3.Runtime.dll is required * the syntax foo.bar.baz.elements or foo.bar.baz.indices is not longer supported. Use the alternative syntax of elements(foo.bar.baz) or indices(foo.bar.baz) instead Note: in some case, where a sub-select is needed, the collection is enough example: FROM m IN CLASS Master WHERE NOT EXISTS( FROM m.Details d WHERE NOT d.I=5 ) + * INamingStrategy.PropertyToColumnName does not include the component property path ##### Possible Breaking Changes ##### * ISession interface has additional methods This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-24 02:46:39
|
Revision: 5209 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5209&view=rev Author: fabiomaulo Date: 2010-09-24 02:46:33 +0000 (Fri, 24 Sep 2010) Log Message: ----------- Fix NH-2292 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Proxy/AbstractLazyInitializer.cs Modified: trunk/nhibernate/src/NHibernate/Proxy/AbstractLazyInitializer.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Proxy/AbstractLazyInitializer.cs 2010-09-24 02:40:17 UTC (rev 5208) +++ trunk/nhibernate/src/NHibernate/Proxy/AbstractLazyInitializer.cs 2010-09-24 02:46:33 UTC (rev 5209) @@ -49,7 +49,7 @@ /// <exception cref="HibernateException"> /// Thrown when the Proxy has no Session or the Session is closed or disconnected. /// </exception> - public void Initialize() + public virtual void Initialize() { if (!initialized) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-24 02:40:23
|
Revision: 5208 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5208&view=rev Author: fabiomaulo Date: 2010-09-24 02:40:17 +0000 (Fri, 24 Sep 2010) Log Message: ----------- Fix NH-2321 Modified Paths: -------------- trunk/nhibernate/doc/reference/modules/basic_mapping.xml Modified: trunk/nhibernate/doc/reference/modules/basic_mapping.xml =================================================================== --- trunk/nhibernate/doc/reference/modules/basic_mapping.xml 2010-09-23 23:10:31 UTC (rev 5207) +++ trunk/nhibernate/doc/reference/modules/basic_mapping.xml 2010-09-24 02:40:17 UTC (rev 5208) @@ -72,11 +72,13 @@ <para><emphasis> Tip: to enable IntelliSense for mapping and configuration files, copy the appropriate - <literal>.xsd</literal> files to - <literal><VS.NET installation directory>\Common7\Packages\schemas\xml</literal> - if you are using Visual Studio .NET 2003, or to - <literal><VS 2005 installation directory>\Xml\Schemas</literal> for Visual Studio 2005. - </emphasis></para> + <literal>.xsd</literal> files as part of any project in your solution, + (<literal>Build Action</literal> can be "None") or as "Solution Files" or in your + <literal>"Lib"</literal> folder and then add it to the <literal>Schemas</literal> property of the xml file. + You can copy it in <literal><VS installation directory>\Xml\Schemas</literal>, take care because you will have to deal + with different version of the xsd for different versions of NHibernate. + </emphasis> + </para> </sect2> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-23 23:10:37
|
Revision: 5207 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5207&view=rev Author: fabiomaulo Date: 2010-09-23 23:10:31 +0000 (Thu, 23 Sep 2010) Log Message: ----------- Fix NH-2147 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/PersistentClass.cs trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/DefaultBatchSize.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Mapping/PersistentClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/PersistentClass.cs 2010-09-23 17:07:21 UTC (rev 5206) +++ trunk/nhibernate/src/NHibernate/Mapping/PersistentClass.cs 2010-09-23 23:10:31 UTC (rev 5207) @@ -36,7 +36,7 @@ private readonly List<Table> subclassTables = new List<Table>(); private bool dynamicInsert; private bool dynamicUpdate; - private int batchSize = 1; + private int? batchSize; private bool selectBeforeUpdate; private IDictionary<string, MetaAttribute> metaAttributes; private readonly List<Join> joins = new List<Join>(); @@ -372,7 +372,7 @@ /// <summary> /// /// </summary> - public int BatchSize + public int? BatchSize { get { return batchSize; } set { batchSize = value; } Modified: trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2010-09-23 17:07:21 UTC (rev 5206) +++ trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2010-09-23 23:10:31 UTC (rev 5207) @@ -278,11 +278,8 @@ entityNameBySubclass[subclass.MappedClass] = subclass.EntityName; } } - int batch = persistentClass.BatchSize; - if (batch == -1) - batch = factory.Settings.DefaultBatchFetchSize; - batchSize = batch; + batchSize = persistentClass.BatchSize.HasValue ? persistentClass.BatchSize.Value : factory.Settings.DefaultBatchFetchSize; hasSubselectLoadableCollections = persistentClass.HasSubselectLoadableCollections; propertyMapping = new BasicEntityPropertyMapping(this); Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/DefaultBatchSize.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/DefaultBatchSize.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/DefaultBatchSize.cs 2010-09-23 23:10:31 UTC (rev 5207) @@ -0,0 +1,62 @@ +using System.Reflection; +using NHibernate.Cfg; +using NHibernate.Engine; +using NHibernate.Persister.Entity; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2147 +{ + public class DefaultBatchSize + { + private const BindingFlags DefaultFlags = + BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly; + + private readonly FieldInfo fieldInfo = typeof(AbstractEntityPersister).GetField("batchSize", DefaultFlags); + + [Test] + public void WhenNoDefaultAndNoSpecificThenUse1() + { + var cfg = TestConfigurationHelper.GetDefaultConfiguration(); + cfg.AddResource("NHibernate.Test.NHSpecificTest.NH2147.Mappings.hbm.xml", GetType().Assembly); + var sf = (ISessionFactoryImplementor)cfg.BuildSessionFactory(); + var persister = sf.GetEntityPersister("MyClassWithoutBatchSize"); + persister.IsBatchLoadable.Should().Be.False(); + + // hack + fieldInfo.GetValue(persister).Should().Be(1); + } + + [Test] + public void WhenDefaultAndNoSpecificThenUseDefault() + { + var cfg = TestConfigurationHelper.GetDefaultConfiguration(); + cfg.SetProperty(Environment.DefaultBatchFetchSize, "20"); + + cfg.AddResource("NHibernate.Test.NHSpecificTest.NH2147.Mappings.hbm.xml", GetType().Assembly); + var sf = (ISessionFactoryImplementor)cfg.BuildSessionFactory(); + var persister = sf.GetEntityPersister("MyClassWithoutBatchSize"); + + persister.IsBatchLoadable.Should().Be.True(); + + // hack + fieldInfo.GetValue(persister).Should().Be(20); + } + + [Test] + public void WhenDefaultAndSpecificThenUseSpecific() + { + var cfg = TestConfigurationHelper.GetDefaultConfiguration(); + cfg.SetProperty(Environment.DefaultBatchFetchSize, "20"); + + cfg.AddResource("NHibernate.Test.NHSpecificTest.NH2147.Mappings.hbm.xml", GetType().Assembly); + var sf = (ISessionFactoryImplementor)cfg.BuildSessionFactory(); + var persister = sf.GetEntityPersister("MyClassWithBatchSize"); + + persister.IsBatchLoadable.Should().Be.True(); + + // hack + fieldInfo.GetValue(persister).Should().Be(10); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2147/Mappings.hbm.xml 2010-09-23 23:10:31 UTC (rev 5207) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> + <class entity-name="MyClassWithoutBatchSize"> + <id type="int"> + <generator class="native" /> + </id> + <property name="Name" type="string"/> + </class> + + <class entity-name="MyClassWithBatchSize" batch-size="10"> + <id type="int"> + <generator class="native" /> + </id> + <property name="Name" type="string"/> + </class> + +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-23 17:07:21 UTC (rev 5206) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-23 23:10:31 UTC (rev 5207) @@ -468,6 +468,7 @@ <Compile Include="NHSpecificTest\NH2111\A.cs" /> <Compile Include="NHSpecificTest\NH2111\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2138\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2147\DefaultBatchSize.cs" /> <Compile Include="NHSpecificTest\NH2148\BugFixture.cs" /> <Compile Include="NHSpecificTest\NH2148\Domain.cs" /> <Compile Include="NHSpecificTest\NH2224\Domain.cs" /> @@ -2292,6 +2293,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2147\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2138\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2288\AclassWithDefault.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2288\AclassWithNothing.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-23 17:07:27
|
Revision: 5206 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5206&view=rev Author: fabiomaulo Date: 2010-09-23 17:07:21 +0000 (Thu, 23 Sep 2010) Log Message: ----------- Fix NH-2138 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ResultSetMappingBinder.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ResultSetMappingBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ResultSetMappingBinder.cs 2010-09-23 15:51:58 UTC (rev 5205) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ResultSetMappingBinder.cs 2010-09-23 17:07:21 UTC (rev 5206) @@ -98,11 +98,11 @@ if (StringHelper.IsEmpty(alias)) alias = "alias_" + count; // hack/workaround as sqlquery impl depend on having a key. - string entityName = GetClassName(returnSchema.@class, mappings); - - if (entityName == null) + if (string.IsNullOrEmpty(returnSchema.@class) && string.IsNullOrEmpty(returnSchema.entityname)) throw new MappingException("<return alias='" + alias + "'> must specify either a class or entity-name"); + string entityName = returnSchema.entityname ?? GetClassName(returnSchema.@class, mappings); + LockMode lockMode = GetLockMode(returnSchema.lockmode); PersistentClass pc = mappings.GetClass(entityName); Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/Fixture.cs 2010-09-23 17:07:21 UTC (rev 5206) @@ -0,0 +1,21 @@ +using NHibernate.Engine.Query.Sql; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2138 +{ + [TestFixture] + public class Fixture + { + [Test] + public void AfterAddAppingShouldHaveAResultsetWithEntityName() + { + var cfg = TestConfigurationHelper.GetDefaultConfiguration(); + cfg.AddResource("NHibernate.Test.NHSpecificTest.NH2138.Mappings.hbm.xml", GetType().Assembly); + cfg.Executing(c => c.BuildMappings()).NotThrows(); + var sqlQuery = cfg.NamedSQLQueries["AllCoders"]; + var rootReturn = (NativeSQLQueryRootReturn)sqlQuery.QueryReturns[0]; + rootReturn.ReturnEntityName.Should().Be("Coder"); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2138/Mappings.hbm.xml 2010-09-23 17:07:21 UTC (rev 5206) @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> + + <class entity-name="Coder" table="persons"> + <id type="int"> + <generator class="increment" /> + </id> + <property name="Name" type="string"/> + </class> + + <sql-query name="AllCoders"> + <return entity-name="Coder" alias="c" /> + SELECT {c.*} + FROM persons c + </sql-query> +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-23 15:51:58 UTC (rev 5205) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-23 17:07:21 UTC (rev 5206) @@ -467,6 +467,7 @@ <Compile Include="NHSpecificTest\NH1836\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2111\A.cs" /> <Compile Include="NHSpecificTest\NH2111\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2138\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2148\BugFixture.cs" /> <Compile Include="NHSpecificTest\NH2148\Domain.cs" /> <Compile Include="NHSpecificTest\NH2224\Domain.cs" /> @@ -2291,6 +2292,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2138\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2288\AclassWithDefault.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2288\AclassWithNothing.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2288\AclassWithSpecific.hbm.xml" /> @@ -2628,7 +2630,6 @@ <EmbeddedResource Include="DynamicEntity\Tuplizer\Customer.hbm.xml" /> </ItemGroup> <ItemGroup> - <Folder Include="NHSpecificTest\NH1136" /> <Folder Include="Properties\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-09-23 15:52:06
|
Revision: 5205 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5205&view=rev Author: fabiomaulo Date: 2010-09-23 15:51:58 +0000 (Thu, 23 Sep 2010) Log Message: ----------- Actualization to Castle.Core 2.5.1 Modified Paths: -------------- trunk/nhibernate/lib/net/3.5/Castle.Core.dll trunk/nhibernate/lib/net/3.5/Castle.Core.pdb trunk/nhibernate/lib/net/3.5/Castle.Core.xml Modified: trunk/nhibernate/lib/net/3.5/Castle.Core.dll =================================================================== (Binary files differ) Modified: trunk/nhibernate/lib/net/3.5/Castle.Core.pdb =================================================================== (Binary files differ) Modified: trunk/nhibernate/lib/net/3.5/Castle.Core.xml =================================================================== --- trunk/nhibernate/lib/net/3.5/Castle.Core.xml 2010-09-22 22:11:09 UTC (rev 5204) +++ trunk/nhibernate/lib/net/3.5/Castle.Core.xml 2010-09-23 15:51:58 UTC (rev 5205) @@ -39,6 +39,17 @@ <param name="property">The property.</param> <returns>true if the property should be stored.</returns> </member> + <member name="T:Castle.Components.DictionaryAdapter.IDictionaryBehaviorBuilder"> + <summary> + Defines the contract for building <see cref="T:Castle.Components.DictionaryAdapter.IDictionaryBehavior"/>s. + </summary> + </member> + <member name="M:Castle.Components.DictionaryAdapter.IDictionaryBehaviorBuilder.BuildBehaviors"> + <summary> + Builds the dictionary behaviors. + </summary> + <returns></returns> + </member> <member name="T:Castle.Components.DictionaryAdapter.AbstractDictionaryAdapter"> <summary> Abstract adapter for the <see cref="T:System.Collections.IDictionary"/> support @@ -161,6 +172,18 @@ <value></value> <returns>An object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"></see>.</returns> </member> + <member name="F:Castle.Core.Internal.InternalsVisible.ToCastleCore"> + <summary> + Constant to use when making assembly internals visible to Castle.Core + <c>[assembly: InternalsVisibleTo(CoreInternalsVisible.ToCastleCore)]</c> + </summary> + </member> + <member name="F:Castle.Core.Internal.InternalsVisible.ToDynamicProxyGenAssembly2"> + <summary> + Constant to use when making assembly internals visible to proxy types generated by DynamicProxy. Required when proxying internal types. + <c>[assembly: InternalsVisibleTo(CoreInternalsVisible.ToDynamicProxyGenAssembly2)]</c> + </summary> + </member> <member name="T:Castle.Components.DictionaryAdapter.AbstractDictionaryAdapterVisitor"> <summary> Abstract implementation of <see cref="T:Castle.Components.DictionaryAdapter.IDictionaryAdapterVisitor"/>. @@ -611,6 +634,13 @@ <param name="property">The property.</param> <param name="behaviors">The property behaviors.</param> </member> + <member name="M:Castle.Components.DictionaryAdapter.PropertyDescriptor.#ctor(Castle.Components.DictionaryAdapter.PropertyDescriptor,System.Boolean)"> + <summary> + Copies an existinginstance of the <see cref="T:Castle.Components.DictionaryAdapter.PropertyDescriptor"/> class. + </summary> + <param name="source"></param> + <param name="copyBehaviors"></param> + </member> <member name="M:Castle.Components.DictionaryAdapter.PropertyDescriptor.GetKey(Castle.Components.DictionaryAdapter.IDictionaryAdapter,System.String,Castle.Components.DictionaryAdapter.PropertyDescriptor)"> <summary> Gets the key. @@ -736,6 +766,13 @@ <param name="behaviors"></param> <returns></returns> </member> + <member name="M:Castle.Components.DictionaryAdapter.PropertyDescriptor.AddBehaviors(Castle.Components.DictionaryAdapter.IDictionaryBehaviorBuilder[])"> + <summary> + Adds the behaviors from the builders. + </summary> + <param name="builders"></param> + <returns></returns> + </member> <member name="M:Castle.Components.DictionaryAdapter.PropertyDescriptor.CopyBehaviors(Castle.Components.DictionaryAdapter.PropertyDescriptor)"> <summary> Copies the behaviors to the other <see cref="T:Castle.Components.DictionaryAdapter.PropertyDescriptor"/> @@ -1237,26 +1274,26 @@ </member> <member name="T:Castle.DynamicProxy.Generators.BaseProxyGenerator"> <summary> - Base class that exposes the common functionalities - to proxy generation. + Base class that exposes the common functionalities + to proxy generation. </summary> </member> <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.GenerateParameterlessConstructor(Castle.DynamicProxy.Generators.Emitters.ClassEmitter,System.Type,Castle.DynamicProxy.Generators.Emitters.SimpleAST.FieldReference)"> <summary> - Generates a parameters constructor that initializes the proxy - state with <see cref="T:Castle.DynamicProxy.StandardInterceptor"/> just to make it non-null. - <para> - This constructor is important to allow proxies to be XML serializable - </para> + Generates a parameters constructor that initializes the proxy + state with <see cref="T:Castle.DynamicProxy.StandardInterceptor"/> just to make it non-null. + <para> + This constructor is important to allow proxies to be XML serializable + </para> </summary> </member> <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.AddMappingNoCheck(System.Type,Castle.DynamicProxy.Contributors.ITypeContributor,System.Collections.Generic.IDictionary{System.Type,Castle.DynamicProxy.Contributors.ITypeContributor})"> <summary> - It is safe to add mapping (no mapping for the interface exists) + It is safe to add mapping (no mapping for the interface exists) </summary> - <param name="implementer"></param> - <param name="interface"></param> - <param name="mapping"></param> + <param name = "implementer"></param> + <param name = "interface"></param> + <param name = "mapping"></param> </member> <member name="M:Castle.DynamicProxy.Generators.InvocationTypeGenerator.GetBaseCtorArguments(System.Type,Castle.DynamicProxy.ProxyGenerationOptions,System.Reflection.ConstructorInfo@)"> <summary> @@ -1269,7 +1306,7 @@ </member> <member name="T:Castle.DynamicProxy.DefaultProxyBuilder"> <summary> - Default implementation of <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> interface producing in-memory proxy assemblies. + Default implementation of <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> interface producing in-memory proxy assemblies. </summary> </member> <member name="T:Castle.DynamicProxy.IProxyBuilder"> @@ -1394,12 +1431,12 @@ </member> <member name="M:Castle.DynamicProxy.DefaultProxyBuilder.#ctor"> <summary> - Initializes a new instance of the <see cref="T:Castle.DynamicProxy.DefaultProxyBuilder"/> class with new <see cref="T:Castle.DynamicProxy.ModuleScope"/>. + Initializes a new instance of the <see cref="T:Castle.DynamicProxy.DefaultProxyBuilder"/> class with new <see cref="T:Castle.DynamicProxy.ModuleScope"/>. </summary> </member> <member name="M:Castle.DynamicProxy.DefaultProxyBuilder.#ctor(Castle.DynamicProxy.ModuleScope)"> <summary> - Initializes a new instance of the <see cref="T:Castle.DynamicProxy.DefaultProxyBuilder"/> class. + Initializes a new instance of the <see cref="T:Castle.DynamicProxy.DefaultProxyBuilder"/> class. </summary> <param name="scope">The module scope for generated proxy types.</param> </member> @@ -1438,11 +1475,6 @@ <param name="interfaces">The interfaces.</param> <param name="options">The options.</param> </member> - <member name="T:Castle.DynamicProxy.Generators.ClassProxyGenerator"> - <summary> - - </summary> - </member> <member name="T:Castle.DynamicProxy.Generators.Emitters.LdcOpCodesDictionary"> <summary>s Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. @@ -1557,11 +1589,6 @@ </summary> <returns>New naming scope.</returns> </member> - <member name="T:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator"> - <summary> - - </summary> - </member> <member name="T:Castle.DynamicProxy.Generators.MethodFinder"> <summary> Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR issue @@ -1621,23 +1648,33 @@ </summary> <param name="savePhysicalAssembly">If set to <c>true</c> saves the generated module.</param> </member> - <member name="M:Castle.DynamicProxy.ModuleScope.#ctor(System.Boolean,System.String,System.String,System.String,System.String)"> + <member name="M:Castle.DynamicProxy.ModuleScope.#ctor(System.Boolean,System.Boolean)"> <summary> Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ModuleScope"/> class, allowing to specify whether the assemblies generated by this instance + should be saved. + </summary> + <param name="savePhysicalAssembly">If set to <c>true</c> saves the generated module.</param> + <param name="disableSignedModule">If set to <c>true</c> disables ability to generate signed module. This should be used in cases where ran under constrained permissions.</param> + </member> + <member name="M:Castle.DynamicProxy.ModuleScope.#ctor(System.Boolean,System.Boolean,System.String,System.String,System.String,System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ModuleScope"/> class, allowing to specify whether the assemblies generated by this instance should be saved and what simple names are to be assigned to them. </summary> <param name="savePhysicalAssembly">If set to <c>true</c> saves the generated module.</param> + <param name="disableSignedModule">If set to <c>true</c> disables ability to generate signed module. This should be used in cases where ran under constrained permissions.</param> <param name="strongAssemblyName">The simple name of the strong-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> <param name="strongModulePath">The path and file name of the manifest module of the strong-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> <param name="weakAssemblyName">The simple name of the weak-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> <param name="weakModulePath">The path and file name of the manifest module of the weak-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> </member> - <member name="M:Castle.DynamicProxy.ModuleScope.#ctor(System.Boolean,Castle.DynamicProxy.Generators.INamingScope,System.String,System.String,System.String,System.String)"> + <member name="M:Castle.DynamicProxy.ModuleScope.#ctor(System.Boolean,System.Boolean,Castle.DynamicProxy.Generators.INamingScope,System.String,System.String,System.String,System.String)"> <summary> Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ModuleScope"/> class, allowing to specify whether the assemblies generated by this instance should be saved and what simple names are to be assigned to them. </summary> <param name="savePhysicalAssembly">If set to <c>true</c> saves the generated module.</param> + <param name="disableSignedModule">If set to <c>true</c> disables ability to generate signed module. This should be used in cases where ran under constrained permissions.</param> <param name="namingScope">Naming scope used to provide unique names to generated types and their members (usually via sub-scopes).</param> <param name="strongAssemblyName">The simple name of the strong-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> <param name="strongModulePath">The path and file name of the manifest module of the strong-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> @@ -1810,23 +1847,23 @@ </member> <member name="T:Castle.DynamicProxy.ProxyGenerator"> <summary> - Provides proxy objects for classes and interfaces. + Provides proxy objects for classes and interfaces. </summary> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.#ctor(Castle.DynamicProxy.IProxyBuilder)"> <summary> - Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ProxyGenerator"/> class. + Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ProxyGenerator"/> class. </summary> <param name="builder">Proxy types builder.</param> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.#ctor"> <summary> - Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ProxyGenerator"/> class. + Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ProxyGenerator"/> class. </summary> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget``1(``0,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. </summary> <typeparam name="TInterface">Type of the interface implemented by <paramref name="target"/> which will be proxied.</typeparam> <param name="target">The target object, calls to which will be intercepted.</param> @@ -1838,22 +1875,22 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target - use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.IInterceptor[])"/> method. - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.IInterceptor[])"/> method. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. </summary> <typeparam name="TInterface">Type of the interface implemented by <paramref name="target"/> which will be proxied.</typeparam> <param name="target">The target object, calls to which will be intercepted.</param> <param name="options">The proxy generation options used to influence generated proxy type and object.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <typeparamref name="TInterface"/> on <paramref name="target"/> object. + Object proxying calls to members of <typeparamref name="TInterface"/> on <paramref name="target"/> object. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception> @@ -1861,21 +1898,21 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target - use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"/> method. - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"/> method. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget(System.Type,System.Object,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. </summary> <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param> <param name="target">The target object, calls to which will be intercepted.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <paramref name="interfaceToProxy"/> type on <paramref name="target"/> object. + Object proxying calls to members of <paramref name="interfaceToProxy"/> type on <paramref name="target"/> object. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> @@ -1886,22 +1923,22 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target - use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.IInterceptor[])"/> method. - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.IInterceptor[])"/> method. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget(System.Type,System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. </summary> <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param> <param name="target">The target object, calls to which will be intercepted.</param> <param name="options">The proxy generation options used to influence generated proxy type and object.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <paramref name="interfaceToProxy"/> type on <paramref name="target"/> object. + Object proxying calls to members of <paramref name="interfaceToProxy"/> type on <paramref name="target"/> object. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> @@ -1912,22 +1949,22 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target - use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"/> method. - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"/> method. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget(System.Type,System.Type[],System.Object,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. </summary> <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param> <param name="target">The target object, calls to which will be intercepted.</param> <param name="additionalInterfacesToProxy">Additional interface types. Calls to their members will be proxied as well.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object. + Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> @@ -1938,15 +1975,15 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target - use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.DynamicProxy.IInterceptor[])"/> method. - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.DynamicProxy.IInterceptor[])"/> method. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget(System.Type,System.Type[],System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. </summary> <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param> <param name="target">The target object, calls to which will be intercepted.</param> @@ -1954,7 +1991,7 @@ <param name="additionalInterfacesToProxy">Additional interface types. Calls to their members will be proxied as well.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object. + Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> @@ -1965,22 +2002,22 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target - use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"/> method. - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"/> method. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. - Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. + Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. </summary> <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param> <param name="target">The target object, calls to which will be intercepted.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <paramref name="interfaceToProxy"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. + Object proxying calls to members of <paramref name="interfaceToProxy"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> @@ -1991,20 +2028,20 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. - Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. + Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. </summary> <typeparam name="TInterface">Type of the interface implemented by <paramref name="target"/> which will be proxied.</typeparam> <param name="target">The target object, calls to which will be intercepted.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <typeparamref name="TInterface"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. + Object proxying calls to members of <typeparamref name="TInterface"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception> @@ -2012,21 +2049,21 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. - Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. + Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. </summary> <typeparam name="TInterface">Type of the interface implemented by <paramref name="target"/> which will be proxied.</typeparam> <param name="target">The target object, calls to which will be intercepted.</param> <param name="options">The proxy generation options used to influence generated proxy type and object.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <typeparamref name="TInterface"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. + Object proxying calls to members of <typeparamref name="TInterface"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception> @@ -2034,21 +2071,21 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. - Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. + Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. </summary> <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param> <param name="target">The target object, calls to which will be intercepted.</param> <param name="additionalInterfacesToProxy">Additional interface types. Calls to their members will be proxied as well.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. + Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> @@ -2059,21 +2096,21 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. - Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. + Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. </summary> <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param> <param name="target">The target object, calls to which will be intercepted.</param> <param name="options">The proxy generation options used to influence generated proxy type and object.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <paramref name="interfaceToProxy"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. + Object proxying calls to members of <paramref name="interfaceToProxy"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> @@ -2084,14 +2121,14 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. - Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. + Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. + Interceptors can use <see cref="T:Castle.DynamicProxy.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>. </summary> <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param> <param name="target">The target object, calls to which will be intercepted.</param> @@ -2099,7 +2136,7 @@ <param name="additionalInterfacesToProxy">Additional interface types. Calls to their members will be proxied as well.</param> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. + Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception> @@ -2110,218 +2147,218 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget``1(Castle.DynamicProxy.IInterceptor)"> <summary> - Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on target object generated at runtime with given <paramref name="interceptor"/>. + Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on target object generated at runtime with given <paramref name="interceptor"/>. </summary> <typeparam name="TInterface">Type of the interface which will be proxied.</typeparam> <param name="interceptor">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <typeparamref name="TInterface"/> types on generated target object. + Object proxying calls to members of <typeparamref name="TInterface"/> types on generated target object. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptor"/> array is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentException">Thrown when given <typeparamref name="TInterface"/> is not an interface type.</exception> <remarks> - Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given <see cref="T:Castle.DynamicProxy.IInterceptor"/> implementations. - They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call <see cref="M:Castle.DynamicProxy.IInvocation.Proceed"/>, since there's no actual implementation to proceed with. - As a result of that also at least one <see cref="T:Castle.DynamicProxy.IInterceptor"/> implementation must be provided. - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given <see cref="T:Castle.DynamicProxy.IInterceptor"/> implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call <see cref="M:Castle.DynamicProxy.IInvocation.Proceed"/>, since there's no actual implementation to proceed with. + As a result of that also at least one <see cref="T:Castle.DynamicProxy.IInterceptor"/> implementation must be provided. + This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. + As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget``1(Castle.DynamicProxy.IInterceptor[])"> <summary> - Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on target object generated at runtime with given <paramref name="interceptors"/>. + Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on target object generated at runtime with given <paramref name="interceptors"/>. </summary> <typeparam name="TInterface">Type of the interface which will be proxied.</typeparam> <param name="interceptors">The interceptors called during the invocation of proxied methods.</param> <returns> - Object proxying calls to members of <typeparamref name="TInterface"/> types on generated target object. + Object proxying calls to members of <typeparamref name="TInterface"/> types on generated target object. </returns> <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception> <exception cref="T:System.ArgumentException">Thrown when given <typeparamref name="TInterface"/> is not an interface type.</exception> <remarks> - Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given <see cref="T:Castle.DynamicProxy.IInterceptor"/> implementations. - They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call <see cref="M:Castle.DynamicProxy.IInvocation.Proceed"/>, since there's no actual implementation to proceed with. - As a result of that also at least one <see cref="T:Castle.DynamicProxy.IInterceptor"/> implementation must be provided. - This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. - As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given <see cref="T:Castle.DynamicProxy.IInterceptor"/> implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call <see cref="M:Castle.DynamicProxy.IInvocation.Proceed"/>, since there's no actual implementation to proceed with. + As a result of that also at least one <see cref="T:Castle.DynamicProxy.IInterceptor"/> implementation ... [truncated message content] |
From: <fab...@us...> - 2010-09-22 22:11:15
|
Revision: 5204 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5204&view=rev Author: fabiomaulo Date: 2010-09-22 22:11:09 +0000 (Wed, 22 Sep 2010) Log Message: ----------- Fix NH-2343 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Type/GenericBagType.cs Modified: trunk/nhibernate/src/NHibernate/Type/GenericBagType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/GenericBagType.cs 2010-09-22 21:01:34 UTC (rev 5203) +++ trunk/nhibernate/src/NHibernate/Type/GenericBagType.cs 2010-09-22 22:11:09 UTC (rev 5204) @@ -40,7 +40,7 @@ public override System.Type ReturnedClass { - get { return typeof(IList<T>); } + get { return typeof(ICollection<T>); } } /// <summary> @@ -53,16 +53,19 @@ /// </returns> public override IPersistentCollection Wrap(ISessionImplementor session, object collection) { - return new PersistentGenericBag<T>(session, (IList<T>) collection); + return new PersistentGenericBag<T>(session, (ICollection<T>) collection); } - //TODO: Add() & Clear() methods - need to see if these should be refactored back into - // their own version of Copy or a DoCopy. The Copy() method used to be spread out amongst - // the various collections, but since they all had common code Add() and Clear() were made - // virtual since that was where most of the logic was. A different/better way might be to - // have a Copy on the base collection that handles the standard checks and then a DoCopy - // that performs the actual copy. + protected override void Add(object collection, object element) + { + ((ICollection<T>) collection).Add((T) element); + } + protected override void Clear(object collection) + { + ((ICollection<T>)collection).Clear(); + } + public override object Instantiate(int anticipatedSize) { return anticipatedSize <= 0 ? new List<T>() : new List<T>(anticipatedSize + 1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |