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);
220 for (
const auto &[key, value] : params.asKeyValueRange()) {
221 if (value.isNull()) {
222 query.bindValue(u
':' + key, {});
224 query.bindValue(u
':' + key, value.toHtmlEscaped());
228 for (
const auto &[key, value] : params.asKeyValueRange()) {
229 if (value.isNull()) {
230 query.bindValue(u
':' + key, {});
232 query.bindValue(u
':' + key, value);
240 QSqlQuery sqlQuery(db);
241 sqlQuery.setForwardOnly(forwardOnly);
242 if (!sqlQuery.prepare(query)) {
243 qCCritical(C_SQL) <<
"Failed to prepare query:" << query
244 << sqlQuery.lastError().databaseText();
252 sqlQuery.setForwardOnly(forwardOnly);
253 if (!sqlQuery.prepare(query)) {
254 qCCritical(C_SQL) <<
"Failed to prepare query:" << query
255 << sqlQuery.lastError().databaseText();
262 return dbName + u
'-' + QThread::currentThread()->objectName();
273 m_transactionRunning = m_db.transaction();
279 m_transactionRunning = m_db.transaction();
284 if (m_transactionRunning) {
285 std::ignore = m_db.rollback();
291 return m_transactionRunning;
297 m_transactionRunning = !m_db.commit();
298 return !m_transactionRunning;
303 m_transactionRunning =
false;
304 return m_db.rollback();
Transaction(const QString &databaseName={})
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 QSqlQuery preparedQuery(const QString &query, QSqlDatabase db=QSqlDatabase(), bool forwardOnly=false)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QSqlQuery preparedQueryThread(const QString &query, const QString &dbName={}, 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 QVariantHash queryToIndexedHash(QSqlQuery &query, const QString &key)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QSqlDatabase databaseThread(const QString &dbName={})
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QString databaseNameThread(const QString &dbName={})
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QJsonArray queryToJsonArray(QSqlQuery &query)
CUTELYST_PLUGIN_UTILS_SQL_EXPORT QJsonObject queryToJsonObject(QSqlQuery &query)
The Cutelyst namespace holds all public Cutelyst API.