00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <cDatabaseObject.h>
00017
00018
00019 #include <cObjectBuffer.h>
00020 #include <cRefBase.h>
00021
00023
00024
00025
00026
00027
00028
00029
00030 PROTOTYPE(DatabaseObject);
00031
00032
00034
00035
00036
00037 DatabaseObject::DatabaseObject()
00038 {
00039
00040
00041
00042
00043
00044
00045 #ifdef C_DATABASEOBJECT_TRACE
00046 logmsg("DatabaseObject::DatabaseObject() invoked");
00047 #endif
00048
00049 _DirtyFlag = false;
00050 _MemoryLocks = 0;
00051
00052 #ifdef C_DATABASEOBJECT_TRACE
00053 logmsg("DatabaseObject::DatabaseObject() finished");
00054 #endif
00055 }
00056
00058
00059
00060
00061 DatabaseObject::DatabaseObject(
00062 enum LockingStrategy a_LockingStrategy,
00063 enum UpdatingStrategy an_UpdatingStrategy,
00064 enum WaitingStrategy a_WaitingStrategy,
00065 enum ReadingStrategy a_ReadingStrategy
00066 )
00067 {
00068 #ifdef C_DATABASEOBJECT_TRACE
00069 logmsg("DatabaseObject::DatabaseObject(...) invoked");
00070 logmsg("a_LockingStrategy == \"%s\"", msg(a_LockingStrategy));
00071 logmsg("an_UpdatingStrategy == \"%s\"", msg(an_UpdatingStrategy));
00072 logmsg("a_WaitingStrategy == \"%s\"", msg(a_WaitingStrategy));
00073 logmsg("a_ReadingStrategy == \"%s\"", msg(a_ReadingStrategy));
00074 #endif
00075
00076 SetLockingStrategy(a_LockingStrategy);
00077 SetUpdatingStrategy(an_UpdatingStrategy);
00078 SetWaitingStrategy(a_WaitingStrategy);
00079 _DirtyFlag = false;
00080 _MemoryLocks = 0;
00081
00082 #ifdef C_DATABASEOBJECT_TRACE
00083 logmsg("DatabaseObject::DatabaseObject(...) finished");
00084 #endif
00085 }
00086
00088
00089
00090
00091 DatabaseObject::~DatabaseObject()
00092 {
00093 #ifdef C_DATABASEOBJECT_TRACE
00094 logmsg("DatabaseObject::~DatabaseObject() invoked");
00095 #endif
00096
00097 _Free();
00098
00099 #ifdef C_DATABASEOBJECT_TRACE
00100 logmsg("DatabaseObject::~DatabaseObject() finished");
00101 #endif
00102 }
00103
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114 class RefBase DatabaseObject::BePersistent(
00115 class Connection *DbCon
00116 )
00117 {
00118 RefBase retval;
00119
00120 #ifdef C_DATABASEOBJECT_TRACE
00121 logmsg("int DatabaseObject::BePersistent() invoked");
00122 #endif
00123
00124 if (IsTransient())
00125 {
00126
00127 _Connection = DbCon;
00128
00129
00130
00131 if (Prototype()->_InsertAll(this))
00132 {
00133 retval = Address();
00134 ObjectCache.RegisterObject(retval,this);
00135 _MarkAsClean();
00136 }
00137 else
00138 {
00139 _Connection = NULL;
00140 };
00141 };
00142
00143 #ifdef C_DATABASEOBJECT_TRACE
00144 logmsg("int DatabaseObject::BePersistent() finished");
00145 #endif
00146
00147 return Address();
00148 };