Merge branch 'dev' of https://github.com/HamedMasafi/Nut into dev
This commit is contained in:
commit
c96ead047b
|
|
@ -53,7 +53,7 @@ qulonglong DatabasePrivate::lastId = 0;
|
|||
QMap<QString, DatabaseModel> DatabasePrivate::allTableMaps;
|
||||
|
||||
DatabasePrivate::DatabasePrivate(Database *parent) : q_ptr(parent),
|
||||
port(0), sqlGenertor(0), changeLogs(0),
|
||||
port(0), sqlGenertor(nullptr), changeLogs(nullptr),
|
||||
isDatabaseNew(false)
|
||||
{
|
||||
}
|
||||
|
|
@ -74,7 +74,7 @@ bool DatabasePrivate::open(bool update)
|
|||
db.setUserName(userName);
|
||||
db.setPassword(password);
|
||||
|
||||
if (driver.toLower().startsWith("qsqlite")
|
||||
if (driver.startsWith("qsqlite", Qt::CaseInsensitive)
|
||||
&& !QFile::exists(databaseName)) {
|
||||
//Force to execute update database
|
||||
isDatabaseNew = true;
|
||||
|
|
@ -108,10 +108,10 @@ bool DatabasePrivate::open(bool update)
|
|||
|
||||
isDatabaseNew = true;
|
||||
return open(update);
|
||||
} else {
|
||||
qWarning("Unknown error detecting change logs, %s",
|
||||
db.lastError().text().toLatin1().data());
|
||||
}
|
||||
qWarning("Unknown error detecting change logs, %s",
|
||||
db.lastError().text().toLatin1().data());
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -335,7 +335,7 @@ bool DatabasePrivate::putModelToDatabase()
|
|||
DatabaseModel current = currentModel;
|
||||
/*current.remove(__CHANGE_LOG_TABLE_NAME)*/;
|
||||
|
||||
ChangeLogTable *changeLog = new ChangeLogTable();
|
||||
auto *changeLog = new ChangeLogTable();
|
||||
changeLog->setData(QJsonDocument(current.toJson()).toJson());
|
||||
changeLog->setVersion(current.version());
|
||||
changeLogs->append(changeLog);
|
||||
|
|
@ -358,7 +358,7 @@ bool DatabasePrivate::putModelToDatabase()
|
|||
void DatabasePrivate::createChangeLogs()
|
||||
{
|
||||
// currentModel.model("change_log")
|
||||
QString diff = sqlGenertor->diff(0, currentModel.tableByName("__change_log"));
|
||||
QString diff = sqlGenertor->diff(nullptr, currentModel.tableByName("__change_log"));
|
||||
|
||||
db.exec(diff);
|
||||
}
|
||||
|
|
@ -407,8 +407,7 @@ Database::~Database()
|
|||
if (d->db.isOpen())
|
||||
d->db.close();
|
||||
|
||||
if (d_ptr)
|
||||
delete d_ptr;
|
||||
delete d_ptr;
|
||||
}
|
||||
|
||||
QString Database::databaseName() const
|
||||
|
|
@ -574,9 +573,9 @@ bool Database::open(bool updateDatabase)
|
|||
qFatal("Sql generator for driver %s not found",
|
||||
driver().toLatin1().constData());
|
||||
return false;
|
||||
} else {
|
||||
return d->open(updateDatabase);
|
||||
}
|
||||
|
||||
return d->open(updateDatabase);
|
||||
}
|
||||
|
||||
void Database::close()
|
||||
|
|
@ -585,7 +584,7 @@ void Database::close()
|
|||
d->db.close();
|
||||
}
|
||||
|
||||
QSqlQuery Database::exec(QString sql)
|
||||
QSqlQuery Database::exec(const QString &sql)
|
||||
{
|
||||
Q_D(Database);
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ public:
|
|||
bool open(bool updateDatabase);
|
||||
void close();
|
||||
|
||||
QSqlQuery exec(QString sql);
|
||||
QSqlQuery exec(const QString& sql);
|
||||
|
||||
int saveChanges(bool cleanUp = false);
|
||||
void cleanUp();
|
||||
|
|
|
|||
|
|
@ -57,10 +57,6 @@ DatabaseModel::DatabaseModel(const QJsonObject &json) :
|
|||
}
|
||||
}
|
||||
|
||||
DatabaseModel::~DatabaseModel()
|
||||
{
|
||||
}
|
||||
|
||||
TableModel *DatabaseModel::tableByName(QString tableName) const
|
||||
{
|
||||
for(int i = 0; i < size(); i++){
|
||||
|
|
@ -72,7 +68,7 @@ TableModel *DatabaseModel::tableByName(QString tableName) const
|
|||
|
||||
// qWarning("Table with name '%s' not found in model",
|
||||
// qUtf8Printable(tableName));
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
TableModel *DatabaseModel::tableByClassName(QString className) const
|
||||
|
|
@ -108,19 +104,19 @@ bool DatabaseModel::operator ==(const DatabaseModel &other) const
|
|||
return true;
|
||||
}
|
||||
|
||||
DatabaseModel DatabaseModel::operator +(const DatabaseModel &other)
|
||||
{
|
||||
DatabaseModel model;
|
||||
DatabaseModel::const_iterator i;
|
||||
//DatabaseModel DatabaseModel::operator +(const DatabaseModel &other)
|
||||
//{
|
||||
// DatabaseModel model;
|
||||
// DatabaseModel::const_iterator i;
|
||||
|
||||
for (i = constBegin(); i != constEnd(); ++i)
|
||||
model.append(*i);
|
||||
// for (i = constBegin(); i != constEnd(); ++i)
|
||||
// model.append(*i);
|
||||
|
||||
for (i = other.constBegin(); i != other.constEnd(); ++i)
|
||||
model.append(*i);
|
||||
// for (i = other.constBegin(); i != other.constEnd(); ++i)
|
||||
// model.append(*i);
|
||||
|
||||
return model;
|
||||
}
|
||||
// return model;
|
||||
//}
|
||||
|
||||
QJsonObject DatabaseModel::toJson() const
|
||||
{
|
||||
|
|
@ -148,13 +144,13 @@ RelationModel *DatabaseModel::relationByClassNames(const QString &masterClassNam
|
|||
TableModel *childTable = tableByClassName(childClassName);
|
||||
|
||||
if(!childTable)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
foreach (RelationModel *rel, childTable->foregionKeys())
|
||||
if(rel->masterClassName == masterClassName)
|
||||
return rel;
|
||||
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RelationModel *DatabaseModel::relationByTableNames(const QString &masterTableName, const QString &childTableName)
|
||||
|
|
@ -162,13 +158,13 @@ RelationModel *DatabaseModel::relationByTableNames(const QString &masterTableNam
|
|||
TableModel *childTable = tableByName(childTableName);
|
||||
|
||||
if(!childTable)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
foreach (RelationModel *rel, childTable->foregionKeys())
|
||||
if(rel->masterTable->name() == masterTableName)
|
||||
return rel;
|
||||
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DatabaseModel DatabaseModel::fromJson(QJsonObject &json)
|
||||
|
|
@ -236,7 +232,21 @@ void DatabaseModel::deleteAllModels()
|
|||
// qDeleteAll(i.value());
|
||||
}
|
||||
// qDeleteAll(_models.values());
|
||||
_models.clear();
|
||||
_models.clear();
|
||||
}
|
||||
|
||||
DatabaseModel operator +(const DatabaseModel &l, const DatabaseModel &r)
|
||||
{
|
||||
DatabaseModel model;
|
||||
DatabaseModel::const_iterator i;
|
||||
|
||||
for (i = r.constBegin(); i != r.constEnd(); ++i)
|
||||
model.append(*i);
|
||||
|
||||
for (i = l.constBegin(); i != l.constEnd(); ++i)
|
||||
model.append(*i);
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
NUT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ public:
|
|||
DatabaseModel(const QString &name = QString());
|
||||
DatabaseModel(const DatabaseModel &other);
|
||||
DatabaseModel(const QJsonObject &json);
|
||||
~DatabaseModel();
|
||||
~DatabaseModel() = default;
|
||||
|
||||
TableModel *tableByName(QString tableName) const;
|
||||
TableModel *tableByClassName(QString className) const;
|
||||
|
|
@ -54,7 +54,7 @@ public:
|
|||
const QString &childClassName);
|
||||
|
||||
bool operator==(const DatabaseModel &other) const;
|
||||
DatabaseModel operator +(const DatabaseModel &other);
|
||||
// DatabaseModel operator +(const DatabaseModel &other);
|
||||
|
||||
Q_DECL_DEPRECATED
|
||||
static DatabaseModel fromJson(QJsonObject &json);
|
||||
|
|
@ -73,6 +73,8 @@ public:
|
|||
static void deleteAllModels();
|
||||
};
|
||||
|
||||
DatabaseModel operator +(const DatabaseModel &l, const DatabaseModel &r);
|
||||
|
||||
NUT_END_NAMESPACE
|
||||
|
||||
#endif // DATABASEMODEL_H
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ public: \
|
|||
|
||||
#define NUT_IMPLEMENT_CHILD_TABLE(class, type, n) \
|
||||
type *class::n##Table(){ \
|
||||
static type *f = new type(); \
|
||||
static auto f = new type(); \
|
||||
return f; \
|
||||
} \
|
||||
NUT_WRAP_NAMESPACE(TableSet)<type> *class::n(){ \
|
||||
|
|
|
|||
|
|
@ -36,50 +36,50 @@ QString MySqlGenerator::fieldType(FieldModel *field)
|
|||
QString dbType;
|
||||
|
||||
switch (field->type) {
|
||||
case QVariant::Bool:
|
||||
case QMetaType::Bool:
|
||||
dbType = "BOOLEAN";
|
||||
break;
|
||||
case QVariant::ByteArray:
|
||||
case QMetaType::QByteArray:
|
||||
dbType = "BLOB";
|
||||
break;
|
||||
case QVariant::DateTime:
|
||||
case QMetaType::QDateTime:
|
||||
dbType = "DATETIME";
|
||||
break;
|
||||
|
||||
case QVariant::Date:
|
||||
case QMetaType::QDate:
|
||||
dbType = "DATE";
|
||||
break;
|
||||
|
||||
case QVariant::Time:
|
||||
case QMetaType::QTime:
|
||||
dbType = "TIME";
|
||||
break;
|
||||
case QVariant::Double:
|
||||
case QMetaType::Double:
|
||||
dbType = "REAL";
|
||||
break;
|
||||
case QVariant::Int:
|
||||
case QMetaType::Int:
|
||||
dbType = "INT(4)";
|
||||
if(field->isAutoIncrement)
|
||||
dbType += " AUTO_INCREMENT";
|
||||
|
||||
break;
|
||||
case QVariant::String:
|
||||
case QMetaType::QString:
|
||||
if(field->length)
|
||||
dbType = QString("VARCHAR(%1)").arg(field->length);
|
||||
else
|
||||
dbType = "TEXT";
|
||||
break;
|
||||
|
||||
case QVariant::Point:
|
||||
case QVariant::PointF:
|
||||
case QMetaType::QPoint:
|
||||
case QMetaType::QPointF:
|
||||
dbType = "POINT";
|
||||
break;
|
||||
|
||||
case QVariant::Polygon:
|
||||
case QVariant::PolygonF:
|
||||
case QMetaType::QPolygon:
|
||||
case QMetaType::QPolygonF:
|
||||
dbType = "POLYGON";
|
||||
break;
|
||||
|
||||
case QVariant::Uuid:
|
||||
case QMetaType::QUuid:
|
||||
dbType = "VARCHAR(64)";
|
||||
break;
|
||||
|
||||
|
|
@ -100,12 +100,12 @@ QString MySqlGenerator::fieldType(FieldModel *field)
|
|||
QString MySqlGenerator::escapeValue(const QVariant &v) const
|
||||
{
|
||||
switch (v.type()) {
|
||||
case QVariant::Point: {
|
||||
case QMetaType::QPoint: {
|
||||
QPoint pt = v.toPoint();
|
||||
return QString("GeomFromText('POINT(%1 %2)',0)").arg(pt.x()).arg(pt.y());
|
||||
}
|
||||
|
||||
case QVariant::PointF: {
|
||||
case QMetaType::QPointF: {
|
||||
QPointF pt = v.toPointF();
|
||||
return QString("GeomFromText('POINT(%1 %2)',0)").arg(pt.x()).arg(pt.y());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,10 +61,6 @@ SqlGeneratorBase::SqlGeneratorBase(Database *parent)
|
|||
_serializer = new SqlSerializer;
|
||||
}
|
||||
|
||||
SqlGeneratorBase::~SqlGeneratorBase()
|
||||
{
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::masterDatabaseName(QString databaseName)
|
||||
{
|
||||
Q_UNUSED(databaseName);
|
||||
|
|
@ -107,7 +103,7 @@ QString SqlGeneratorBase::recordsPhrase(TableModel *table)
|
|||
foreach (FieldModel *f, table->fields()) {
|
||||
if (!ret.isEmpty())
|
||||
ret.append(", ");
|
||||
ret.append(QString("%1.%2 AS [%1.%2]").arg(table->name()).arg(f->name));
|
||||
ret.append(QString("%1.%2 AS [%1.%2]").arg(table->name(), f->name));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -123,12 +119,11 @@ QString SqlGeneratorBase::fieldDeclare(FieldModel *field)
|
|||
QString SqlGeneratorBase::relationDeclare(const RelationModel *relation)
|
||||
{
|
||||
return QString("FOREIGN KEY (FK_%1) REFERENCES %2(%1)")
|
||||
.arg(relation->localColumn)
|
||||
.arg(relation->slaveTable->name());
|
||||
.arg(relation->localColumn, relation->slaveTable->name());
|
||||
}
|
||||
|
||||
QStringList SqlGeneratorBase::diff(DatabaseModel lastModel,
|
||||
DatabaseModel newModel)
|
||||
QStringList SqlGeneratorBase::diff(const DatabaseModel &lastModel,
|
||||
const DatabaseModel &newModel)
|
||||
{
|
||||
QStringList ret;
|
||||
|
||||
|
|
@ -226,8 +221,7 @@ QString SqlGeneratorBase::diff(TableModel *oldTable, TableModel *newTable)
|
|||
QString sql;
|
||||
if (oldTable) {
|
||||
sql = QString("ALTER TABLE %1 \n%2")
|
||||
.arg(newTable->name())
|
||||
.arg(columnSql.join(",\n"));
|
||||
.arg(newTable->name(), columnSql.join(",\n"));
|
||||
} else {
|
||||
if (!newTable->primaryKey().isNull()) {
|
||||
QString pkCon = primaryKeyConstraint(newTable);
|
||||
|
|
@ -236,8 +230,7 @@ QString SqlGeneratorBase::diff(TableModel *oldTable, TableModel *newTable)
|
|||
}
|
||||
|
||||
sql = QString("CREATE TABLE %1 \n(%2)")
|
||||
.arg(newTable->name())
|
||||
.arg(columnSql.join(",\n"));
|
||||
.arg(newTable->name(), columnSql.join(",\n"));
|
||||
}
|
||||
return sql;
|
||||
}
|
||||
|
|
@ -273,9 +266,8 @@ QString SqlGeneratorBase::diffRelation(TableModel *oldTable, TableModel *newTabl
|
|||
if (columnSql.count())
|
||||
return "ALTER TABLE " + newTable->name() + "\n"
|
||||
+ columnSql.join(",\n");
|
||||
else
|
||||
return QString();
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::diff(RelationModel *oldRel, RelationModel *newRel)
|
||||
|
|
@ -295,23 +287,21 @@ QString SqlGeneratorBase::diff(RelationModel *oldRel, RelationModel *newRel)
|
|||
if (!oldRel)
|
||||
return QString("ADD CONSTRAINT FK_%1 FOREIGN KEY (%1) "
|
||||
"REFERENCES %2(%3)")
|
||||
.arg(newRel->localColumn)
|
||||
.arg(newRel->masterTable->name())
|
||||
.arg(newRel->foreignColumn);
|
||||
.arg(newRel->localColumn, newRel->masterTable->name(),
|
||||
newRel->foreignColumn);
|
||||
|
||||
if (!newRel)
|
||||
return QString("ADD CONSTRAINT FK_%1 FOREIGN KEY (%1) "
|
||||
"REFERENCES %2(%3)")
|
||||
.arg(oldRel->localColumn)
|
||||
.arg(oldRel->masterTable->name())
|
||||
.arg(oldRel->foreignColumn);
|
||||
.arg(oldRel->localColumn, oldRel->masterTable->name(),
|
||||
oldRel->foreignColumn);
|
||||
|
||||
// if (*oldRel == *newRel)
|
||||
return QString();
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::join(const QString &mainTable,
|
||||
const QList<RelationModel*> list,
|
||||
const QList<RelationModel*> &list,
|
||||
QStringList *order)
|
||||
{
|
||||
QString ret = mainTable;
|
||||
|
|
@ -319,19 +309,19 @@ QString SqlGeneratorBase::join(const QString &mainTable,
|
|||
for (i = list.begin(); i != list.end(); ++i) {
|
||||
if ((*i)->masterTable->name() == mainTable) {
|
||||
ret.append(QString(" INNER JOIN %3 ON %1.%2 = %3.%4")
|
||||
.arg((*i)->masterTable->name())
|
||||
.arg((*i)->masterTable->primaryKey())
|
||||
.arg((*i)->slaveTable->name())
|
||||
.arg((*i)->localColumn));
|
||||
.arg((*i)->masterTable->name(),
|
||||
(*i)->masterTable->primaryKey(),
|
||||
(*i)->slaveTable->name(),
|
||||
(*i)->localColumn));
|
||||
|
||||
if (order != Q_NULLPTR)
|
||||
order->append((*i)->slaveTable->name() + "." + (*i)->slaveTable->primaryKey());
|
||||
} else {
|
||||
ret.append(QString(" INNER JOIN %3 ON %1.%2 = %3.%4")
|
||||
.arg(mainTable)
|
||||
.arg((*i)->localColumn)
|
||||
.arg((*i)->masterTable->name())
|
||||
.arg((*i)->masterTable->primaryKey()));
|
||||
.arg(mainTable,
|
||||
(*i)->localColumn,
|
||||
(*i)->masterTable->name(),
|
||||
(*i)->masterTable->primaryKey()));
|
||||
|
||||
if (order != Q_NULLPTR)
|
||||
order->append((*i)->masterTable->name() + "." + (*i)->masterTable->primaryKey());
|
||||
|
|
@ -369,10 +359,8 @@ QString SqlGeneratorBase::join(const QStringList &list, QStringList *order)
|
|||
if (rel) {
|
||||
//mainTable is master of table
|
||||
ret.append(QString(" INNER JOIN [%1] ON %4.%2 = %1.%3")
|
||||
.arg(table)
|
||||
.arg(rel->masterTable->primaryKey())
|
||||
.arg(rel->localColumn)
|
||||
.arg(mainTable));
|
||||
.arg(table, rel->masterTable->primaryKey(),
|
||||
rel->localColumn, mainTable));
|
||||
|
||||
if (order != Q_NULLPTR)
|
||||
order->append(mainTable + "." + rel->masterTable->primaryKey());
|
||||
|
|
@ -382,10 +370,8 @@ QString SqlGeneratorBase::join(const QStringList &list, QStringList *order)
|
|||
if (rel) {
|
||||
// table is master of mainTable
|
||||
ret.append(QString(" INNER JOIN [%1] ON %4.%2 = %1.%3")
|
||||
.arg(table)
|
||||
.arg(rel->localColumn)
|
||||
.arg(rel->masterTable->primaryKey())
|
||||
.arg(mainTable));
|
||||
.arg(table, rel->localColumn,
|
||||
rel->masterTable->primaryKey(), mainTable));
|
||||
|
||||
if (order != Q_NULLPTR)
|
||||
order->append(mainTable + "." + rel->localColumn);
|
||||
|
|
@ -421,9 +407,7 @@ QString SqlGeneratorBase::insertRecord(Table *t, QString tableName)
|
|||
changedPropertiesText.append(s);
|
||||
}
|
||||
sql = QString("INSERT INTO %1 (%2) VALUES (%3)")
|
||||
.arg(tableName)
|
||||
.arg(changedPropertiesText)
|
||||
.arg(values.join(", "));
|
||||
.arg(tableName, changedPropertiesText, values.join(", "));
|
||||
|
||||
removeTableNames(sql);
|
||||
|
||||
|
|
@ -441,10 +425,8 @@ QString SqlGeneratorBase::updateRecord(Table *t, QString tableName)
|
|||
values.append(f + "='" + t->property(f.toLatin1().data()).toString()
|
||||
+ "'");
|
||||
sql = QString("UPDATE %1 SET %2 WHERE %3=%4")
|
||||
.arg(tableName)
|
||||
.arg(values.join(", "))
|
||||
.arg(key)
|
||||
.arg(t->primaryValue().toString());
|
||||
.arg(tableName, values.join(", "),
|
||||
key, t->primaryValue().toString());
|
||||
|
||||
removeTableNames(sql);
|
||||
|
||||
|
|
@ -454,9 +436,7 @@ QString SqlGeneratorBase::updateRecord(Table *t, QString tableName)
|
|||
QString SqlGeneratorBase::deleteRecord(Table *t, QString tableName)
|
||||
{
|
||||
QString sql = QString("DELETE FROM %1 WHERE %2='%3'")
|
||||
.arg(tableName)
|
||||
.arg(t->primaryKey())
|
||||
.arg(t->primaryValue().toString());
|
||||
.arg(tableName, t->primaryKey(), t->primaryValue().toString());
|
||||
replaceTableNames(sql);
|
||||
return sql;
|
||||
}
|
||||
|
|
@ -495,10 +475,8 @@ QString SqlGeneratorBase::fromTableText(const QString &tableName,
|
|||
if (rel) {
|
||||
QString pk = _database->model().tableByName(tableName)->primaryKey();
|
||||
tableNameText = QString("%1 INNER JOIN %2 ON (%1.%3 = %2.%4)")
|
||||
.arg(tableName)
|
||||
.arg(joinTableName)
|
||||
.arg(pk)
|
||||
.arg(rel->localColumn);
|
||||
.arg(tableName, joinTableName,
|
||||
pk, rel->localColumn);
|
||||
orderBy = tableName + "." + pk;
|
||||
} else {
|
||||
qWarning("Relation between table %s and class %s (%s) not exists!",
|
||||
|
|
@ -512,7 +490,7 @@ QString SqlGeneratorBase::fromTableText(const QString &tableName,
|
|||
return tableNameText;
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::deleteRecords(QString tableName, QString where)
|
||||
QString SqlGeneratorBase::deleteRecords(const QString &tableName, const QString &where)
|
||||
{
|
||||
QString sql = QString();
|
||||
if (where.isEmpty() || where.isNull())
|
||||
|
|
@ -529,7 +507,7 @@ QString SqlGeneratorBase::selectCommand(const QString &tableName,
|
|||
const PhraseList &fields,
|
||||
const ConditionalPhrase &where,
|
||||
const PhraseList &order,
|
||||
const QList<RelationModel*> joins,
|
||||
const QList<RelationModel*> &joins,
|
||||
const int skip,
|
||||
const int take)
|
||||
{
|
||||
|
|
@ -667,9 +645,7 @@ QString SqlGeneratorBase::insertCommand(const QString &tableName, const Assignme
|
|||
values.append(escapeValue(d->operand));
|
||||
}
|
||||
return QString("INSERT INTO %1 (%2) VALUES (%3);")
|
||||
.arg(tableName)
|
||||
.arg(fieldNames)
|
||||
.arg(values);
|
||||
.arg(tableName, fieldNames, values);
|
||||
}
|
||||
|
||||
//QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t,
|
||||
|
|
@ -962,8 +938,7 @@ void SqlGeneratorBase::appendSkipTake(QString &sql, int skip, int take)
|
|||
QString SqlGeneratorBase::primaryKeyConstraint(const TableModel *table) const
|
||||
{
|
||||
return QString("CONSTRAINT pk_%1 PRIMARY KEY (%2)")
|
||||
.arg(table->name())
|
||||
.arg(table->primaryKey());
|
||||
.arg(table->name(), table->primaryKey());
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const
|
||||
|
|
@ -987,22 +962,22 @@ QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const
|
|||
case PhraseData::WithVariant:
|
||||
if (op == PhraseData::AddYears)
|
||||
ret = QString("DATEADD(year, %1, %2)")
|
||||
.arg(d->operand.toString()).arg(createConditionalPhrase(d->left));
|
||||
.arg(d->operand.toString(), createConditionalPhrase(d->left));
|
||||
else if (op == PhraseData::AddMonths)
|
||||
ret = QString("DATEADD(month, %1, %2)")
|
||||
.arg(d->operand.toString()).arg(createConditionalPhrase(d->left));
|
||||
.arg(d->operand.toString(), createConditionalPhrase(d->left));
|
||||
else if (op == PhraseData::AddDays)
|
||||
ret = QString("DATEADD(day, %1, %2)")
|
||||
.arg(d->operand.toString()).arg(createConditionalPhrase(d->left));
|
||||
.arg(d->operand.toString(), createConditionalPhrase(d->left));
|
||||
else if (op == PhraseData::AddHours)
|
||||
ret = QString("DATEADD(hour, %1, %2)")
|
||||
.arg(d->operand.toString()).arg(createConditionalPhrase(d->left));
|
||||
.arg(d->operand.toString(), createConditionalPhrase(d->left));
|
||||
else if (op == PhraseData::AddMinutes)
|
||||
ret = QString("DATEADD(minute, %1, %2)")
|
||||
.arg(d->operand.toString()).arg(createConditionalPhrase(d->left));
|
||||
.arg(d->operand.toString(), createConditionalPhrase(d->left));
|
||||
else if (op == PhraseData::AddSeconds)
|
||||
ret = QString("DATEADD(second, %1, %2)")
|
||||
.arg(d->operand.toString()).arg(createConditionalPhrase(d->left));
|
||||
.arg(d->operand.toString(), createConditionalPhrase(d->left));
|
||||
else
|
||||
ret = createConditionalPhrase(d->left) + " " + operatorString(op) + " "
|
||||
+ escapeValue(d->operand);
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ public:
|
|||
};
|
||||
|
||||
explicit SqlGeneratorBase(Database *parent);
|
||||
virtual ~SqlGeneratorBase();
|
||||
virtual ~SqlGeneratorBase() = default;
|
||||
|
||||
virtual QString masterDatabaseName(QString databaseName);
|
||||
|
||||
|
|
@ -72,14 +72,14 @@ public:
|
|||
virtual QString fieldDeclare(FieldModel *field);
|
||||
virtual QString relationDeclare(const RelationModel *relation);
|
||||
|
||||
virtual QStringList diff(DatabaseModel lastModel, DatabaseModel newModel);
|
||||
virtual QStringList diff(const DatabaseModel &lastModel, const DatabaseModel &newModel);
|
||||
virtual QString diff(FieldModel *oldField, FieldModel *newField);
|
||||
virtual QString diff(TableModel *oldTable, TableModel *newTable);
|
||||
virtual QString diffRelation(TableModel *oldTable, TableModel *newTable);
|
||||
virtual QString diff(RelationModel *oldRel, RelationModel *newRel);
|
||||
|
||||
virtual QString join(const QString &mainTable,
|
||||
const QList<RelationModel*> list,
|
||||
const QList<RelationModel*> &list,
|
||||
QStringList *order = Q_NULLPTR);
|
||||
virtual QString join(const QStringList &list, QStringList *order = Q_NULLPTR);
|
||||
|
||||
|
|
@ -90,13 +90,13 @@ public:
|
|||
virtual QString insertRecord(Table *t, QString tableName);
|
||||
virtual QString updateRecord(Table *t, QString tableName);
|
||||
virtual QString deleteRecord(Table *t, QString tableName);
|
||||
virtual QString deleteRecords(QString tableName, QString where);
|
||||
virtual QString deleteRecords(const QString &tableName, const QString &where);
|
||||
|
||||
virtual QString selectCommand(const QString &tableName,
|
||||
const PhraseList &fields,
|
||||
const ConditionalPhrase &where,
|
||||
const PhraseList &order,
|
||||
const QList<RelationModel*> joins,
|
||||
const QList<RelationModel *> &joins,
|
||||
const int skip = -1,
|
||||
const int take = -1);
|
||||
|
||||
|
|
|
|||
|
|
@ -31,8 +31,6 @@ SqliteGenerator::SqliteGenerator(Database *parent) : SqlGeneratorBase(parent)
|
|||
|
||||
QString SqliteGenerator::fieldType(FieldModel *field)
|
||||
{
|
||||
QString ret = field->name + " ";
|
||||
QString dbType;
|
||||
if (field->isPrimaryKey) {
|
||||
QString primaryKeyPerfix = " PRIMARY KEY";
|
||||
if (field->isAutoIncrement)
|
||||
|
|
|
|||
|
|
@ -27,18 +27,18 @@ NUT_BEGIN_NAMESPACE
|
|||
PhraseData::PhraseData() :
|
||||
className(""), fieldName(""),
|
||||
type(Field), operatorCond(NotAssign),
|
||||
left(0), right(0), operand(QVariant::Invalid), isNot(false), parents(1)
|
||||
left(nullptr), right(nullptr), operand(QVariant::Invalid), isNot(false), parents(1)
|
||||
{ }
|
||||
|
||||
PhraseData::PhraseData(const char *className, const char *fieldName) :
|
||||
className(className), fieldName(fieldName),
|
||||
type(Field), operatorCond(NotAssign),
|
||||
left(0), right(0), operand(QVariant::Invalid), isNot(false), parents(1)
|
||||
left(nullptr), right(nullptr), operand(QVariant::Invalid), isNot(false), parents(1)
|
||||
{ }
|
||||
|
||||
PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o)
|
||||
: className(0), fieldName(0),
|
||||
type(WithoutOperand), operatorCond(o), left(l), right(0),
|
||||
: className(nullptr), fieldName(nullptr),
|
||||
type(WithoutOperand), operatorCond(o), left(l), right(nullptr),
|
||||
isNot(false), parents(1)
|
||||
{
|
||||
l->parents++;
|
||||
|
|
@ -46,7 +46,7 @@ PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o)
|
|||
|
||||
PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o,
|
||||
PhraseData *r)
|
||||
: className(0), fieldName(0),
|
||||
: className(nullptr), fieldName(nullptr),
|
||||
type(WithOther), operatorCond(o),
|
||||
left(l), right(r),
|
||||
isNot(false), parents(1)
|
||||
|
|
@ -56,9 +56,9 @@ PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o,
|
|||
}
|
||||
|
||||
PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o, QVariant r)
|
||||
: className(0), fieldName(0),
|
||||
: className(nullptr), fieldName(nullptr),
|
||||
type(WithVariant), operatorCond(o), left(l),
|
||||
right(0), operand(r), isNot(false), parents(1)
|
||||
right(nullptr), operand(r), isNot(false), parents(1)
|
||||
{ }
|
||||
|
||||
PhraseData *PhraseData::operator =(PhraseData *other)
|
||||
|
|
@ -75,11 +75,7 @@ PhraseData &PhraseData::operator =(PhraseData &other)
|
|||
|
||||
QString PhraseData::toString() const
|
||||
{
|
||||
return QString("[%1].%2").arg(className).arg(fieldName);
|
||||
}
|
||||
|
||||
PhraseData::~PhraseData()
|
||||
{
|
||||
return QString("[%1].%2").arg(className, fieldName);
|
||||
}
|
||||
|
||||
void PhraseData::cleanUp()
|
||||
|
|
@ -238,10 +234,6 @@ PhraseList::PhraseList(PhraseList *left, const AbstractFieldPhrase *right)
|
|||
incAllDataParents();
|
||||
}
|
||||
|
||||
PhraseList::~PhraseList()
|
||||
{
|
||||
}
|
||||
|
||||
PhraseList &PhraseList::operator =(const PhraseList &other)
|
||||
{
|
||||
data.append(const_cast<PhraseList&>(other).data);
|
||||
|
|
@ -310,11 +302,6 @@ AssignmentPhraseList AssignmentPhrase::operator &(const AssignmentPhrase &other)
|
|||
return AssignmentPhraseList(this, &other);
|
||||
}
|
||||
|
||||
AssignmentPhraseList::AssignmentPhraseList()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AssignmentPhraseList::AssignmentPhraseList(const AssignmentPhrase &l)
|
||||
{
|
||||
data.append(l.data);
|
||||
|
|
@ -366,7 +353,7 @@ void AssignmentPhraseList::incAllDataParents()
|
|||
d->parents++;
|
||||
}
|
||||
|
||||
ConditionalPhrase::ConditionalPhrase() : data(0)
|
||||
ConditionalPhrase::ConditionalPhrase() : data(nullptr)
|
||||
{ }
|
||||
|
||||
ConditionalPhrase::ConditionalPhrase(const ConditionalPhrase &other)
|
||||
|
|
@ -416,7 +403,7 @@ ConditionalPhrase::ConditionalPhrase(AbstractFieldPhrase *l,
|
|||
ConditionalPhrase &r)
|
||||
{
|
||||
data = new PhraseData(l->data, cond, r.data);
|
||||
r.data = 0;
|
||||
r.data = nullptr;
|
||||
}
|
||||
|
||||
ConditionalPhrase::ConditionalPhrase(ConditionalPhrase *l,
|
||||
|
|
@ -424,7 +411,7 @@ ConditionalPhrase::ConditionalPhrase(ConditionalPhrase *l,
|
|||
const AbstractFieldPhrase &r)
|
||||
{
|
||||
data = new PhraseData(l->data, cond, r.data);
|
||||
l->data = 0;
|
||||
l->data = nullptr;
|
||||
}
|
||||
|
||||
ConditionalPhrase::ConditionalPhrase(ConditionalPhrase *l,
|
||||
|
|
@ -432,7 +419,7 @@ ConditionalPhrase::ConditionalPhrase(ConditionalPhrase *l,
|
|||
const QVariant &r)
|
||||
{
|
||||
data = new PhraseData(l->data, cond, r);
|
||||
l->data = 0;
|
||||
l->data = nullptr;
|
||||
}
|
||||
|
||||
ConditionalPhrase::ConditionalPhrase(ConditionalPhrase *l,
|
||||
|
|
@ -440,8 +427,8 @@ ConditionalPhrase::ConditionalPhrase(ConditionalPhrase *l,
|
|||
ConditionalPhrase &r)
|
||||
{
|
||||
data = new PhraseData(l->data, cond, r.data);
|
||||
l->data = 0;
|
||||
r.data = 0;
|
||||
l->data = nullptr;
|
||||
r.data = nullptr;
|
||||
}
|
||||
|
||||
ConditionalPhrase::~ConditionalPhrase()
|
||||
|
|
@ -549,9 +536,9 @@ PhraseDataList::PhraseDataList() : QList<PhraseData*>()
|
|||
|
||||
PhraseDataList::PhraseDataList(const PhraseDataList &other) : QList<PhraseData*>()
|
||||
{
|
||||
PhraseDataList &o = const_cast<PhraseDataList&>(other);
|
||||
PhraseDataList::iterator i;
|
||||
for (i = o.begin(); i != o.end(); ++i)
|
||||
// auto &o = const_cast<PhraseDataList&>(other);
|
||||
PhraseDataList::const_iterator i;
|
||||
for (i = other.constBegin(); i != other.constEnd(); ++i)
|
||||
append(*i);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ public:
|
|||
|
||||
QString toString() const;
|
||||
|
||||
~PhraseData();
|
||||
~PhraseData() = default;
|
||||
|
||||
void cleanUp();
|
||||
private:
|
||||
|
|
@ -135,7 +135,7 @@ class AssignmentPhraseList
|
|||
{
|
||||
public:
|
||||
QList<PhraseData*> data;
|
||||
explicit AssignmentPhraseList();
|
||||
explicit AssignmentPhraseList() = default;
|
||||
AssignmentPhraseList(const AssignmentPhrase &l);
|
||||
AssignmentPhraseList(AssignmentPhraseList *l, const AssignmentPhrase *r);
|
||||
AssignmentPhraseList(AssignmentPhrase *l, const AssignmentPhrase *r);
|
||||
|
|
@ -181,7 +181,7 @@ public:
|
|||
PhraseList(const AbstractFieldPhrase *left, const AbstractFieldPhrase &right);
|
||||
PhraseList(PhraseList *left, PhraseList *right);
|
||||
PhraseList(PhraseList *left, const AbstractFieldPhrase *right);
|
||||
virtual ~PhraseList();
|
||||
virtual ~PhraseList() = default;
|
||||
|
||||
PhraseList &operator =(const PhraseList &other);
|
||||
PhraseList operator |(PhraseList &other);
|
||||
|
|
|
|||
|
|
@ -23,15 +23,11 @@
|
|||
NUT_BEGIN_NAMESPACE
|
||||
|
||||
QueryPrivate::QueryPrivate(QueryBase *parent) : q_ptr(parent),
|
||||
database(0), tableSet(0), skip(-1), take(-1)
|
||||
database(nullptr), tableSet(nullptr), skip(-1), take(-1)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QueryPrivate::~QueryPrivate()
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
* \class Query
|
||||
* \brief This class hold a query. A query can be used for getting database rows, editing or deleting without row fetching.
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class QueryPrivate{
|
|||
|
||||
public:
|
||||
explicit QueryPrivate(QueryBase *parent);
|
||||
~QueryPrivate();
|
||||
~QueryPrivate() = default;
|
||||
|
||||
QString sql;
|
||||
QString className;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,2 @@
|
|||
#include "serializableobject.h"
|
||||
|
||||
SerializableObject::SerializableObject()
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
class SerializableObject
|
||||
{
|
||||
public:
|
||||
SerializableObject();
|
||||
SerializableObject() = default;
|
||||
|
||||
virtual void load(const QVariant &value) = 0;
|
||||
virtual QVariant save() = 0;
|
||||
|
|
|
|||
|
|
@ -85,9 +85,4 @@ QVariant SqlModel::data(const QModelIndex &index, int role) const
|
|||
return QVariant();
|
||||
}
|
||||
|
||||
SqlModelPrivate::SqlModelPrivate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
NUT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ class SqlModelPrivate {
|
|||
SqlModel *q_ptr;
|
||||
Q_DECLARE_PUBLIC(SqlModel)
|
||||
public:
|
||||
explicit SqlModelPrivate();
|
||||
explicit SqlModelPrivate() = default;
|
||||
|
||||
QString tableName;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,10 +39,9 @@ NUT_BEGIN_NAMESPACE
|
|||
* This should be fixed to v1.2
|
||||
*/
|
||||
|
||||
Table::Table(QObject *parent) : QObject(parent), myModel(nullptr), _parentTableSet(nullptr)
|
||||
{
|
||||
setStatus(NewCreated);
|
||||
}
|
||||
Table::Table(QObject *parent) : QObject(parent), myModel(nullptr),
|
||||
_status(NewCreated), _parentTableSet(nullptr)
|
||||
{ }
|
||||
|
||||
void Table::add(TableSetBase *t)
|
||||
{
|
||||
|
|
@ -69,7 +68,7 @@ QVariant Table::primaryValue() const
|
|||
return property(primaryKey().toLatin1().data());
|
||||
}
|
||||
|
||||
void Table::propertyChanged(QString propName)
|
||||
void Table::propertyChanged(const QString &propName)
|
||||
{
|
||||
if (!myModel)
|
||||
myModel = TableModel::findByClassName(metaObject()->className());
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ signals:
|
|||
public slots:
|
||||
|
||||
protected:
|
||||
void propertyChanged(QString propName);
|
||||
void propertyChanged(const QString &propName);
|
||||
|
||||
private:
|
||||
TableModel *myModel;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/**************************************************************************
|
||||
/**************************************************************************
|
||||
**
|
||||
** This file is part of Nut project.
|
||||
** https://github.com/HamedMasafi/Nut
|
||||
|
|
@ -74,7 +74,7 @@ FieldModel *TableModel::field(int n) const
|
|||
return _fields.at(n);
|
||||
}
|
||||
|
||||
FieldModel *TableModel::field(QString name) const
|
||||
FieldModel *TableModel::field(const QString &name) const
|
||||
{
|
||||
foreach (FieldModel *f, _fields)
|
||||
if(f->name == name)
|
||||
|
|
@ -123,7 +123,7 @@ TableModel *TableModel::findByTypeId(int typeId)
|
|||
* @param className
|
||||
* @return
|
||||
*/
|
||||
TableModel *TableModel::findByClassName(QString className)
|
||||
TableModel *TableModel::findByClassName(const QString &className)
|
||||
{
|
||||
foreach (TableModel *model, _allModels){
|
||||
if(model->className() == className)
|
||||
|
|
@ -174,7 +174,7 @@ bool TableModel::operator !=(const TableModel &t) const
|
|||
// }
|
||||
//}
|
||||
|
||||
TableModel::TableModel(int typeId, QString tableName)
|
||||
TableModel::TableModel(int typeId, const QString &tableName)
|
||||
{
|
||||
//TODO: check that
|
||||
// if (findByTypeId(typeId))
|
||||
|
|
@ -203,7 +203,7 @@ TableModel::TableModel(int typeId, QString tableName)
|
|||
}
|
||||
|
||||
if(type == __nut_FIELD){
|
||||
FieldModel *f = new FieldModel;
|
||||
auto *f = new FieldModel;
|
||||
f->name = f->displayName = name;
|
||||
_fields.append(f);
|
||||
}
|
||||
|
|
@ -234,7 +234,7 @@ TableModel::TableModel(int typeId, QString tableName)
|
|||
}
|
||||
|
||||
if(type == __nut_FOREGION_KEY){
|
||||
RelationModel *fk = new RelationModel;
|
||||
auto *fk = new RelationModel;
|
||||
fk->slaveTable = this;
|
||||
fk->localColumn = name + "Id";
|
||||
fk->localProperty = name;
|
||||
|
|
@ -292,7 +292,7 @@ TableModel::TableModel(int typeId, QString tableName)
|
|||
"primary_key": "id"
|
||||
},
|
||||
*/
|
||||
TableModel::TableModel(QJsonObject json, QString tableName)
|
||||
TableModel::TableModel(const QJsonObject &json, const QString &tableName) : _typeId(0)
|
||||
{
|
||||
_name = tableName;
|
||||
|
||||
|
|
@ -300,7 +300,7 @@ TableModel::TableModel(QJsonObject json, QString tableName)
|
|||
QJsonObject relations = json.value(__FOREIGN_KEYS).toObject();
|
||||
foreach (QString key, fields.keys()) {
|
||||
QJsonObject fieldObject = fields.value(key).toObject();
|
||||
FieldModel *f = new FieldModel;
|
||||
auto *f = new FieldModel;
|
||||
f->name = fieldObject.value(__NAME).toString();
|
||||
f->type = static_cast<QMetaType::Type>(QMetaType::type(fieldObject.value(__TYPE).toString().toLatin1().data()));
|
||||
f->typeName = QMetaType::typeName(f->type);
|
||||
|
|
@ -398,8 +398,7 @@ QString TableModel::toString() const
|
|||
sl.append(f->name + " " + QVariant::typeToName(f->type));
|
||||
|
||||
QString ret = QString("%1 (%2)")
|
||||
.arg(_name)
|
||||
.arg(sl.join(", "));
|
||||
.arg(_name, sl.join(", "));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -92,8 +92,8 @@ bool operator !=(const RelationModel &l, const RelationModel &r);
|
|||
class TableModel
|
||||
{
|
||||
public:
|
||||
explicit TableModel(int typeId, QString tableName = QString());
|
||||
explicit TableModel(QJsonObject json, QString tableName);
|
||||
explicit TableModel(int typeId, const QString &tableName = QString());
|
||||
explicit TableModel(const QJsonObject &json, const QString &tableName);
|
||||
virtual ~TableModel();
|
||||
|
||||
QJsonObject toJson() const;
|
||||
|
|
@ -103,7 +103,7 @@ public:
|
|||
// static TableModel* model(QString className);
|
||||
|
||||
FieldModel *field(int n) const;
|
||||
FieldModel *field(QString name) const;
|
||||
FieldModel *field(const QString &name) const;
|
||||
RelationModel *foregionKey(const QString &otherTable) const;
|
||||
RelationModel *foregionKeyByField(const QString &fieldName) const;
|
||||
|
||||
|
|
@ -126,7 +126,7 @@ public:
|
|||
static QSet<TableModel *> allModels();
|
||||
static TableModel *findByTypeId(int typeId);
|
||||
// static TableModel *findByName(QString name);
|
||||
static TableModel *findByClassName(QString className);
|
||||
static TableModel *findByClassName(const QString &className);
|
||||
|
||||
bool operator ==(const TableModel &t) const;
|
||||
bool operator !=(const TableModel &t) const;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#ifndef CONSTS_H
|
||||
#define CONSTS_H
|
||||
|
||||
#define REGISTER(x) qDebug() << #x << "type id:" << qRegisterMetaType<x*>()
|
||||
#define PRINT(x) qDebug() << #x "=" << x;
|
||||
#define REGISTER(x) qDebug() << (#x) << "type id:" << qMetaTypeId<x*>()
|
||||
#define PRINT(x) qDebug() << (#x "=") << (x);
|
||||
#define TIC() QElapsedTimer timer; timer.start()
|
||||
#define TOC() qDebug() << QString("Elapsed time: %1ms for %2") \
|
||||
.arg(timer.elapsed() / 1000.) \
|
||||
|
|
|
|||
|
|
@ -74,14 +74,14 @@ void MainTest::createPost()
|
|||
db.posts()->append(newPost);
|
||||
|
||||
for(int i = 0 ; i < 3; i++){
|
||||
Comment *comment = new Comment;
|
||||
auto *comment = new Comment;
|
||||
comment->setMessage("comment #" + QString::number(i));
|
||||
comment->setSaveDate(QDateTime::currentDateTime());
|
||||
comment->setAuthorId(user->id());
|
||||
newPost->comments()->append(comment);
|
||||
}
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
Score *score = new Score;
|
||||
auto *score = new Score;
|
||||
score->setScore(i % 5);
|
||||
newPost->scores()->append(score);
|
||||
}
|
||||
|
|
@ -106,7 +106,7 @@ void MainTest::createPost2()
|
|||
int postId = postIdVar.toInt();
|
||||
|
||||
for(int i = 0 ; i < 3; i++){
|
||||
Comment *comment = new Comment;
|
||||
auto *comment = new Comment;
|
||||
comment->setMessage("comment #" + QString::number(i + 2));
|
||||
comment->setSaveDate(QDateTime::currentDateTime());
|
||||
comment->setAuthor(user);
|
||||
|
|
|
|||
|
|
@ -16,10 +16,6 @@
|
|||
#include "generators/sqlitegenerator.h"
|
||||
#include "generators/sqlservergenerator.h"
|
||||
|
||||
#define PRINT(x) qDebug() << #x "=" << x;
|
||||
|
||||
#define REGISTER(x) qDebug() << #x << "type id:" << qMetaTypeId<x*>()
|
||||
|
||||
MainTest::MainTest(QObject *parent) : QObject(parent)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue