00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef __C_RELATION_H__
00016 #define __C_RELATION_H__
00017
00018
00019 #include <fstream.h>
00020
00021
00022 #include <lStr.h>
00023
00024
00025 #include <cQuery.h>
00026
00027 template<class L,class R> class ChainedRelation;
00028
00029 class DLL_External Relation {
00030 #ifdef POLITE_TEST_FRIEND
00031 friend POLITE_TEST_FRIEND;
00032 #endif // POLITE_TEST_FRIEND
00033
00034 friend ChainedRelationBase;
00035
00036 protected:
00037
00038 class Connection *_databaseConnection;
00039
00040
00041 const char *_leftClassName;
00042 char *_leftColumnName;
00043 const char *_rightClassName;
00044 char *_tableName;
00045 char *_rightColumnName;
00046
00047 public:
00048 Relation(
00049 const char *a_left_class_name,
00050 const char *a_right_class_name,
00051 const char *a_table_name,
00052 class Connection *a_database_connection,
00053 const char *a_left_column_name = NULL,
00054 const char *a_right_column_name = NULL
00055 );
00056
00057 virtual ~Relation();
00058
00059 Relation &Connection(class Connection *DbConn) {_databaseConnection=DbConn; return *this;};
00060
00061 virtual bool InsertCouple(class RefBase &left, class RefBase &right) = 0;
00062 virtual bool InsertCouple(class Object &left, class RefBase &right);
00063 virtual bool InsertCouple(class RefBase &left, class Object &right);
00064 virtual bool InsertCouple(class Object &left, class Object &right);
00065
00066
00067 virtual bool DeleteCouple(RefBase &left, RefBase &right) = 0;
00068 virtual bool DeleteCouple(class Object &left, class RefBase &right);
00069 virtual bool DeleteCouple(class RefBase &left, class Object &right);
00070 virtual bool DeleteCouple(class Object &left, class Object &right);
00071
00072
00073 virtual bool LDeleteAll(class RefBase &right) = 0;
00074 virtual bool LDeleteAll(class Object &right);
00075
00076 virtual bool DeleteLeft(class RefBase &right) {return LDeleteAll(right);};
00077 virtual bool DeleteLeft(class Object &right) {return LDeleteAll(right);};
00078
00079
00080 virtual bool RDeleteAll(class RefBase &left) = 0;
00081 virtual bool RDeleteAll(class Object &left);
00082
00083 virtual bool DeleteRight(class RefBase &left) {return RDeleteAll(left);};
00084 virtual bool DeleteRight(class Object &left) {return RDeleteAll(left);};
00085
00086
00087 protected:
00088 virtual class ResultBase *_LGetAll(
00089 ResultBase *rb,
00090 const class RefBase &right,
00091 const class QueRefProto &query = EQUERY
00092 ) = 0;
00093
00094
00095
00096 virtual ResultBase *_RGetAll(
00097 ResultBase *rb,
00098 const class RefBase &left,
00099 const class QueRefProto &query = EQUERY
00100 ) = 0;
00101
00102
00103
00104 public:
00105 virtual bool WriteDDL(ofstream &S, class Database &Db) = 0;
00106
00107
00108 virtual bool LExists(const class RefBase &right, const class QueRefProto &query = EQUERY);
00109 virtual bool LExists(const class Object &right, const class QueRefProto &query = EQUERY);
00110
00111
00112
00113 virtual bool RExists(const class RefBase &left, const class QueRefProto &query = EQUERY);
00114 virtual bool RExists(const class Object &left, const class QueRefProto &query = EQUERY);
00115
00116
00117
00118 virtual bool ExistsCouple(const class RefBase &left,const class RefBase &right) = 0;
00119 virtual bool ExistsCouple(const class Object &left,const class RefBase &right);
00120 virtual bool ExistsCouple(const class RefBase &left,const class Object &right);
00121 virtual bool ExistsCouple(const class Object &left,const class Object &right);
00122
00123
00124 protected:
00125 virtual const char *_TableName() const {return _tableName;};
00126
00127
00128
00129 virtual ResultBase *_LGetAll(
00130 ResultBase * rb,
00131 const class QueRefProto &qL,
00132 const class QueRefProto &qR
00133 ) = 0;
00134
00135
00136
00137 virtual ResultBase *_RGetAll(
00138 ResultBase * rb,
00139 const class QueRefProto &qL,
00140 const class QueRefProto &qR
00141 ) = 0;
00142
00143
00144 };
00145
00146 #endif //__C_RELATION_H__