diff --git a/README.md b/README.md index 2bea3a6..adabd9a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## Features: - Easy to use - - Support PosgtreSQL, MySQL, SQLite, Microsoft Sql Server + - Support PosgtreSQL, MySQL, SQLite and Microsoft Sql Server - Automatically create and update database - IDE auto complete support, No hard-code nedded - Table join detect @@ -15,9 +15,8 @@ ### Read data from database: ```cpp -autoq = FROM(db.posts()) - WHERE(Post::idField() == postId); - +auto q = db.posts()->createQuery(); +q->setWhere(Post::idField() == postId); auto posts = q->toList(); // now posts is a QList contain all posts in // database that has id equal to postId variable @@ -43,9 +42,8 @@ db.saveChanges(); ### Modify database data: ```cpp -auto q = FROM(db.posts()) - WHERE(Post::idField() == postId); - +auto q = db.posts()->createQuery(); +q->setWhere(Post::idField() == postId); Post *post = q->first(); if(post) { diff --git a/include/header_copier b/include/header_copier index b799f01..b0394f7 100644 --- a/include/header_copier +++ b/include/header_copier @@ -7,6 +7,8 @@ pattern="\.\.\/src\/([a-z]+)\.h\:class\sNUT_EXPORT\s(\w+)" echo "" > "Nut" echo "" > "nut.h" +mkdir -p Nut + while read line; do if [[ $line =~ $pattern ]]; then header=${BASH_REMATCH[1]} @@ -15,6 +17,9 @@ while read line; do echo "#include \"../src/$header.h\"" > $class echo "#include \"../src/$header.h\"" > "$header.h" + #echo "#include \"../src/$header.h\"" > "Nut/$class" + #echo "#include \"../src/$header.h\"" > "Nut/$header.h" + echo "#include \"../src/$header.h\"" >> "Nut" echo "#include \"../src/$header.h\"" >> "nut.h" fi diff --git a/nut.pri b/nut.pri index bd2f947..a3355e3 100644 --- a/nut.pri +++ b/nut.pri @@ -3,10 +3,7 @@ QT += core widgets sql INCLUDEPATH += $$PWD/include HEADERS += \ - $$PWD/src/database.h \ - $$PWD/src/table.h \ $$PWD/src/tableset.h \ - $$PWD/src/database_p.h \ $$PWD/src/defines_p.h \ $$PWD/src/defines.h \ $$PWD/src/query.h \ @@ -21,11 +18,12 @@ HEADERS += \ $$PWD/src/tablemodel.h \ $$PWD/src/sqlservergenerator.h \ $$PWD/src/wherephrase.h \ - $$PWD/src/query_p.h + $$PWD/src/query_p.h \ + $$PWD/src/table.h \ + $$PWD/src/database.h \ + $$PWD/src/database_p.h SOURCES += \ - $$PWD/src/database.cpp \ - $$PWD/src/table.cpp \ $$PWD/src/tableset.cpp \ $$PWD/src/query.cpp \ $$PWD/src/databasemodel.cpp \ @@ -38,4 +36,6 @@ SOURCES += \ $$PWD/src/sqlitegenerator.cpp \ $$PWD/src/tablemodel.cpp \ $$PWD/src/sqlservergenerator.cpp \ - $$PWD/src/wherephrase.cpp + $$PWD/src/wherephrase.cpp \ + $$PWD/src/table.cpp \ + $$PWD/src/database.cpp diff --git a/src/changelogtable.cpp b/src/changelogtable.cpp index 1e8f9d2..b66c4df 100644 --- a/src/changelogtable.cpp +++ b/src/changelogtable.cpp @@ -20,7 +20,7 @@ #include "changelogtable.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE ChangeLogTable::ChangeLogTable() { @@ -28,4 +28,4 @@ ChangeLogTable::ChangeLogTable() } -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/changelogtable.h b/src/changelogtable.h index 403418d..4b9f618 100644 --- a/src/changelogtable.h +++ b/src/changelogtable.h @@ -24,7 +24,7 @@ #include #include "table.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class ChangeLogTable : public Table { @@ -43,6 +43,6 @@ public: ChangeLogTable(); }; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // CHANGELOGTABLE_H diff --git a/src/database.cpp b/src/database.cpp index 7612e38..b3672dd 100644 --- a/src/database.cpp +++ b/src/database.cpp @@ -32,7 +32,7 @@ #include "table.h" #include "tableset.h" #include "database_p.h" -#include "defines_p.h" +#include "defines.h" #include "tablemodel.h" #include "postgresqlgenerator.h" #include "mysqlgenerator.h" @@ -43,7 +43,11 @@ #include #include -QT_BEGIN_NAMESPACE +#define __CHANGE_LOG_TABLE_NAME "__change_logs" + +NUT_BEGIN_NAMESPACE + +int DatabasePrivate::lastId = 0; DatabasePrivate::DatabasePrivate(Database *parent) : q_ptr(parent) { @@ -51,8 +55,11 @@ DatabasePrivate::DatabasePrivate(Database *parent) : q_ptr(parent) bool DatabasePrivate::open() { + Q_Q(Database); getCurrectScheema(); + connectionName = q->metaObject()->className() + QString::number(DatabasePrivate::lastId); + db = QSqlDatabase::addDatabase(driver, connectionName); db.setHostName(hostName); db.setDatabaseName(databaseName); @@ -61,8 +68,7 @@ bool DatabasePrivate::open() bool ok = db.open(); if(!ok){ - qWarning("Could not connect to database"); - qWarning(db.lastError().text().toLocal8Bit().data()); + qWarning("Could not connect to database, error = %s", db.lastError().text().toLocal8Bit().data()); if(db.lastError().text().contains("database \"" + databaseName + "\" does not exist") || db.lastError().text().contains("Cannot open database") @@ -75,11 +81,11 @@ bool DatabasePrivate::open() db.close(); if(db.lastError().type() != QSqlError::NoError) - qWarning(db.lastError().text().prepend("Creating database error: ").toLatin1().data()); + qWarning("Creating database error: %s", db.lastError().text().toLatin1().data()); return open(); }else{ - qWarning(db.lastError().text().toLatin1().data()); + qWarning("Unknown error detecting change logs, %s", db.lastError().text().toLatin1().data()); } } return false; @@ -108,11 +114,10 @@ bool DatabasePrivate::updateDatabase() QStringList sql = sqlGenertor->diff(last, current); db.transaction(); foreach (QString s, sql){ - qDebug() << "going to exec " << s; db.exec(s); if(db.lastError().type() != QSqlError::NoError) - qWarning(db.lastError().text().toLatin1().data()); + qWarning("Error executing sql command, %s", db.lastError().text().toLatin1().data()); } bool ok = db.commit(); @@ -132,26 +137,28 @@ bool DatabasePrivate::updateDatabase() } } }else{ - qWarning("Unable update database"); - qWarning(db.lastError().text().toLatin1().data()); + qWarning("Unable update database, error = %s", db.lastError().text().toLatin1().data()); } return ok; } -QVariantMap DatabasePrivate::getCurrectScheema() +void DatabasePrivate::getCurrectScheema() { Q_Q(Database); tables.clear(); //TODO: change logs must not be in model int changeLogTypeId = qRegisterMetaType(); - currentModel.append(new TableModel(changeLogTypeId, "__change_logs")); - tables.insert("ChangeLogTable", "__change_logs"); + currentModel.append(new TableModel(changeLogTypeId, __CHANGE_LOG_TABLE_NAME)); + tables.insert(ChangeLogTable::staticMetaObject.className(), __CHANGE_LOG_TABLE_NAME); + + changeLogs = new TableSet(q); for(int i = 0; i < q->metaObject()->classInfoCount(); i++){ QMetaClassInfo ci = q->metaObject()->classInfo(i); QString ciName = QString(ci.name()).replace(__nut_NAME_PERFIX, "").replace("\"", ""); + if(ciName.startsWith(__nut_TABLE)) tables.insert(ciName.split(" ").at(1), ci.value()); @@ -170,11 +177,11 @@ QVariantMap DatabasePrivate::getCurrectScheema() } } - QVariantMap databaseVariant; for(int i = 1; i < q->metaObject()->propertyCount(); i++){ QMetaProperty tableProperty = q->metaObject()->property(i); int typeId = QMetaType::type(tableProperty.typeName()); + qDebug() << tables.values().contains(tableProperty.name()) << typeId; if(tables.values().contains(tableProperty.name()) && typeId >= QVariant::UserType){ TableModel *sch = new TableModel(typeId, tableProperty.name()); currentModel.append(sch); @@ -184,13 +191,12 @@ QVariantMap DatabasePrivate::getCurrectScheema() foreach (TableModel *sch, currentModel) foreach (RelationModel *fk, sch->foregionKeys()) fk->table = currentModel.modelByClass(fk->className); - - - return databaseVariant; } DatabaseModel DatabasePrivate::getLastScheema() { + Q_Q(Database); +// ChangeLogTable *u = q->_change_logs()->createQuery()->orderBy("id", "desc")->first(); ChangeLogTable *u = changeLogs->createQuery()->orderBy("id", "desc")->first(); DatabaseModel ret; @@ -206,32 +212,51 @@ DatabaseModel DatabasePrivate::getLastScheema() u->deleteLater(); } return ret; + +// QSqlQuery query = q->exec("select * from __change_logs order by id desc limit 1"); +// DatabaseModel ret; +// if(query.next()){ +// QJsonObject json = QJsonDocument::fromJson(query.value("data").toByteArray()).object(); + +// foreach (QString key, json.keys()) { +// TableModel *sch = new TableModel(json.value(key).toObject(), key); +// ret.append(sch); +// } +// } +//qDebug() << "ret=" <setData(QJsonDocument(currentModel.toJson()).toJson()); - changeLog->setVersionMajor(currentModel.versionMajor()); - changeLog->setVersionMinor(currentModel.versionMinor()); + changeLog->setData(QJsonDocument(current.toJson()).toJson()); + changeLog->setVersionMajor(current.versionMajor()); + changeLog->setVersionMinor(current.versionMinor()); changeLogs->append(changeLog); q->saveChanges(); changeLog->deleteLater(); return true; -// QSqlQuery q(db); -// q.prepare("insert into __change_logs (data) values (:data)"); -// q.bindValue(":data", QString(QJsonDocument(currentModel.toJson()).toJson())); -// bool ret = q.exec(); -// if(q.lastError().type() != QSqlError::NoError) -// qWarning(QString("storeScheemaInDB" + q.lastError().text()).toLatin1().data()); + + +// QSqlQuery query(db); +// query.prepare("insert into __change_logs (data) values (:data)"); +// query.bindValue(":data", QString(QJsonDocument(currentModel.toJson()).toJson())); +// bool ret = query.exec(); +// if(query.lastError().type() != QSqlError::NoError) +// qWarning(QString("storeScheemaInDB" + query.lastError().text()).toLatin1().data()); // return ret; } void DatabasePrivate::createChangeLogs() { - QString diff = sqlGenertor->diff(0, currentModel.model("__change_logs")); +// currentModel.model("change_log") + QString diff = sqlGenertor->diff(0, currentModel.model("__change_log")); db.exec(diff); } @@ -245,7 +270,24 @@ void DatabasePrivate::createChangeLogs() Database::Database(QObject *parent) : QObject(parent), d_ptr(new DatabasePrivate(this)) { Q_D(Database); - d->changeLogs = new TableSet(this); + //d->changeLogs->sett + DatabasePrivate::lastId++; +// m__change_logs = new TableSet(this); +} + +Database::Database(const Database &other, QObject *parent) : QObject(parent), d_ptr(new DatabasePrivate(this)) +{ + Q_D(Database); + + DatabasePrivate::lastId++; + + setDriver(other.driver()); + setHostName(other.hostName()); + setDatabaseName(other.databaseName()); + setUserName(other.userName()); + setPassword(other.password()); + +// m__change_logs = new TableSet(this); } QString Database::databaseName() const @@ -381,14 +423,15 @@ bool Database::open() QStringList parts = d->databaseName.toLower().split(';'); foreach (QString p, parts) if(p.trimmed().startsWith("driver=")) - driverName = p.split('=').at(1); + driverName = p.split('=').at(1).toLower().trimmed(); if(driverName == "{sql server}") d->sqlGenertor = new SqlServerGenerator(this); + //TODO: add ODBC driver for mysql, postgres, ... } if(!d->sqlGenertor){ - qWarning(QString("Sql generator for driver " + driver() + " not found").toLatin1().data()); + qWarning("Sql generator for driver %s not found", driver().toLatin1().constData()); return false; }else{ return d->open(); @@ -404,10 +447,10 @@ void Database::close() QSqlQuery Database::exec(QString sql) { Q_D(Database); - qDebug() <db.exec(sql); if(d->db.lastError().type() != QSqlError::NoError) - qWarning(d->db.lastError().text().toLatin1().data()); + qWarning("Error executing sql command: %s", d->db.lastError().text().toLatin1().data()); return q; } @@ -428,4 +471,4 @@ void Database::cleanUp() ts->clearChilds(); } -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/database.h b/src/database.h index 18de998..5d520b6 100644 --- a/src/database.h +++ b/src/database.h @@ -18,8 +18,8 @@ ** **************************************************************************/ -#ifndef DATABASE_H -#define DATABASE_H +#ifndef NUTDATABASE_H +#define NUTDATABASE_H #include #include @@ -28,21 +28,25 @@ #include "defines.h" #include "tableset.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class DatabaseModel; class DatabasePrivate; class TableSetBase; class SqlGeneratorBase; +class ChangeLogTable; class NUT_EXPORT Database : public QObject { Q_OBJECT +// NUT_DECLARE_TABLE(ChangeLogTable, _change_log) + DatabasePrivate *d_ptr; Q_DECLARE_PRIVATE(Database) public: Database(QObject *parent = 0); + Database(const Database &other, QObject *parent = 0); bool open(); void close(); @@ -82,6 +86,6 @@ private: QSet tableSets; }; -QT_END_NAMESPACE +NUT_END_NAMESPACE -#endif // DATABASE_H +#endif // NUTDATABASE_H diff --git a/src/database_p.h b/src/database_p.h index 6ce02b0..6699197 100644 --- a/src/database_p.h +++ b/src/database_p.h @@ -27,7 +27,7 @@ #include -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class DatabasePrivate { @@ -44,7 +44,7 @@ public: void createChangeLogs(); bool storeScheemaInDB(); DatabaseModel getLastScheema(); - QVariantMap getCurrectScheema(); + void getCurrectScheema(); QSqlDatabase db; @@ -62,8 +62,10 @@ public: DatabaseModel currentModel; TableSet *changeLogs; + + static int lastId; }; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // DATABASE_P_H diff --git a/src/databasemodel.cpp b/src/databasemodel.cpp index 738d6b1..44e74e1 100644 --- a/src/databasemodel.cpp +++ b/src/databasemodel.cpp @@ -23,17 +23,23 @@ #include -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE DatabaseModel::DatabaseModel() : QList(), _versionMajor(0), _versionMinor(0) { } +DatabaseModel::DatabaseModel(const DatabaseModel &other) : QList(other), _versionMajor(0), _versionMinor(0) +{ + +} + TableModel *DatabaseModel::model(QString tableName) const { for(int i = 0; i < size(); i++){ TableModel *s = at(i); + if(s->name() == tableName) return s; } @@ -149,4 +155,16 @@ void DatabaseModel::setVersionMinor(int versionMinor) _versionMinor = versionMinor; } -QT_END_NAMESPACE +bool DatabaseModel::remove(QString tableName) +{ + for(int i = 0; i < size(); i++){ + TableModel *s = at(i); + if(s->name() == tableName){ + removeAt(i); + return true; + } + } + return false; +} + +NUT_END_NAMESPACE diff --git a/src/databasemodel.h b/src/databasemodel.h index dd49512..27a36d7 100644 --- a/src/databasemodel.h +++ b/src/databasemodel.h @@ -22,17 +22,20 @@ #define DATABASEMODEL_H #include +#include"defines.h" -QT_BEGIN_NAMESPACE +class QJsonObject; + +NUT_BEGIN_NAMESPACE class TableModel; struct RelationModel; -class QJsonObject; class DatabaseModel : public QList { int _versionMajor, _versionMinor; public: DatabaseModel(); + DatabaseModel(const DatabaseModel &other); TableModel *model(QString tableName) const; TableModel *modelByClass(QString className) const; @@ -50,8 +53,10 @@ public: int versionMinor() const; void setVersionMinor(int versionMinor); + + bool remove(QString tableName); }; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // DATABASEMODEL_H diff --git a/src/defines.h b/src/defines.h index d7bd16b..e7910e0 100644 --- a/src/defines.h +++ b/src/defines.h @@ -21,10 +21,11 @@ #ifndef SYNTAX_DEFINES_H #define SYNTAX_DEFINES_H -#include "qglobal.h" -#include "defines_p.h" +#define NUT_NAMESPACE Nut + +#include "defines_p.h" +#include "qglobal.h" -#define QT_NAMESPACE Nut #ifdef NUT_COMPILE_STATIC # define NUT_EXPORT @@ -32,19 +33,26 @@ # define NUT_EXPORT Q_DECL_EXPORT #endif + +#ifdef NUT_NAMESPACE +# define __NUT_NAMESPACE_PERFIX NUT_NAMESPACE:: +#else +# define __NUT_NAMESPACE_PERFIX +#endif + // Database #define NUT_DB_VERSION(major, minor) Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX __nut_DB_VERSION), QT_STRINGIFY(#major "." #minor)) #define NUT_DECLARE_TABLE(type, name) \ Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX __nut_TABLE " " #type), #name) \ Q_PROPERTY(type* name READ name) \ - Q_PROPERTY(TableSet name##s READ name##s) \ + Q_PROPERTY(__NUT_NAMESPACE_PERFIX TableSet name##s READ name##s) \ type* m_##name; \ - TableSet *m_##name##s; \ + __NUT_NAMESPACE_PERFIX TableSet *m_##name##s; \ public: \ static const type _##name; \ type* name() const{ return m_##name; } \ - TableSet *name##s() const { return m_##name##s; } + __NUT_NAMESPACE_PERFIX TableSet *name##s() const { return m_##name##s; } //Table #define NUT_DECLARE_FIELD(type, name, read, write) \ @@ -52,8 +60,8 @@ public: \ Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX #name " " __nut_FIELD), #name) \ type m_##name; \ public: \ - static FieldPhrase name##Field(){ \ - static FieldPhrase f = FieldPhrase(staticMetaObject.className(), #name); \ + static __NUT_NAMESPACE_PERFIX FieldPhrase name##Field(){ \ + static __NUT_NAMESPACE_PERFIX FieldPhrase f = __NUT_NAMESPACE_PERFIX FieldPhrase(staticMetaObject.className(), #name); \ return f; \ } \ type read() const{ \ @@ -77,13 +85,13 @@ public: \ #define NUT_DECLARE_CHILD_TABLE(type, n) \ private: \ - TableSet *m_##n; \ + __NUT_NAMESPACE_PERFIX TableSet *m_##n; \ public: \ - static type *n##Table(){ \ + static type *n##Table(){ \ static type *f = new type(); \ - return f; \ + return f; \ } \ - TableSet *n(){ \ + __NUT_NAMESPACE_PERFIX TableSet *n(){ \ return m_##n; \ } diff --git a/src/defines_p.h b/src/defines_p.h index 9a74f26..425d02c 100644 --- a/src/defines_p.h +++ b/src/defines_p.h @@ -43,4 +43,12 @@ #define __nut_REMOVE "remove" #define __nut_CHANGE "change" +#ifdef NUT_NAMESPACE +# define NUT_BEGIN_NAMESPACE namespace NUT_NAMESPACE{ +# define NUT_END_NAMESPACE } +#else +# define NUT_BEGIN_NAMESPACE +# define NUT_END_NAMESPACE +#endif + #endif // DEFINES_P_H diff --git a/src/mysqlgenerator.cpp b/src/mysqlgenerator.cpp index 374612d..1c6838a 100644 --- a/src/mysqlgenerator.cpp +++ b/src/mysqlgenerator.cpp @@ -21,7 +21,7 @@ #include "mysqlgenerator.h" #include "tablemodel.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE MySqlGenerator::MySqlGenerator(Database *parent) : SqlGeneratorBase(parent) { @@ -72,4 +72,4 @@ QString MySqlGenerator::fieldType(FieldModel *field) return dbType; } -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/mysqlgenerator.h b/src/mysqlgenerator.h index 36e6c50..db53459 100644 --- a/src/mysqlgenerator.h +++ b/src/mysqlgenerator.h @@ -24,7 +24,7 @@ #include #include "sqlgeneratorbase_p.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class MySqlGenerator : public SqlGeneratorBase { @@ -35,6 +35,6 @@ public: }; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // MYSQLGENERATOR_H diff --git a/src/postgresqlgenerator.cpp b/src/postgresqlgenerator.cpp index 904d7a4..598a406 100644 --- a/src/postgresqlgenerator.cpp +++ b/src/postgresqlgenerator.cpp @@ -22,7 +22,7 @@ #include "table.h" #include "tablemodel.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE PostgreSqlGenerator::PostgreSqlGenerator(Database *parent) : SqlGeneratorBase (parent) { @@ -93,4 +93,4 @@ QString PostgreSqlGenerator::diff(FieldModel *oldField, FieldModel *newField) } -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/postgresqlgenerator.h b/src/postgresqlgenerator.h index 26c2720..903cca8 100644 --- a/src/postgresqlgenerator.h +++ b/src/postgresqlgenerator.h @@ -24,7 +24,7 @@ #include #include "sqlgeneratorbase_p.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class PostgreSqlGenerator : public SqlGeneratorBase { @@ -36,6 +36,6 @@ public: QString diff(FieldModel *oldField, FieldModel *newField); }; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // POSTGRESQLGENERATOR_H diff --git a/src/query.cpp b/src/query.cpp index 512f164..0871935 100644 --- a/src/query.cpp +++ b/src/query.cpp @@ -20,7 +20,7 @@ #include "query.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE QueryPrivate::QueryPrivate(QueryBase *parent) : q_ptr(parent), joinClassName(QString::null) @@ -85,4 +85,4 @@ QueryPrivate::QueryPrivate(QueryBase *parent) : q_ptr(parent), * \endcode */ -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/query.h b/src/query.h index 029f675..1c06431 100644 --- a/src/query.h +++ b/src/query.h @@ -33,8 +33,9 @@ #include "sqlgeneratorbase_p.h" #include "querybase_p.h" #include "wherephrase.h" +#include "tablemodel.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE template class NUT_EXPORT Query : public QueryBase @@ -44,6 +45,7 @@ class NUT_EXPORT Query : public QueryBase public: Query(Database *database, TableSetBase *tableSet); + ~Query(); QList toList(int count = -1); @@ -72,6 +74,11 @@ public: Query *orderBy(WherePhrase phrase); }; +template +inline Query *createQuery(TableSet *tableSet){ + +} + template Q_OUTOFLINE_TEMPLATE Query::Query(Database *database, TableSetBase *tableSet) : QueryBase(database), d_ptr(new QueryPrivate(this)) @@ -80,13 +87,13 @@ Q_OUTOFLINE_TEMPLATE Query::Query(Database *database, TableSetBase *tableSet) d->database = database; d->tableSet = tableSet; - d->tableName = d->database->tableName(T::staticMetaObject.className()); + d->tableName = TableModel::findByClassName(T::staticMetaObject.className())->name(); + //d->database->tableName(T::staticMetaObject.className()); } template Q_OUTOFLINE_TEMPLATE Query::~Query() { - qDebug() << "Query::~Query()"; Q_D(Query); delete d; } @@ -107,7 +114,7 @@ Q_OUTOFLINE_TEMPLATE QList Query::toList(int count) d->tableName, d->joinClassName)); - QString pk =d->database->model().model(d->tableName)->primaryKey(); + QString pk = d->database->model().model(d->tableName)->primaryKey(); QVariant lastPkValue = QVariant(); int childTypeId = 0; T *lastRow = 0; @@ -149,7 +156,7 @@ Q_OUTOFLINE_TEMPLATE QList Query::toList(int count) foreach (QString field, childFields) childTable->setProperty(field.toLatin1().data(), q.value(field)); - +//TODO: set database for table childTable->setParent(this); childTable->setParentTable(lastRow); childTable->setStatus(Table::FeatchedFromDB); @@ -256,6 +263,6 @@ Q_OUTOFLINE_TEMPLATE Query *Query::orderBy(WherePhrase phrase) return this; } -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // QUERY_H diff --git a/src/query_p.h b/src/query_p.h index 3c01804..c4e63aa 100644 --- a/src/query_p.h +++ b/src/query_p.h @@ -26,6 +26,8 @@ #include #include +NUT_BEGIN_NAMESPACE + class Database; class TableSetBase; //template @@ -46,4 +48,6 @@ public: QList orderPhrases; }; +NUT_END_NAMESPACE + #endif // QUERY_P_H diff --git a/src/querybase.cpp b/src/querybase.cpp index 66f0a8e..56f93d0 100644 --- a/src/querybase.cpp +++ b/src/querybase.cpp @@ -1,6 +1,10 @@ #include "querybase_p.h" +NUT_BEGIN_NAMESPACE + QueryBase::QueryBase(QObject *parent) : QObject(parent) { } + +NUT_END_NAMESPACE diff --git a/src/querybase_p.h b/src/querybase_p.h index dc78ffb..762a928 100644 --- a/src/querybase_p.h +++ b/src/querybase_p.h @@ -3,6 +3,9 @@ #include #include +#include "defines.h" + +NUT_BEGIN_NAMESPACE class QueryBase : public QObject { @@ -15,4 +18,6 @@ signals: public slots: }; +NUT_END_NAMESPACE + #endif // QUERYBASE_H diff --git a/src/sqlgeneratorbase.cpp b/src/sqlgeneratorbase.cpp index e790775..05473fe 100644 --- a/src/sqlgeneratorbase.cpp +++ b/src/sqlgeneratorbase.cpp @@ -30,7 +30,7 @@ #include "tablemodel.h" #include "wherephrase.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE SqlGeneratorBase::SqlGeneratorBase(Database *parent) : QObject((QObject*)parent) { @@ -305,7 +305,6 @@ QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t, QStrin for(int i = 0; i < _database->model().count(); i++) sql = sql.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + "."); - qDebug() << "new sql" << sql; return sql; } @@ -328,7 +327,6 @@ QString SqlGeneratorBase::createWhere(QList &wheres) whereText.append(phrase(w.data())); } -qDebug() << "WHWRE="<< whereText; // if(whereText != "") // whereText.prepend(" WHERE "); @@ -358,11 +356,10 @@ QString SqlGeneratorBase::selectCommand(QString selectPhrase, QList .arg(rel->localColumn); orderby.append(tableName + "." + pk); }else{ - qWarning(QString("Relation between table %1 and class %2 (%3) not exists!") - .arg(tableName) - .arg(joinClassName) - .arg(joinTableName.isNull() ? "NULL" : joinTableName) - .toLatin1().data()); + qWarning("Relation between table %s and class %s (%s) not exists!", + qPrintable(tableName), + qPrintable(joinClassName), + qPrintable(joinTableName.isNull() ? "NULL" : joinTableName)); joinClassName = QString::null; } } @@ -385,9 +382,7 @@ QString SqlGeneratorBase::selectCommand(QString selectPhrase, QList for(int i = 0; i < _database->model().count(); i++) command = command.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + "."); - qDebug() << command; return command; - } QString SqlGeneratorBase::deleteCommand(QList &wheres, QString tableName) @@ -406,6 +401,10 @@ QString SqlGeneratorBase::deleteCommand(QList &wheres, QString tabl QString SqlGeneratorBase::escapeValue(const QVariant &v)const { switch (v.type()) { + case QVariant::Bool: + return v.toBool() ? "1" : "0"; + break; + case QVariant::Int: case QVariant::UInt: case QVariant::ULongLong: @@ -470,7 +469,6 @@ QString SqlGeneratorBase::phrase(const PhraseData *d) const { QString ret = ""; - qDebug() << "type"<type; switch(d->type){ case PhraseData::Field: ret = d->text; @@ -555,4 +553,4 @@ QString SqlGeneratorBase::operatorString(const PhraseData::Condition &cond) cons } -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/sqlgeneratorbase_p.h b/src/sqlgeneratorbase_p.h index 06102b2..c309c9d 100644 --- a/src/sqlgeneratorbase_p.h +++ b/src/sqlgeneratorbase_p.h @@ -26,7 +26,7 @@ #include #include "wherephrase.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class Table; struct FieldModel; @@ -98,6 +98,6 @@ private: QString phraseOrder(const PhraseData *d) const; }; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // SQLGENERATORBASE_H diff --git a/src/sqlitegenerator.cpp b/src/sqlitegenerator.cpp index 835ca07..744bb27 100644 --- a/src/sqlitegenerator.cpp +++ b/src/sqlitegenerator.cpp @@ -22,6 +22,8 @@ #include "table.h" #include "tablemodel.h" +NUT_BEGIN_NAMESPACE + SqliteGenerator::SqliteGenerator(Database *parent) : SqlGeneratorBase(parent) { @@ -69,3 +71,5 @@ QString SqliteGenerator::fieldType(FieldModel *field) return dbType; } + +NUT_END_NAMESPACE diff --git a/src/sqlitegenerator.h b/src/sqlitegenerator.h index 589c3ba..d607e0e 100644 --- a/src/sqlitegenerator.h +++ b/src/sqlitegenerator.h @@ -24,6 +24,8 @@ #include #include "sqlgeneratorbase_p.h" +NUT_BEGIN_NAMESPACE + class SqliteGenerator : public SqlGeneratorBase { public: @@ -32,4 +34,6 @@ public: QString fieldType(FieldModel *field); }; +NUT_END_NAMESPACE + #endif // SQLITEGENERATOR_H diff --git a/src/sqlservergenerator.cpp b/src/sqlservergenerator.cpp index 77bc8d1..8d05180 100644 --- a/src/sqlservergenerator.cpp +++ b/src/sqlservergenerator.cpp @@ -24,7 +24,7 @@ #include -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE SqlServerGenerator::SqlServerGenerator(Database *parent) : SqlGeneratorBase(parent) { @@ -110,4 +110,4 @@ QString SqlServerGenerator::escapeValue(const QVariant &v) const return SqlGeneratorBase::escapeValue(v); } -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/sqlservergenerator.h b/src/sqlservergenerator.h index 71a6825..8dedd27 100644 --- a/src/sqlservergenerator.h +++ b/src/sqlservergenerator.h @@ -24,7 +24,7 @@ #include #include "sqlgeneratorbase_p.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class SqlServerGenerator : public SqlGeneratorBase { @@ -39,6 +39,6 @@ public: QString escapeValue(const QVariant &v) const; }; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // SQLSERVERGENERATOR_H diff --git a/src/table.cpp b/src/table.cpp index 67e1bcc..2825e62 100644 --- a/src/table.cpp +++ b/src/table.cpp @@ -24,7 +24,7 @@ #include "database.h" #include "sqlgeneratorbase_p.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE Table::Table(QObject *parent) : QObject(parent) { @@ -62,12 +62,12 @@ QString Table::primaryKey() const // } // return ret; - return TableModel::model(metaObject()->className())->primaryKey(); + return TableModel::findByClassName(metaObject()->className())->primaryKey(); } bool Table::isPrimaryKeyAutoIncrement() const { - return TableModel::model(metaObject()->className())->field(primaryKey())->isAutoIncrement; + return TableModel::findByClassName(metaObject()->className())->field(primaryKey())->isAutoIncrement; } @@ -143,4 +143,4 @@ void Table::setStatus(const Status &status) _status = status; } -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/table.h b/src/table.h index 7c49bd2..3df4ee5 100644 --- a/src/table.h +++ b/src/table.h @@ -29,7 +29,7 @@ #include "defines.h" #include "wherephrase.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class Database; class TableSetBase; @@ -81,6 +81,6 @@ private: friend class Query; }; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // TABLE_H diff --git a/src/tablemodel.cpp b/src/tablemodel.cpp index d92093d..25e291c 100644 --- a/src/tablemodel.cpp +++ b/src/tablemodel.cpp @@ -26,8 +26,9 @@ #include #include "tablemodel.h" -#include "defines_p.h" +#include "defines.h" +NUT_BEGIN_NAMESPACE QSet TableModel::_allModels; //QMap TableScheema::scheemas; @@ -107,9 +108,10 @@ TableModel *TableModel::findByName(QString name) TableModel *TableModel::findByClassName(QString className) { - foreach (TableModel *model, _allModels) + foreach (TableModel *model, _allModels){ if(model->className() == className) return model; + } return 0; } @@ -145,6 +147,12 @@ TableModel::TableModel(int typeId, QString tableName) _name = tableName; _className = tableMetaObject->className(); + qDebug() << "New model"<< _className << tableName; +//#ifdef NUT_NAMESPACE +// if(_className.startsWith(QT_STRINGIFY(NUT_NAMESPACE) "::")) +// _className = _className.replace(QT_STRINGIFY(NUT_NAMESPACE) "::", ""); +//#endif + // get fields names for(int j = 0; j < tableMetaObject->classInfoCount(); j++){ QString name = tableMetaObject->classInfo(j).name(); @@ -223,6 +231,7 @@ TableModel::TableModel(int typeId, QString tableName) } _allModels.insert(this); + qDebug() << "all models"<<_allModels; } /* @@ -269,6 +278,8 @@ TableModel::TableModel(QJsonObject json, QString tableName) if(json.keys().contains(__nut_PRIMARY_KEY)) field(json.value(__nut_PRIMARY_KEY).toString())->isAutoIncrement = true; + _allModels.insert(this); + } QJsonObject TableModel::toJson() const @@ -279,7 +290,7 @@ QJsonObject TableModel::toJson() const foreach (FieldModel *f, _fields) { QJsonObject fieldObj; fieldObj.insert(__NAME, f->name); - fieldObj.insert(__TYPE, QVariant::typeToName(f->type)); + fieldObj.insert(__TYPE, QString(QVariant::typeToName(f->type))); if(f->length) fieldObj.insert(__nut_LEN, f->length); @@ -319,13 +330,20 @@ QJsonObject TableModel::toJson() const // } //} -TableModel *TableModel::model(QString className) -{ - foreach (TableModel *s, _allModels) - if(s->_className == className) - return s; - return 0; -} +//TableModel *TableModel::model(QString className) +//{ +// qFatal(""); +//#ifdef NUT_NAMESPACE +// if(className.startsWith(QT_STRINGIFY(NUT_NAMESPACE) "::")) +// className = className.replace(QT_STRINGIFY(NUT_NAMESPACE) "::", ""); +//#endif + +// foreach (TableModel *s, _allModels) +// if(s->_className == className){ +// return s; +// } +// return 0; +//} RelationModel *TableModel::foregionKey(QString otherTable) const { @@ -355,3 +373,5 @@ QString TableModel::primaryKey() const return f->name; return QString::null; } + +NUT_END_NAMESPACE diff --git a/src/tablemodel.h b/src/tablemodel.h index 828ee2f..3ae341c 100644 --- a/src/tablemodel.h +++ b/src/tablemodel.h @@ -23,9 +23,13 @@ #include #include -class QJsonObject; -class TableModel; +#include "defines.h" +class QJsonObject; + +NUT_BEGIN_NAMESPACE + +class TableModel; struct FieldModel{ FieldModel() : name(QString::null), length(0), defaultValue(QString::null), notNull(false), isPrimaryKey(false), isAutoIncrement(false), isUnique(false) @@ -44,7 +48,7 @@ struct FieldModel{ bool operator ==(const FieldModel &f) const{ - bool b = name == f.name + bool b = name.toLower() == f.name.toLower() && type == f.type && length == f.length && defaultValue == f.defaultValue @@ -75,7 +79,7 @@ public: // static TableScheema *registerTable(int typeId, QString tableName); // static void createForegionKeys(); - static TableModel* model(QString className); +// static TableModel* model(QString className); FieldModel *field(QString name) const; RelationModel *foregionKey(QString otherTable) const; @@ -112,4 +116,6 @@ private: static QSet_allModels; }; +NUT_END_NAMESPACE + #endif // TABLESCHEEMA_H diff --git a/src/tableset.h b/src/tableset.h index d128ef1..7b9c919 100644 --- a/src/tableset.h +++ b/src/tableset.h @@ -27,10 +27,10 @@ #include #include "tablesetbase_p.h" -#include "database.h" +//#include "database.h" #include "table.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE template class Query; @@ -125,6 +125,6 @@ Q_OUTOFLINE_TEMPLATE void TableSet::remove(QList t) remove(i); } -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // TABLESET_H diff --git a/src/tablesetbase.cpp b/src/tablesetbase.cpp index a9d0c9f..b29a40b 100644 --- a/src/tablesetbase.cpp +++ b/src/tablesetbase.cpp @@ -23,6 +23,8 @@ #include "tablesetbase_p.h" #include "databasemodel.h" +NUT_BEGIN_NAMESPACE + TableSetBase::TableSetBase(Database *parent) : QObject(parent), _database(parent), _table(0) { parent->add(this); @@ -75,3 +77,5 @@ void TableSetBase::setDatabase(Database *database) { _database = database; } + +NUT_END_NAMESPACE diff --git a/src/tablesetbase_p.h b/src/tablesetbase_p.h index 088777e..307e0e0 100644 --- a/src/tablesetbase_p.h +++ b/src/tablesetbase_p.h @@ -27,6 +27,8 @@ #include "defines.h" +NUT_BEGIN_NAMESPACE + class Table; class Database; class TableSetBase : public QObject @@ -53,4 +55,6 @@ protected: QString _childClassName; }; +NUT_END_NAMESPACE + #endif // TABLESETBASE_H diff --git a/src/wherephrase.cpp b/src/wherephrase.cpp index ef08143..38ee2a7 100644 --- a/src/wherephrase.cpp +++ b/src/wherephrase.cpp @@ -23,41 +23,42 @@ #include "wherephrase.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE PhraseData::PhraseData(const char *className, const char *s){ text = QString(className) + "." + s; type = Field; - qDebug() << "(" << this << ")" << "Data type 0"; + operatorCond = NotAssign; +// qDebug() << "(" << this << ")" << "Data type 0"; } PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o) : left(l){ operatorCond = o; type = WithoutOperand; - qDebug() << "(" << this << ")" << "Data type 1"; +// qDebug() << "(" << this << ")" << "Data type 1"; } PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o, const PhraseData *r) : left(l), right(r){ operatorCond = o; type = WithOther; - qDebug() << "(" << this << ")" << "Data type 2"; +// qDebug() << "(" << this << ")" << "Data type 2"; } PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o, QVariant r) : left(l), operand(r){ operatorCond = o; type = WithVariant; - qDebug() << "(" << this << ")" << "Data type 1"; +// qDebug() << "(" << this << ")" << "Data type 1"; } PhraseData::~PhraseData(){ - qDebug() << "(" << this << ")" << "Data Deleting..." << type; +// qDebug() << "(" << this << ")" << "Data Deleting..." << type; if(type == WithOther){ - qDebug() << " - Other" << left << right; +// qDebug() << " - Other" << left << right; delete left; delete right; } if(type == WithVariant){ - qDebug() << " - Variant" << left; +// qDebug() << " - Variant" << left; if(left) delete left; } @@ -70,7 +71,7 @@ PhraseData *WherePhrase::data() const WherePhrase::WherePhrase(const char *className, const char *s) { - qDebug() << "(" << this << ")" << "class ctor" << className << s; +// qDebug() << "(" << this << ")" << "class ctor" << className << s; _data = new PhraseData(className, s); } @@ -78,7 +79,7 @@ WherePhrase::WherePhrase(const WherePhrase &l) { _data = l._data; // l._data = 0; - qDebug() << "(" << this << ")" << "Copy ctor, from" << _data << (&l); +// qDebug() << "(" << this << ")" << "Copy ctor, from" << _data << (&l); _dataPointer = QSharedPointer(l._dataPointer); } @@ -86,7 +87,7 @@ WherePhrase::WherePhrase(WherePhrase *l) { _data = l->_data; - qDebug() << "(" << this << ")" << "From pointer" << _data; +// qDebug() << "(" << this << ")" << "From pointer" << _data; // _dataPointer = QSharedPointer(_data); l->_data = 0; l->_dataPointer.reset(0); @@ -97,7 +98,7 @@ WherePhrase::WherePhrase(WherePhrase *l, PhraseData::Condition o) _data = new PhraseData(l->_data, o); // _dataPointer = QSharedPointer(_data); l->_data = 0; - qDebug() << "(" << this << ")" << "From cond, " << _data << o; +// qDebug() << "(" << this << ")" << "From cond, " << _data << o; l->_dataPointer.reset(0); } @@ -109,7 +110,7 @@ WherePhrase::WherePhrase(WherePhrase *l, PhraseData::Condition o, WherePhrase *r l->_data = 0; r->_data = 0; - qDebug() << "(" << this << ")" << "From two pointer" << _data; +// qDebug() << "(" << this << ")" << "From two pointer" << _data; l->_dataPointer.reset(0); r->_dataPointer.reset(0); } @@ -120,13 +121,13 @@ WherePhrase::WherePhrase(WherePhrase *l, PhraseData::Condition o, QVariant r) // _dataPointer = QSharedPointer(_data); l->_data = 0; - qDebug() << "(" << this << ")" << "From variant," << _data << l << r; +// qDebug() << "(" << this << ")" << "From variant," << _data << l << r; l->_dataPointer.reset(0); } WherePhrase::~WherePhrase() { - qDebug() << "(" << this << ")" << "Dtor" << _data << _dataPointer.data(); +// qDebug() << "(" << this << ")" << "Dtor" << _data << _dataPointer.data(); // if(_data){ // delete _data; // qDebug() << "deleted"; @@ -200,7 +201,6 @@ WherePhrase WherePhrase::operator ||(const WherePhrase &other) WherePhrase WherePhrase::operator &(const WherePhrase &other) { - qDebug() << "append" << this << (&other); return WherePhrase(this, PhraseData::Append, (WherePhrase*)&other); } @@ -246,7 +246,7 @@ WherePhrase WherePhrase::operator >=(const QVariant &other) FieldPhrase::FieldPhrase(const char *className, const char *s) : WherePhrase(className, s) { - qDebug() << "(" << this << ")" << "FieldPhrase ctor" << className << s; +// qDebug() << "(" << this << ")" << "FieldPhrase ctor" << className << s; } WherePhrase FieldPhrase::operator =(const QVariant &other) @@ -273,6 +273,6 @@ WherePhrase FieldPhrase::like(QString pattern) return WherePhrase(this, PhraseData::Like, pattern); } -QT_END_NAMESPACE +NUT_END_NAMESPACE diff --git a/src/wherephrase.h b/src/wherephrase.h index d767c9f..48a14ca 100644 --- a/src/wherephrase.h +++ b/src/wherephrase.h @@ -28,8 +28,9 @@ #include #include #include +#include "defines.h" -QT_BEGIN_NAMESPACE +NUT_BEGIN_NAMESPACE class SqlGeneratorBase; class PhraseData{ @@ -155,6 +156,6 @@ public: //}; -QT_END_NAMESPACE +NUT_END_NAMESPACE #endif // PHRASE_H diff --git a/test/basic/maintest.cpp b/test/basic/maintest.cpp index 281147c..8c3e173 100644 --- a/test/basic/maintest.cpp +++ b/test/basic/maintest.cpp @@ -34,10 +34,10 @@ void MainTest::initTestCase() QTEST_ASSERT(ok); - FROM(db.comments()) - DELETE(); - FROM(db.posts()) - DELETE(); +// FROM(db.comments()) +// DELETE(); +// FROM(db.posts()) +// DELETE(); } void MainTest::dataScheema() @@ -128,6 +128,15 @@ void MainTest::selectPostsWithoutTitle() QTEST_ASSERT(count == 0); } +void MainTest::selectComments() +{ + auto comments = FROM(post->comments()) + SELECT(); + + qDebug() << "comments count"<id()) FIRST(); - qDebug() << d << q->saveDate(); QTEST_ASSERT(q->saveDate() == d); } diff --git a/test/basic/maintest.h b/test/basic/maintest.h index edcee0e..9dcd20d 100644 --- a/test/basic/maintest.h +++ b/test/basic/maintest.h @@ -25,6 +25,7 @@ private slots: void createPost2(); void selectPosts(); void selectPostsWithoutTitle(); + void selectComments(); void testDate(); void selectWithInvalidRelation(); void select10NewstPosts(); diff --git a/test/common/comment.h b/test/common/comment.h index 5899fb6..4869c35 100644 --- a/test/common/comment.h +++ b/test/common/comment.h @@ -5,6 +5,10 @@ #include #include "table.h" +#ifdef NUT_NAMESPACE +using namespace NUT_NAMESPACE; +#endif + class Post; class Comment : public Table { diff --git a/test/common/consts.h b/test/common/consts.h index 41c8154..96cb683 100644 --- a/test/common/consts.h +++ b/test/common/consts.h @@ -1,22 +1,22 @@ #ifndef CONSTS_H #define CONSTS_H -//#define DRIVER "QPSQL" -//#define HOST "127.0.0.1" -//#define DATABASE "nutdb3" -//#define USERNAME "postgres" -//#define PASSWORD "856856" - -#define DRIVER "QMYSQL" +#define DRIVER "QPSQL" #define HOST "127.0.0.1" -#define DATABASE "nutdb" -#define USERNAME "root" -#define PASSWORD "onlyonlyi" +#define DATABASE "nutdb2" +#define USERNAME "postgres" +#define PASSWORD "856856" -// db.setDriver("QODBC"); -// db.setHostName("127.0.0.1"); -// db.setDatabaseName("DRIVER={SQL Server};Server=.;Database=Nut;Uid=sa;Port=1433;Pwd=qwe123!@#;WSID=."); -// db.setUserName("sa"); -// db.setPassword("qwe123!@#"); +//#define DRIVER "QMYSQL" +//#define HOST "127.0.0.1" +//#define DATABASE "nutdb" +//#define USERNAME "root" +//#define PASSWORD "onlyonlyi" + +//#define DRIVER "QODBC" +//#define HOST "127.0.0.1" +//#define DATABASE "DRIVER={SQL Server};Server=.;Database=Nut2;Uid=sa;Port=1433;Pwd=qwe123!@#;WSID=." +//#define USERNAME "sa" +//#define PASSWORD "qwe123!@#" #endif // CONSTS_H diff --git a/test/common/post.h b/test/common/post.h index 7ece87e..de81702 100644 --- a/test/common/post.h +++ b/test/common/post.h @@ -7,6 +7,10 @@ #include "comment.h" #include "databasemodel.h" +#ifdef NUT_NAMESPACE +using namespace NUT_NAMESPACE; +#endif + class Post : public Table { Q_OBJECT diff --git a/test/common/weblogdatabase.h b/test/common/weblogdatabase.h index 58eb7c8..911c0cf 100644 --- a/test/common/weblogdatabase.h +++ b/test/common/weblogdatabase.h @@ -3,6 +3,10 @@ #include "database.h" +#ifdef NUT_NAMESPACE +using namespace NUT_NAMESPACE; +#endif + class Post; class Comment; class WeblogDatabase : public Database