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
00611
00612 static unsigned char idxNull, idxNotNull;
00613
00622 Status indexPrologue(Database *db, const AttrIdxContext &idx_ctx,
00623 Index *&idx, Bool create);
00624
00632 Status createDeferredIndex_realize(Database *db,
00633 const AttrIdxContext &idx_ctx,
00634 Index *idx);
00635
00642 Status destroyIndex(Database *db, Index *idx) const;
00643
00651 static Status getIndex(Database *db, const char *attrpath,
00652 Index *&idx);
00653
00661 static Status getUniqueConstraint(Database *db, const char *attrpath,
00662 UniqueConstraint *&unique);
00663
00671 static Status getNotNullConstraint(Database *db, const char *attrpath,
00672 NotNullConstraint *¬null);
00673
00681 static Status getCollAttrImpl(Database *db, const char *attrpath,
00682 CollAttrImpl *&collimpl);
00683
00690 static Status updateIndexEntries(Database *db,
00691 AttrIdxContext &idx_ctx);
00692
00706 Status createIndexEntry_realize(Database *db, Data idr, const Oid *oid,
00707 const Oid *cloid, int offset, Bool novd,
00708 AttrIdxContext &idx_ctx,
00709 int count = 0, int size = -1);
00710
00724 Status updateIndexEntry_realize(Database *db, Data idr, const Oid *oid,
00725 const Oid *cloid, int offset, Bool novd,
00726 const Oid *data_oid,
00727 AttrIdxContext &idx_ctx,
00728 int count = 0);
00729
00743 Status removeIndexEntry_realize(Database *db, Data idr, const Oid *oid,
00744 const Oid *cloid, int offset, Bool novd,
00745 const Oid *data_oid,
00746 AttrIdxContext &idx_ctx,
00747 int count = 0);
00748
00763 Status createIndexEntry(Database *db, Data pdata, const Oid *oid,
00764 const Oid *cloid, int offset, int count, int,
00765 Size, Bool,
00766 AttrIdxContext &idx_ctx);
00767
00782 Status updateIndexEntry(Database *db, Data pdata, const Oid *oid,
00783 const Oid *cloid, int offset, const Oid *data_oid, int count,
00784 Size varsize, Bool novd,
00785 AttrIdxContext &idx_ctx);
00786
00801 Status removeIndexEntry(Database *db, Data pdata, const Oid *oid,
00802 const Oid *cloid, int offset, const Oid *data_oid, int count,
00803 Size varsize, Bool novd,
00804 AttrIdxContext &idx_ctx);
00805
00821 Status sizesCompute(Database *db, const char fmt_error[],
00822 const Oid *data_oid, int &offset,
00823 Size varsize, Bool novd, int &sz,
00824 int inisize, int &oinisize,
00825 Bool &skipRemove, Bool &skipInsert);
00826
00834 virtual Status createInverse_realize(Database *db, Data pdata, const Oid *oid) const;
00835
00843 virtual Status updateInverse_realize(Database *db, Data pdata, const Oid *oid) const;
00844
00852 virtual Status removeInverse_realize(Database *db, Data pdata, const Oid *oid) const;
00853
00854 #ifdef GBX_NEW_CYCLE
00855 virtual void decrRefCountPropag(Object *, int) const;
00856 #endif
00857
00863 virtual void garbage(Object *, int) const;
00864
00871 Status addComponent(Database *db, AttributeComponent *comp) const;
00872
00879 Status rmvComponent(Database *db, AttributeComponent *comp) const;
00880
00887 static Bool isNull(Data inidata, const TypeModifier *tmod);
00888
00896 static Bool isNull(Data inidata, int nb, int from);
00897
00908 static Status checkAttrPath(Schema *m, const Class *&rcls,
00909 const Attribute *&attr,
00910 const char *attrpath,
00911 AttrIdxContext * idx_ctx = 0,
00912 Bool just_check_attr = False);
00913
00917 virtual ~Attribute();
00918
00919 static int composedMode;
00920
00921
00922
00923
00924 protected:
00925 const Dataspace *dataspace;
00926 short dspid;
00927
00928 void setItem(Class *, const char *, Bool isRef,
00929 int ndims, int *dims,
00930 char _is_basic_enum = -1,
00931 char _is_string = -1);
00932
00933 void _setCSDROffset(Offset, Size);
00934 Status checkTypes(Data, Size, int ) const;
00935 virtual Status checkRange(int, int&) const;
00936 virtual Status checkVarRange(const Object *, int, int&, Size*) const;
00937 virtual Status checkVarRange(int from, int nb, Size size) const;
00938 Status setValue(Object *, Data, Data, Size, Size,
00939 int, int, Data, Bool, Data = 0, Bool = True) const;
00940
00941 Status getValue(Database *, Data, Data*, Size, int, int,
00942 Data, Bool *) const;
00943
00944 Attribute(Database *, Data, Offset *, const Class *, int);
00945 Offset endoff;
00946
00947 unsigned int magorder;
00948
00949 Oid attr_comp_set_oid;
00950 AttributeComponentSet *attr_comp_set;
00951
00952
00953 virtual Status
00954 generateCollInsertClassMethod_C(Class *,
00955 GenContext *,
00956 const GenCodeHints &hints,
00957 Bool);
00958
00959 virtual Status
00960 generateCollSuppressClassMethod_C(Class *,
00961 GenContext *,
00962 const GenCodeHints &hints,
00963 Bool);
00964 virtual Status
00965 generateCollRealizeClassMethod_C(Class *,
00966 GenContext *,
00967 const GenCodeHints &hints,
00968 Bool,
00969 int acctype);
00970
00971 virtual Status
00972 generateCode_C(Class*, const GenCodeHints &,
00973 GenContext *, GenContext *);
00974 virtual Status generateClassDesc_C(GenContext *);
00975 virtual Status generateBody_C(Class *, GenContext *,
00976 const GenCodeHints &hints);
00977 virtual Status generateGetMethod_C(Class *, GenContext *,
00978 Bool isoid,
00979 const GenCodeHints &hints,
00980 const char *_const);
00981 virtual Status generateCollGetMethod_C(Class *, GenContext *,
00982 Bool isoid,
00983 const GenCodeHints &hints,
00984 const char *_const);
00985 virtual Status generateSetMethod_C(Class *, GenContext *,
00986 const GenCodeHints &hints);
00987
00988 virtual Status generateSetMethod_C(Class *, GenContext *,
00989 Bool,
00990 const GenCodeHints &hints);
00991
00992 virtual void genAttrCacheDecl(GenContext *ctx);
00993
00994 virtual void genAttrCacheEmpty(GenContext *ctx);
00995
00996 virtual void genAttrCacheGarbage(GenContext *ctx);
00997
00998 virtual void genAttrCacheGetPrologue(GenContext *ctx, int optype,
00999 Bool is_string = False);
01000
01001 virtual void genAttrCacheGetEpilogue(GenContext *ctx, int optype,
01002 Bool is_string = False);
01003
01004 virtual void genAttrCacheSetPrologue(GenContext *ctx, int optype,
01005 Bool is_string = False);
01006
01007 virtual void genAttrCacheSetEpilogue(GenContext *ctx, int optype,
01008 Bool is_string = False);
01009
01010
01011
01012 virtual Status generateCollGetMethod_Java(Class *own,
01013 GenContext *ctx,
01014 Bool isoid,
01015 const GenCodeHints &hints,
01016 const char *_const);
01017
01018 virtual Status generateCollInsertClassMethod_Java(Class *,
01019 GenContext *,
01020 const GenCodeHints &,
01021 Bool);
01022 virtual Status
01023 generateCollSuppressClassMethod_Java(Class *,
01024 GenContext *,
01025 const GenCodeHints &,
01026 Bool);
01027 virtual Status
01028 generateCollRealizeClassMethod_Java(Class *,
01029 GenContext *,
01030 const GenCodeHints &hints,
01031 Bool,
01032 int acctype);
01033 virtual Status generateCode_Java(Class*,
01034 GenContext *,
01035 const GenCodeHints &,
01036 const char *);
01037 virtual Status generateClassDesc_Java(GenContext *);
01038 virtual Status generateBody_Java(Class *, GenContext *,
01039 const GenCodeHints &,
01040 const char *prefix);
01041 virtual Status generateGetMethod_Java(Class *, GenContext *,
01042 Bool isoid,
01043 const GenCodeHints &hints,
01044 const char *, const char *);
01045 virtual Status generateSetMethod_Java(Class *, GenContext *,
01046 Bool,
01047 const GenCodeHints &);
01048
01049 virtual Status generateSetMethod_Java(Class *, GenContext *,
01050 const GenCodeHints &);
01051
01052
01053 virtual Status copy(Object*, Bool) const;
01054 Status incrRefCount(Object *, Data, int) const;
01055 void manageCycle(Object *, Data, int, gbxCycleContext &r) const;
01056 void garbage(Data, int) const;
01057 #ifdef GBX_NEW_CYCLE
01058 void decrRefCountPropag(Data, int) const;
01059 #endif
01060 Status add(Database *db, ClassConversion *conv,
01061 Data in_idr, Size in_size) const;
01062 const char *name;
01063 eyedblib::int16 num;
01064 eyedblib::int16 code;
01065 const Class *cls;
01066 const Class *class_owner;
01067 const Class *dyn_class_owner;
01068 TypeModifier typmod;
01069
01070 char is_basic_enum;
01071 char is_string;
01072
01073
01074
01075 Offset idr_poff;
01076 Size idr_item_psize;
01077 Size idr_psize;
01078 Offset idr_inisize;
01079
01080
01081 Offset idr_voff;
01082 Size idr_item_vsize;
01083 Size idr_vsize;
01084
01085 Oid oid_cl;
01086 Oid oid_cl_own;
01087 virtual void getVarDimOid(const Object *, Oid *) const;
01088 virtual int iniCompute(const Database *, int, Data &, Data&) const;
01089
01090 CardinalityConstraint *card;
01091
01092 void setCollHints(Object *o, const Oid& oid,
01093 CardinalityConstraint *card_to_set) const;
01094 Status setCollImpl(Database *db, Object *o,
01095 const AttrIdxContext &idx_ctx) const;
01096 Status cardManage(Database *, Object *, int) const;
01097
01098
01099 Status inverseManage(Database *, Object *, int) const;
01100 Status inverseManage(Database *, Object *, Object *) const;
01101
01102
01103
01104
01105 private:
01106 friend class AgregatClass;
01107 friend class Agregat;
01108 friend class Class;
01109 void *user_data;
01110
01111 friend Status
01112 agregatClassLoad(Database *, const Oid *, Object **,
01113 const RecMode *, const ObjectHeader *);
01114 friend Status
01115 agregatLoad(Database *, const Oid *, Object **,
01116 const RecMode *, const ObjectHeader *);
01117
01118 Bool indexPrologue(Database *db, Data _idr, Bool novd,
01119 int &count, Data &pdata, Size &varsize,
01120 Bool create);
01121
01122 Status getClassOid(Database *db, const Class *cls,
01123 const Oid &oidcls, Oid &oid);
01124 Status getAttrComponents(Database *db, const Class *,
01125 LinkedList &);
01126 void codeClassOid(Data, Offset *);
01127 virtual void newObjRealize(Object *) const;
01128 virtual int getBound(Database *, Data);
01129 virtual void getData(const Database *, Data, Data&, Data&) const;
01130 virtual void getData(const Object *, Data&, Data&) const;
01131 virtual void getVarDimOid(Data, Oid *) const;
01132 ClassComponent *getComp(Class::CompIdx idx,
01133 Bool (*pred)(const ClassComponent *,
01134 void *),
01135 void *client_data) const;
01136
01137 virtual void manageCycle(Database *db, Object *o, gbxCycleContext &r) const;
01138
01139 Status loadComponentSet(Database *db, Bool create) const;
01140 static Status getAttrComp(Database *db, const char *clsname,
01141 const char *attrpath, Object *&);
01142
01143 protected:
01144 struct invSpec {
01145 Oid oid_cl;
01146 eyedblib::int16 num;
01147 const Attribute *item;
01148 char *clsname, *fname;
01149
01150 invSpec() {
01151 oid_cl.invalidate();
01152 num = 0;
01153 item = 0;
01154 clsname = fname = 0;
01155 }
01156
01157 invSpec(const invSpec &inv) {
01158 *this = inv;
01159 }
01160
01161 invSpec& operator=(const invSpec &inv) {
01162 oid_cl = inv.oid_cl;
01163 num = inv.num;
01164 item = inv.item;
01165 clsname = (inv.clsname ? strdup(inv.clsname) : 0);
01166 fname = (inv.fname ? strdup(inv.fname) : 0);
01167 return *this;
01168 }
01169
01170 ~invSpec() {
01171 free(clsname);
01172 free(fname);
01173 }
01174 } inv_spec;
01175
01176 struct InvCtx {
01177 Oid oid;
01178 Data idr;
01179
01180 InvCtx() : idr(0) { }
01181 InvCtx(const Oid &_oid, Data _idr) : oid(_oid), idr(_idr) { }
01182 };
01183
01184 Status constraintPrologue(Database *db,
01185 const AttrIdxContext &idx_ctx,
01186 Bool ¬null_comp, Bool ¬null,
01187 Bool &unique_comp, Bool &unique) const;
01188 Status collimplPrologue(Database *db,
01189 const AttrIdxContext &idx_ctx,
01190 CollAttrImpl *&) const;
01191
01192
01193
01194
01195 public:
01196 enum InvObjOp {
01197 invObjCreate = 1,
01198 invObjUpdate,
01199 invObjRemove
01200 };
01201
01202 Status inverse_coll_perform(Database *, InvObjOp,
01203 const Oid &, const Oid &) const;
01204
01205 void setNum(int _num) {num = _num;}
01206 void revert(Bool);
01207 static Status createEntries(Database *db, const Oid &oid,
01208 Object *o,
01209 AttrIdxContext &,
01210 Attribute *attrs[],
01211 int depth, int last,
01212 unsigned char entry[], Index *);
01213 static Status createEntries_realize(Database *db,
01214 Attribute *attr,
01215 const Oid &oid,
01216 Object *o,
01217 AttrIdxContext &idx_ctx,
01218 unsigned char entry[],
01219 Index *idx);
01220 Status completeInverse(Schema *);
01221 void setMagOrder(unsigned int _magorder) {magorder = _magorder;}
01222 Status updateIndexForInverse(Database *db, const Oid &obj_oid,
01223 const Oid &new_oid) const;
01224 static const char *template_name;
01225 Oid getAttrCompSetOid() const {return attr_comp_set_oid;}
01226 void setAttrCompSetOid(Oid _attr_comp_set_oid) {
01227 attr_comp_set_oid = _attr_comp_set_oid;
01228 }
01229
01230 Bool compare(Database *, const Attribute *,
01231 Bool compClassOwner,
01232 Bool compNum,
01233 Bool compName,
01234 Bool inDepth) const;
01235
01236 static Status openMultiIndexRealize(Database *db, Index *);
01237
01238 const char *dumpData(Data);
01239 static const char *log_item_entry_fmt;
01240 static const char *log_comp_entry_fmt;
01241 virtual Status convert(Database *db, ClassConversion *,
01242 Data in_idr, Size in_size) const;
01243
01244 Status clean(Database *db);
01245 virtual void reportAttrCompSetOid(Offset *offset, Data idr) const;
01246
01247 void pre_release();
01248
01249 private:
01250 Status clean_realize(Schema *, const Class *&);
01251 Status createComponentSet(Database *);
01252
01253 Status hasIndex(Database *db, bool &has_index, std::string &idx_str) const;
01254
01255 void completeInverseItem(Schema *);
01256 Status completeInverse(Database *);
01257 Status checkInverse(const Attribute * = 0) const;
01258
01259 Status inverse_1_1(Database *, InvObjOp,
01260 const Attribute *, const Oid &,
01261 const Oid &,
01262 const InvCtx &) const;
01263 Status inverse_1_N(Database *, InvObjOp,
01264 const Attribute *, const Oid &,
01265 const Oid &,
01266 const InvCtx &) const;
01267 Status inverse_N_1(Database *, InvObjOp,
01268 const Attribute *, const Oid &,
01269 const Oid &,
01270 const InvCtx &) const;
01271 Status inverse_N_N(Database *, InvObjOp,
01272 const Attribute *, const Oid &,
01273 const Oid &,
01274 const InvCtx &) const;
01275 Status inverse_update(Database *,
01276 const Attribute *, const Oid &,
01277 const Oid &) const;
01278 Status inverse_realize(Database *, InvObjOp, Data,
01279 const Oid &) const;
01280
01281 Status inverse_get_collection(Database *db,
01282 const Oid &inv_obj_oid,
01283 Collection*& coll) const;
01284
01285 Oid inverse_get_inv_obj_oid(Data) const;
01286
01287 static Status inverse_read_oid(Database *db, const Attribute *item,
01288 const Oid &obj_oid,
01289 Oid &old_obj_oid);
01290 static Status inverse_write_oid(Database *db, const Attribute *item,
01291 const Oid &obj_oid,
01292 const Oid &new_obj_oid,
01293 const InvCtx &);
01294
01295 Status inverse_create_collection(Database *db,
01296 const Attribute *inv_item,
01297 const Oid &obj_oid,
01298 Bool is_N_N,
01299 const Oid &master_oid,
01300 Collection *&coll) const;
01301
01302 Status inverse_get_inv_collection(Database *db,
01303 const Attribute *inv_item,
01304 const Oid &inv_obj_oid,
01305 const Oid &obj_oid,
01306 Bool is_N_N,
01307 Collection *&coll) const;
01308 Status inverse_coll_perform(Database *db, InvObjOp op,
01309 const Attribute *inv_item,
01310 Collection *coll,
01311 const Oid &obj_oid) const;
01312
01313 Status inverse_coll_perform_N_1(Database *, InvObjOp,
01314 const Oid &, const Oid &) const;
01315
01316 Status inverse_coll_perform_N_N(Database *, InvObjOp,
01317 const Oid &, const Oid &) const;
01318
01319 Status makeClassSequence(Database *db, Index *idx,
01320 ClassSequence& seq);
01321
01322 Status realizeIndexes(ClassSequence& seq, int, Bool);
01323
01324
01325 void directFind(Class *rootcl, Class *cl, ClassSeqItem *clitem,
01326 ClassSequence& seq, AttrStack&);
01327
01328 void makeClassSequenceRealize(Class *cl, ClassSequence& seq);
01329 };
01330
01331 extern
01332 Attribute *makeAttribute(const Attribute *, const Class *,
01333 const Class *, const Class *, int);
01334 extern
01335 Attribute *makeAttribute(Database *db, Data, Offset *,
01336 const Class *, int);
01337
01342 }
01343
01344 #endif