10#include <QLoggingCategory>
12#include <QtSql/QSqlError>
13#include <QtSql/QSqlQuery>
14#include <QtSql/QSqlRecord>
16Q_LOGGING_CATEGORY(C_SQL,
"cutelyst.utils.sql", QtWarningMsg)
24 const QSqlRecord record = query.record();
25 const int columns = record.count();
26 for (
int i = 0; i < columns; ++i) {
27 ret.insert(record.fieldName(i), query.value(i));
36 const QSqlRecord record = query.record();
37 const int columns = record.count();
39 for (
int i = 0; i < columns; ++i) {
40 cols.append(record.fieldName(i));
43 while (query.next()) {
45 for (
int i = 0; i < columns; ++i) {
46 line.insert(cols.at(i), query.value(i));
57 const QSqlRecord record = query.record();
58 const int columns = record.count();
59 for (
int i = 0; i < columns; ++i) {
60 ret.insert(record.fieldName(i), query.value(i));
70 const QSqlRecord record = query.record();
71 const int columns = record.count();
72 for (
int i = 0; i < columns; ++i) {
73 ret.insert(record.fieldName(i), QJsonValue::fromVariant(query.value(i)));
82 const QSqlRecord record = query.record();
83 const int columns = record.count();
85 for (
int i = 0; i < columns; ++i) {
86 cols.append(record.fieldName(i));
89 while (query.next()) {
91 for (
int i = 0; i < columns; ++i) {
92 line.insert(cols.at(i), query.value(i));
102 const QSqlRecord record = query.record();
103 const int columns = record.count();
105 for (
int i = 0; i < columns; ++i) {
106 cols.append(record.fieldName(i));
109 while (query.next()) {
111 for (
int i = 0; i < columns; ++i) {
112 line.insert(cols.at(i), QJsonValue::fromVariant(query.value(i)));
123 const int columns = query.record().count();
124 while (query.next()) {
126 for (
int i = 0; i < columns; ++i) {
127 line.append(query.value(i));
129 ret.append(QVariant::fromValue(line));
139 const int columns = query.record().count();
140 while (query.next()) {
142 for (
int i = 0; i < columns; ++i) {
143 array.append(QJsonValue::fromVariant(query.value(i)));
155 const QSqlRecord record = query.record();
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) {
166 cols.append(record.fieldName(i));
169 while (query.next()) {
171 for (
int i = 0; i < columns; ++i) {
173 line.insert(cols.at(i), query.value(i));
177 ret.insert(query.value(index).toString(), line);
187 const QSqlRecord record = query.record();
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) {
198 cols.append(record.fieldName(i));
201 while (query.next()) {
203 for (
int i = 0; i < columns; ++i) {
205 obj.insert(cols.at(i), QJsonValue::fromVariant(query.value(i)));
209 ret.insert(query.value(index).toString(), obj);
219 auto it = params.constBegin();
221 while (it != params.constEnd()) {
222 if (it.value().isNull()) {
223 query.bindValue(u
':' + it.key(), QVariant());
225 query.bindValue(u
':' + it.key(), it.value().toHtmlEscaped());
230 while (it != params.constEnd()) {
231 if (it.value().isNull()) {
232 query.bindValue(u
':' + it.key(), QVariant());
234 query.bindValue(u
':' + it.key(), it.value());
243 QSqlQuery sqlQuery(db);
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();
265 return dbName + u
'-' + QThread::currentThread()->objectName();
276 m_transactionRunning = m_db.transaction();
282 m_transactionRunning = m_db.transaction();
287 if (m_transactionRunning) {
294 return m_transactionRunning;
300 m_transactionRunning = !m_db.commit();
301 return !m_transactionRunning;
306 m_transactionRunning =
false;
307 return m_db.rollback();
Transaction(const QString &databaseName=QString())
QMultiMap< QString, QString > ParamsMultiMap
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QVariantList queryToHashList(QSqlQuery &query)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QVariantMap queryToMapObject(QSqlQuery &query)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QVariantHash queryToHashObject(QSqlQuery &query)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT void bindParamsToQuery(QSqlQuery &query, const Cutelyst::ParamsMultiMap ¶ms, bool htmlEscaped=true)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QJsonArray queryToJsonObjectArray(QSqlQuery &query)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QString databaseNameThread(const QString &dbName=QString())
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QSqlQuery preparedQuery(const QString &query, QSqlDatabase db=QSqlDatabase(), bool forwardOnly=false)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QVariantList queryToList(QSqlQuery &query)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QJsonObject queryToIndexedJsonObject(QSqlQuery &query, const QString &key)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QVariantList queryToMapList(QSqlQuery &query)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QSqlDatabase databaseThread(const QString &dbName=QString())
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QVariantHash queryToIndexedHash(QSqlQuery &query, const QString &key)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QJsonArray queryToJsonArray(QSqlQuery &query)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QSqlQuery preparedQueryThread(const QString &query, const QString &dbName=QString(), bool forwardOnly=false)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QJsonObject queryToJsonObject(QSqlQuery &query)
The Cutelyst namespace holds all public Cutelyst API.