20 #include <QLoggingCategory>
23 #include <QJsonObject>
27 #include <QtSql/QSqlQuery>
28 #include <QtSql/QSqlError>
29 #include <QtSql/QSqlRecord>
31 Q_LOGGING_CATEGORY(C_SQL,
"cutelyst.utils.sql", QtWarningMsg)
33 using namespace Cutelyst;
35 QVariantHash Sql::queryToHashObject(
QSqlQuery &query)
40 const int columns = record.
count();
41 for (
int i = 0; i < columns; ++i) {
42 ret.insert(record.
fieldName(i), query.value(i));
48 QVariantList Sql::queryToHashList(
QSqlQuery &query)
52 const int columns = record.
count();
54 for (
int i = 0; i < columns; ++i) {
58 while (query.
next()) {
60 for (
int i = 0; i < columns; ++i) {
61 line.insert(cols.
at(i), query.
value(i));
68 QVariantMap Sql::queryToMapObject(
QSqlQuery &query)
73 const int columns = record.
count();
74 for (
int i = 0; i < columns; ++i) {
86 const int columns = record.
count();
87 for (
int i = 0; i < columns; ++i) {
94 QVariantList Sql::queryToMapList(
QSqlQuery &query)
98 const int columns = record.
count();
100 for (
int i = 0; i < columns; ++i) {
104 while (query.
next()) {
106 for (
int i = 0; i < columns; ++i) {
107 line.insert(cols.
at(i), query.
value(i));
118 const int columns = record.
count();
120 for (
int i = 0; i < columns; ++i) {
124 while (query.
next()) {
126 for (
int i = 0; i < columns; ++i) {
134 QVariantList Sql::queryToList(
QSqlQuery &query)
139 while (query.
next()) {
141 for (
int i = 0; i < columns; ++i) {
142 line.append(query.
value(i));
155 while (query.
next()) {
157 for (
int i = 0; i < columns; ++i) {
171 int index = record.
indexOf(key);
173 qCCritical(C_SQL) <<
"Field Name " << key <<
174 " not found in result set";
178 const int columns = record.
count();
181 for (
int i = 0; i < columns; ++i) {
185 while (query.
next()) {
187 for (
int i = 0; i < columns; ++i) {
189 line.insertMulti(cols.
at(i), query.
value(i));
204 int index = record.
indexOf(key);
206 qCCritical(C_SQL) <<
"Field Name " << key <<
207 " not found in result set";
211 const int columns = record.
count();
214 for (
int i = 0; i < columns; ++i) {
218 while (query.
next()) {
220 for (
int i = 0; i < columns; ++i) {
237 if (it.value().isNull()) {
246 if (it.value().isNull()) {
259 sqlQuery.setForwardOnly(forwardOnly);
260 if (!sqlQuery.prepare(query)) {
261 qCCritical(C_SQL) <<
"Failed to prepare query:" << query << sqlQuery.lastError().databaseText();
269 sqlQuery.setForwardOnly(forwardOnly);
270 if (!sqlQuery.prepare(query)) {
271 qCCritical(C_SQL) <<
"Failed to prepare query:" << query << sqlQuery.lastError().databaseText();
286 Sql::Transaction::Transaction(
const QString &databaseName) : m_db(databaseThread(databaseName))
296 Sql::Transaction::~Transaction()
298 if (m_transactionRunning) {
303 bool Sql::Transaction::transaction()
const
305 return m_transactionRunning;
308 bool Sql::Transaction::commit()
311 m_transactionRunning = !m_db.commit();
312 return !m_transactionRunning;
315 bool Sql::Transaction::rollback()
317 m_transactionRunning =
false;
318 return m_db.rollback();
QString fieldName(int index) const
const_iterator constBegin() const
const T & at(int i) const
QSqlDatabase database(const QString &connectionName, bool open)
QJsonValue fromVariant(const QVariant &variant)
void append(const T &value)
QVariant value(int index) const
int indexOf(const QString &name) const
void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)
const_iterator constEnd() const
void append(const QJsonValue &value)
QSqlRecord record() const
QVariant fromValue(const T &value)
QThread * currentThread()
Transaction(const QString &databaseName=QString())
iterator insert(const QString &key, const QJsonValue &value)