Skip to content

Commit 13fd64c

Browse files
author
Bernhard Stöcker
committed
various updates
1 parent 9010b5d commit 13fd64c

9 files changed

+158
-63
lines changed

SqlUtil4.pro

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
2626

2727
SOURCES += \
2828
firebirdsqlquery.cpp \
29+
mysqlquery.cpp \
2930
pgsqlquery.cpp \
3031
sqlcon.cpp \
3132
exception/sqlexception.cpp \
@@ -35,6 +36,7 @@ SOURCES += \
3536

3637
HEADERS += \
3738
firebirdsqlquery.h \
39+
mysqlquery.h \
3840
pgsqlquery.h \
3941
sqlitesqlquery.h \
4042
sqlquery.h \

exception/sqlexception.cpp

+5-9
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,22 @@ QString SqlUtil4::SqlException::getLogString() const
1717
if(line>0) {
1818
return QStringLiteral("query: %1, message: %2, file: %3 in line %4").arg(query, msg,file,QString::number(line));
1919
}
20-
return msg;
20+
return QStringLiteral("query: %1, message: %2").arg(query,msg);
2121
}
2222

2323
SqlUtil4::SqlException::SqlException(const QString &errorCode, const QString &error,
2424
const QString &query, const QString & sourcefile, int sourceline)
25-
: QtException(error,sourcefile,sourceline)
25+
: QtException(error,sourcefile,sourceline),errorCode(errorCode),query(query)
2626
{
27-
this->errorCode= errorCode;
28-
this->query = query;
2927
}
3028

31-
SqlUtil4::SqlException::SqlException(const QString & errorCode,const QString&error,const QString&query) : QtException(error)
29+
SqlUtil4::SqlException::SqlException(const QString & errorCode,const QString&error,const QString&query)
30+
: QtException(error),errorCode(errorCode),query(query)
3231
{
33-
this->errorCode= errorCode;
34-
this->query = query;
3532
}
3633

37-
SqlUtil4::SqlException::SqlException(const QString & errorCode, const QString &error) : QtException(error)
34+
SqlUtil4::SqlException::SqlException(const QString & errorCode, const QString &error) : QtException(error),errorCode(errorCode)
3835
{
39-
this->errorCode= errorCode;
4036
}
4137

4238

exception/sqlexception.h

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ private: QString query;
1414
SqlException(const QString & errorCode, const QString&error,const QString&query,const QString&file, int line);
1515
SqlException(const QString & errorCode, const QString&error,const QString&query);
1616
SqlException(const QString & errorCode, const QString&error) ;
17+
virtual ~SqlException()=default;
1718
const QString & getErrorCode();
1819
QString getQuery() const;
1920
void setQuery(const QString &value);

mysqlquery.cpp

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include "mysqlquery.h"
2+
using namespace SqlUtil4;
3+
4+
MySqlQuery::MySqlQuery():SqlQuery( )
5+
{
6+
7+
}
8+
9+
10+
QString MySqlQuery::toString()
11+
{
12+
QString query;
13+
if (!selectFields.isEmpty()) {
14+
query += QStringLiteral("SELECT %1 FROM %2").arg(selectFields, fromTable);
15+
} else if (!deleteFromTable.isEmpty()) {
16+
query+= QStringLiteral("DELETE FROM %1").arg(deleteFromTable);
17+
}
18+
19+
for(int i=0;i<joinTables.size();i++) {
20+
query+=joinTables.at(i);
21+
}
22+
23+
if (!conditions.empty()) {
24+
query+= QStringLiteral(" WHERE ");
25+
26+
27+
for(const QString &cond: conditions) {
28+
query += cond;
29+
}
30+
}
31+
32+
if(!orderByExpression.isEmpty()) {
33+
query += QStringLiteral(" ORDER BY %1").arg(orderByExpression);
34+
}
35+
36+
if (group.size()>0) {
37+
query += QStringLiteral(" GROUP BY %1").arg(group.at(0));
38+
for(int i=1;i<group.size();i++) {
39+
query += QStringLiteral(", %1").arg(group.at(i));
40+
}
41+
}
42+
if (limitResults>0) {
43+
query += QStringLiteral("LIMIT %1").arg( limitResults);
44+
}
45+
return query;
46+
47+
}
48+

