mirror of
https://gitlab.com/spaceti-app/integrations/common/server-sdk.git
synced 2026-07-12 10:50:36 +02:00
SQLite with create and insert based on defined struct
This commit is contained in:
parent
995898c00c
commit
d467feb7b9
@ -32,6 +32,7 @@ else:win32:CONFIG(debug, debug|release): LIBS += -L$$SDKDIR/debug/ -lserversdk
|
|||||||
else:unix: LIBS += -L$$SDKDIR/ -lserversdk
|
else:unix: LIBS += -L$$SDKDIR/ -lserversdk
|
||||||
|
|
||||||
QT += network sql
|
QT += network sql
|
||||||
|
CONFIG += c++14
|
||||||
|
|
||||||
INCLUDEPATH += $$shell_quote($$PWD/src/)
|
INCLUDEPATH += $$shell_quote($$PWD/src/)
|
||||||
DEPENDPATH += $$shell_quote($$PWD/src/serversdk)
|
DEPENDPATH += $$shell_quote($$PWD/src/serversdk)
|
||||||
|
|||||||
@ -72,21 +72,55 @@ void DatabaseManager::close()
|
|||||||
mDatabase.close();
|
mDatabase.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DatabaseManager::executeQuery(QSqlQuery &query)
|
QSqlQuery DatabaseManager::execPlainSql(const QString &sqlText)
|
||||||
{
|
{
|
||||||
if (mDryMode){
|
QSqlQuery query(mDatabase);
|
||||||
QString sqlStatement = getLastQuery(query);
|
return executeQuery(query, sqlText);
|
||||||
qDebug() << sqlStatement;
|
}
|
||||||
|
|
||||||
|
QSqlQuery DatabaseManager::executeQuery(QSqlQuery &query, const QString &sqlText)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Get correct SQL statement and correct isSelect
|
||||||
|
// Need for output correct SQL command
|
||||||
|
// isSelect is needed for correct bahaviour of 'dryMode' only select should be executed
|
||||||
|
QString sqlStatement = sqlText;
|
||||||
|
bool isSelect = false;
|
||||||
|
if ( sqlText.isEmpty()) {
|
||||||
|
sqlStatement = getLastQuery(query);
|
||||||
|
isSelect = query.isSelect();
|
||||||
|
} else {
|
||||||
|
if (sqlText.startsWith("SELECT", Qt::CaseInsensitive)) {
|
||||||
|
isSelect = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!mDryMode || query.isSelect()){
|
|
||||||
if (!query.exec()){
|
if (mDryMode) {
|
||||||
QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text());
|
qCInfo(sdkdb) << "SQL statement: " << sqlStatement;
|
||||||
log(QString(msg));
|
|
||||||
emit error();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
|
// Execute only SELECT statement or when not drymode
|
||||||
|
if ( isSelect || !mDryMode ) {
|
||||||
|
int res = false;
|
||||||
|
if ( ! sqlText.isEmpty()) { // prepared statement.
|
||||||
|
res = query.exec(sqlText);
|
||||||
|
return processResult(res, query);
|
||||||
|
} else {
|
||||||
|
res = query.exec();
|
||||||
|
return processResult(res, query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSqlQuery DatabaseManager::processResult(int res, const QSqlQuery &query) const
|
||||||
|
{
|
||||||
|
if ( !res ) {
|
||||||
|
QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text());
|
||||||
|
qCWarning(sdkdb) << msg;
|
||||||
|
log(msg);
|
||||||
|
}
|
||||||
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DatabaseManager::getLastQuery(const QSqlQuery& query) const
|
QString DatabaseManager::getLastQuery(const QSqlQuery& query) const
|
||||||
@ -104,6 +138,24 @@ QString DatabaseManager::getLastQuery(const QSqlQuery& query) const
|
|||||||
void DatabaseManager::log(const QString &msg) const
|
void DatabaseManager::log(const QString &msg) const
|
||||||
{
|
{
|
||||||
qDebug() << "database logger implement logger";
|
qDebug() << "database logger implement logger";
|
||||||
|
qDebug() << msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DatabaseManager::dryMode() const
|
||||||
|
{
|
||||||
|
return mDryMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseManager::setDryMode(bool dryMode)
|
||||||
|
{
|
||||||
|
mDryMode = dryMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSqlDatabase DatabaseManager::database() const
|
||||||
|
{
|
||||||
|
Q_ASSERT(mDatabase.isValid());
|
||||||
|
Q_ASSERT(mDatabase.isOpen());
|
||||||
|
return mDatabase;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // core
|
} // core
|
||||||
|
|||||||
@ -21,13 +21,24 @@ public:
|
|||||||
DatabaseManager(const QString& host, const QString& dbName, const QString& user, const QString& password, bool mDryMode = false);
|
DatabaseManager(const QString& host, const QString& dbName, const QString& user, const QString& password, bool mDryMode = false);
|
||||||
~DatabaseManager();
|
~DatabaseManager();
|
||||||
|
|
||||||
|
// Attributes
|
||||||
|
bool dryMode() const;
|
||||||
|
void setDryMode(bool dryMode);
|
||||||
|
|
||||||
|
|
||||||
bool openSQLite(const QString &path, const QString &connectionName = QStringLiteral("qt_sql_default_connection"));
|
bool openSQLite(const QString &path, const QString &connectionName = QStringLiteral("qt_sql_default_connection"));
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
bool isOpen() const;
|
bool isOpen() const;
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
|
// SQL handling
|
||||||
|
QSqlQuery execPlainSql(const QString &sqlText);
|
||||||
|
QSqlQuery executeQuery(QSqlQuery &query, const QString &sqlText = QString());
|
||||||
|
QSqlDatabase database() const;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool executeQuery(QSqlQuery &query);
|
QSqlQuery processResult(int res, const QSqlQuery &query) const;
|
||||||
QString getLastQuery(const QSqlQuery &query) const;
|
QString getLastQuery(const QSqlQuery &query) const;
|
||||||
|
|
||||||
void log(const QString &msg) const;
|
void log(const QString &msg) const;
|
||||||
|
|||||||
@ -12,12 +12,11 @@ DatabaseTable::DatabaseTable(QObject *parent) : QObject(parent)
|
|||||||
|
|
||||||
|
|
||||||
/** Creates universal variant structure to hold key / value pairs */
|
/** Creates universal variant structure to hold key / value pairs */
|
||||||
QVariantMap DatabaseTable::toVariantMap()
|
QVariantMap DatabaseTable::toVariantMap() const
|
||||||
{
|
{
|
||||||
QVariantMap variantMap;
|
QVariantMap variantMap;
|
||||||
|
|
||||||
const QMetaObject *metaObj = this->metaObject();
|
const QMetaObject *metaObj = this->metaObject();
|
||||||
qDebug() << "properties: ";
|
|
||||||
for (int i = metaObj->propertyOffset(); i < metaObj->propertyCount(); ++i) {
|
for (int i = metaObj->propertyOffset(); i < metaObj->propertyCount(); ++i) {
|
||||||
QMetaProperty prop = metaObj->property(i);
|
QMetaProperty prop = metaObj->property(i);
|
||||||
// Skip non USER so -> ( Q_PROPERTY( ...... USER false ) only
|
// Skip non USER so -> ( Q_PROPERTY( ...... USER false ) only
|
||||||
@ -35,26 +34,6 @@ QVariantMap DatabaseTable::toVariantMap()
|
|||||||
return variantMap;
|
return variantMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DatabaseTable::createTableSQL() const
|
|
||||||
{
|
|
||||||
QString sql = QString("CREATE TABLE %1").arg(this->metaObject()->className());
|
|
||||||
|
|
||||||
QVariantMap variantMap;
|
|
||||||
|
|
||||||
const QMetaObject *metaObj = this->metaObject();
|
|
||||||
qDebug() << "properties: ";
|
|
||||||
for (int i = metaObj->propertyOffset(); i < metaObj->propertyCount(); ++i) {
|
|
||||||
QMetaProperty prop = metaObj->property(i);
|
|
||||||
// Skip non USER so -> ( Q_PROPERTY( ...... USER false ) only
|
|
||||||
if (!prop.isUser())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
QString name = prop.name();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -27,13 +27,8 @@ class DatabaseTable : public QObject
|
|||||||
TABLE_PROPERTY(QString, name, setName, QString());
|
TABLE_PROPERTY(QString, name, setName, QString());
|
||||||
public:
|
public:
|
||||||
explicit DatabaseTable(QObject *parent = nullptr);
|
explicit DatabaseTable(QObject *parent = nullptr);
|
||||||
QVariantMap toVariantMap();
|
QVariantMap toVariantMap() const;
|
||||||
QString createTableSQL() const;
|
|
||||||
|
|
||||||
|
|
||||||
signals:
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace serversdk
|
} // namespace serversdk
|
||||||
|
|||||||
@ -1,8 +1,10 @@
|
|||||||
#include "databaseutils.h"
|
#include "databaseutils.h"
|
||||||
|
#include "databasemanager.h"
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
|
|
||||||
#include <QMetaProperty>
|
#include <QMetaProperty>
|
||||||
|
|
||||||
|
|
||||||
namespace serversdk {
|
namespace serversdk {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,21 +28,23 @@ namespace serversdk {
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
DatabaseUtils::DatabaseUtils(const QString type)
|
DatabaseUtils::DatabaseUtils(DatabaseManager *manager, const QString type)
|
||||||
: mSqlType(type)
|
: mDatabaseManager(manager), mSqlType(type)
|
||||||
{
|
{
|
||||||
|
Q_ASSERT(mDatabaseManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DatabaseUtils::createTableSQL(const DatabaseTable *table, const QString tableName) const
|
|
||||||
|
QString DatabaseUtils::createTableText(const DatabaseTable *table, const QString table_name) const
|
||||||
{
|
{
|
||||||
QString userData;
|
QString userData;
|
||||||
|
|
||||||
if (tableName.isEmpty())
|
if (table_name.isEmpty()) {
|
||||||
return QString();
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
// out: "CREATE TABLE colnod_subject ( "
|
// out: "CREATE TABLE colnod_subject ( "
|
||||||
QString sql = QString("CREATE TABLE %1 ( ").arg(tableName);
|
QString sql = QString("CREATE TABLE %1 ( ").arg(table_name);
|
||||||
|
|
||||||
const QMetaObject *metaObj = table->metaObject();
|
const QMetaObject *metaObj = table->metaObject();
|
||||||
int total = metaObj->propertyCount();
|
int total = metaObj->propertyCount();
|
||||||
@ -97,6 +101,45 @@ QString DatabaseUtils::createTableSQL(const DatabaseTable *table, const QString
|
|||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSqlQuery DatabaseUtils::createTable(const DatabaseTable *table, const QString tableName) const
|
||||||
|
{
|
||||||
|
// CREATE TABLE ...
|
||||||
|
QString sql = createTableText(table, tableName);
|
||||||
|
return mDatabaseManager->execPlainSql(sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QSqlQuery DatabaseUtils::insertIntoTable(const DatabaseTable *table, const QString table_name) const
|
||||||
|
{
|
||||||
|
QString columns;
|
||||||
|
QString values;
|
||||||
|
|
||||||
|
QVariantMap valueMap = table->toVariantMap();
|
||||||
|
|
||||||
|
|
||||||
|
auto keys = valueMap.keys();
|
||||||
|
for (auto key : keys) {
|
||||||
|
if (!columns.isEmpty()) {
|
||||||
|
columns += ", ";
|
||||||
|
values += ", ";
|
||||||
|
}
|
||||||
|
columns += key;
|
||||||
|
values += ":" + key;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSqlQuery query(mDatabaseManager->database());
|
||||||
|
QString queryText = QString("INSERT OR IGNORE INTO %1 ( %2 ) VALUES ( %3 );").arg(table_name).arg(columns).arg(values);
|
||||||
|
query.prepare(queryText);
|
||||||
|
|
||||||
|
for (auto key : keys ) {
|
||||||
|
auto value = valueMap.value(key);
|
||||||
|
query.bindValue(":"+key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSqlQuery res = mDatabaseManager->executeQuery(query);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
QString DatabaseUtils::sqlType() const
|
QString DatabaseUtils::sqlType() const
|
||||||
{
|
{
|
||||||
return mSqlType;
|
return mSqlType;
|
||||||
@ -107,6 +150,7 @@ void DatabaseUtils::setSqlType(const QString &sqlType)
|
|||||||
mSqlType = sqlType;
|
mSqlType = sqlType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString DatabaseUtils::textSQLIteType(QVariant::Type type) const
|
QString DatabaseUtils::textSQLIteType(QVariant::Type type) const
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
|||||||
@ -1,24 +1,38 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
#include "databasetable.h"
|
#include "databasetable.h"
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QSqlQuery>
|
||||||
|
|
||||||
|
class DatabaseUtilsTest;
|
||||||
|
|
||||||
namespace serversdk {
|
namespace serversdk {
|
||||||
|
|
||||||
|
|
||||||
|
class DatabaseManager;
|
||||||
|
|
||||||
class DatabaseUtils : public QObject
|
class DatabaseUtils : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
friend class ::DatabaseUtilsTest;
|
||||||
public:
|
public:
|
||||||
explicit DatabaseUtils(const QString type = "SQLITE");
|
explicit DatabaseUtils(DatabaseManager *manager = nullptr, const QString type = "SQLITE");
|
||||||
QString createTableSQL(const DatabaseTable *table, const QString table_name) const;
|
|
||||||
|
QSqlQuery createTable(const DatabaseTable *table, const QString table_name) const;
|
||||||
|
|
||||||
|
QSqlQuery insertIntoTable(const DatabaseTable *table, const QString table_name) const;
|
||||||
|
|
||||||
QString sqlType() const;
|
QString sqlType() const;
|
||||||
void setSqlType(const QString &sqlType);
|
void setSqlType(const QString &sqlType);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QString createTableText(const DatabaseTable *table, const QString table_name) const;
|
||||||
|
|
||||||
|
|
||||||
QString textSQLIteType(QVariant::Type type) const;
|
QString textSQLIteType(QVariant::Type type) const;
|
||||||
private:
|
private:
|
||||||
|
DatabaseManager *mDatabaseManager = nullptr;
|
||||||
QString mSqlType;
|
QString mSqlType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,12 +6,15 @@
|
|||||||
|
|
||||||
namespace serversdk {
|
namespace serversdk {
|
||||||
|
|
||||||
|
Request::Request(QString type, QString url, QByteArray requestData)
|
||||||
|
: mType(type), mUrl(url), mRequestData(requestData)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
Request::~Request()
|
Request::~Request()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QNetworkRequest Request::networkRequest() const
|
QNetworkRequest Request::networkRequest() const
|
||||||
{
|
{
|
||||||
QNetworkRequest request(QUrl(this->mUrl));
|
QNetworkRequest request(QUrl(this->mUrl));
|
||||||
@ -39,6 +42,16 @@ void Request::appendData(const QByteArray &array)
|
|||||||
mResponseData += array;
|
mResponseData += array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Request::type() const
|
||||||
|
{
|
||||||
|
return mType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Request::setType(const QString &type)
|
||||||
|
{
|
||||||
|
mType = type;
|
||||||
|
}
|
||||||
|
|
||||||
QString Request::url() const
|
QString Request::url() const
|
||||||
{
|
{
|
||||||
return mUrl;
|
return mUrl;
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
namespace serversdk {
|
namespace serversdk {
|
||||||
|
|
||||||
@ -12,7 +13,7 @@ class Request : public QObject {
|
|||||||
public:
|
public:
|
||||||
Request() = default;
|
Request() = default;
|
||||||
~Request() override;
|
~Request() override;
|
||||||
Request(QString type, QString url, QByteArray responseData = QByteArray());
|
Request(QString type, QString url, QByteArray requestData = QByteArray());
|
||||||
virtual QNetworkRequest networkRequest() const;
|
virtual QNetworkRequest networkRequest() const;
|
||||||
|
|
||||||
// Data handling data
|
// Data handling data
|
||||||
@ -23,6 +24,8 @@ public:
|
|||||||
// Attributes
|
// Attributes
|
||||||
QString url() const;
|
QString url() const;
|
||||||
void setUrl(const QString &url);
|
void setUrl(const QString &url);
|
||||||
|
QString type() const;
|
||||||
|
void setType(const QString &type);
|
||||||
|
|
||||||
// Authorization
|
// Authorization
|
||||||
QString userName() const;
|
QString userName() const;
|
||||||
@ -36,6 +39,10 @@ public:
|
|||||||
QString basicAuthorization() const;
|
QString basicAuthorization() const;
|
||||||
QString bearerAuthorization() const;
|
QString bearerAuthorization() const;
|
||||||
|
|
||||||
|
// Additional attributes
|
||||||
|
void logStartTime() { mStartTime = QDateTime::currentDateTime(); }
|
||||||
|
void logFinishTime() { mStartTime = QDateTime::currentDateTime(); }
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Data handling
|
// Data handling
|
||||||
@ -46,7 +53,7 @@ signals:
|
|||||||
void finished();
|
void finished();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString mType; // POST, GET
|
QString mType = "GET"; // POST, GET
|
||||||
QString mUrl;
|
QString mUrl;
|
||||||
|
|
||||||
// Authorization
|
// Authorization
|
||||||
@ -57,6 +64,10 @@ private:
|
|||||||
// Data
|
// Data
|
||||||
QByteArray mRequestData;
|
QByteArray mRequestData;
|
||||||
QByteArray mResponseData;
|
QByteArray mResponseData;
|
||||||
|
|
||||||
|
// Additional attributes
|
||||||
|
QDateTime mStartTime;
|
||||||
|
QDateTime mFinishTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -21,14 +21,30 @@ RequestManager::RequestManager(QObject *parent)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Soap::processRequest
|
* @brief Process request using QNetworkAccessManger
|
||||||
* @param soapRequest
|
*
|
||||||
|
* @param Request
|
||||||
*/
|
*/
|
||||||
void RequestManager::processRequest(const std::shared_ptr<Request>& request)
|
void RequestManager::processRequest(const std::shared_ptr<Request>& request)
|
||||||
{
|
{
|
||||||
QNetworkReply *reply = mNetworkAccessManager.post(request->networkRequest(), request->requestData());
|
QNetworkReply *reply = nullptr;
|
||||||
|
request->logStartTime();
|
||||||
|
|
||||||
|
if (request->type() == "POST") {
|
||||||
|
reply = mNetworkAccessManager.post(request->networkRequest(), request->requestData());
|
||||||
|
} else if (request->type() == "GET") {
|
||||||
|
if ( ! request->responseData().isEmpty()) {
|
||||||
|
qCWarning(sdknetwork) << "Response data is not empty, and you are trying to use get ( not sending any data)";
|
||||||
|
}
|
||||||
|
reply = mNetworkAccessManager.get(request->networkRequest());
|
||||||
|
} else if (request->type() == "PUT") {
|
||||||
|
reply = mNetworkAccessManager.put(request->networkRequest(), request->requestData());
|
||||||
|
} else {
|
||||||
|
qCritical(sdknetwork) << "Using request type:" << request->type() << "is not implemented";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mRequestMap.insert(reply, request);
|
mRequestMap.insert(reply, request);
|
||||||
|
|
||||||
connect(reply, &QNetworkReply::sslErrors, this, &RequestManager::sslErrors);
|
connect(reply, &QNetworkReply::sslErrors, this, &RequestManager::sslErrors);
|
||||||
@ -36,6 +52,7 @@ void RequestManager::processRequest(const std::shared_ptr<Request>& request)
|
|||||||
|
|
||||||
connect(reply, &QNetworkReply::finished, this, [=]() {
|
connect(reply, &QNetworkReply::finished, this, [=]() {
|
||||||
std::shared_ptr<Request> request = mRequestMap.value(reply);
|
std::shared_ptr<Request> request = mRequestMap.value(reply);
|
||||||
|
request->logFinishTime();
|
||||||
mRequestMap.remove(reply);
|
mRequestMap.remove(reply);
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
emit request->finished();
|
emit request->finished();
|
||||||
|
|||||||
@ -5,6 +5,7 @@ namespace serversdk {
|
|||||||
SoapRequest::SoapRequest(QString action, QString endpoint, QByteArray data)
|
SoapRequest::SoapRequest(QString action, QString endpoint, QByteArray data)
|
||||||
: mSoapAction(action)
|
: mSoapAction(action)
|
||||||
{
|
{
|
||||||
|
setType("POST");
|
||||||
setUrl(endpoint);
|
setUrl(endpoint);
|
||||||
setRequestData(data);
|
setRequestData(data);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
#include "serversdk/databasemanager.h"
|
||||||
#include "serversdk/databaseutils.h"
|
#include "serversdk/databaseutils.h"
|
||||||
#include "serversdk/databasetable.h"
|
#include "serversdk/databasetable.h"
|
||||||
|
|
||||||
@ -48,8 +49,9 @@ void DatabaseUtilsTest::createTable_test()
|
|||||||
{
|
{
|
||||||
auto table = std::make_unique<BookTable>();
|
auto table = std::make_unique<BookTable>();
|
||||||
|
|
||||||
serversdk::DatabaseUtils utils;
|
auto db = std::make_unique<serversdk::DatabaseManager>();
|
||||||
QString sql = utils.createTableSQL(table.get(), "subjects");
|
serversdk::DatabaseUtils utils(db.get());
|
||||||
|
QString sql = utils.createTableText(table.get(), "subjects");
|
||||||
|
|
||||||
QString expected = "CREATE TABLE subjects ( "
|
QString expected = "CREATE TABLE subjects ( "
|
||||||
"id TEXT PRIMARY KEY, "
|
"id TEXT PRIMARY KEY, "
|
||||||
|
|||||||
@ -1,8 +1,17 @@
|
|||||||
#include <QtTest>
|
#include <QtTest>
|
||||||
|
|
||||||
#include "serversdk/databasemanager.h"
|
#include "serversdk/databasemanager.h"
|
||||||
|
#include "serversdk/databaseutils.h"
|
||||||
// add necessary includes here
|
// add necessary includes here
|
||||||
|
|
||||||
|
|
||||||
|
class Names : public serversdk::DatabaseTable {
|
||||||
|
Q_OBJECT
|
||||||
|
TABLE_PROPERTY(int, id, set_id, 0);
|
||||||
|
TABLE_PROPERTY(QString, name, set_name, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class SqliteTest : public QObject
|
class SqliteTest : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -13,6 +22,7 @@ public:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void createDb_test();
|
void createDb_test();
|
||||||
|
void createTable_test();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -52,6 +62,47 @@ void SqliteTest::createDb_test()
|
|||||||
Q_ASSERT(!QFileInfo::exists(dbpath));
|
Q_ASSERT(!QFileInfo::exists(dbpath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SqliteTest::createTable_test()
|
||||||
|
{
|
||||||
|
// Prepare temporary path for database
|
||||||
|
QTemporaryDir dir;
|
||||||
|
QString dbpath = dir.path() + "/testdb.sqlite";
|
||||||
|
serversdk::DatabaseManager db;
|
||||||
|
db.openSQLite(dbpath);
|
||||||
|
Q_ASSERT(db.isOpen());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Not correct way
|
||||||
|
auto names = std::make_unique<Names>();
|
||||||
|
|
||||||
|
|
||||||
|
// Creating table
|
||||||
|
serversdk::DatabaseUtils utils(&db);
|
||||||
|
QSqlQuery query = utils.createTable(names.get(), "names");
|
||||||
|
// Q_ASSERT(query.isValid());
|
||||||
|
|
||||||
|
// Inserting into table
|
||||||
|
names->set_id(2);
|
||||||
|
names->set_name("Testname");
|
||||||
|
|
||||||
|
utils.insertIntoTable(names.get(), "names");
|
||||||
|
QSqlQuery insertQuery = utils.insertIntoTable(names.get(), "names");
|
||||||
|
//Q_ASSERT(insertQuery.isValid());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Select from table
|
||||||
|
QSqlQuery selectSQL("SELECT * FROM names");
|
||||||
|
// Q_ASSERT(db.executeQuery(selectSQL));
|
||||||
|
while (selectSQL.next()) {
|
||||||
|
QString value = selectSQL.value(1).toString();
|
||||||
|
qDebug() << "value is" << value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//db.create
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_APPLESS_MAIN(SqliteTest)
|
QTEST_APPLESS_MAIN(SqliteTest)
|
||||||
|
|
||||||
#include "tst_sqlite.moc"
|
#include "tst_sqlite.moc"
|
||||||
|
|||||||
@ -46,15 +46,15 @@ void SoapTest::public_soap_xml()
|
|||||||
{
|
{
|
||||||
QString soapAction = "blz:getBank";
|
QString soapAction = "blz:getBank";
|
||||||
QString endpoint = "http://www.thomas-bayer.com/axis2/services/BLZService";
|
QString endpoint = "http://www.thomas-bayer.com/axis2/services/BLZService";
|
||||||
QString xml = QString("<soapenv:Envelope " \
|
QString xml = QString("<soapenv:Envelope "
|
||||||
"xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " \
|
"xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||||
"xmlns:blz=\"http://thomas-bayer.com/blz/\">" \
|
"xmlns:blz=\"http://thomas-bayer.com/blz/\">"
|
||||||
"<soapenv:Header/>" \
|
"<soapenv:Header/>"
|
||||||
" <soapenv:Body>" \
|
" <soapenv:Body>"
|
||||||
" <blz:getBank>" \
|
" <blz:getBank>"
|
||||||
" <blz:blz>%1</blz:blz>" \
|
" <blz:blz>%1</blz:blz>"
|
||||||
" </blz:getBank>" \
|
" </blz:getBank>"
|
||||||
"</soapenv:Body>" \
|
"</soapenv:Body>"
|
||||||
"</soapenv:Envelope>").arg("10020200");
|
"</soapenv:Envelope>").arg("10020200");
|
||||||
|
|
||||||
QByteArray xmlRequest = xml.toUtf8();
|
QByteArray xmlRequest = xml.toUtf8();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user