AgregatClass.h

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Author: Eric Viara <viara@sysra.com>
00022 */
00023 
00024 
00025 #ifndef _EYEDB_AGREGAT_CLASS_H
00026 #define _EYEDB_AGREGAT_CLASS_H
00027 
00028 namespace eyedb {
00029 
00030   class AttrIdxContext;
00031 
00040   class AgregatClass : public Class {
00041 
00042     // ----------------------------------------------------------------------
00043     // AgregatClass Interface
00044     // ----------------------------------------------------------------------
00045 
00046   public:
00052     AgregatClass(const char *s, Class* p = NULL);
00053 
00059     AgregatClass(const char *s, const Oid *poid);
00060 
00067     AgregatClass(Database *db, const char *s, Class* p = NULL);
00068 
00075     AgregatClass(Database *db, const char *s, const Oid *poid);
00076 
00081     AgregatClass(const AgregatClass &cl);
00082 
00088     AgregatClass& operator=(const AgregatClass &cl);
00089 
00094     virtual Object *clone() const {return new AgregatClass(*this);}
00095 
00100     Status attrsComplete();
00101 
00109     Status trace(FILE* fd = stdout, unsigned int flags = 0,
00110                  const RecMode * recmode = RecMode::FullRecurs) const;
00111 
00117     virtual Status setDatabase(Database *mdb);
00118 
00124     virtual Status setName(const char *s);
00125 
00129     void touch();
00130 
00135     virtual AgregatClass *asAgregatClass() {return this;}
00136 
00141     virtual const AgregatClass *asAgregatClass() const {return this;}
00142 
00145     virtual ~AgregatClass();
00146 
00147     // ----------------------------------------------------------------------
00148     // AgregatClass Protected Part
00149     // ----------------------------------------------------------------------
00150   protected:
00151     static const unsigned int IndirectSize;
00152 
00153     void newObjRealize(Object *) const;
00154     virtual void garbage();
00155 
00156     // ----------------------------------------------------------------------
00157     // AgregatClass Private Part
00158     // ----------------------------------------------------------------------
00159   private:
00160     Offset post_create_offset;
00161     friend Status
00162     agregatClassMake(Database *, const Oid *, Object **,
00163                      const RecMode *, const ObjectHeader *,
00164                      Data, LockMode, const Class *);
00165     Status create();
00166     Status update();
00167 
00168     Status remove(const RecMode* = RecMode::NoRecurs);
00169     virtual Status trace_realize(FILE*, int, unsigned int, const RecMode *) const;
00170     Status generateCode_C(Schema *, const char *prefix,
00171                           const GenCodeHints &,
00172                           const char *stubs,
00173                           FILE *, FILE *, FILE *, FILE *, FILE *, FILE *);
00174     Status generateConstructors_C(GenContext *);
00175     Status generateConstructors_C(GenContext *, GenContext *);
00176     Status generateDownCasting_C(GenContext *, Schema *m);
00177     Status generateClassDesc_C(GenContext *, const char *);
00178 
00179     Status generateMethodDecl_C(Schema *, GenContext *);
00180 
00181     Status generateMethodBodyFE_C(Schema *, GenContext *,
00182                                   Method *);
00183     Status generateMethodFetch_C(GenContext *, Method *);
00184 
00185     Status generateCode_Java(Schema *, const char *prefix, 
00186                              const GenCodeHints &, FILE *);
00187     Status generateConstructors_Java(GenContext *);
00188     Status generateClassDesc_Java(GenContext *, const char *);
00189     Status generateClassComponent_Java(GenContext *, GenContext *,
00190                                        GenContext *);
00191 
00192     Status checkInversePath(const Schema *m,
00193                             const Attribute *item,
00194                             const Attribute *&invitem, Bool) const;
00195 
00196     void _init(Class *);
00197 
00198     // ----------------------------------------------------------------------
00199     // AgregatClass Restricted Access (conceptually private)
00200     // ----------------------------------------------------------------------
00201   public:
00202     static void init();
00203     static void _release();
00204     Status completeInverse(Schema *m);
00205     void _setCSDRSize(Size, Size);
00206 
00207     Status setValue(Data);
00208     Status getValue(Data*) const;
00209     Status postCreate();
00210     Status compile(void);
00211 
00212     // FE
00213     Status createIndexes(void);
00214     //Bool compare_perform(const Class *) const;
00215     Bool compare_perform(const Class *cl,
00216                          Bool compClassOwner,
00217                          Bool compNum,
00218                          Bool compName,
00219                          Bool inDepth) const;
00220 
00221     // BE
00222     Status openIndexes_realize(Database *db);
00223 
00224     Status createIndexes_realize(Database *db);
00225 
00226     Status createNestedIndex(AttrIdxContext &attr_idx_ctx,
00227                              const AttrIdxContext *tg_idx_ctx, int);
00228     Status removeNestedIndex(AttrIdxContext &attr_idx_ctx,
00229                              const AttrIdxContext *tg_idx_ctx, int);
00230 
00231     Status createIndexEntries_realize(Database *db, Data,
00232                                       const Oid *,
00233                                       AttrIdxContext &,
00234                                       const Oid * = NULL,
00235                                       int = 0, Bool = True, int = 0,
00236                                       int = -1);
00237     Status updateIndexEntries_realize(Database *db, Data,
00238                                       const Oid *,
00239                                       AttrIdxContext &,
00240                                       const Oid * = NULL,
00241                                       int = 0, Bool = True,
00242                                       const Oid * = NULL,
00243                                       int = 0);
00244     Status removeIndexEntries_realize(Database *db, Data,
00245                                       const Oid *,
00246                                       AttrIdxContext &,
00247                                       const Oid * = NULL,
00248                                       int = 0, Bool = True,
00249                                       const Oid * = NULL, int = 0);
00250 
00251     Status createInverses_realize(Database *, Data, const Oid *);
00252     Status updateInverses_realize(Database *, Data, const Oid *);
00253     Status removeInverses_realize(Database *, Data, const Oid *);
00254     Status checkInverse(const Schema *) const;
00255     void revert(Bool);
00256 
00257     // ----------------------------------------------------------------------
00258     // AgregatClass Restricted Access (conceptually private)
00259     // ----------------------------------------------------------------------
00260   public:
00261     AgregatClass(const Oid&, const char *);
00262   };
00263 
00264   class AgregatClassPtr : public ClassPtr {
00265 
00266   public:
00267     AgregatClassPtr(AgregatClass *o = 0) : ClassPtr(o) { }
00268 
00269     AgregatClass *getAgregatClass() {return dynamic_cast<AgregatClass *>(o);}
00270     const AgregatClass *getAgregatClass() const {return dynamic_cast<AgregatClass *>(o);}
00271 
00272     AgregatClass *operator->() {return dynamic_cast<AgregatClass *>(o);}
00273     const AgregatClass *operator->() const {return dynamic_cast<AgregatClass *>(o);}
00274   };
00275 
00276   typedef std::vector<AgregatClassPtr> AgregatClassPtrVector;
00277 
00282 }
00283 
00284 #endif

Generated on Mon Dec 22 18:15:46 2008 for eyedb by  doxygen 1.5.3