mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 06:05:58 -06:00
127 lines
3.5 KiB
C
127 lines
3.5 KiB
C
// SqlId
|
|
|
|
#define DOID(x) SqlId ADD_SCHEMA_PREFIX_CPP(x)(#x);
|
|
//#define DOID(x) SqlId x(#x);
|
|
|
|
#include SCHEMADIALECT
|
|
|
|
// constructor
|
|
|
|
#define TYPE(x) S_##x::S_##x() {
|
|
#define COLUMN(type, ctype, name, width, prec) SqlSchemaInitClear(ADD_SCHEMA_PREFIX_CPP(name));
|
|
#define COLUMN_ARRAY(type, ctype, name, width, prec, items) SqlSchemaInitClear(ADD_SCHEMA_PREFIX_CPP(name), items);
|
|
#define END_TYPE }
|
|
|
|
#include SCHEMADIALECT
|
|
|
|
// constructor, ColumnSet, TableName, SqlField
|
|
|
|
#define TYPECODE(x, y) \
|
|
const char S_##x::TableName[] = #x; \
|
|
const SqlSet& S_##x::ColumnSet() { \
|
|
static SqlSet set = ColumnSet(""); \
|
|
return set; \
|
|
} \
|
|
SqlSet S_##x::Of(SqlId id) { \
|
|
return ColumnSet(id.ToString() + '.'); \
|
|
} \
|
|
SqlSet S_##x::ColumnSet(const String& prefix) { \
|
|
SqlSet set; \
|
|
y \
|
|
|
|
#define TYPE(x) TYPECODE(x, __NIL)
|
|
|
|
#define BASECODE(b) \
|
|
set.Cat(S_##b::ColumnSet(prefix));
|
|
#define TYPE_I(x, b) TYPECODE(x, BASECODE(b))
|
|
|
|
#define BASE2CODE(b1, b2)\
|
|
set.Cat(S_##b1::ColumnSet(prefix)); \
|
|
set.Cat(S_##b2::ColumnSet(prefix));
|
|
#define TYPE_II(x, b1, b2) TYPECODE(x, BASE2CODE(b1, b2))
|
|
|
|
#define BASE3CODE(b1, b2, b3)\
|
|
set.Cat(S_##b1::ColumnSet(prefix)); \
|
|
set.Cat(S_##b2::ColumnSet(prefix)); \
|
|
set.Cat(S_##b3::ColumnSet(prefix));
|
|
#define TYPE_III(x, b1, b2, b3) TYPECODE(x, BASE3CODE(b1, b2, b3))
|
|
|
|
#define VAR(type, x) td_var(set, prefix, #x, &S_##type::ColumnSet);
|
|
|
|
#define COLUMN(type, ctype, name, width, prec) td_scalar(set, prefix, #name);
|
|
#define COLUMN_ARRAY(type, ctype, name, width, prec, items) td_array(set, prefix, #name, items);
|
|
|
|
#define END_TYPE return set; }
|
|
|
|
#include SCHEMADIALECT
|
|
|
|
#undef TYPECODE
|
|
#undef BASECODE
|
|
#undef BASE2CODE
|
|
#undef BASE3CODE
|
|
|
|
// Clear
|
|
|
|
#define TYPE(x)\
|
|
void S_##x::Clear() {
|
|
|
|
#define TYPE_I(x, b)\
|
|
void S_##x::Clear() { S_##b::Clear();
|
|
|
|
#define TYPE_II(x, b1, b2)\
|
|
void S_##x::Clear() { S_##b1::Clear(); S_##b2::Clear();
|
|
|
|
#define TYPE_III(x, b1, b2, b3)\
|
|
void S_##x::Clear() { S_##b1::Clear(); S_##b2::Clear(); S_##b3::Clear();
|
|
|
|
#define VAR(type, x) x.Clear();
|
|
|
|
#define COLUMN(type, ctype, name, width, prec) SqlSchemaClear(ADD_SCHEMA_PREFIX_CPP(name));
|
|
#define COLUMN_ARRAY(type, ctype, name, width, prec, items) SqlSchemaClear(ADD_SCHEMA_PREFIX_CPP(name), items);
|
|
|
|
#define END_TYPE }
|
|
|
|
#include SCHEMADIALECT
|
|
|
|
// FieldLayout
|
|
|
|
#define TYPE(x) \
|
|
void S_##x::FieldLayout(FieldOperator& fo) {\
|
|
fo.Table(#x);\
|
|
FieldLayoutRaw(fo);\
|
|
}
|
|
|
|
#include SCHEMADIALECT
|
|
|
|
// FieldLayoutRaw
|
|
|
|
#define TYPE(x) \
|
|
void S_##x::FieldLayoutRaw(FieldOperator& fo, const String& prefix) {
|
|
|
|
#define TYPE_I(x, b) \
|
|
void S_##x::FieldLayoutRaw(FieldOperator& fo, const String& prefix) {\
|
|
S_##b::FieldLayoutRaw(fo, prefix);
|
|
|
|
#define TYPE_II(x, b1, b2) \
|
|
void S_##x::FieldLayoutRaw(FieldOperator& fo, const String& prefix) {\
|
|
S_##b1::FieldLayoutRaw(fo, prefix);\
|
|
S_##b2::FieldLayoutRaw(fo, prefix);
|
|
|
|
#define TYPE_III(x, b1, b2, b3) \
|
|
void S_##x::FieldLayoutRaw(FieldOperator& fo, const String& prefix) {\
|
|
S_##b1::FieldLayoutRaw(fo, prefix);\
|
|
S_##b2::FieldLayoutRaw(fo, prefix);\
|
|
S_##b3::FieldLayoutRaw(fo, prefix);
|
|
|
|
#define COLUMN(type, ctype, name, width, prec) fo(prefix + #name, ADD_SCHEMA_PREFIX_CPP(name));
|
|
#define COLUMN_ARRAY(type, ctype, name, width, prec, items) \
|
|
{ \
|
|
for(int i = 0; i < items; i++)\
|
|
fo(Format("%s%s%d", ~prefix, #name, i), ADD_SCHEMA_PREFIX_CPP(name)[i]); \
|
|
}
|
|
|
|
#define VAR(type, x) x.FieldLayoutRaw(fo, prefix + #x + "$");
|
|
|
|
#define END_TYPE }
|
|
|
|
#include SCHEMADIALECT
|