ultimatepp/uppsrc/Sql/SqlSchema.h
rylek 35e44db9eb NOAPPSQL fixes for the third time (TRC, don't know why it keeps syncing that)
git-svn-id: svn://ultimatepp.org/upp/trunk@385 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2008-08-29 15:07:26 +00:00

117 lines
3.4 KiB
C++

// attribute macros
//
// @i array index (or "" when no array)
// @t table name
// @c column name (with index)
// @C column name (without index)
// @T column type
// @x combined column+table up to maxidlen characters (default 24) (for constraint names)
class SqlSchema {
protected:
Vector<String> script;
String schemaname;
String prefix;
String table;
String table_suffix;
String type;
String column;
bool firstcolumn;
String attribute;
int items;
int dialect;
int maxidlen;
public:
virtual void FlushColumn();
virtual void FlushTable();
void Object(const char *text, const char *drop);
void Table(const char *name);
void TableSuffix(const char *suffix);
void Column(const char *type, const char *name);
void ColumnArray(const char *type, const char *name, int items);
void Attribute(const char *attr, const char *drop);
void InlineAttribute(const char *attr);
void EndTable() { FlushTable(); }
void Config(const char *config, const char *drop);
void Upgrade(const char *text);
String CurrentTable() const;
String CurrentColumn() const { return column; }
String CurrentType() const { return Expand(type); }
String Expand(const char *txt, int i = Null) const;
enum {
SCHEMA, DROPSCHEMA, ATTRIBUTES, DROPATTRIBUTES, UPGRADE, DROPUPGRADE, CONFIG, DROPCONFIG
};
String& Script(int si);
String Script(int si) const;
String& Schema();
String& SchemaDrop();
String& Attributes();
String& AttributesDrop();
String& Upgrade();
String& UpgradeDrop();
String& Config();
String& ConfigDrop();
String NormalFileName(int i, const char *dir = NULL, const char *name = NULL) const;
bool ScriptChanged(int i, const char *dir = NULL, const char *name = NULL) const;
bool UpdateNormalFile(int i, const char *dir = NULL, const char *name = NULL) const;
void SaveNormal(const char *dir = NULL, const char *name = NULL) const;
void Var(void (*type)(SqlSchema& s), const char *name);
SqlSchema& SchemaName(String sch) { schemaname = sch; return *this; }
SqlSchema& MaxIDLen(int n) { maxidlen = n; return *this; }
int GetDialect() const { return dialect; }
#ifndef NOAPPSQL
SqlSchema(int dialect = SQL.GetDialect());
#else
SqlSchema(int dialect);
#endif
virtual ~SqlSchema() {}
};
void operator*(SqlSchema& schema, const SqlInsert& insert);
template <class T>
inline void SqlSchemaInitClear(T& a) {}
template <class T>
inline void SqlSchemaInitClear(T *a, int n) {
while(n--)
SqlSchemaInitClear(*a++);
}
inline void SqlSchemaInitClear(int& a) { a = Null; }
inline void SqlSchemaInitClear(double& a) { a = Null; }
inline void SqlSchemaInitClear(int64& a) { a = Null; }
inline void SqlSchemaInitClear(bool& a) { a = false; }
template <class T>
inline void SqlSchemaClear(T& a) { a = Null; }
inline void SqlSchemaClear(bool& a) { a = false; }
template <class T>
inline void SqlSchemaClear(T *a, int n) {
while(n--)
SqlSchemaClear(*a++);
}
String ExportSch(SqlSession& session, const String& database);
String ExportIds(SqlSession& session, const String& database);
#ifndef NOAPPSQL
String ExportSch(const String& database);
String ExportIds(const String& database);
#endif