10#include <QLoggingCategory>
12#include <QtSql/QSqlError>
13#include <QtSql/QSqlQuery>
14#include <QtSql/QSqlRecord>
16Q_LOGGING_CATEGORY(C_SQL,
"cutelyst.utils.sql", QtWarningMsg)
20QVariantHash Sql::queryToHashObject(
QSqlQuery &query)
25 const int columns = record.
count();
26 for (
int i = 0; i < columns; ++i) {
33QVariantList Sql::queryToHashList(
QSqlQuery &query)
37 const int columns = record.
count();
39 for (
int i = 0; i < columns; ++i) {
43 while (query.
next()) {
45 for (
int i = 0; i < columns; ++i) {
46 line.insert(cols.
at(i), query.
value(i));
53QVariantMap Sql::queryToMapObject(
QSqlQuery &query)
58 const int columns = record.
count();
59 for (
int i = 0; i < columns; ++i) {
71 const int columns = record.
count();
72 for (
int i = 0; i < columns; ++i) {
79QVariantList Sql::queryToMapList(
QSqlQuery &query)
83 const int columns = record.
count();
85 for (
int i = 0; i < columns; ++i) {
89 while (query.
next()) {
91 for (
int i = 0; i < columns; ++i) {
92 line.insert(cols.
at(i), query.
value(i));
103 const int columns = record.
count();
105 for (
int i = 0; i < columns; ++i) {
109 while (query.
next()) {
111 for (
int i = 0; i < columns; ++i) {
119QVariantList Sql::queryToList(
QSqlQuery &query)
124 while (query.
next()) {
126 for (
int i = 0; i < columns; ++i) {
127 line.append(query.
value(i));
140 while (query.
next()) {
142 for (
int i = 0; i < columns; ++i) {
156 int index = record.
indexOf(key);
158 qCCritical(C_SQL) <<
"Field Name " << key <<
" not found in result set";
162 const int columns = record.
count();
165 for (
int i = 0; i < columns; ++i) {
169 while (query.
next()) {
171 for (
int i = 0; i < columns; ++i) {
173 line.insert(cols.
at(i), query.
value(i));
188 int index = record.
indexOf(key);
190 qCCritical(C_SQL) <<
"Field Name " << key <<
" not found in result set";
194 const int columns = record.
count();
197 for (
int i = 0; i < columns; ++i) {
201 while (query.
next()) {
203 for (
int i = 0; i < columns; ++i) {
215void Sql::bindParamsToQuery(
QSqlQuery &query,
219 auto it = params.constBegin();
221 while (it != params.constEnd()) {
222 if (it.value().isNull()) {
225 query.
bindValue(u
':' + it.key(), it.value().toHtmlEscaped());
230 while (it != params.constEnd()) {
231 if (it.value().isNull()) {
234 query.
bindValue(u
':' + it.key(), it.value());
244 sqlQuery.setForwardOnly(forwardOnly);
245 if (!sqlQuery.prepare(query)) {
246 qCCritical(C_SQL) <<
"Failed to prepare query:" << query
247 << sqlQuery.lastError().databaseText();
255 sqlQuery.setForwardOnly(forwardOnly);
256 if (!sqlQuery.prepare(query)) {
257 qCCritical(C_SQL) <<
"Failed to prepare query:" << query
258 << sqlQuery.lastError().databaseText();
274 : m_db(databaseThread(databaseName))
276 m_transactionRunning = m_db.transaction();
285Sql::Transaction::~Transaction()
287 if (m_transactionRunning) {
292bool Sql::Transaction::transaction()
const
294 return m_transactionRunning;
297bool Sql::Transaction::commit()
300 m_transactionRunning = !m_db.commit();
301 return !m_transactionRunning;
304bool Sql::Transaction::rollback()
306 m_transactionRunning =
false;
307 return m_db.rollback();
Transaction(const QString &databaseName=QString())
The Cutelyst namespace holds all public Cutelyst API.
QMultiMap< QString, QString > ParamsMultiMap
void append(const QJsonValue &value)
iterator insert(const QString &key, const QJsonValue &value)
QJsonValue fromVariant(const QVariant &variant)
void append(const T &value)
const T & at(int i) const const
QSqlDatabase database(const QString &connectionName, bool open)
void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)
QSqlRecord record() const const
QVariant value(int index) const const
QString fieldName(int index) const const
int indexOf(const QString &name) const const
QThread * currentThread()
QVariant fromValue(const T &value)
QString toString() const const