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
00026
00027
00028
00029
00030 #ifndef QDATASCHEMA_H
00031 #define QDATASCHEMA_H
00032 #include "qdataschemaglobal.h"
00033
00034 #if defined(Q_OS_WIN32) && !defined(LIB_NO_DLL)
00035 # define DB_IMPORT __declspec(dllimport)
00036 #else
00037 # define DB_IMPORT
00038 #endif
00039
00040 class QSqlCursor;
00041 class QDataSchemaDriver;
00042
00043 class QDataSchema: public QObject
00044 {
00045 Q_OBJECT
00046 public:
00047 QDataSchema( const QString ctype, const char *objname = 0, QObject *owner = 0 );
00048 ~QDataSchema();
00049 #if QT_VERSION<0x040000
00050 QString objectName() const { return name();};
00051 void setObjectName( const QString &newname ) { setName( newname );};
00052 #endif
00053
00054 bool open( const QString &dbname,
00055 const QString &dbuser = "", const QString &dbpass = "",
00056 const QString &dbhost = "localhost", int dbport = 0 );
00057
00058 bool open();
00059 void close();
00060
00061 QSqlDatabase* db();
00062
00063 bool databaseCreate( const QString &dbadmuser, const QString &dbadmpass );
00064 bool databaseDrop( const QString &dbadmuser, const QString &dbadmpass );
00065
00066 int execList( const QStringList &query, bool inTransaction = false );
00067
00068 QDS_SQLTable *table( const QString &name = QString::null );
00069 QString tableName( const QString &name );
00070 QString tableNameStripPrefix( const QString &name );
00071
00072 QString nameSpace() const;
00073 void setNameSpace( const QString &namesp );
00074
00075 bool tableExists( const QString & name );
00076
00077 static QStringList drivers();
00078 static bool isDriverAvailable ( const QString & name );
00079 static QDataSchemaDriver *createDriver(const QString ctype);
00080 QDataSchemaDriver *driver();
00081 void setDataDictionary( const QStringList &dd_new );
00082 QStringList dataDictionary();
00083 QStringList updateStructureQuery();
00084 QStringList verifyLog();
00085 int verifyStructure();
00086 int updateStructure();
00087
00088 virtual int databaseExport( const QString &filename );
00089 virtual int databaseImport( const QString &filename, bool updateStruct = false );
00090
00091 public slots:
00092
00093 signals:
00094 void verifyMessage( QString op, QString value, QString oldvalue );
00095
00096 protected:
00097 void verifyLogRecord(QString op, QString value, QString oldvalue = "" );
00098
00099 QString ddRecord( int idx, bool d_sql = false );
00100 int ddCount( const QString &etype, bool d_sql = false );
00101 int ddIndex( const QString &etype, int num, bool d_sql = false );
00102 int ddIndex( const QString &etype, const QString &name, bool d_sql = false );
00103 int ddCountSub( int idx, const QString &etype, bool d_sql = false );
00104 int ddIndexSub( int idx, const QString &etype, int num, bool d_sql = false );
00105 int ddIndexSub( int idx, const QString &etype, const QString &name, bool d_sql = false );
00106 QString ddRecSection( const QString &rec, int secnum );
00107 QString ddRecType( const QString &rec );
00108 QString ddRecName( const QString &rec );
00109 void joinLists( QStringList &list, const QStringList &add );
00110 QStringList splitQString(const QString &div, const QString &str );
00111 QString lowerQString(const QString &str );
00112 QString trimmedQString(const QString &str);
00113 int checkSqlError( QSqlQuery &query );
00114 QString fieldTypeSql( const QString &tdef );
00115 virtual int createSystables();
00116
00117 private:
00118 QStringList dd, dd_sql, dd_update, ql_update;
00119 QString dd_name, tablename_prefix;
00120 bool fVerified;
00121
00122 QDataSchemaDriver *p_drv;
00123
00124 #if QT_VERSION<0x040000
00125 QSqlDatabase *p_db;
00126 #else
00127 QSqlDatabase p_db;
00128 #endif
00129 QString v_dbname, v_dbuser, v_dbpass, v_dbtype, v_dbhost;
00130 int v_dbport;
00131
00132 int readSqlDictionary();
00133 int writeSqlDictionary();
00134 };
00135
00136 #endif
00137