mysqlquery.h

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#pragma once
2+
3+
#include "sqlquery.h"
4+
namespace SqlUtil4 {
5+
class SQLUTIL4SHARED_EXPORT MySqlQuery : public SqlQuery
6+
{
7+
public:
8+
MySqlQuery();
9+
~MySqlQuery() = default;
10+
virtual QString toString();
11+
};
12+
13+
}
14+

sqlcon.cpp

+75-43
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55
#include <QVariant>
66
#include <QVector>
77
#include <QSet>
8+
#include <QRegularExpression>
89
#ifdef QT_DEBUG
910
#include <QDebug>
1011
#endif
11-
12+
#include <exception/qtexception.h>
13+
#include <exception/sqlexception.h>
14+
#include <QSqlError>
15+
#include <QSqlDriver>
1216
using namespace SqlUtil4;
1317

1418
QSqlDatabase Sql::connectMySql(const QString &host, const QString &user, const QString &pass,const QString &dbname,const QString &conname , int port)
@@ -142,6 +146,16 @@ QSqlDatabase Sql::connectSqlite(const QString &dbFile,const QString & connection
142146

143147

144148
if(con.open()) {
149+
#ifdef QT_DEBUG
150+
qDebug()<<connectionName;
151+
#endif
152+
//#ifdef QT_DEBUG
153+
// auto q=Sql::query(con,"pragma COMPILE_OPTIONS");
154+
// while(q.next())
155+
// {
156+
// qDebug()<<q.value(0);
157+
// }
158+
//#endif
145159
return con;
146160
} else {
147161
throw SqlException(con.lastError().nativeErrorCode(),
@@ -156,8 +170,8 @@ QSqlQuery Sql::query(const QSqlDatabase & sqlCon, const QString & sql, const QVa
156170
q.addBindValue(param);
157171
if(!q.exec()) {
158172

159-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
160-
sqlCon.driver()->lastError().text(),getDebugString(sql,QVariantList() << param));
173+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
174+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sql,QVariantList() << param));
161175
}
162176
return q;
163177

@@ -173,8 +187,8 @@ QSqlQuery Sql::query(const QSqlDatabase & sqlCon, const QString & sql) {
173187
if(q.prepare(sql)) {
174188
if(!q.exec()) {
175189

176-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
177-
sqlCon.driver()->lastError().text(),sql);
190+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
191+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),sql);
178192
}
179193
return q;
180194

@@ -198,8 +212,8 @@ QSqlQuery Sql::query(const QSqlDatabase & sqlCon, const QString & sql, const QLi
198212
#ifdef QT_DEBUG
199213
qDebug().noquote() << "Error:"+ Sql::getDebugString(sql,params);
200214
#endif
201-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
202-
sqlCon.driver()->lastError().text(),getDebugString(sql, params));
215+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
216+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sql, params));
203217
}
204218
return q;
205219

@@ -215,9 +229,11 @@ void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, const QL
215229
{
216230
#ifdef QT_DEBUG
217231
qDebug().noquote() << sqlCon.lastError().databaseText();
218-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
219-
!sqlCon.lastError().text().isEmpty()? sqlCon.lastError().text():sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, params));
232+
qDebug().noquote() << getDebugString(sqlQuery,params);
220233
#endif
234+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
235+
!q.lastError().text().isEmpty()? q.lastError().text():sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, params));
236+
221237
}
222238
for(int i = 0; i < params.size(); i++) {
223239
q.addBindValue(params.at(i));
@@ -227,10 +243,11 @@ void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, const QL
227243
if(!q.exec()) {
228244
#ifdef QT_DEBUG
229245
qDebug().noquote() << sqlQuery;
230-
qDebug().noquote() << "Error:"+ Sql::getDebugString(sqlQuery,params);
246+
qDebug().noquote() << "Query:"+ Sql::getDebugString(sqlQuery,params);
247+
qDebug().noquote() << "Error:"+q.lastError().text();
231248
#endif
232-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
233-
!sqlCon.lastError().text().isEmpty()? sqlCon.lastError().text():sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, params));
249+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
250+
!q.lastError().text().isEmpty()? q.lastError().text():sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, params));
234251
}
235252
}
236253

