Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

cRelation.h

Go to the documentation of this file.
00001 /******************************************************************************/
00002 /*                                                                            */
00003 /* POLiTe - Persistent Object Library Test                                    */
00004 /*                                        Ph.D. Thesis by Mgr. Michal Kopecky */
00005 /*                                                                            */
00006 /* Charles University Prague                                                  */
00007 /*                                                                            */
00008 /******************************************************************************/
00009 /*                                                                            */
00010 /* File name: ...                                                             */
00011 /* Module: ......                                                             */
00012 /*                                                                            */
00013 /******************************************************************************/
00014 
00015 #ifndef __C_RELATION_H__
00016 #define __C_RELATION_H__
00017 
00018 // Standard Header(s)
00019 #include <fstream.h>
00020 
00021 // Common POLiTe Header(s)
00022 #include <lStr.h>
00023 
00024 // Other POLiTe Header(s)
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         //Identification of the database where related instances are stored.
00038         class Connection *_databaseConnection;
00039         //Each relation knows class names of both its sides,
00040         //a table it corresponds to and names of key columns
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         //Inserts a couple <L, R> to the OMT-relation.
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         //Deletes a couple <L, R> from the OMT-relation.
00072 
00073         virtual bool LDeleteAll(class RefBase &right) = 0;
00074         virtual bool LDeleteAll(class Object &right);
00075         //Deletes all couples <X, right>
00076         virtual bool DeleteLeft(class RefBase &right) {return LDeleteAll(right);};
00077         virtual bool DeleteLeft(class Object &right) {return LDeleteAll(right);};
00078         //The same as LDeleteAll
00079 
00080         virtual bool RDeleteAll(class RefBase &left) = 0;
00081         virtual bool RDeleteAll(class Object &left);
00082         //Deletes all couples <left, X>
00083         virtual bool DeleteRight(class RefBase &left) {return RDeleteAll(left);};
00084         virtual bool DeleteRight(class Object &left) {return RDeleteAll(left);};
00085         //The same as RDeleteAll
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         //Gets all objects connected to object "right"
00094         //according to "query"
00095 
00096         virtual ResultBase *_RGetAll(
00097                 ResultBase *rb,
00098                 const class RefBase &left,
00099                 const class QueRefProto &query = EQUERY
00100                 ) = 0;
00101         //Gets all objects connected to object "left"
00102         //according to "query"
00103 
00104 public:
00105         virtual bool WriteDDL(ofstream &S, class Database &Db) = 0;
00106         // generates DDL stements nedded for the library to run
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         //Tests if exists any object connected to object "right"
00111         //according to "query"
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         //Tests if exists any object connected to object "left"
00116         //according to "query"
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         //Tests if exists relation between the given objects
00123 
00124 protected:
00125         virtual const char *_TableName() const {return _tableName;};
00126         // Returns a table name, where both sets of foreign keys are
00127         // it is NOT a _table_name column for all types of relations!
00128 
00129         virtual ResultBase *_LGetAll(
00130                 ResultBase * rb,
00131                 const class QueRefProto &qL,
00132                 const class QueRefProto &qR
00133                 ) = 0;
00134         //Gets all objects on the left side fulfilling query qL connected to object
00135         //on the right fulfilling query qR
00136 
00137         virtual ResultBase *_RGetAll(
00138                 ResultBase * rb,
00139                 const class QueRefProto &qL,
00140                 const class QueRefProto &qR
00141                 ) = 0;
00142         //Gets all objects on the right side fulfilling query qR connected to object
00143         //on the left fulfilling query qL
00144 };
00145 
00146 #endif //__C_RELATION_H__

Generated on Sun Jul 14 20:51:15 2002 for POLiTe by doxygen1.2.16