00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
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
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
00149
00150 protected:
00151 static const unsigned int IndirectSize;
00152
00153 void newObjRealize(Object *) const;
00154 virtual void garbage();
00155
00156
00157
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
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
00213 Status createIndexes(void);
00214
00215 Bool compare_perform(const Class *cl,
00216 Bool compClassOwner,
00217 Bool compNum,
00218 Bool compName,
00219 Bool inDepth) const;
00220
00221
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
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