@@ -243,8 +260,8 @@ void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, int64_t
243260

244261

245262
if(!res) {
246-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
247-
sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
263+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
264+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
248265
}
249266
}
250267

@@ -257,8 +274,8 @@ void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, int para
257274

258275

259276
if(!res) {
260-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
261-
sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
277+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
278+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
262279
}
263280
}
264281

@@ -271,11 +288,26 @@ void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, const QS
271288

272289

273290
if(!res) {
274-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
275-
sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
291+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
292+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
276293
}
277294
}
278295

296+
void Sql::execute(const QSqlDatabase &sqlCon, const QString &sqlQuery, const QVariant &param)
297+
{
298+
QSqlQuery q(sqlCon);
299+
bool res = q.prepare(sqlQuery);
300+
q.addBindValue(param);
301+
302+
res = res & q.exec();
303+
304+
305+
if(!res) {
306+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
307+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
308+
}
309+
}
310+
279311
void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, double param) {
280312
QSqlQuery q(sqlCon);
281313
bool res = q.prepare(sqlQuery);
@@ -285,8 +317,8 @@ void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, double p
285317

286318

287319
if(!res) {
288-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
289-
sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
320+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
321+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
290322
}
291323
}
292324

@@ -299,8 +331,8 @@ void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, bool par
299331

300332

301333
if(!res) {
302-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
303-
sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
334+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
335+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
304336
}
305337
}
306338

@@ -314,16 +346,16 @@ void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery, float pa
314346

315347

316348
if(!res) {
317-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
318-
sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
349+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
350+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),getDebugString(sqlQuery, QVariantList() << param ));
319351
}
320352
}
321353

322354
void Sql::execute(const QSqlDatabase & sqlCon, const QString &sqlQuery) {
323355
QSqlQuery q(sqlCon);
324356
if(!q.exec(sqlQuery)) {
325-
throwSqlExceptionWithLine(sqlCon.lastError().nativeErrorCode(),
326-
sqlCon.driver()->lastError().text(),sqlQuery);
357+
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(),
358+
!q.lastError().text().isEmpty() ?q.lastError().text() : sqlCon.driver()->lastError().text(),sqlQuery);
327359
}
328360
}
329361

@@ -393,7 +425,7 @@ QSqlRecord Sql::fetchRow(const QSqlDatabase & sqlCon, const QString & sql, const
393425

394426
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(), q.lastError().text(), getDebugString(sql, params ));
395427
}
396-
428+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
397429
QSqlRecord Sql::fetchRow(const QSqlDatabase &sqlCon, const QString &sql, const QVector<int64_t> &params)
398430
{
399431
QSqlQuery q(sqlCon);
@@ -420,7 +452,7 @@ QSqlRecord Sql::fetchRow(const QSqlDatabase &sqlCon, const QString &sql, const Q
420452
}
421453
throwSqlExceptionWithLine(q.lastError().nativeErrorCode(), q.lastError().text(), getDebugString(sql, vparams ));
422454
}
423-
455+
#endif
424456

