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_ATTRIBUTE_H
00026 #define _EYEDB_ATTRIBUTE_H
00027
00028 namespace eyedb {
00029
00035
00036 class ObjectHeader;
00037 class AgregatClass;
00038 class GenContext;
00039 class Index;
00040 class Class;
00041 class Schema;
00042 class ClassSequence;
00043 class ClassSeqItem;
00044 class AttrStack;
00045 class CardinalityConstraint;
00046 class UniqueConstraint;
00047 class NotNullConstraint;
00048 class ClassConversion;
00049 class AttributeComponent;
00050 class AttributeComponentSet;
00051 class CollAttrImpl;
00052 class Dataspace;
00053
00054 class AttrIdxContext;
00055 class MultiIndex;
00056
00060 class TypeModifier {
00061
00062
00063
00064
00065 public:
00066 enum {_Indirect = 0x1, _VarDim = 0x2};
00067
00068 enum _mode {
00069 Direct = 0,
00070 Indirect = _Indirect,
00071 VarDim = _VarDim,
00072 IndirectVarDim = _Indirect|_VarDim
00073 } mode;
00074
00075 eyedblib::int16 ndims;
00076 eyedblib::int32 *dims;
00077 eyedblib::int32 pdims;
00078 eyedblib::int32 maxdims;
00079
00087 static TypeModifier make(Bool isRef, int ndims, int *dims);
00088
00096 Status codeIDR(Data* data, Offset* offset, Size* alloc_size);
00097
00104 Status decodeIDR(Data data, Offset *offset);
00105
00111 Bool compare(const TypeModifier *tmod) const;
00112
00116 TypeModifier();
00117
00122 TypeModifier(const TypeModifier &typmod);
00123
00129 TypeModifier &operator=(const TypeModifier &typmod);
00130
00134 ~TypeModifier();
00135 };
00136
00140 class Attribute {
00141
00142
00143
00144
00145 public:
00146 enum {
00147 defaultSize = -1,
00148 directAccess = -2,
00149 wholeData = -3
00150 };
00151
00156 const char *getName() const;
00157
00162 CardinalityConstraint *getCardinalityConstraint() const;
00163
00175 Status getIdx(Database *db, int ind, int& maxind, Size &sz,
00176 const AttrIdxContext &idx_ctx, Index *&idx,
00177 eyedbsm::Idx *&se_idx) const;
00178
00183 unsigned int getMagOrder() const {return magorder;}
00184
00190 Status setCardinalityConstraint(CardinalityConstraint *card);
00191
00196 virtual Bool isVarDim() const;
00197
00202 virtual Bool isIndirect() const;
00203
00208 virtual Bool isNative() const {return False;}
00209
00214 virtual Bool isString() const {return IDBBOOL(is_string);}
00215
00220 virtual Bool isBasicOrEnum() const {return IDBBOOL(is_basic_enum);}
00221
00226 virtual Status check() const;
00227
00236 virtual Status compile_perst(const AgregatClass *ma, int *offset, int *size, int *inisize);
00237
00245 virtual Status compile_volat(const AgregatClass *ma, int *offset, int *size);
00246
00253 virtual Status getSize(Data idr, Size& size) const;
00254
00261 virtual Status getSize(const Object *agr, Size& size) const;
00262
00270 virtual Status getSize(Database *db, const Oid *data_oid, Size& size) const;
00271
00278 virtual Status setSize(Object *agr, Size size) const;
00279
00289 virtual Status setOid(Object *agr, const Oid *oid, int=1, int=0, Bool=True) const;
00290
00299 virtual Status getOid(const Object *agr, Oid *oid, int=1, int=0) const;
00300
00310 virtual Status setValue(Object *agr, Data data, int nb, int from, Bool check_class=True) const;
00311
00321 virtual Status getValue(const Object *agr, Data *data, int nb, int from, Bool *isnull = 0) const;
00322
00335 virtual Status getTValue(Database *db, const Oid &objoid,
00336 Data *data, int nb = 1, int from = 0,
00337 Bool *isnull = 0, Size *rnb = 0, Offset poffset= 0) const;
00338
00344 void *setUserData(void *nuser_data);
00345
00350 void *getUserData(void) {return user_data;}
00351
00356 const void *getUserData(void) const {return user_data;}
00357
00358
00359 virtual Status getVal(Database *, const Oid *, Data,
00360 int, int, int, Bool * = 0) const;
00361
00362
00363
00364
00365
00366
00376 virtual Status update(Database *db,
00377 const Oid& cloid,
00378 const Oid& objoid,
00379 Object *agr,
00380 AttrIdxContext &idx_ctx) const;
00381
00392 virtual Status realize(Database *db, Object *agr,
00393 const Oid& cloid,
00394 const Oid& objoid,
00395 AttrIdxContext &idx_ctx,
00396 const RecMode *rcm) const;
00397
00408 virtual Status remove(Database *db, Object *agr,
00409 const Oid& cloid,
00410 const Oid& objoid,
00411 AttrIdxContext &idx_ctx,
00412 const RecMode *rcm) const;
00413
00425 virtual Status load(Database *db,
00426 Object *agr,
00427 const Oid &cloid,
00428 LockMode lockmode,
00429 AttrIdxContext &idx_ctx,
00430 const RecMode *rcm,
00431 Bool force = False) const;
00432
00442 virtual Status trace(const Object *agr, FILE *fd, int *indent, unsigned int flags,
00443 const RecMode *rcm) const;
00444
00449 const TypeModifier &getTypeModifier() const;
00450
00459 Attribute(Class *tp, const char *s, Bool isref=False,
00460 int ndims=0, int *dims=0);
00461
00468 Attribute(Class *tp, const char *s, int dim);
00469
00478 Attribute(const Attribute*attr, const Class *cls, const Class *class_owner,
00479 const Class *dyn_class_owner, int n);
00480
00488 void getPersistentIDR(Offset& p_off, Size& item_p_sz, Size& p_sz, Size& item_ini_sz) const;
00489
00494 Offset getPersistentIDR() const {return idr_poff;}
00495
00502 void getVolatileIDR(Offset& v_off, Size& item_v_sz, Size& v_sz) const;
00503
00508 const Class *getClass() const {return cls;}
00509
00514 const Class *getClassOwner() const {return class_owner;}
00515
00520 const Class *getDynClassOwner() const {return dyn_class_owner;}
00521
00526 int getNum() const {return num;}
00527
00533 virtual Attribute *clone(Database *db = 0) const;
00534
00539 virtual Bool isFlat() const {return False;}
00540
00549 Status codeIDR(Database *db, Data* data, Offset* offset, Size* alloc_size);
00550
00557 Status decodeIDR(Data data, Offset *offset);
00558
00565 Bool compare(Database *db, const Attribute *item) const;
00566
00572 Status setInverse(const Attribute *);
00573
00580 Status setInverse(const char *, const char *);
00581
00589 void getInverse(const char **, const char **, const Attribute **) const;
00590
00595 Bool hasInverse() const;
00596
00602 virtual Status getDefaultDataspace(const Dataspace *&dataspace) const;
00603
00609 virtual Status setDefaultDataspace(const Dataspace *dataspace);
00610
00616 virtual Status getLocations(ObjectLocationArray &);
00617
00623 virtual Status move(const Dataspace *dataspace);
00624
00625
00626 static unsigned char idxNull, idxNotNull;
00627
00636 Status indexPrologue(Database *db, const AttrIdxContext &idx_ctx,
00637 Index *&idx, Bool create);
00638
00646 Status createDeferredIndex_realize(Database *db,
00647 const AttrIdxContext &idx_ctx,
00648 Index *idx);
00649
00656 Status destroyIndex(Database *db, Index *idx) const;
00657
00665 static Status getIndex(Database *db, const char *attrpath,
00666 Index *&idx);
00667
00675 static Status getUniqueConstraint(Database *db, const char *attrpath,
00676 UniqueConstraint *&unique);
00677
00685 static Status getNotNullConstraint(Database *db, const char *attrpath,
00686 NotNullConstraint *¬null);
00687
00695 static Status getCollAttrImpl(Database *db, const char *attrpath,
00696 CollAttrImpl *&collimpl);
00697
00704 static Status updateIndexEntries(Database *db,
00705 AttrIdxContext &idx_ctx);
00706
00720 Status createIndexEntry_realize(Database *db, Data idr, const Oid *oid,
00721 const Oid *cloid, int offset, Bool novd,
00722 AttrIdxContext &idx_ctx,
00723 int count = 0, int size = -1);
00724
00738 Status updateIndexEntry_realize(Database *db, Data idr, const Oid *oid,
00739 const Oid *cloid, int offset, Bool novd,
00740 const Oid *data_oid,
00741 AttrIdxContext &idx_ctx,
00742 int count = 0);
00743
00757 Status removeIndexEntry_realize(Database *db, Data idr, const Oid *oid,
00758 const Oid *cloid, int offset, Bool novd,
00759 const Oid *data_oid,
00760 AttrIdxContext &idx_ctx,
00761 int count = 0);
00762
00777 Status createIndexEntry(Database *db, Data pdata, const Oid *oid,
00778 const Oid *cloid, int offset, int count, int,
00779 Size, Bool,
00780 AttrIdxContext &idx_ctx);
00781
00796 Status updateIndexEntry(Database *db, Data pdata, const Oid *oid,
00797 const Oid *cloid, int offset, const Oid *data_oid, int count,
00798 Size varsize, Bool novd,
00799 AttrIdxContext &idx_ctx);
00800
00815 Status removeIndexEntry(Database *db, Data pdata, const Oid *oid,
00816 const Oid *cloid, int offset, const Oid *data_oid, int count,
00817 Size varsize, Bool novd,
00818 AttrIdxContext &idx_ctx);
00819
00835 Status sizesCompute(Database *db, const char fmt_error[],
00836 const Oid *data_oid, int &offset,
00837 Size varsize, Bool novd, int &sz,
00838 int inisize, int &oinisize,
00839 Bool &skipRemove, Bool &skipInsert);
00840
00848 virtual Status createInverse_realize(Database *db, Data pdata, const Oid *oid) const;
00849
00857 virtual Status updateInverse_realize(Database *db, Data pdata, const Oid *oid) const;
00858
00866 virtual Status removeInverse_realize(Database *db, Data pdata, const Oid *oid) const;
00867
00868 #ifdef GBX_NEW_CYCLE
00869 virtual void decrRefCountPropag(Object *, int) const;
00870 #endif
00871
00877 virtual void garbage(Object *, int) const;
00878
00885 Status addComponent(Database *db, AttributeComponent *comp) const;
00886
00893 Status rmvComponent(Database *db, AttributeComponent *comp) const;
00894
00901 static Bool isNull(Data inidata, const TypeModifier *tmod);
00902
00910 static Bool isNull(Data inidata, int nb, int from);
00911
00922 static Status checkAttrPath(Schema *m, const Class *&rcls,
00923 const Attribute *&attr,
00924 const char *attrpath,
00925 AttrIdxContext * idx_ctx = 0,
00926 Bool just_check_attr = False);
00927
00931 virtual ~Attribute();
00932
00933 static int composedMode;
00934
00935
00936
00937
00938 protected:
00939 const Dataspace *dataspace;
00940 short dspid;
00941
00942 void setItem(Class *, const char *, Bool isRef,
00943 int ndims, int *dims,
00944 char _is_basic_enum = -1,
00945 char _is_string = -1);
00946
00947 void _setCSDROffset(Offset, Size);
00948 Status checkTypes(Data, Size, int ) const;
00949 virtual Status checkRange(int, int&) const;
00950 virtual Status checkVarRange(const Object *, int, int&, Size*) const;
00951 virtual Status checkVarRange(int from, int nb, Size size) const;
00952 Status setValue(Object *, Data, Data, Size, Size,
00953 int, int, Data, Bool, Data = 0, Bool = True) const;
00954
00955 Status getValue(Database *, Data, Data*, Size, int, int,
00956 Data, Bool *) const;
00957
00958 Attribute(Database *, Data, Offset *, const Class *, int);
00959 Offset endoff;
00960
00961 unsigned int magorder;
00962
00963 Oid attr_comp_set_oid;
00964 AttributeComponentSet *attr_comp_set;
00965
00966
00967 virtual Status
00968 generateCollInsertClassMethod_C(Class *,
00969 GenContext *,
00970 const GenCodeHints &hints,
00971 Bool);
00972
00973 virtual Status
00974 generateCollSuppressClassMethod_C(Class *,
00975 GenContext *,
00976 const GenCodeHints &hints,
00977 Bool);
00978 virtual Status
00979 generateCollRealizeClassMethod_C(Class *,
00980 GenContext *,
00981 const GenCodeHints &hints,
00982 Bool,
00983 int acctype);
00984
00985 virtual Status
00986 generateCode_C(Class*, const GenCodeHints &,
00987 GenContext *, GenContext *);
00988 virtual Status generateClassDesc_C(GenContext *);
00989 virtual Status generateBody_C(Class *, GenContext *,
00990 const GenCodeHints &hints);
00991 virtual Status generateGetMethod_C(Class *, GenContext *,
00992 Bool isoid,
00993 const GenCodeHints &hints,
00994 const char *_const);
00995 virtual Status generateCollGetMethod_C(Class *, GenContext *,
00996 Bool isoid,
00997 const GenCodeHints &hints,
00998 const char *_const);
00999 virtual Status generateSetMethod_C(Class *, GenContext *,
01000 const GenCodeHints &hints);
01001
01002 virtual Status generateSetMethod_C(Class *, GenContext *,
01003 Bool,
01004 const GenCodeHints &hints);
01005
01006 virtual void genAttrCacheDecl(GenContext *ctx);
01007
01008 virtual void genAttrCacheEmpty(GenContext *ctx);
01009
01010 virtual void genAttrCacheGarbage(GenContext *ctx);
01011
01012 virtual void genAttrCacheGetPrologue(GenContext *ctx, int optype,
01013 Bool is_string = False);
01014
01015 virtual void genAttrCacheGetEpilogue(GenContext *ctx, int optype,
01016 Bool is_string = False);
01017
01018 virtual void genAttrCacheSetPrologue(GenContext *ctx, int optype,
01019 Bool is_string = False);
01020
01021 virtual void genAttrCacheSetEpilogue(GenContext *ctx, int optype,
01022 Bool is_string = False);
01023
01024
01025
01026 virtual Status generateCollGetMethod_Java(Class *own,
01027 GenContext *ctx,
01028 Bool isoid,
01029 const GenCodeHints &hints,
01030 const char *_const);
01031
01032 virtual Status generateCollInsertClassMethod_Java(Class *,
01033 GenContext *,
01034 const GenCodeHints &,
01035 Bool);
01036 virtual Status
01037 generateCollSuppressClassMethod_Java(Class *,
01038 GenContext *,
01039 const GenCodeHints &,
01040 Bool);
01041 virtual Status
01042 generateCollRealizeClassMethod_Java(Class *,
01043 GenContext *,
01044 const GenCodeHints &hints,
01045 Bool,
01046 int acctype);
01047 virtual Status generateCode_Java(Class*,
01048 GenContext *,
01049 const GenCodeHints &,
01050 const char *);
01051 virtual Status generateClassDesc_Java(GenContext *);
01052 virtual Status generateBody_Java(Class *, GenContext *,
01053 const GenCodeHints &,
01054 const char *prefix);
01055 virtual Status generateGetMethod_Java(Class *, GenContext *,
01056 Bool isoid,
01057 const GenCodeHints &hints,
01058 const char *, const char *);
01059 virtual Status generateSetMethod_Java(Class *, GenContext *,
01060 Bool,
01061 const GenCodeHints &);
01062
01063 virtual Status generateSetMethod_Java(Class *, GenContext *,
01064 const GenCodeHints &);
01065
01066
01067 virtual Status copy(Object*, Bool) const;
01068 Status incrRefCount(Object *, Data, int) const;
01069 void manageCycle(Object *, Data, int, gbxCycleContext &r) const;
01070 void garbage(Data, int) const;
01071 #ifdef GBX_NEW_CYCLE
01072 void decrRefCountPropag(Data, int) const;
01073 #endif
01074 Status add(Database *db, ClassConversion *conv,
01075 Data in_idr, Size in_size) const;
01076 const char *name;
01077 eyedblib::int16 num;
01078 eyedblib::int16 code;
01079 const Class *cls;
01080 const Class *class_owner;
01081 const Class *dyn_class_owner;
01082 TypeModifier typmod;
01083
01084 char is_basic_enum;
01085 char is_string;
01086
01087
01088
01089 Offset idr_poff;
01090 Size idr_item_psize;
01091 Size idr_psize;
01092 Offset idr_inisize;
01093
01094
01095 Offset idr_voff;
01096 Size idr_item_vsize;
01097 Size idr_vsize;
01098
01099 Oid oid_cl;
01100 Oid oid_cl_own;
01101 virtual void getVarDimOid(const Object *, Oid *) const;
01102 virtual int iniCompute(const Database *, int, Data &, Data&) const;
01103
01104 CardinalityConstraint *card;
01105
01106 void setCollHints(Object *o, const Oid& oid,
01107 CardinalityConstraint *card_to_set) const;
01108 Status setCollImpl(Database *db, Object *o,
01109 const AttrIdxContext &idx_ctx) const;
01110 Status cardManage(Database *, Object *, int) const;
01111
01112
01113 Status inverseManage(Database *, Object *, int) const;
01114 Status inverseManage(Database *, Object *, Object *) const;
01115
01116
01117
01118
01119 private:
01120 friend class AgregatClass;
01121 friend class Agregat;
01122 friend class Class;
01123 void *user_data;
01124
01125 friend Status
01126 agregatClassLoad(Database *, const Oid *, Object **,
01127 const RecMode *, const ObjectHeader *);
01128 friend Status
01129 agregatLoad(Database *, const Oid *, Object **,
01130 const RecMode *, const ObjectHeader *);
01131
01132 Bool indexPrologue(Database *db, Data _idr, Bool novd,
01133 int &count, Data &pdata, Size &varsize,
01134 Bool create);
01135
01136 Status getClassOid(Database *db, const Class *cls,
01137 const Oid &oidcls, Oid &oid);
01138 Status getAttrComponents(Database *db, const Class *,
01139 LinkedList &);
01140 void codeClassOid(Data, Offset *);
01141 virtual void newObjRealize(Object *) const;
01142 virtual int getBound(Database *, Data);
01143 virtual void getData(const Database *, Data, Data&, Data&) const;
01144 virtual void getData(const Object *, Data&, Data&) const;
01145 virtual void getVarDimOid(Data, Oid *) const;
01146 ClassComponent *getComp(Class::CompIdx idx,
01147 Bool (*pred)(const ClassComponent *,
01148 void *),
01149 void *client_data) const;
01150
01151 virtual void manageCycle(Database *db, Object *o, gbxCycleContext &r) const;
01152
01153 Status loadComponentSet(Database *db, Bool create) const;
01154 static Status getAttrComp(Database *db, const char *clsname,
01155 const char *attrpath, Object *&);
01156
01157 protected:
01158 struct invSpec {
01159 Oid oid_cl;
01160 eyedblib::int16 num;
01161 const Attribute *item;
01162 char *clsname, *fname;
01163
01164 invSpec() {
01165 oid_cl.invalidate();
01166 num = 0;
01167 item = 0;
01168 clsname = fname = 0;
01169 }
01170
01171 invSpec(const invSpec &inv) {
01172 *this = inv;
01173 }
01174
01175 invSpec& operator=(const invSpec &inv) {
01176 oid_cl = inv.oid_cl;
01177 num = inv.num;
01178 item = inv.item;
01179 clsname = (inv.clsname ? strdup(inv.clsname) : 0);
01180 fname = (inv.fname ? strdup(inv.fname) : 0);
01181 return *this;
01182 }
01183
01184 ~invSpec() {
01185 free(clsname);
01186 free(fname);
01187 }
01188 } inv_spec;
01189
01190 struct InvCtx {
01191 Oid oid;
01192 Data idr;
01193
01194 InvCtx() : idr(0) { }
01195 InvCtx(const Oid &_oid, Data _idr) : oid(_oid), idr(_idr) { }
01196 };
01197
01198 Status constraintPrologue(Database *db,
01199 const AttrIdxContext &idx_ctx,
01200 Bool ¬null_comp, Bool ¬null,
01201 Bool &unique_comp, Bool &unique) const;
01202 Status collimplPrologue(Database *db,
01203 const AttrIdxContext &idx_ctx,
01204 CollAttrImpl *&) const;
01205
01206
01207
01208
01209 public:
01210 enum InvObjOp {
01211 invObjCreate = 1,
01212 invObjUpdate,
01213 invObjRemove
01214 };
01215
01216 Status inverse_coll_perform(Database *, InvObjOp,
01217 const Oid &, const Oid &) const;
01218
01219 void setNum(int _num) {num = _num;}
01220 void revert(Bool);
01221 static Status createEntries(Database *db, const Oid &oid,
01222 Object *o,
01223 AttrIdxContext &,
01224 Attribute *attrs[],
01225 int depth, int last,
01226 unsigned char entry[], Index *);
01227 static Status createEntries_realize(Database *db,
01228 Attribute *attr,
01229 const Oid &oid,
01230 Object *o,
01231 AttrIdxContext &idx_ctx,
01232 unsigned char entry[],
01233 Index *idx);
01234 Status completeInverse(Schema *);
01235 void setMagOrder(unsigned int _magorder) {magorder = _magorder;}
01236 Status updateIndexForInverse(Database *db, const Oid &obj_oid,
01237 const Oid &new_oid) const;
01238 static const char *template_name;
01239 Oid getAttrCompSetOid() const {return attr_comp_set_oid;}
01240 void setAttrCompSetOid(Oid _attr_comp_set_oid) {
01241 attr_comp_set_oid = _attr_comp_set_oid;
01242 }
01243
01244 Bool compare(Database *, const Attribute *,
01245 Bool compClassOwner,
01246 Bool compNum,
01247 Bool compName,
01248 Bool inDepth) const;
01249
01250 static Status openMultiIndexRealize(Database *db, Index *);
01251
01252 const char *dumpData(Data);
01253 static const char *log_item_entry_fmt;
01254 static const char *log_comp_entry_fmt;
01255 virtual Status convert(Database *db, ClassConversion *,
01256 Data in_idr, Size in_size) const;
01257
01258 Status clean(Database *db);
01259 virtual void reportAttrCompSetOid(Offset *offset, Data idr) const;
01260
01261 void pre_release();
01262
01263 private:
01264 Status clean_realize(Schema *, const Class *&);
01265 Status createComponentSet(Database *);
01266
01267 Status hasIndex(Database *db, bool &has_index, std::string &idx_str) const;
01268
01269 void completeInverseItem(Schema *);
01270 Status completeInverse(Database *);
01271 Status checkInverse(const Attribute * = 0) const;
01272
01273 Status inverse_1_1(Database *, InvObjOp,
01274 const Attribute *, const Oid &,
01275 const Oid &,
01276 const InvCtx &) const;
01277 Status inverse_1_N(Database *, InvObjOp,
01278 const Attribute *, const Oid &,
01279 const Oid &,
01280 const InvCtx &) const;
01281 Status inverse_N_1(Database *, InvObjOp,
01282 const Attribute *, const Oid &,
01283 const Oid &,
01284 const InvCtx &) const;
01285 Status inverse_N_N(Database *, InvObjOp,
01286 const Attribute *, const Oid &,
01287 const Oid &,
01288 const InvCtx &) const;
01289 Status inverse_update(Database *,
01290 const Attribute *, const Oid &,
01291 const Oid &) const;
01292 Status inverse_realize(Database *, InvObjOp, Data,
01293 const Oid &) const;
01294
01295 Status inverse_get_collection(Database *db,
01296 const Oid &inv_obj_oid,
01297 Collection*& coll) const;
01298
01299 Oid inverse_get_inv_obj_oid(Data) const;
01300
01301 static Status inverse_read_oid(Database *db, const Attribute *item,
01302 const Oid &obj_oid,
01303 Oid &old_obj_oid);
01304 static Status inverse_write_oid(Database *db, const Attribute *item,
01305 const Oid &obj_oid,
01306 const Oid &new_obj_oid,
01307 const InvCtx &);
01308
01309 Status inverse_create_collection(Database *db,
01310 const Attribute *inv_item,
01311 const Oid &obj_oid,
01312 Bool is_N_N,
01313 const Oid &master_oid,
01314 Collection *&coll) const;
01315
01316 Status inverse_get_inv_collection(Database *db,
01317 const Attribute *inv_item,
01318 const Oid &inv_obj_oid,
01319 const Oid &obj_oid,
01320 Bool is_N_N,
01321 Collection *&coll) const;
01322 Status inverse_coll_perform(Database *db, InvObjOp op,
01323 const Attribute *inv_item,
01324 Collection *coll,
01325 const Oid &obj_oid) const;
01326
01327 Status inverse_coll_perform_N_1(Database *, InvObjOp,
01328 const Oid &, const Oid &) const;
01329
01330 Status inverse_coll_perform_N_N(Database *, InvObjOp,
01331 const Oid &, const Oid &) const;
01332
01333 Status makeClassSequence(Database *db, Index *idx,
01334 ClassSequence& seq);
01335
01336 Status realizeIndexes(ClassSequence& seq, int, Bool);
01337
01338
01339 void directFind(Class *rootcl, Class *cl, ClassSeqItem *clitem,
01340 ClassSequence& seq, AttrStack&);
01341
01342 void makeClassSequenceRealize(Class *cl, ClassSequence& seq);
01343 };
01344
01345 extern
01346 Attribute *makeAttribute(const Attribute *, const Class *,
01347 const Class *, const Class *, int);
01348 extern
01349 Attribute *makeAttribute(Database *db, Data, Offset *,
01350 const Class *, int);
01351
01356 }
01357
01358 #endif