#include "stdtp.h"
#include "sync.h"
#include "rectangle.h"
Classes | |
| class | dbFieldDescriptor |
| Descriptor of table field. More... | |
| class | dbTableDescriptor |
| Table descriptor. More... | |
| struct | dbVarying |
| Header of database array or string. More... | |
| struct | dbField |
| Database record for storing field descriptor. More... | |
| class | dbRecord |
| Header of any database record. More... | |
| class | dbTable |
| Database recod for storing table descriptor. More... | |
| class | dbAnyMethodTrampoline |
| Trampolinefor invocation of methods from SubSQL. More... | |
| class | dbMethodTrampoline |
| Template for method trampoline implementation. More... | |
| class | dbMethodFastTrampoline |
| Optimized method trampoline which doesn't fetch record from the database and use direct pointer to the record inside database. More... | |
Defines | |
| #define | dbDatabaseOffsetBits 32 |
| #define | dbDatabaseOidBits 32 |
| #define | KEY(x, index) |
| Macro for describing indexed fields. | |
| #define | FIELD(x) KEY(x, 0) |
| Macro for describing non-indexed fields. | |
| #define | UDT(x, index, comparator) |
| Macro used to describe indexed raw binary fields with user-defined comparator. | |
| #define | RAWFIELD(x) UDT(x, 0, &memcmp) |
| Macro used to describe raw binary field. | |
| #define | RAWKEY(x, index) UDT(x, index, &memcmp) |
| Macro used to describe indexed raw binary field. | |
| #define | RELATION(x, inverse) |
| Macro for describing relations between two tables. | |
| #define | INDEXED_RELATION(x, inverse) |
| Macro for describing relations between two tables. | |
| #define | OWNER(x, member) |
| Macro used to define relation owner (when owner is deleted, all referenced members are also deleted). | |
| #define | METHOD(x) *dbDescribeMethod(new dbFieldDescriptor(#x), &self::x) |
| Macro used to describe method of the class which can be invoked from SubSQL. | |
| #define | SUPERCLASS(x) x::dbDescribeComponents(NULL)->adjustOffsets((char*)((x*)this)-(char*)this) |
| Macro used to describe superclass for this class. | |
| #define | TYPE_DESCRIPTOR(fields) |
| Macro used to describe fields of the record. | |
| #define | CLASS_DESCRIPTOR(name, fields) |
Macro used to describe class, the only difference from TYPE_DESCRIPTOR is that name of the class should be specified. | |
| #define | REGISTER_IN(table, database) |
| Register table descriptor and assign it to specified database. | |
| #define | REGISTER(table) REGISTER_IN(table, NULL) |
| Register table descripttor. | |
| #define | DETACHED_TABLE ((dbDatabase*)-1) |
| Register database and mark it as unsigned. | |
| #define | REGISTER_UNASSIGNED(table) REGISTER_IN(table, DETACHED_TABLE) |
Typedefs | |
| typedef nat4 | oid_t |
| Object indentifier type. | |
| typedef nat4 | offs_t |
| Object offset in the file type. | |
| typedef int(* | dbUDTComparator )(void *, void *, size_t) |
| Comparator for user defined raw binary fields. | |
Enumerations | |
| enum | dbIndexType { HASHED = 1, INDEXED = 2, DB_FIELD_CASCADE_DELETE = 8, AUTOINCREMENT = 16, DB_TIMESTAMP = 256, DB_FIELD_INHERITED_MASK = ~(HASHED|INDEXED) } |
| Types of field index. More... | |
Functions | |
| dbFieldDescriptor * | dbDescribeRawField (dbFieldDescriptor *fd, dbUDTComparator comparator) |
| template<class T> | |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, T &x) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, int1 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, int2 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, int4 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, db_int8 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, nat1 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, nat2 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, nat4 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, nat8 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, long &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, unsigned long &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, bool &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, real4 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, real8 &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, rectangle &) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, char const *&) |
| dbFieldDescriptor * | dbDescribeField (dbFieldDescriptor *fd, char *&) |
| template<class T, class R> | |
| dbFieldDescriptor * | dbDescribeMethod (dbFieldDescriptor *fd, R(T::*p)()) |
| #define dbDatabaseOffsetBits 32 |
| #define dbDatabaseOidBits 32 |
| #define KEY | ( | x, | |||
| index | ) |
Value:
*dbDescribeField(new dbFieldDescriptor(#x, (char*)&x-(char*)this, \ sizeof(x), index), x)
| #define FIELD | ( | x | ) | KEY(x, 0) |
Macro for describing non-indexed fields.
| #define UDT | ( | x, | |||
| index, | |||||
| comparator | ) |
Value:
*dbDescribeRawField(new dbFieldDescriptor(#x, (char*)&x-(char*)this, \ sizeof(x), index), (dbUDTComparator)comparator)
| #define RAWFIELD | ( | x | ) | UDT(x, 0, &memcmp) |
Macro used to describe raw binary field.
| #define RAWKEY | ( | x, | |||
| index | ) | UDT(x, index, &memcmp) |
Macro used to describe indexed raw binary field.
| #define RELATION | ( | x, | |||
| inverse | ) |
Value:
*dbDescribeField(new dbFieldDescriptor(#x, (char*)&x-(char*)this, \ sizeof(x), 0, #inverse), x)
x should specify name of reference or array of reference field in this table, and inverse - field in the referenced table contining inverse reference.
| #define INDEXED_RELATION | ( | x, | |||
| inverse | ) |
Value:
*dbDescribeField(new dbFieldDescriptor(#x, (char*)&x-(char*)this, \ sizeof(x), INDEXED, #inverse), x)
x should specify name of reference field in this table for which index will be created, and inverse - field in the referenced table contining inverse reference.
| #define OWNER | ( | x, | |||
| member | ) |
Value:
*dbDescribeField(new dbFieldDescriptor(#x, (char*)&x-(char*)this, \ sizeof(x), DB_FIELD_CASCADE_DELETE, \ #member), x)
Members of of this relation should use RELATION macro to describe relation with owner.
| #define METHOD | ( | x | ) | *dbDescribeMethod(new dbFieldDescriptor(#x), &self::x) |
Macro used to describe method of the class which can be invoked from SubSQL.
| #define SUPERCLASS | ( | x | ) | x::dbDescribeComponents(NULL)->adjustOffsets((char*)((x*)this)-(char*)this) |
Macro used to describe superclass for this class.
| #define TYPE_DESCRIPTOR | ( | fields | ) |
Value:
dbFieldDescriptor* dbDescribeComponents(dbFieldDescriptor*) { \ return &fields; \ } \ static dbTableDescriptor dbDescriptor
Use FIELD, KEY... macros separated by comma inside this macro to describe all fields of the record
| #define CLASS_DESCRIPTOR | ( | name, | |||
| fields | ) |
Value:
typedef name self; \ dbFieldDescriptor* dbDescribeComponents(dbFieldDescriptor*) { \ return &fields; \ } \ static dbTableDescriptor dbDescriptor
TYPE_DESCRIPTOR is that name of the class should be specified.
This name is needed if you want to describe methods.
| #define REGISTER_IN | ( | table, | |||
| database | ) |
Value:
dbTableDescriptor* dbGetTableDescriptor(table*) \ { return &table::dbDescriptor; } \ static dbFieldDescriptor* dbDescribeComponentsOf##table() \ { return ((table*)0)->dbDescribeComponents(NULL); } \ dbTableDescriptor table::dbDescriptor(#table, database, sizeof(table), \ &dbDescribeComponentsOf##table)
| #define REGISTER | ( | table | ) | REGISTER_IN(table, NULL) |
Register table descripttor.
It will be assigned to the database when database will be opened
| #define DETACHED_TABLE ((dbDatabase*)-1) |
Register database and mark it as unsigned.
Programmer should explicitly specify database in all operations.
| #define REGISTER_UNASSIGNED | ( | table | ) | REGISTER_IN(table, DETACHED_TABLE) |
| typedef int(* dbUDTComparator)(void *, void *, size_t) |
Comparator for user defined raw binary fields.
| enum dbIndexType |
| dbFieldDescriptor* dbDescribeRawField | ( | dbFieldDescriptor * | fd, | |
| dbUDTComparator | comparator | |||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| T & | x | |||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| int1 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| int2 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| int4 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| db_int8 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| nat1 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| nat2 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| nat4 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| nat8 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| long & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| unsigned long & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| bool & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| real4 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| real8 & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| rectangle & | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| char const *& | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeField | ( | dbFieldDescriptor * | fd, | |
| char *& | ||||
| ) | [inline] |
| dbFieldDescriptor* dbDescribeMethod | ( | dbFieldDescriptor * | fd, | |
| R(T::*)() | p | |||
| ) | [inline] |