diff --git a/libs/sql/sql_query.cpp b/libs/sql/sql_query.cpp index 2f1b2f9..f8164fc 100644 --- a/libs/sql/sql_query.cpp +++ b/libs/sql/sql_query.cpp @@ -24,8 +24,10 @@ QAD::SQLQuery::~SQLQuery() {} QAD::SQLQuery::Result QAD::SQLQuery::exec(QString query_, QVariantMap params, QSqlDatabase db) { QAD::SQLQuery::Result ret; QAD::SQLQuery q(query_, params, db); + // qDebug() << query_ << params; if (q.q.exec()) { ret.ok = true; + ret.rows = q.q.numRowsAffected(); ret.insertId = q.q.lastInsertId(); return ret; } @@ -34,6 +36,37 @@ QAD::SQLQuery::Result QAD::SQLQuery::exec(QString query_, QVariantMap params, QS } +QAD::SQLQuery::Result QAD::SQLQuery::insert(QString table, QVariantMap values, QSqlDatabase db) { + QVariantMap params; + QString qi = "INSERT INTO " + table + " (", qp, ph; + QMapIterator it(values); + while (it.hasNext()) { + it.next(); + ph = "v" + it.key(); + qi += it.key(); + qp += ":" + ph; + params[ph] = it.value(); + if (it.hasNext()) { + qi += ","; + qp += ","; + } + } + return exec(qi + ") VALUES (" + qp + ")", params, db); +} + + +QAD::SQLQuery::Result QAD::SQLQuery::remove(QString table, QString filter, QSqlDatabase db) { + QString flt; + if (!filter.isEmpty()) flt = " WHERE "; + return exec("DELETE FROM " + table + flt + filter, {}, db); +} + + +bool QAD::SQLQuery::drop(QString table, QSqlDatabase db) { + return exec("DROP TABLE " + table, {}, db).ok; +} + + void QAD::SQLQuery::setFailHandler(QAD::SQLQuery::HandlerFail h) { Singleton::instance()->fail_handler = h; } diff --git a/libs/sql/sql_query.h b/libs/sql/sql_query.h index 415a071..a8428d7 100644 --- a/libs/sql/sql_query.h +++ b/libs/sql/sql_query.h @@ -35,9 +35,11 @@ public: SQLQuery(QString query_ = QString(), QVariantMap params = QVariantMap(), QSqlDatabase db = QSqlDatabase()); ~SQLQuery(); - struct Result { + struct QAD_SQL_EXPORT Result { bool ok = false; + int rows = 0; QVariant insertId = -1; + operator bool() const { return ok; } }; typedef std::function HandlerFail; @@ -46,6 +48,15 @@ public: static Result exec(QString query_, QVariantMap params = QVariantMap(), QSqlDatabase db = QSqlDatabase()); + /// INSERT INTO () VALUES () + static Result insert(QString table, QVariantMap values = QVariantMap(), QSqlDatabase db = QSqlDatabase()); + + /// DELETE FROM
[WHERE ] + static Result remove(QString table, QString filter = QString(), QSqlDatabase db = QSqlDatabase()); + + /// DROP TABLE
+ static bool drop(QString table, QSqlDatabase db = QSqlDatabase()); + static void setFailHandler(HandlerFail h); protected: