⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class.h

📁 FastDb是高效的内存数据库系统
💻 H
📖 第 1 页 / 共 3 页
字号:
     * Store record fields in the databases     * This method performs interation thtough all components in one scope     * and recursively invoke itself for structure and array components.           * @param dst place in the database where record should be stored     * @param src pointer to the application object     * @param offs offset to the end of varying part     * @param insert flag used to distringuish update fro insert (needed for autoincremented fields)     * @return size of the record     */         size_t storeRecordFields(byte* dst, byte* src, size_t offs, bool insert);    /**     * Mask updated fields.     * This method performs interation thtough all components in one scope     * and recursively invoke itself for structure and array components.           * @param dst old image of the record in the database     * @param src updated application object     */    void markUpdatedFields(byte* dst, byte* src);    /**     * Fetch record from the database     * This method performs interation thtough all components in one scope     * and recursively invoke itself for structure and array components.           * @param dst pointer to the application object into which record is extract     * @param src image of the object in the database     */    void fetchRecordFields(byte* dst, byte* src);    /**     * Adjust references in all fetched records (current records in all opened cursors)     * when database was reallocated.     * @param record pointer to the application object which references should be adjusted     * @param base new address of memory mapping      * @param size database isze before extension     * @param shift difference between old and new addresses of memory mapping obejct location.     */    void adjustReferences(byte* record, size_t base, size_t size, long shift);    /**     * Find component with specified name (for structures only)     * @param name component name     * @return descriptor of the field or <code>NULL</code> if not found     */    dbFieldDescriptor* find(const char* name);    /**     * Get first component of the field (for structures only)     * @return first component of the structure     */    dbFieldDescriptor* getFirstComponent() {         return components;    }    /**     * Get next component within the scope     * @return next component within the scope     */    dbFieldDescriptor* getNextComponent(dbFieldDescriptor* field) {         if (field != NULL) {             field = field->next;            if (field == components) {                 return NULL;            }        }        return field;    }            /**      * Redefined ',' operator used to form list of components     */    dbFieldDescriptor& operator, (dbFieldDescriptor& field) {         dbFieldDescriptor* tail = field.prev;        tail->next = this;        prev->next = &field;        field.prev = prev;        prev = tail;        return *this;    }    void* operator new(size_t size EXTRA_DEBUG_NEW_PARAMS);    void  operator delete(void* p EXTRA_DEBUG_NEW_PARAMS);    /**     * Adjust offsets within application objects for descriptors of base classes.     */    dbFieldDescriptor& adjustOffsets(long offs);    /**     * Field descriptor constructor     * @param name name of the field     * @param offs offset of the field     * @param size size of the field     * @param indexType type of index used for this field     * @param inverse name of inverse field     * @param components comopnents of structure or array     */    dbFieldDescriptor(char const* name, size_t offs, size_t size, int indexType,                       char const* inverse = NULL,                      dbFieldDescriptor* components = NULL);    /**     * Constructor of dummy field descriptor      * @param  name name of the field     */    dbFieldDescriptor(char const* name);    /**     * Field descriptor destructor     */    ~dbFieldDescriptor();};/** * Table descriptor */class FASTDB_DLL_ENTRY dbTableDescriptor {     friend class dbCompiler;    friend class dbDatabase;    friend class dbReplicatedDatabase;    friend class dbTable;    friend class dbAnyCursor;    friend class dbSubSql;    friend class dbHashTable;    friend class dbTtreeNode;    friend class dbRtreePage;    friend class dbServer;    friend class dbColumnBinding;    friend class dbFieldDescriptor;    friend class dbAnyContainer;    friend class dbCLI;    friend class dbSelection;  protected:    /**     * Chain of all tables in application     */    dbTableDescriptor*  next;    static dbTableDescriptor* chain;    /**     * Chain of all tables associated with database     */    dbTableDescriptor*  nextDbTable; // next table in the database    /**     * Name of the table     */    char*               name;    /**     * Indetifier of table object in the database     */    oid_t               tableId;    /**     * List of table columns     */    dbFieldDescriptor*  columns;         /**     * List of hashed fields     */    dbFieldDescriptor*  hashedFields;    /**     * List of fields indexed by T-Ttree     */    dbFieldDescriptor*  indexedFields;    /**     * List of related fields (fields, for which inverse references exist)     */    dbFieldDescriptor*  inverseFields;    /**     * List of all fields     */    dbFieldDescriptor*  firstField;    /**     * Pointer of next field of the last field (used for list construction)     */    dbFieldDescriptor** nextFieldLink;    /**     * Attached database     */    dbDatabase*         db;        /**     * Database staticly attached to the table (by means of REGISTER_IN macro)     */    bool                fixedDatabase;    /**     * Table descriptor is static object created by one of REGISTER macros     */    bool                isStatic;    /**     * Size of tghe correspondent applciation object     */    size_t              appSize;    /**     * Size of fixed part of the records (without string and array bodies)     */    size_t              fixedSize;    /**     * Number of fields in the table     */    size_t              nFields;    /**     * Number of columns in the table     */    size_t              nColumns;    /**     * Autoincremented counter for this table     */    int4                autoincrementCount;    /**     * When unassigned table descriptor is explicitly assigned to the database,      * new clone of descriptor is created and  <code>cloneOf</code> field of this descriptor     * referes to original table descriptor.     */    dbTableDescriptor*  cloneOf;    /**     * Function returning list of record fields descriptors     */    typedef dbFieldDescriptor* (*describeFunc)();    describeFunc        describeComponentsFunc;    /**     * Clone table descriptor     */    dbTableDescriptor*  clone();    /**     * Calculate total length of all names in table descriptor     */    size_t              totalNamesLength();    /**     * Recursively set field attributes.     * @param fieldsList list of record fields     * @param prefix prefix for the field (in case of structures or arrays      * this functions is invoked resursively for components of this structure or     * or array     * @param offs - offset in application class     * @param indexMask index mask for the structore containing the field     * @param attr attributes of the parent field     * @return alignment of the field     */    int calculateFieldsAttributes(dbFieldDescriptor* fieldsList,                                   char const* prefix, int offs,                                   int indexMask, int& attr);    /**     * Read table definiton from the database and build fields list     * @param table databsae table descriptor     * @param prefix prefix for the field (in case of structures or arrays      * @param prefixLen length of the prefix     * @param attr attributes of the parent field     * @return pointer to the constructed list     */    dbFieldDescriptor* buildFieldsList(dbTable* table, char const* prefix, int prefixLen, int& attr);  public:    /**     * Initial value for autoincrement count. To take effect, this value should be      * assigned before database open.      */    static int initialAutoincrementCount;    /**     * Get next table in database     */    dbTableDescriptor* getNextTable() {         return nextDbTable;    }    /**     * Find field with specified symbol name     */        dbFieldDescriptor* findSymbol(char const* name);    /**     * Find field with specified name     */        dbFieldDescriptor* find(char const* name);    /**     * Get first record field     * @return descriptor of first record field     */    dbFieldDescriptor* getFirstField() {         return columns;    }    /**     * Get last value of autoincrement counter used for this table     * @return last value of autoincrement counter used for this table     */    int getLastValueOfAutoincrementCount() const {         return autoincrementCount;    }    /**     * Get next field     * @param field current  field     * @return next field after the current in table fields list     */    dbFieldDescriptor* getNextField(dbFieldDescriptor* field) {         if (field != NULL) {             field = field->next;            if (field == columns) {                 return NULL;            }        }        return field;    }    /**     * Get table name.     */    char* getName() {         return name;    }    /**     * Get size of instance of the class in an application     */    size_t size() {         return appSize;    }    /**     * Set fields flags.  This method is called after loading table descriptor     * from database.     */    void setFlags();    /**     * Check whether table descriptor in the database is the same as     * table appplication table descriptor     * @param table database table descriptor     * @return <code>true</code> if two table descriptors are equal     */    bool equal(dbTable* table);    /**     * Check whether fprmats of table descriptor in the database      * and in application is compatible. This method also prepares      * information for performing conversion of record to new format     * @param table database table descriptor     * @param confirmDeleteColumns whether deletion of columns in allowed from non empty table     * @return <code>true</code> if no reformatting is needed     */    bool match(dbTable* table, bool confirmDeleteColumns);    /**     * Check consuistency of declared realations (check that referenced table      * actually contains declared inverse reference field).      * This method also resolve references between table.     */    void checkRelationship();    /**     * Get reference to associated database     * @return database to which this table is assigned     */    dbDatabase* getDatabase() {         assert(db != DETACHED_TABLE);        return db;     }    /**     * Save table descriptor in the database.     * @param table place where to store table descriptor     */    void storeInDatabase(dbTable* table);    /**     * Remove all table descriptors except static ones     */    static void cleanup();    /**     * Construct table descriptor using information stored in database     * @param table pointer to database table descriptor     */    dbTableDescriptor(dbTable* table);    /**     * Constructor of application table descriptor     * @param tableName name of the table     * @param db assigned database (may be NULL)     * @param objSize size of application object     * @param func function returninglist of field descriptors     * @param original original table descriptor (for cloned descriptors)     */    dbTableDescriptor(char const* tableName, dbDatabase* db, size_t objSize,                       describeFunc func, dbTableDescriptor* original = NULL);    /**     * Table descriptor destructor     */    ~dbTableDescriptor();};/** * Header of database array or string */struct dbVarying { 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -