Update of /cvsroot/jcframework/dotnet In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18481 Modified Files: CClassMap.vb CCursor.vb CInjectedObject.vb CPersistenceBroker.vb CPersistentObject.vb CSqlStatement.vb IPersistentObject.vb Log Message: Changes for timestamps on interface based persistence, plus a few other fixes Index: CPersistenceBroker.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CPersistenceBroker.vb,v retrieving revision 1.101 retrieving revision 1.102 diff -u -d -r1.101 -r1.102 --- CPersistenceBroker.vb 21 Mar 2005 08:00:23 -0000 1.101 +++ CPersistenceBroker.vb 22 Mar 2005 06:09:11 -0000 1.102 @@ -441,6 +441,9 @@ cm2.populateObject(cm2, targetobj, rs, mapName) End If If targetobj.Persistent Then + If targetobj.IsIPersistentObject Then + StartTracking(targetobj) + End If tmpObj = m_cache.Item(targetobj) If Not (tmpObj Is Nothing) Then targetobj = tmpObj @@ -482,6 +485,9 @@ If Not targetobj Is Nothing AndAlso targetobj.Persistent Then tmpObj = m_cache.Item(targetobj) + If Not targetobj.IsIPersistentObject Then + StartTracking(targetobj) + End If If Not (tmpObj Is Nothing) Then targetobj = tmpObj Try @@ -517,7 +523,7 @@ If Not targetobj Is Nothing Then cm2.populateObject(cm2, targetobj, rs, mapName) If targetobj.Persistent Then - If TypeOf (targetobj) Is CInjectedObject Then + If Not targetobj.IsIPersistentObject Then StartTracking(targetobj) End If tmpObj = m_cache.Item(targetobj) @@ -587,6 +593,9 @@ classMapCount -= 1 'This is because we added one in the beginning of the for loop If Not targetobj Is Nothing AndAlso targetobj.Persistent Then tmpObj = m_cache.Item(targetobj) + If Not targetobj.IsIPersistentObject Then + StartTracking(targetobj) + End If If Not (tmpObj Is Nothing) Then targetobj = tmpObj Try @@ -639,7 +648,7 @@ rw = rs.ResultSet.Tables(0).Rows(i) toClass.populateObject(toClass, targetobj, rw, mapName) If targetobj.Persistent Then - If TypeOf (targetobj) Is CInjectedObject Then + If Not targetobj.IsIPersistentObject Then StartTracking(targetobj) End If tmpObj = m_cache.Item(targetobj) @@ -817,9 +826,9 @@ Value = udaMap.ToClass.CreateObjectInstance anObjPers = Value If udaMap.LazyLoad Then - cursor.loadProxy(anObjPers.GetSourceObject) + cursor.loadProxy(anObjPers) Else - cursor.loadObject(anObjPers.GetSourceObject) + cursor.loadObject(anObjPers) 'To prevent recursive associations causing problems we need to add the 'object to the cache here as a preliminary measure m_cache.Add(anObjPers) @@ -828,6 +837,9 @@ anObjPers.IsDirty = False 'After populating a new object anObjPers.OriginalCacheKey = New CCacheKey(anObjPers) col.Add(anObjPers.GetSourceObject) + If Not anObjPers.IsIPersistentObject Then + StartTracking(anObjPers) + End If m_cache.Add(anObjPers) 'Add retrieved objects to the cache Try PCCacheSize.RawValue = m_cache.Count @@ -956,8 +968,6 @@ clMap = obj.GetClassMap cm = clMap - 'Clear dirty flag so that recursion in the class structure doesn't cause an infinite loop - obj.IsDirty = False Debug.WriteLine("Saving object " & cm.Name) @@ -1013,13 +1023,15 @@ 'Need to reset the modified date to the new modified date after saving. 'If we don't do this the object won't get saved correctly on subsequent calls. - obj.ResetOriginalDates() + If obj.IsIPersistentObject Then + CType(obj, IPersistentObject).ResetOriginalDates() + End If obj.Persistent = True obj.State = PersistenceState.Persistent obj.IsDirty = False obj.IsQueued = False 'Update cache key in-case primary key fields have changed value - If Not obj.GetObjectType.IsSubclassOf(GetType(CPersistentObject)) Then + If Not obj.IsIPersistentObject Then If Not obj.OriginalCacheKey Is Nothing Then m_cache.Remove(obj.OriginalCacheKey) Try @@ -1208,7 +1220,7 @@ PCSQLHits.Increment() Catch End Try - If TypeOf (obj) Is CInjectedObject Then + If not obj.IsIPersistentObject Then m_objectsToDelete.Add(obj) End If conn.processStatement(statement) @@ -2874,7 +2886,6 @@ Public Function getInjectedObject(ByVal obj As Object) As CInjectedObject Return getInjectedObject(obj, False) - End Function Public Function getInjectedObject(ByVal obj As Object, ByVal createTemporary As Boolean) As CInjectedObject @@ -3320,10 +3331,10 @@ Return toColl End Function - Private Sub AddToQueue(ByVal obj As Object, ByRef queue As Queue) + Private Sub AddToQueue(ByVal obj As IPersistableObject, ByRef queue As Queue) Call AddToQueue(obj, queue, True) End Sub - Private Sub AddToQueue(ByVal obj As Object, ByRef queue As Queue, ByVal includeObject As Boolean) + Private Sub AddToQueue(ByVal obj As IPersistableObject, ByRef queue As Queue, ByVal includeObject As Boolean) 'Called recursively so that objects with superclasses are queued from the 'top most object down. Dim cm As CClassMap Index: IPersistentObject.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/IPersistentObject.vb,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- IPersistentObject.vb 21 Mar 2005 08:00:25 -0000 1.11 +++ IPersistentObject.vb 22 Mar 2005 06:09:11 -0000 1.12 @@ -5,10 +5,6 @@ Property ExpiryInterval() As Double Property OIDValue() As String Property GUIDValue() As String - Property CreatedDate() As Date - Property ModifiedDate() As Date - ReadOnly Property OriginalCreatedDate() As Date - Property OriginalModifiedDate() As Date Property AssociationsLoaded() As Boolean Property IsLoading() As Boolean Property IsQueued() As Boolean @@ -33,15 +29,21 @@ Function Equals(ByVal obj As IPersistableObject) As Boolean Function Copy() As IPersistableObject Sub ReplaceWith(ByVal obj As IPersistableObject) - Sub ResetOriginalDates() Function GetObjectByClassMap(ByVal classMap As CClassMap) As IPersistableObject Function GetSourceObject() As Object Function HasValidKey() As Boolean + Function IsIPersistentObject() As Boolean End Interface Public Interface IPersistentObject Inherits IPersistableObject + Property CreatedDate() As Date + Property ModifiedDate() As Date + ReadOnly Property OriginalCreatedDate() As Date + Property OriginalModifiedDate() As Date + Sub ResetOriginalDates() + Function Retrieve() As Boolean Function Retrieve(ByRef obj As CPersistentObject) As Boolean Function Retrieve(ByRef obj As CPersistentObject, ByVal usecache As Boolean) As Boolean Index: CClassMap.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CClassMap.vb,v retrieving revision 1.54 retrieving revision 1.55 diff -u -d -r1.54 -r1.55 --- CClassMap.vb 21 Mar 2005 08:00:22 -0000 1.54 +++ CClassMap.vb 22 Mar 2005 06:09:03 -0000 1.55 @@ -1319,7 +1319,11 @@ If Me.getAttributeMap(i).isTimeStamp Then paramCount += 1 m_updateStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & Me.getAttributeMap(i).ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo("_" & paramCount.ToString & "_")) + If obj.IsIPersistentObject Then m_updateStatement.addSqlParameter(paramCount, obj.GetValueByAttribute("Original" & Me.getAttributeMap(i).Name), Me.getAttributeMap(i).ColumnMap) + Else + m_updateStatement.addSqlParameter(paramCount, CType(obj, CInjectedObject).getOriginalValueByAttribute(Me.getAttributeMap(i).Name), Me.getAttributeMap(i).ColumnMap) + End If End If Next i @@ -2198,4 +2202,8 @@ End While Return result End Function + + Protected Overrides Sub Finalize() + MyBase.Finalize() + End Sub End Class \ No newline at end of file Index: CCursor.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CCursor.vb,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- CCursor.vb 28 Feb 2005 23:07:44 -0000 1.15 +++ CCursor.vb 22 Mar 2005 06:09:03 -0000 1.16 @@ -216,6 +216,15 @@ End Set End Property + Public Sub loadObject(ByRef obj As Object) + If obj.GetType.IsSubclassOf(GetType(CPersistentObject)) Then + loadPersistentObject(obj) + Else + Dim injobj As IPersistableObject + injobj = getPersistenceBrokerInstance.getInjectedObject(obj) + loadObject(injobj) + End If + End Sub '''----------------------------------------------------------------------------- ''' <summary> @@ -235,63 +244,57 @@ ''' [rbanks] 4/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- - Public Sub loadObject(ByRef obj As Object) - If obj.GetType.IsSubclassOf(GetType(CPersistentObject)) OrElse TypeOf (obj) Is CPersistentObject Then - loadPersistentObject(obj) + Public Sub loadObject(ByRef obj As IPersistableObject) + If Not obj.IsIPersistentObject Then + loadObject(CType(obj, CInjectedObject), 0) Else - loadObject(obj, 0) + loadPersistentObject(obj) End If End Sub - Public Sub loadObject(ByRef obj As Object, ByVal offset As Integer) - If obj.GetType.IsSubclassOf(GetType(CPersistentObject)) OrElse TypeOf (obj) Is CPersistentObject Then - loadPersistentObject(obj, offset) - Exit Sub - End If + Public Sub loadObject(ByRef obj As CInjectedObject, ByVal offset As Integer) Dim _alias As String = "" Dim mr As CMultiRetrieveCriteria Dim clMap As CClassMap Dim pbroker As CPersistenceBroker = modPersistenceBrokerSingleton.getPersistenceBrokerInstance - Dim injObj As CInjectedObject - injObj = pbroker.getInjectedObject(obj) If Not m_parentCriteria Is Nothing Then If m_parentCriteria.GetType Is GetType(CMultiRetrieveCriteria) Then mr = m_parentCriteria - _alias = mr.getObjectAlias(injObj, offset) - clMap = pbroker.getClassMap(obj.GetType) + _alias = mr.getObjectAlias(obj, offset) + clMap = pbroker.getClassMap(obj.GetObjectType) If Not m_holdsProxies Then - clMap.populateObject(clMap, injObj, m_row, _alias) + clMap.populateObject(clMap, obj, m_row, _alias) If clMap.AssociationMapCount > 0 Then - injObj.AssociationsLoaded = False + obj.AssociationsLoaded = False Else - injObj.AssociationsLoaded = True + obj.AssociationsLoaded = True End If - pbroker.InjectedObjects.Add(injObj) + pbroker.InjectedObjects.Add(obj) Else 'need to retrieve the proxy and then load the object - clMap.populateProxy(injObj, m_row, _alias) - pbroker.retrieveObject(injObj, False, True) - pbroker.InjectedObjects.Add(injObj) + clMap.populateProxy(obj, m_row, _alias) + pbroker.retrieveObject(obj, False, True) + pbroker.InjectedObjects.Add(obj) End If Exit Sub End If End If - clMap = pbroker.getClassMap(obj.GetType) + clMap = pbroker.getClassMap(obj.GetObjectType) If Not m_holdsProxies Then - clMap.populateObject(injObj, m_row) + clMap.populateObject(obj, m_row) If clMap.AssociationMapCount > 0 Then - injObj.AssociationsLoaded = False + obj.AssociationsLoaded = False Else - injObj.AssociationsLoaded = True + obj.AssociationsLoaded = True End If - pbroker.InjectedObjects.Add(injObj) + pbroker.InjectedObjects.Add(obj) Else 'need to retrieve the proxy and then load the object - clMap.populateProxy(injObj, m_row) - pbroker.retrieveObject(injObj, False, True) - pbroker.InjectedObjects.Add(injObj) + clMap.populateProxy(obj, m_row) + pbroker.retrieveObject(obj, False, True) + pbroker.InjectedObjects.Add(obj) End If End Sub @@ -443,37 +446,39 @@ ''' </history> '''----------------------------------------------------------------------------- Public Sub loadProxy(ByRef obj As Object) - If obj.GetType.IsSubclassOf(GetType(CPersistentObject)) OrElse TypeOf (obj) Is CPersistentObject Then + If obj.GetType.IsSubclassOf(GetType(CPersistentObject)) Then loadPersistentProxy(obj, 0) Else - loadProxy(obj, 0) + Dim injobj As IPersistableObject + injobj = getPersistenceBrokerInstance.getInjectedObject(obj) + loadProxy(injobj) End If End Sub - Public Sub loadProxy(ByRef obj As Object, ByVal offset As Integer) - If obj.GetType.IsSubclassOf(GetType(CPersistentObject)) OrElse TypeOf (obj) Is CPersistentObject Then - loadPersistentProxy(obj, offset) - Exit Sub + Public Sub loadProxy(ByRef obj As IPersistableObject) + If Not obj.IsIPersistentObject Then + loadProxy(obj, 0) + Else + loadPersistentProxy(obj, 0) End If - + End Sub + Public Sub loadProxy(ByRef obj As CInjectedObject, ByVal offset As Integer) Dim _alias As String = "" Dim cm As CMultiRetrieveCriteria Dim clMap As CClassMap Dim pbroker As CPersistenceBroker = modPersistenceBrokerSingleton.getPersistenceBrokerInstance - Dim injObj As CInjectedObject - injObj = pbroker.getInjectedObject(obj) If Not m_parentCriteria Is Nothing Then If m_parentCriteria.GetType Is GetType(CMultiRetrieveCriteria) Then cm = m_parentCriteria - _alias = cm.getObjectAlias(injObj, offset) - clMap = pbroker.getClassMap(obj.GetType) - clMap.populateProxy(injObj, m_row, _alias) + _alias = cm.getObjectAlias(obj, offset) + clMap = pbroker.getClassMap(obj.GetObjectType) + clMap.populateProxy(obj, m_row, _alias) Exit Sub End If End If - clMap = pbroker.getClassMap(obj.GetType) - clMap.populateProxy(injObj, m_row) + clMap = pbroker.getClassMap(obj.GetObjectType) + clMap.populateProxy(obj, m_row) End Sub Index: CInjectedObject.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CInjectedObject.vb,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- CInjectedObject.vb 21 Mar 2005 08:00:23 -0000 1.19 +++ CInjectedObject.vb 22 Mar 2005 06:09:11 -0000 1.20 @@ -12,9 +12,6 @@ Private m_originalObject As Object Private m_associationsLoaded As Boolean Private m_oid As COID - Private m_createdDate As Date 'Set when object is created - Private m_modifiedDate As Date 'Set when Dirty flag is set on persisted objects - Private m_originalModDate, m_blankDate As Date Private m_cacheExpiry As Double Private m_guid As Guid Private m_classmap As CClassMap @@ -61,7 +58,7 @@ Throw New Exception("Objects must be of the same type") End If Dim injObj As CInjectedObject - If TypeOf (obj) Is CInjectedObject Then + If Not obj.IsIPersistentObject Then injObj = CType(obj, CInjectedObject) ReplaceValues(injObj.m_object, m_object) Else @@ -175,15 +172,6 @@ End Set End Property - Public Property CreatedDate() As Date Implements IPersistableObject.CreatedDate - Get - Return m_createdDate - End Get - Set(ByVal Value As Date) - m_createdDate = Value - End Set - End Property - Public Property ExpiryInterval() As Double Implements IPersistableObject.ExpiryInterval Get Return m_cacheExpiry @@ -323,15 +311,6 @@ End Get End Property - Public Property ModifiedDate() As Date Implements IPersistableObject.ModifiedDate - Get - Return m_modifiedDate - End Get - Set(ByVal Value As Date) - m_modifiedDate = Value - End Set - End Property - Public Property OIDValue() As String Implements IPersistableObject.OIDValue Get Dim oidfactory As COIDFactory @@ -426,6 +405,10 @@ End Function Public Sub setAttributeValue(ByVal pName As String, ByRef Value As Object) Implements IPersistableObject.setAttributeValue + setAttributeValue(m_object, pName, Value) + End Sub + + Public Sub setAttributeValue(ByVal obj As Object, ByVal pName As String, ByRef Value As Object) If TypeOf (Value) Is System.DBNull Then Exit Sub End If @@ -436,9 +419,9 @@ Try If dotPos = -1 Then If TypeOf (Value) Is System.SByte Then - CallByName(m_object, pName, CallType.Set, IIf(Value.ToString = "1", True, False)) + CallByName(obj, pName, CallType.Set, IIf(Value.ToString = "1", True, False)) Else - CallByName(m_object, pName, CallType.Set, Value) + CallByName(obj, pName, CallType.Set, Value) End If Else Dim o As Object @@ -447,7 +430,7 @@ Dim val As ValueType objName = pName.Substring(0, dotPos) propertyName = pName.Substring(dotPos + 1) - o = CallByName(m_object, objName, CallType.Get) + o = CallByName(obj, objName, CallType.Get) If o Is Nothing Then Return End If @@ -458,7 +441,7 @@ Else CallByName(val, propertyName, CallType.Set, Value) End If - CallByName(m_object, objName, CallType.Set, val) + CallByName(obj, objName, CallType.Set, val) Else If TypeOf (Value) Is System.SByte Then CallByName(o, propertyName, CallType.Set, IIf(Value.ToString = "1", True, False)) @@ -505,10 +488,6 @@ Return injobj End Function - Friend Sub ResetOriginalDates() Implements IPersistableObject.ResetOriginalDates - m_originalModDate = m_modifiedDate - End Sub - Function getObjectByClassMap(ByVal classMap As CClassMap) As IPersistableObject Implements IPersistableObject.getObjectByClassMap Dim obj, Value As IPersistableObject Dim col As IList @@ -536,8 +515,10 @@ Next i 'set object's attributes + Dim AttrMap As CAttributeMap For i = 1 To CType(classMap.AttributeMaps.Count, Short) - obj.SetAttributeValue(classMap.getAttributeMap(i).Name, Me.getValueByAttribute(classMap.getAttributeMap(i).Name)) + AttrMap = classMap.getAttributeMap(i) + obj.SetAttributeValue(AttrMap.Name, Me.getValueByAttribute(AttrMap.Name)) Next 'if it has superclass add its attributes @@ -555,35 +536,17 @@ 'set superclass's attributes For i = 1 To CType(cm.AttributeMaps.Count, Short) - obj.SetAttributeValue(cm.getAttributeMap(i).Name, Me.getValueByAttribute(cm.getAttributeMap(i).Name)) + AttrMap = cm.getAttributeMap(i) + obj.SetAttributeValue(AttrMap.Name, Me.getValueByAttribute(AttrMap.Name)) Next cm = cm.SuperClass End While - 'copy the OriginalModifiedDate and the ModifiedDate from the child to the parent. - 'if we don't do this the object won't get saved correctly on subsequent calls. - obj.ModifiedDate = Me.ModifiedDate - obj.OriginalModifiedDate = Me.OriginalModifiedDate obj.IsDirty = Me.IsDirty Return obj End Function - Public Property OriginalModifiedDate() As Date Implements IPersistableObject.OriginalModifiedDate - Get - Return m_originalModDate - End Get - Set(ByVal Value As Date) - m_originalModDate = Value - End Set - End Property - - Public ReadOnly Property OriginalCreatedDate() As Date Implements IPersistableObject.OriginalCreatedDate - Get - Return m_createdDate - End Get - End Property - Public Overrides Function ToString() As String Dim s As String Dim i As Short @@ -743,5 +706,8 @@ End Try End Function + Public Function IsIPersistentObject() As Boolean Implements IPersistableObject.IsIPersistentObject + Return False + End Function End Class Index: CSqlStatement.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CSqlStatement.vb,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- CSqlStatement.vb 7 Feb 2005 07:37:35 -0000 1.12 +++ CSqlStatement.vb 22 Mar 2005 06:09:11 -0000 1.13 @@ -116,7 +116,7 @@ ''' [rbanks] 23/01/2004 Created ''' </history> '''----------------------------------------------------------------------------- - Public Sub addSqlParameter(ByVal i As Integer, ByRef obj As Object, ByRef c As CColumnMap) + Public Sub addSqlParameter(ByVal i As Integer, ByVal obj As Object, ByVal c As CColumnMap) Dim sp As New CSQLParameter Dim dd As DateTime Index: CPersistentObject.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CPersistentObject.vb,v retrieving revision 1.59 retrieving revision 1.60 diff -u -d -r1.59 -r1.60 --- CPersistentObject.vb 21 Mar 2005 08:00:25 -0000 1.59 +++ CPersistentObject.vb 22 Mar 2005 06:09:11 -0000 1.60 @@ -413,7 +413,7 @@ ''' [rbanks] 25/11/2003 Created ''' </history> '''----------------------------------------------------------------------------- - <Browsable(False)> Public ReadOnly Property OriginalCreatedDate() As Date Implements IPersistableObject.OriginalCreatedDate + <Browsable(False)> Public ReadOnly Property OriginalCreatedDate() As Date Implements IPersistentObject.OriginalCreatedDate Get Return m_createdDate End Get @@ -1949,4 +1949,8 @@ Public Function GetSourceObject() As Object Implements IPersistableObject.GetSourceObject Return Me End Function + + Public Function IsIPersistentObject() As Boolean Implements IPersistableObject.IsIPersistentObject + Return True + End Function End Class |