425457
QSqlRecord Sql::fetchRow(const QSqlDatabase &sqlCon, const QString &sql, const QSet<int64_t> &params)
426458
{
@@ -512,7 +544,7 @@ int Sql::fetchInt(const QSqlDatabase & sqlCon, const QString &sql, const QList<Q
512544
}
513545
return val;
514546
}
515-
547+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
516548
int Sql::fetchInt(const QSqlDatabase &sqlCon, const QString &sql, const QVector<int64_t> &params)
517549
{
518550
bool ok;
@@ -524,7 +556,7 @@ int Sql::fetchInt(const QSqlDatabase &sqlCon, const QString &sql, const QVector<
524556
}
525557
return val;
526558
}
527-
559+
#endif
528560
int Sql::fetchInt(const QSqlDatabase &sqlCon, const QString &sql, const QSet<int64_t> &params)
529561
{
530562
bool ok;
@@ -631,7 +663,7 @@ uint Sql::fetchUInt(const QSqlDatabase &sqlCon, const QString &sql, const QVaria
631663
}
632664
return val;
633665
}
634-
666+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
635667
uint Sql::fetchUInt(const QSqlDatabase &sqlCon, const QString &sql, const QVector<int64_t> &params)
636668
{
637669
bool ok;
@@ -643,7 +675,7 @@ uint Sql::fetchUInt(const QSqlDatabase &sqlCon, const QString &sql, const QVecto
643675
}
644676
return val;
645677
}
646-
678+
#endif
647679

648680
QString Sql::fetchString(const QSqlDatabase & sqlCon, const QString &sql, const QList<QVariant> &params)
649681
{
@@ -678,15 +710,15 @@ int64_t Sql::insert(const QSqlDatabase &sqlCon, const QString &sql, const QList<
678710
}
679711

680712
QString SqlUtil4::Sql::getDebugString(const QString &sql, const QList<QVariant> &params) {
681-
QString result(sql);
682-
for(int i = 0; i < params.size(); i++) {
683-
// qDebug()<<params.at(i).typeName();
684-
QString v = QString(params.at(i).typeName()) != QStringLiteral("QByteArray") ? params.at(i).toString() : QString(params.at(i).toByteArray().toHex());
685-
QRegExp e("^[0-9][0-9]*$");
686-
result.replace(result.indexOf(QChar('?')), 1,
687-
v.isNull() ? QStringLiteral("NULL") : e.exactMatch(v) ? v : QStringLiteral("'") + v + QStringLiteral("'"));
688-
}
689-
return result;
713+
QString result(sql);
714+
for(int i = 0; i < params.size(); i++) {
715+
// qDebug()<<params.at(i).typeName();
716+
QString v = QString(params.at(i).typeName()) != QStringLiteral("QByteArray") ? params.at(i).toString() : QString(params.at(i).toByteArray().toHex());
717+
QRegularExpression e("^[0-9][0-9]*$");
718+
result.replace(result.indexOf(QChar('?')), 1,
719+
v.isNull() ? QStringLiteral("NULL") : e.match(v).hasMatch() ? v : QStringLiteral("'") + v + QStringLiteral("'"));
720+
}
721+
return result;
690722
}
691723

692724

@@ -698,8 +730,8 @@ QString SqlUtil4::Sql::getDebugString(const QString &sql, QList<QPair<QString,QV
698730
for(int i = 0; i < params.size(); i++) {
699731
// qDebug()<<params.at(i).typeName();
700732
QString v = QString(params[i].second.typeName()) != QStringLiteral("QByteArray") ? params[i].second.toString() : QString(params[i].second.toByteArray().toHex());
701-
QRegExp e("^[0-9][0-9]*$");
702-
result.replace(":"+params[i].first, v.isNull() ? QStringLiteral("NULL") : e.exactMatch(v) ? v : QStringLiteral("'") + v + QStringLiteral("'"));
733+
QRegularExpression e("^[0-9][0-9]*$");
734+
result.replace(":"+params[i].first, v.isNull() ? QStringLiteral("NULL") :e.match(v).hasMatch() ? v : QStringLiteral("'") + v + QStringLiteral("'"));
703735
}
704736
return result;
705737
}

0 commit comments

Comments
 (0)