From: Paul H. <pha...@us...> - 2005-03-06 12:45:31
|
Update of /cvsroot/nhibernate/nhibernate/src/NHibernate In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21577/nhibernate/src/NHibernate Modified Files: ISessionFactory.cs NHibernate-1.1.csproj Added Files: ReplicationMode.cs Log Message: Refactored SessionImpl as per 2.1 for Save/Update Index: NHibernate-1.1.csproj =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/NHibernate-1.1.csproj,v retrieving revision 1.75 retrieving revision 1.76 diff -C2 -d -r1.75 -r1.76 *** NHibernate-1.1.csproj 1 Mar 2005 16:24:42 -0000 1.75 --- NHibernate-1.1.csproj 6 Mar 2005 12:44:39 -0000 1.76 *************** *** 280,283 **** --- 280,288 ---- /> <File + RelPath = "ReplicationMode.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "StaleObjectStateException.cs" SubType = "Code" *************** *** 1060,1063 **** --- 1065,1073 ---- /> <File + RelPath = "Impl\BatchingBatcher.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "Impl\CacheEntry.cs" SubType = "Code" *************** *** 1130,1133 **** --- 1140,1148 ---- /> <File + RelPath = "Impl\OnReplicateVisitor.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "Impl\OnUpdateVisitor.cs" SubType = "Code" *************** *** 1180,1183 **** --- 1195,1203 ---- /> <File + RelPath = "Impl\ScheduledIdentityInsertion.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "Impl\ScheduledInsertion.cs" SubType = "Code" *************** *** 1205,1208 **** --- 1225,1233 ---- /> <File + RelPath = "Impl\SqlQueryImpl.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "Impl\Status.cs" SubType = "Code" *************** *** 1220,1223 **** --- 1245,1253 ---- /> <File + RelPath = "Loader\BatchingCollectionInitializer.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "Loader\CollectionLoader.cs" SubType = "Code" Index: ISessionFactory.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/ISessionFactory.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ISessionFactory.cs 31 Dec 2004 23:57:31 -0000 1.6 --- ISessionFactory.cs 6 Mar 2005 12:44:39 -0000 1.7 *************** *** 108,112 **** void Evict( System.Type persistentClass, object id ); - /// <summary> /// Evict all entries from the process-level cache. This method occurs outside --- 108,111 ---- *************** *** 125,128 **** --- 124,138 ---- /// <param name="id"></param> void EvictCollection( string roleName, object id ); + + /// <summary> + /// Evict any query result sets cached in the default query cache region. + /// </summary> + void EvictQueries( ); + + /// <summary> + /// Evict any query result sets cached in the named query cache region. + /// </summary> + /// <param name="cacheRegion"></param> + void EvictQueries( string cacheRegion ); } } \ No newline at end of file --- NEW FILE: ReplicationMode.cs --- using System; using System.Collections; using NHibernate.Type; namespace NHibernate { /// <summary> /// Represents a replication strategy /// </summary> public abstract class ReplicationMode { private readonly int code; private readonly string name; private static readonly IDictionary Instances = new Hashtable(); /// <summary> /// /// </summary> /// <param name="level"></param> /// <param name="name"></param> public ReplicationMode( int level, string name ) { this.code = level; this.name = name; } /// <summary> /// /// </summary> /// <param name="entity"></param> /// <param name="currentVersion"></param> /// <param name="newVersion"></param> /// <param name="versionType"></param> /// <returns></returns> public abstract bool ShouldOverwriteCurrentVersion( object entity, object currentVersion, object newVersion, IVersionType versionType ); /// <summary></summary> public static readonly ReplicationMode Exception = new ExceptionReplicationMode( 0, "EXCEPTION" ); private sealed class ExceptionReplicationMode : ReplicationMode { public ExceptionReplicationMode( int level, string name ) : base( level, name ) { } /// <summary> /// Throw an exception when a row already exists /// </summary> /// <param name="entity"></param> /// <param name="currentVersion"></param> /// <param name="newVersion"></param> /// <param name="versionType"></param> /// <returns></returns> public override bool ShouldOverwriteCurrentVersion( object entity, object currentVersion, object newVersion, IVersionType versionType ) { throw new NotSupportedException( "should not be called" ); } } /// <summary></summary> public static readonly ReplicationMode Ignore = new IgnoreReplicationMode( 1, "IGNORE" ); private sealed class IgnoreReplicationMode : ReplicationMode { public IgnoreReplicationMode( int level, string name ) : base( level, name ) { } /// <summary> /// Ignore replicated entities when a row already exists /// </summary> /// <param name="entity"></param> /// <param name="currentVersion"></param> /// <param name="newVersion"></param> /// <param name="versionType"></param> /// <returns></returns> public override bool ShouldOverwriteCurrentVersion( object entity, object currentVersion, object newVersion, IVersionType versionType ) { return false; } } /// <summary></summary> public static readonly ReplicationMode Overwrite = new OverwriteReplicationMode( 3, "OVERWRITE" ); private sealed class OverwriteReplicationMode : ReplicationMode { public OverwriteReplicationMode( int level, string name ) : base( level, name ) { } /// <summary> /// Overwrite existing rows when a row already exists /// </summary> /// <param name="entity"></param> /// <param name="currentVersion"></param> /// <param name="newVersion"></param> /// <param name="versionType"></param> /// <returns></returns> public override bool ShouldOverwriteCurrentVersion( object entity, object currentVersion, object newVersion, IVersionType versionType ) { return true; } } /// <summary></summary> public static readonly ReplicationMode LatestVersion = new LatestVersionReplicationMode( 2, "LATEST_VERSION" ); private sealed class LatestVersionReplicationMode : ReplicationMode { public LatestVersionReplicationMode( int level, string name ) : base( level, name ) { } /// <summary> /// When a row already exists, choose the latest version /// </summary> /// <param name="entity"></param> /// <param name="currentVersion"></param> /// <param name="newVersion"></param> /// <param name="versionType"></param> /// <returns></returns> public override bool ShouldOverwriteCurrentVersion( object entity, object currentVersion, object newVersion, IVersionType versionType ) { if ( versionType == null ) { // always overwrite nonversioned data return true; } // TODO: 2.1 implement Comparator on versionType //return versionType.Comparator.Compare( currentVersion, newVersion ) <= 0; return true; } } } } |