/** * @RDE_HEADER@ * Template for 'real' structures including insert/update/delete functions for db * $Id$ * $HeadURL$ * $Author$ */ // filename: pdm_db_impl.cpp #include "pdm_db_impl.h" #include #include #include #include #include #include #include namespace ProjectDataManagement { QString qVariantToJsonString(const QVariant &value) { return value.isNull() ? QStringLiteral("{}") : value.toString(); } QString fixupEmptyJsonString(const QString &str) { return str.isEmpty() ? QStringLiteral("{}") : str; } // DatabaseInterface std::shared_ptr DatabaseInterface::create(int exerciseId) { return std::make_shared(exerciseId); } DatabaseInterfaceImpl::DatabaseInterfaceImpl(int exerciseId) : m_query(nullptr) , m_exerciseId(exerciseId) , m_bEmitMessageOnError(true) , m_bCanHandleSchemas(true) , m_ownDatabaseConnection(true) , m_logger(getLogger("Db")) {} DatabaseInterfaceImpl::~DatabaseInterfaceImpl() { m_query = nullptr; if (m_ownDatabaseConnection && m_dbConnection.isOpen()) m_dbConnection.close(); } bool DatabaseInterfaceImpl::init(const QSqlDatabase &dbConnection) { m_dbConnection = dbConnection; m_ownDatabaseConnection = false; return initInternal(); } bool DatabaseInterfaceImpl::init(const QString &dbUser, const QString &dbPasswd, const QString &dbDriver, const QString &dbHost, const QString &dbName) { m_ownDatabaseConnection = true; m_dbConnection = DBConnection::open(m_logger, dbUser, dbPasswd, dbDriver, dbHost, dbName, schemaName()); return initInternal(); } bool DatabaseInterfaceImpl::initInternal() { QSqlDriver *driver = m_dbConnection.driver(); if (!driver) { WARNING_LOG(m_logger) << "No SQL driver loaded - no database available!"; return false; } const QString driverName = m_dbConnection.driverName(); DEBUG_LOG(m_logger) << "Connected to database " << m_dbConnection.databaseName() << "@" << m_dbConnection.hostName() << ", schema: " << schemaName() << ", used driver: " << driverName; if (!m_dbConnection.isOpen()) { WARNING_LOG(m_logger) << "Database connection is no open - can not initialize database interface"; return false; } if (driverName == QLatin1String("QSQLITE")) m_bCanHandleSchemas = false; m_query = std::unique_ptr(new NSqlQuery(m_dbConnection, m_logger)); return true; } QString DatabaseInterfaceImpl::schemaName() const { if (!m_bCanHandleSchemas) return QString(); if (m_exerciseId <= 0) return QStringLiteral("pdm"); return DBCommon::getExerciseSchemaName(m_exerciseId); } QString DatabaseInterfaceImpl::dbUser() const { if (m_exerciseId > 0) return QStringLiteral("ets_ex_00"); else return QStringLiteral("ets_") + schemaName(); } void DatabaseInterfaceImpl::setEmitMessageOnError(bool bEmit) { m_bEmitMessageOnError = bEmit; } QString DatabaseInterfaceImpl::getTableName(const QString &tableName) const { if (!m_bCanHandleSchemas) return tableName; if (m_exerciseId > 0) return DBCommon::getExerciseTableName(tableName, m_exerciseId); return QStringLiteral("pdm.") + tableName; } QSqlError DatabaseInterfaceImpl::getLastError() const { return m_lastError; } // // Struct: Database::PdmAvmFrequencyPlanTransmissionReason // bool DatabaseInterfaceImpl::insert(Database::PdmAvmFrequencyPlanTransmissionReason &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmAvmFrequencyPlanTransmissionReason &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmAvmFrequencyPlanTransmissionReason &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmAvmFrequencyPlanTransmissionReason(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmAvmFrequencyPlanTransmissionReason(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmAvmFrequencyPlanTransmissionReason &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmAvmFrequencyPlanTransmissionReason(QString()) && selectFetchInternalPdmAvmFrequencyPlanTransmissionReason(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmAvmFrequencyPlanTransmissionReason(QString()) && selectFetchInternalPdmAvmFrequencyPlanTransmissionReason(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmAvmFrequencyPlanTransmissionReason(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); const QString stmt(QStringLiteral("SELECT id, name" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmAvmFrequencyPlanTransmissionReason(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmAvmFrequencyPlanTransmissionReason data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmAvmFrequencyPlanTransmissionReason(qint32 id, Database::PdmAvmFrequencyPlanTransmissionReason &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmAvmFrequencyPlanTransmissionReason &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmAvmFrequencyPlanTransmissionReason(where) || !selectFetchInternalPdmAvmFrequencyPlanTransmissionReason(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmAvmFrequencyPlanTransmissionReason(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmAvmFrequencyPlanTransmissionReason() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmAvmFrequencyPlanTransmissionReason() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_avm_frequency_plan_transmission_reason"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmAvmFrequencyPlanTransmissionReason end // // Struct: Database::PdmBiteComponentText // bool DatabaseInterfaceImpl::insert(Database::PdmBiteComponentText &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" can_device_id, sub_device_id, error_number, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":can_device_id, :sub_device_id, :error_number, :name )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":error_number"), data.errorNumber); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmBiteComponentText &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" can_device_id, sub_device_id, error_number, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":can_device_id, :sub_device_id, :error_number, :name )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " can_device_id = :can_device_id, sub_device_id = :sub_device_id, error_number = :error_number, name = :name" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":error_number"), data.errorNumber); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmBiteComponentText &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " can_device_id = :can_device_id, sub_device_id = :sub_device_id, error_number = :error_number, name = :name" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":error_number"), data.errorNumber); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" can_device_id, sub_device_id, error_number, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":can_device_id, :sub_device_id, :error_number, :name )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":error_number"), data.errorNumber); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmBiteComponentText(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" can_device_id, sub_device_id, error_number, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":can_device_id, :sub_device_id, :error_number, :name )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " can_device_id = :can_device_id, sub_device_id = :sub_device_id, error_number = :error_number, name = :name" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":error_number"), data.errorNumber); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmBiteComponentText(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " can_device_id = :can_device_id, sub_device_id = :sub_device_id, error_number = :error_number, name = :name" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":error_number"), data.errorNumber); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmBiteComponentText &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmBiteComponentText(QString()) && selectFetchInternalPdmBiteComponentText(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmBiteComponentText(QString()) && selectFetchInternalPdmBiteComponentText(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmBiteComponentText(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); const QString stmt(QStringLiteral("SELECT id, can_device_id, sub_device_id, error_number, name" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmBiteComponentText(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmBiteComponentText data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.canDeviceId = m_query->value(i++).toInt(); data.subDeviceId = m_query->value(i++).toInt(); data.errorNumber = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmBiteComponentText(qint32 id, Database::PdmBiteComponentText &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmBiteComponentText &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmBiteComponentText(where) || !selectFetchInternalPdmBiteComponentText(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmBiteComponentText(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmBiteComponentText() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmBiteComponentText() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_bite_component_text"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmBiteComponentText end // // Struct: Database::PdmBuildingChargeEffect // bool DatabaseInterfaceImpl::insert(Database::PdmBuildingChargeEffect &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, destructive_factor, penetration_factor, hit_sound, difcue_light, difcue_pyro" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :destructive_factor, :penetration_factor, :hit_sound, :difcue_light, :difcue_pyro )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":destructive_factor"), data.destructiveFactor); m_query->bindValue(QStringLiteral(":penetration_factor"), data.penetrationFactor); m_query->bindValue(QStringLiteral(":hit_sound"), data.hitSound); m_query->bindValue(QStringLiteral(":difcue_light"), data.difcueLight); m_query->bindValue(QStringLiteral(":difcue_pyro"), data.difcuePyro); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmBuildingChargeEffect &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, destructive_factor, penetration_factor, hit_sound, difcue_light, difcue_pyro" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :destructive_factor, :penetration_factor, :hit_sound, :difcue_light, :difcue_pyro )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " charge_type_id = :charge_type_id, destructive_factor = :destructive_factor, penetration_factor = :penetration_factor, hit_sound = :hit_sound, difcue_light = :difcue_light, difcue_pyro = :difcue_pyro" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":destructive_factor"), data.destructiveFactor); m_query->bindValue(QStringLiteral(":penetration_factor"), data.penetrationFactor); m_query->bindValue(QStringLiteral(":hit_sound"), data.hitSound); m_query->bindValue(QStringLiteral(":difcue_light"), data.difcueLight); m_query->bindValue(QStringLiteral(":difcue_pyro"), data.difcuePyro); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmBuildingChargeEffect &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " charge_type_id = :charge_type_id, destructive_factor = :destructive_factor, penetration_factor = :penetration_factor, hit_sound = :hit_sound, difcue_light = :difcue_light, difcue_pyro = :difcue_pyro" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":destructive_factor"), data.destructiveFactor); m_query->bindValue(QStringLiteral(":penetration_factor"), data.penetrationFactor); m_query->bindValue(QStringLiteral(":hit_sound"), data.hitSound); m_query->bindValue(QStringLiteral(":difcue_light"), data.difcueLight); m_query->bindValue(QStringLiteral(":difcue_pyro"), data.difcuePyro); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, destructive_factor, penetration_factor, hit_sound, difcue_light, difcue_pyro" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :destructive_factor, :penetration_factor, :hit_sound, :difcue_light, :difcue_pyro )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":destructive_factor"), data.destructiveFactor); m_query->bindValue(QStringLiteral(":penetration_factor"), data.penetrationFactor); m_query->bindValue(QStringLiteral(":hit_sound"), data.hitSound); m_query->bindValue(QStringLiteral(":difcue_light"), data.difcueLight); m_query->bindValue(QStringLiteral(":difcue_pyro"), data.difcuePyro); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmBuildingChargeEffect(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, destructive_factor, penetration_factor, hit_sound, difcue_light, difcue_pyro" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :destructive_factor, :penetration_factor, :hit_sound, :difcue_light, :difcue_pyro )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " charge_type_id = :charge_type_id, destructive_factor = :destructive_factor, penetration_factor = :penetration_factor, hit_sound = :hit_sound, difcue_light = :difcue_light, difcue_pyro = :difcue_pyro" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":destructive_factor"), data.destructiveFactor); m_query->bindValue(QStringLiteral(":penetration_factor"), data.penetrationFactor); m_query->bindValue(QStringLiteral(":hit_sound"), data.hitSound); m_query->bindValue(QStringLiteral(":difcue_light"), data.difcueLight); m_query->bindValue(QStringLiteral(":difcue_pyro"), data.difcuePyro); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmBuildingChargeEffect(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " charge_type_id = :charge_type_id, destructive_factor = :destructive_factor, penetration_factor = :penetration_factor, hit_sound = :hit_sound, difcue_light = :difcue_light, difcue_pyro = :difcue_pyro" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":destructive_factor"), data.destructiveFactor); m_query->bindValue(QStringLiteral(":penetration_factor"), data.penetrationFactor); m_query->bindValue(QStringLiteral(":hit_sound"), data.hitSound); m_query->bindValue(QStringLiteral(":difcue_light"), data.difcueLight); m_query->bindValue(QStringLiteral(":difcue_pyro"), data.difcuePyro); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmBuildingChargeEffect &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmBuildingChargeEffect(QString()) && selectFetchInternalPdmBuildingChargeEffect(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmBuildingChargeEffect(QString()) && selectFetchInternalPdmBuildingChargeEffect(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmBuildingChargeEffect(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); const QString stmt(QStringLiteral("SELECT id, charge_type_id, destructive_factor, penetration_factor, hit_sound, difcue_light, difcue_pyro" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmBuildingChargeEffect(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmBuildingChargeEffect data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.chargeTypeId = m_query->value(i++).toInt(); data.destructiveFactor = m_query->value(i++).toInt(); data.penetrationFactor = m_query->value(i++).toInt(); data.hitSound = m_query->value(i++).toInt(); data.difcueLight = m_query->value(i++).toBool(); data.difcuePyro = m_query->value(i++).toBool(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmBuildingChargeEffect(qint32 id, Database::PdmBuildingChargeEffect &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmBuildingChargeEffect &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmBuildingChargeEffect(where) || !selectFetchInternalPdmBuildingChargeEffect(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmBuildingChargeEffect(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmBuildingChargeEffect() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmBuildingChargeEffect() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_building_charge_effect"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmBuildingChargeEffect end // // Struct: Database::PdmCanComponentString // bool DatabaseInterfaceImpl::insert(Database::PdmCanComponentString &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" bit_mask, can_device_id, sub_device_id, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":bit_mask, :can_device_id, :sub_device_id, :name )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":bit_mask"), data.bitMask); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmCanComponentString &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" bit_mask, can_device_id, sub_device_id, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":bit_mask, :can_device_id, :sub_device_id, :name )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " bit_mask = :bit_mask, can_device_id = :can_device_id, sub_device_id = :sub_device_id, name = :name" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":bit_mask"), data.bitMask); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmCanComponentString &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " bit_mask = :bit_mask, can_device_id = :can_device_id, sub_device_id = :sub_device_id, name = :name" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":bit_mask"), data.bitMask); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" bit_mask, can_device_id, sub_device_id, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":bit_mask, :can_device_id, :sub_device_id, :name )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":bit_mask"), data.bitMask); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmCanComponentString(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" bit_mask, can_device_id, sub_device_id, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":bit_mask, :can_device_id, :sub_device_id, :name )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " bit_mask = :bit_mask, can_device_id = :can_device_id, sub_device_id = :sub_device_id, name = :name" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":bit_mask"), data.bitMask); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmCanComponentString(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " bit_mask = :bit_mask, can_device_id = :can_device_id, sub_device_id = :sub_device_id, name = :name" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":bit_mask"), data.bitMask); m_query->bindValue(QStringLiteral(":can_device_id"), data.canDeviceId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmCanComponentString &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmCanComponentString(QString()) && selectFetchInternalPdmCanComponentString(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmCanComponentString(QString()) && selectFetchInternalPdmCanComponentString(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmCanComponentString(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); const QString stmt(QStringLiteral("SELECT id, bit_mask, can_device_id, sub_device_id, name" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmCanComponentString(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmCanComponentString data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.bitMask = m_query->value(i++).toLongLong(); data.canDeviceId = m_query->value(i++).toInt(); data.subDeviceId = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmCanComponentString(qint32 id, Database::PdmCanComponentString &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmCanComponentString &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmCanComponentString(where) || !selectFetchInternalPdmCanComponentString(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmCanComponentString(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmCanComponentString() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmCanComponentString() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_can_component_string"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmCanComponentString end // // Struct: Database::PdmChargeType // bool DatabaseInterfaceImpl::insert(Database::PdmChargeType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, predefined_name, dis_entity, properties, charge_legacy_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :predefined_name, :dis_entity, :properties, :charge_legacy_id )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":predefined_name"), data.predefinedName); m_query->bindValue(QStringLiteral(":dis_entity"), data.disEntity); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmChargeType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, predefined_name, dis_entity, properties, charge_legacy_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :predefined_name, :dis_entity, :properties, :charge_legacy_id )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, short_name = :short_name, predefined_name = :predefined_name, dis_entity = :dis_entity, properties = :properties, charge_legacy_id = :charge_legacy_id" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":predefined_name"), data.predefinedName); m_query->bindValue(QStringLiteral(":dis_entity"), data.disEntity); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmChargeType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, short_name = :short_name, predefined_name = :predefined_name, dis_entity = :dis_entity, properties = :properties, charge_legacy_id = :charge_legacy_id" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":predefined_name"), data.predefinedName); m_query->bindValue(QStringLiteral(":dis_entity"), data.disEntity); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, predefined_name, dis_entity, properties, charge_legacy_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :predefined_name, :dis_entity, :properties, :charge_legacy_id )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":predefined_name"), data.predefinedName); m_query->bindValue(QStringLiteral(":dis_entity"), data.disEntity); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmChargeType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, predefined_name, dis_entity, properties, charge_legacy_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :predefined_name, :dis_entity, :properties, :charge_legacy_id )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, short_name = :short_name, predefined_name = :predefined_name, dis_entity = :dis_entity, properties = :properties, charge_legacy_id = :charge_legacy_id" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":predefined_name"), data.predefinedName); m_query->bindValue(QStringLiteral(":dis_entity"), data.disEntity); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmChargeType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, short_name = :short_name, predefined_name = :predefined_name, dis_entity = :dis_entity, properties = :properties, charge_legacy_id = :charge_legacy_id" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":predefined_name"), data.predefinedName); m_query->bindValue(QStringLiteral(":dis_entity"), data.disEntity); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmChargeType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmChargeType(QString()) && selectFetchInternalPdmChargeType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmChargeType(QString()) && selectFetchInternalPdmChargeType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmChargeType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); const QString stmt(QStringLiteral("SELECT id, name, short_name, predefined_name, dis_entity, properties, charge_legacy_id" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmChargeType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmChargeType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.shortName = m_query->value(i++).toString(); data.predefinedName = m_query->value(i++).toString(); data.disEntity = m_query->value(i++).toString(); data.properties = qVariantToJsonString(m_query->value(i++)); data.chargeLegacyId = m_query->value(i++).toInt(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmChargeType(qint32 id, Database::PdmChargeType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmChargeType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmChargeType(where) || !selectFetchInternalPdmChargeType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmChargeType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmChargeType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmChargeType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmChargeType end // // Struct: Database::PdmChargeTypeIgniterTypeIgniterFunction // bool DatabaseInterfaceImpl::insert(Database::PdmChargeTypeIgniterTypeIgniterFunction &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, igniter_function_base_id, igniter_type_id, igniter_function_id, impact_area, impact_radius, hazard_distance, charge_legacy_id, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :igniter_function_base_id, :igniter_type_id, :igniter_function_id, :impact_area, :impact_radius, :hazard_distance, :charge_legacy_id, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":igniter_function_base_id"), static_cast(data.igniterFunctionBaseId)); m_query->bindValue(QStringLiteral(":igniter_type_id"), data.igniterTypeId); m_query->bindValue(QStringLiteral(":igniter_function_id"), data.igniterFunctionId); m_query->bindValue(QStringLiteral(":impact_area"), fixupEmptyJsonString(data.impactArea)); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":hazard_distance"), data.hazardDistance); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmChargeTypeIgniterTypeIgniterFunction &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, igniter_function_base_id, igniter_type_id, igniter_function_id, impact_area, impact_radius, hazard_distance, charge_legacy_id, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :igniter_function_base_id, :igniter_type_id, :igniter_function_id, :impact_area, :impact_radius, :hazard_distance, :charge_legacy_id, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " charge_type_id = :charge_type_id, igniter_function_base_id = :igniter_function_base_id, igniter_type_id = :igniter_type_id, igniter_function_id = :igniter_function_id, impact_area = :impact_area, impact_radius = :impact_radius, hazard_distance = :hazard_distance, charge_legacy_id = :charge_legacy_id, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":igniter_function_base_id"), static_cast(data.igniterFunctionBaseId)); m_query->bindValue(QStringLiteral(":igniter_type_id"), data.igniterTypeId); m_query->bindValue(QStringLiteral(":igniter_function_id"), data.igniterFunctionId); m_query->bindValue(QStringLiteral(":impact_area"), fixupEmptyJsonString(data.impactArea)); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":hazard_distance"), data.hazardDistance); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmChargeTypeIgniterTypeIgniterFunction &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " charge_type_id = :charge_type_id, igniter_function_base_id = :igniter_function_base_id, igniter_type_id = :igniter_type_id, igniter_function_id = :igniter_function_id, impact_area = :impact_area, impact_radius = :impact_radius, hazard_distance = :hazard_distance, charge_legacy_id = :charge_legacy_id, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":igniter_function_base_id"), static_cast(data.igniterFunctionBaseId)); m_query->bindValue(QStringLiteral(":igniter_type_id"), data.igniterTypeId); m_query->bindValue(QStringLiteral(":igniter_function_id"), data.igniterFunctionId); m_query->bindValue(QStringLiteral(":impact_area"), fixupEmptyJsonString(data.impactArea)); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":hazard_distance"), data.hazardDistance); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, igniter_function_base_id, igniter_type_id, igniter_function_id, impact_area, impact_radius, hazard_distance, charge_legacy_id, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :igniter_function_base_id, :igniter_type_id, :igniter_function_id, :impact_area, :impact_radius, :hazard_distance, :charge_legacy_id, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":igniter_function_base_id"), static_cast(data.igniterFunctionBaseId)); m_query->bindValue(QStringLiteral(":igniter_type_id"), data.igniterTypeId); m_query->bindValue(QStringLiteral(":igniter_function_id"), data.igniterFunctionId); m_query->bindValue(QStringLiteral(":impact_area"), fixupEmptyJsonString(data.impactArea)); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":hazard_distance"), data.hazardDistance); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmChargeTypeIgniterTypeIgniterFunction(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, igniter_function_base_id, igniter_type_id, igniter_function_id, impact_area, impact_radius, hazard_distance, charge_legacy_id, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :igniter_function_base_id, :igniter_type_id, :igniter_function_id, :impact_area, :impact_radius, :hazard_distance, :charge_legacy_id, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " charge_type_id = :charge_type_id, igniter_function_base_id = :igniter_function_base_id, igniter_type_id = :igniter_type_id, igniter_function_id = :igniter_function_id, impact_area = :impact_area, impact_radius = :impact_radius, hazard_distance = :hazard_distance, charge_legacy_id = :charge_legacy_id, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":igniter_function_base_id"), static_cast(data.igniterFunctionBaseId)); m_query->bindValue(QStringLiteral(":igniter_type_id"), data.igniterTypeId); m_query->bindValue(QStringLiteral(":igniter_function_id"), data.igniterFunctionId); m_query->bindValue(QStringLiteral(":impact_area"), fixupEmptyJsonString(data.impactArea)); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":hazard_distance"), data.hazardDistance); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmChargeTypeIgniterTypeIgniterFunction(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " charge_type_id = :charge_type_id, igniter_function_base_id = :igniter_function_base_id, igniter_type_id = :igniter_type_id, igniter_function_id = :igniter_function_id, impact_area = :impact_area, impact_radius = :impact_radius, hazard_distance = :hazard_distance, charge_legacy_id = :charge_legacy_id, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":igniter_function_base_id"), static_cast(data.igniterFunctionBaseId)); m_query->bindValue(QStringLiteral(":igniter_type_id"), data.igniterTypeId); m_query->bindValue(QStringLiteral(":igniter_function_id"), data.igniterFunctionId); m_query->bindValue(QStringLiteral(":impact_area"), fixupEmptyJsonString(data.impactArea)); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":hazard_distance"), data.hazardDistance); m_query->bindValue(QStringLiteral(":charge_legacy_id"), data.chargeLegacyId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmChargeTypeIgniterTypeIgniterFunction &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmChargeTypeIgniterTypeIgniterFunction(QString()) && selectFetchInternalPdmChargeTypeIgniterTypeIgniterFunction(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmChargeTypeIgniterTypeIgniterFunction(QString()) && selectFetchInternalPdmChargeTypeIgniterTypeIgniterFunction(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmChargeTypeIgniterTypeIgniterFunction(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); const QString stmt(QStringLiteral("SELECT id, charge_type_id, igniter_function_base_id, igniter_type_id, igniter_function_id, impact_area, impact_radius, hazard_distance, charge_legacy_id, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmChargeTypeIgniterTypeIgniterFunction(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmChargeTypeIgniterTypeIgniterFunction data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.chargeTypeId = m_query->value(i++).toInt(); data.igniterFunctionBaseId = static_cast(m_query->value(i++).toInt()); data.igniterTypeId = m_query->value(i++).toInt(); data.igniterFunctionId = m_query->value(i++).toInt(); data.impactArea = qVariantToJsonString(m_query->value(i++)); data.impactRadius = m_query->value(i++).toInt(); data.hazardDistance = m_query->value(i++).toInt(); data.chargeLegacyId = m_query->value(i++).toInt(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmChargeTypeIgniterTypeIgniterFunction(qint32 id, Database::PdmChargeTypeIgniterTypeIgniterFunction &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmChargeTypeIgniterTypeIgniterFunction &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmChargeTypeIgniterTypeIgniterFunction(where) || !selectFetchInternalPdmChargeTypeIgniterTypeIgniterFunction(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmChargeTypeIgniterTypeIgniterFunction(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmChargeTypeIgniterTypeIgniterFunction() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmChargeTypeIgniterTypeIgniterFunction() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type_igniter_type_igniter_function"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmChargeTypeIgniterTypeIgniterFunction end // // Struct: Database::PdmChargeTypeLoadType // bool DatabaseInterfaceImpl::insert(Database::PdmChargeTypeLoadType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, load_type_id, numbers, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :load_type_id, :numbers, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":load_type_id"), data.loadTypeId); m_query->bindValue(QStringLiteral(":numbers"), data.numbers.toPgString()); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmChargeTypeLoadType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, load_type_id, numbers, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :load_type_id, :numbers, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " charge_type_id = :charge_type_id, load_type_id = :load_type_id, numbers = :numbers, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":load_type_id"), data.loadTypeId); m_query->bindValue(QStringLiteral(":numbers"), data.numbers.toPgString()); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmChargeTypeLoadType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " charge_type_id = :charge_type_id, load_type_id = :load_type_id, numbers = :numbers, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":load_type_id"), data.loadTypeId); m_query->bindValue(QStringLiteral(":numbers"), data.numbers.toPgString()); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, load_type_id, numbers, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :load_type_id, :numbers, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":load_type_id"), data.loadTypeId); m_query->bindValue(QStringLiteral(":numbers"), data.numbers.toPgString()); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmChargeTypeLoadType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" charge_type_id, load_type_id, numbers, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":charge_type_id, :load_type_id, :numbers, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " charge_type_id = :charge_type_id, load_type_id = :load_type_id, numbers = :numbers, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":load_type_id"), data.loadTypeId); m_query->bindValue(QStringLiteral(":numbers"), data.numbers.toPgString()); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmChargeTypeLoadType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " charge_type_id = :charge_type_id, load_type_id = :load_type_id, numbers = :numbers, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":load_type_id"), data.loadTypeId); m_query->bindValue(QStringLiteral(":numbers"), data.numbers.toPgString()); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmChargeTypeLoadType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmChargeTypeLoadType(QString()) && selectFetchInternalPdmChargeTypeLoadType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmChargeTypeLoadType(QString()) && selectFetchInternalPdmChargeTypeLoadType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmChargeTypeLoadType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); const QString stmt(QStringLiteral("SELECT id, charge_type_id, load_type_id, numbers, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmChargeTypeLoadType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmChargeTypeLoadType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.chargeTypeId = m_query->value(i++).toInt(); data.loadTypeId = m_query->value(i++).toInt(); data.numbers = LtsUtils::IntArray::fromPgString(m_query->value(i++).toString()); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmChargeTypeLoadType(qint32 id, Database::PdmChargeTypeLoadType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmChargeTypeLoadType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmChargeTypeLoadType(where) || !selectFetchInternalPdmChargeTypeLoadType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmChargeTypeLoadType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmChargeTypeLoadType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmChargeTypeLoadType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_charge_type_load_type"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmChargeTypeLoadType end // // Struct: Database::PdmEquipmentSystemEventFilter // bool DatabaseInterfaceImpl::insert(Database::PdmEquipmentSystemEventFilter &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" equipment_functional_id, sub_device_id, device_specific_code, hgr_mine_search_filter_type_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":equipment_functional_id, :sub_device_id, :device_specific_code, :hgr_mine_search_filter_type_id )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":equipment_functional_id"), data.equipmentFunctionalId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":device_specific_code"), data.deviceSpecificCode); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmEquipmentSystemEventFilter &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" equipment_functional_id, sub_device_id, device_specific_code, hgr_mine_search_filter_type_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":equipment_functional_id, :sub_device_id, :device_specific_code, :hgr_mine_search_filter_type_id )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " equipment_functional_id = :equipment_functional_id, sub_device_id = :sub_device_id, device_specific_code = :device_specific_code, hgr_mine_search_filter_type_id = :hgr_mine_search_filter_type_id" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":equipment_functional_id"), data.equipmentFunctionalId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":device_specific_code"), data.deviceSpecificCode); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmEquipmentSystemEventFilter &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " equipment_functional_id = :equipment_functional_id, sub_device_id = :sub_device_id, device_specific_code = :device_specific_code, hgr_mine_search_filter_type_id = :hgr_mine_search_filter_type_id" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":equipment_functional_id"), data.equipmentFunctionalId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":device_specific_code"), data.deviceSpecificCode); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" equipment_functional_id, sub_device_id, device_specific_code, hgr_mine_search_filter_type_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":equipment_functional_id, :sub_device_id, :device_specific_code, :hgr_mine_search_filter_type_id )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":equipment_functional_id"), data.equipmentFunctionalId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":device_specific_code"), data.deviceSpecificCode); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmEquipmentSystemEventFilter(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" equipment_functional_id, sub_device_id, device_specific_code, hgr_mine_search_filter_type_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":equipment_functional_id, :sub_device_id, :device_specific_code, :hgr_mine_search_filter_type_id )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " equipment_functional_id = :equipment_functional_id, sub_device_id = :sub_device_id, device_specific_code = :device_specific_code, hgr_mine_search_filter_type_id = :hgr_mine_search_filter_type_id" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":equipment_functional_id"), data.equipmentFunctionalId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":device_specific_code"), data.deviceSpecificCode); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmEquipmentSystemEventFilter(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " equipment_functional_id = :equipment_functional_id, sub_device_id = :sub_device_id, device_specific_code = :device_specific_code, hgr_mine_search_filter_type_id = :hgr_mine_search_filter_type_id" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":equipment_functional_id"), data.equipmentFunctionalId); m_query->bindValue(QStringLiteral(":sub_device_id"), data.subDeviceId); m_query->bindValue(QStringLiteral(":device_specific_code"), data.deviceSpecificCode); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmEquipmentSystemEventFilter &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmEquipmentSystemEventFilter(QString()) && selectFetchInternalPdmEquipmentSystemEventFilter(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmEquipmentSystemEventFilter(QString()) && selectFetchInternalPdmEquipmentSystemEventFilter(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmEquipmentSystemEventFilter(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); const QString stmt(QStringLiteral("SELECT id, equipment_functional_id, sub_device_id, device_specific_code, hgr_mine_search_filter_type_id" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmEquipmentSystemEventFilter(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmEquipmentSystemEventFilter data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.equipmentFunctionalId = m_query->value(i++).toInt(); data.subDeviceId = m_query->value(i++).toInt(); data.deviceSpecificCode = m_query->value(i++).toInt(); data.hgrMineSearchFilterTypeId = static_cast(m_query->value(i++).toInt()); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmEquipmentSystemEventFilter(qint32 id, Database::PdmEquipmentSystemEventFilter &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmEquipmentSystemEventFilter &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmEquipmentSystemEventFilter(where) || !selectFetchInternalPdmEquipmentSystemEventFilter(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmEquipmentSystemEventFilter(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmEquipmentSystemEventFilter() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmEquipmentSystemEventFilter() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_equipment_system_event_filter"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmEquipmentSystemEventFilter end // // Struct: Database::PdmEventFilterHgrMineSearch // bool DatabaseInterfaceImpl::insert(Database::PdmEventFilterHgrMineSearch &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" hgr_mine_search_filter_type_id, charge_type_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":hgr_mine_search_filter_type_id, :charge_type_id )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmEventFilterHgrMineSearch &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" hgr_mine_search_filter_type_id, charge_type_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":hgr_mine_search_filter_type_id, :charge_type_id )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " hgr_mine_search_filter_type_id = :hgr_mine_search_filter_type_id, charge_type_id = :charge_type_id" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmEventFilterHgrMineSearch &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " hgr_mine_search_filter_type_id = :hgr_mine_search_filter_type_id, charge_type_id = :charge_type_id" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" hgr_mine_search_filter_type_id, charge_type_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":hgr_mine_search_filter_type_id, :charge_type_id )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmEventFilterHgrMineSearch(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" hgr_mine_search_filter_type_id, charge_type_id" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":hgr_mine_search_filter_type_id, :charge_type_id )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " hgr_mine_search_filter_type_id = :hgr_mine_search_filter_type_id, charge_type_id = :charge_type_id" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmEventFilterHgrMineSearch(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " hgr_mine_search_filter_type_id = :hgr_mine_search_filter_type_id, charge_type_id = :charge_type_id" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":hgr_mine_search_filter_type_id"), static_cast(data.hgrMineSearchFilterTypeId)); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmEventFilterHgrMineSearch &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmEventFilterHgrMineSearch(QString()) && selectFetchInternalPdmEventFilterHgrMineSearch(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmEventFilterHgrMineSearch(QString()) && selectFetchInternalPdmEventFilterHgrMineSearch(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmEventFilterHgrMineSearch(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); const QString stmt(QStringLiteral("SELECT id, hgr_mine_search_filter_type_id, charge_type_id" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmEventFilterHgrMineSearch(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmEventFilterHgrMineSearch data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.hgrMineSearchFilterTypeId = static_cast(m_query->value(i++).toInt()); data.chargeTypeId = m_query->value(i++).toInt(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmEventFilterHgrMineSearch(qint32 id, Database::PdmEventFilterHgrMineSearch &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmEventFilterHgrMineSearch &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmEventFilterHgrMineSearch(where) || !selectFetchInternalPdmEventFilterHgrMineSearch(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmEventFilterHgrMineSearch(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmEventFilterHgrMineSearch() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmEventFilterHgrMineSearch() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_event_filter_hgr_mine_search"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmEventFilterHgrMineSearch end // // Struct: Database::PdmFirePurpose // bool DatabaseInterfaceImpl::insert(Database::PdmFirePurpose &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, description, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :description, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmFirePurpose &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, description, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :description, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, description = :description, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmFirePurpose &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, description = :description, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, description, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :description, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmFirePurpose(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, description, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :description, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, description = :description, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmFirePurpose(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, description = :description, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmFirePurpose &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmFirePurpose(QString()) && selectFetchInternalPdmFirePurpose(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmFirePurpose(QString()) && selectFetchInternalPdmFirePurpose(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmFirePurpose(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); const QString stmt(QStringLiteral("SELECT id, name, description, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmFirePurpose(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmFirePurpose data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.description = m_query->value(i++).toString(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmFirePurpose(qint32 id, Database::PdmFirePurpose &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmFirePurpose &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmFirePurpose(where) || !selectFetchInternalPdmFirePurpose(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmFirePurpose(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmFirePurpose() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmFirePurpose() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_fire_purpose"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmFirePurpose end // // Struct: Database::PdmGearType // bool DatabaseInterfaceImpl::insert(Database::PdmGearType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, gear_class_id, tas_code, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :gear_class_id, :tas_code, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":gear_class_id"), static_cast(data.gearClassId)); m_query->bindValue(QStringLiteral(":tas_code"), data.tasCode); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmGearType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, gear_class_id, tas_code, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :gear_class_id, :tas_code, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, gear_class_id = :gear_class_id, tas_code = :tas_code, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":gear_class_id"), static_cast(data.gearClassId)); m_query->bindValue(QStringLiteral(":tas_code"), data.tasCode); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmGearType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, gear_class_id = :gear_class_id, tas_code = :tas_code, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":gear_class_id"), static_cast(data.gearClassId)); m_query->bindValue(QStringLiteral(":tas_code"), data.tasCode); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, gear_class_id, tas_code, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :gear_class_id, :tas_code, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":gear_class_id"), static_cast(data.gearClassId)); m_query->bindValue(QStringLiteral(":tas_code"), data.tasCode); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmGearType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, gear_class_id, tas_code, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :gear_class_id, :tas_code, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, gear_class_id = :gear_class_id, tas_code = :tas_code, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":gear_class_id"), static_cast(data.gearClassId)); m_query->bindValue(QStringLiteral(":tas_code"), data.tasCode); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmGearType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, gear_class_id = :gear_class_id, tas_code = :tas_code, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":gear_class_id"), static_cast(data.gearClassId)); m_query->bindValue(QStringLiteral(":tas_code"), data.tasCode); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmGearType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmGearType(QString()) && selectFetchInternalPdmGearType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmGearType(QString()) && selectFetchInternalPdmGearType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmGearType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); const QString stmt(QStringLiteral("SELECT id, name, gear_class_id, tas_code, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmGearType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmGearType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.gearClassId = static_cast(m_query->value(i++).toInt()); data.tasCode = m_query->value(i++).toInt(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmGearType(qint32 id, Database::PdmGearType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmGearType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmGearType(where) || !selectFetchInternalPdmGearType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmGearType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmGearType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmGearType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_gear_type"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmGearType end // // Struct: Database::PdmGearTypeChargeType // bool DatabaseInterfaceImpl::insert(Database::PdmGearTypeChargeType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" gear_type_id, charge_type_id, max_range, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":gear_type_id, :charge_type_id, :max_range, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":gear_type_id"), data.gearTypeId); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":max_range"), data.maxRange); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmGearTypeChargeType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" gear_type_id, charge_type_id, max_range, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":gear_type_id, :charge_type_id, :max_range, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " gear_type_id = :gear_type_id, charge_type_id = :charge_type_id, max_range = :max_range, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":gear_type_id"), data.gearTypeId); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":max_range"), data.maxRange); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmGearTypeChargeType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " gear_type_id = :gear_type_id, charge_type_id = :charge_type_id, max_range = :max_range, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":gear_type_id"), data.gearTypeId); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":max_range"), data.maxRange); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" gear_type_id, charge_type_id, max_range, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":gear_type_id, :charge_type_id, :max_range, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":gear_type_id"), data.gearTypeId); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":max_range"), data.maxRange); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmGearTypeChargeType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" gear_type_id, charge_type_id, max_range, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":gear_type_id, :charge_type_id, :max_range, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " gear_type_id = :gear_type_id, charge_type_id = :charge_type_id, max_range = :max_range, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":gear_type_id"), data.gearTypeId); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":max_range"), data.maxRange); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmGearTypeChargeType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " gear_type_id = :gear_type_id, charge_type_id = :charge_type_id, max_range = :max_range, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":gear_type_id"), data.gearTypeId); m_query->bindValue(QStringLiteral(":charge_type_id"), data.chargeTypeId); m_query->bindValue(QStringLiteral(":max_range"), data.maxRange); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmGearTypeChargeType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmGearTypeChargeType(QString()) && selectFetchInternalPdmGearTypeChargeType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmGearTypeChargeType(QString()) && selectFetchInternalPdmGearTypeChargeType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmGearTypeChargeType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); const QString stmt(QStringLiteral("SELECT id, gear_type_id, charge_type_id, max_range, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmGearTypeChargeType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmGearTypeChargeType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.gearTypeId = m_query->value(i++).toInt(); data.chargeTypeId = m_query->value(i++).toInt(); data.maxRange = m_query->value(i++).toInt(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmGearTypeChargeType(qint32 id, Database::PdmGearTypeChargeType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmGearTypeChargeType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmGearTypeChargeType(where) || !selectFetchInternalPdmGearTypeChargeType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmGearTypeChargeType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmGearTypeChargeType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmGearTypeChargeType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_gear_type_charge_type"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmGearTypeChargeType end // // Struct: Database::PdmIgniterFunction // bool DatabaseInterfaceImpl::insert(Database::PdmIgniterFunction &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmIgniterFunction &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmIgniterFunction &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmIgniterFunction(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmIgniterFunction(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmIgniterFunction &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmIgniterFunction(QString()) && selectFetchInternalPdmIgniterFunction(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmIgniterFunction(QString()) && selectFetchInternalPdmIgniterFunction(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmIgniterFunction(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); const QString stmt(QStringLiteral("SELECT id, name, short_name, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmIgniterFunction(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmIgniterFunction data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.shortName = m_query->value(i++).toString(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmIgniterFunction(qint32 id, Database::PdmIgniterFunction &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmIgniterFunction &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmIgniterFunction(where) || !selectFetchInternalPdmIgniterFunction(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmIgniterFunction(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmIgniterFunction() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmIgniterFunction() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_igniter_function"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmIgniterFunction end // // Struct: Database::PdmIgniterType // bool DatabaseInterfaceImpl::insert(Database::PdmIgniterType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmIgniterType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmIgniterType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmIgniterType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmIgniterType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmIgniterType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmIgniterType(QString()) && selectFetchInternalPdmIgniterType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmIgniterType(QString()) && selectFetchInternalPdmIgniterType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmIgniterType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); const QString stmt(QStringLiteral("SELECT id, name, short_name, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmIgniterType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmIgniterType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.shortName = m_query->value(i++).toString(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmIgniterType(qint32 id, Database::PdmIgniterType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmIgniterType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmIgniterType(where) || !selectFetchInternalPdmIgniterType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmIgniterType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmIgniterType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmIgniterType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_igniter_type"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmIgniterType end // // Struct: Database::PdmLanguage // bool DatabaseInterfaceImpl::insert(Database::PdmLanguage &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, iso_code, db_locale" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :iso_code, :db_locale )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":db_locale"), data.dbLocale); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmLanguage &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, iso_code, db_locale" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :iso_code, :db_locale )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, iso_code = :iso_code, db_locale = :db_locale" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":db_locale"), data.dbLocale); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmLanguage &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, iso_code = :iso_code, db_locale = :db_locale" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":db_locale"), data.dbLocale); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, iso_code, db_locale" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :iso_code, :db_locale )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":db_locale"), data.dbLocale); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmLanguage(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, iso_code, db_locale" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :iso_code, :db_locale )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, iso_code = :iso_code, db_locale = :db_locale" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":db_locale"), data.dbLocale); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmLanguage(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, iso_code = :iso_code, db_locale = :db_locale" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":db_locale"), data.dbLocale); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmLanguage &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmLanguage(QString()) && selectFetchInternalPdmLanguage(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmLanguage(QString()) && selectFetchInternalPdmLanguage(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmLanguage(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); const QString stmt(QStringLiteral("SELECT id, name, iso_code, db_locale" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmLanguage(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmLanguage data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.isoCode = m_query->value(i++).toString(); data.dbLocale = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmLanguage(qint32 id, Database::PdmLanguage &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmLanguage &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmLanguage(where) || !selectFetchInternalPdmLanguage(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmLanguage(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmLanguage() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmLanguage() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_language_hmi"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmLanguage end // // Struct: Database::PdmLanguageXdu // bool DatabaseInterfaceImpl::insert(Database::PdmLanguageXdu &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, iso_code" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :iso_code )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmLanguageXdu &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, iso_code" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :iso_code )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, iso_code = :iso_code" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmLanguageXdu &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, iso_code = :iso_code" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, iso_code" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :iso_code )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmLanguageXdu(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, iso_code" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :iso_code )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, iso_code = :iso_code" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmLanguageXdu(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, iso_code = :iso_code" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmLanguageXdu &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmLanguageXdu(QString()) && selectFetchInternalPdmLanguageXdu(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmLanguageXdu(QString()) && selectFetchInternalPdmLanguageXdu(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmLanguageXdu(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); const QString stmt(QStringLiteral("SELECT id, name, iso_code" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmLanguageXdu(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmLanguageXdu data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.isoCode = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmLanguageXdu(qint32 id, Database::PdmLanguageXdu &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmLanguageXdu &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmLanguageXdu(where) || !selectFetchInternalPdmLanguageXdu(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmLanguageXdu(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmLanguageXdu() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmLanguageXdu() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_language_xdu"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmLanguageXdu end // // Struct: Database::PdmLoadType // bool DatabaseInterfaceImpl::insert(Database::PdmLoadType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmLoadType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmLoadType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmLoadType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, short_name, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :short_name, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmLoadType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, short_name = :short_name, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":short_name"), data.shortName); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmLoadType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmLoadType(QString()) && selectFetchInternalPdmLoadType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmLoadType(QString()) && selectFetchInternalPdmLoadType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmLoadType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); const QString stmt(QStringLiteral("SELECT id, name, short_name, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmLoadType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmLoadType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.shortName = m_query->value(i++).toString(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmLoadType(qint32 id, Database::PdmLoadType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmLoadType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmLoadType(where) || !selectFetchInternalPdmLoadType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmLoadType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmLoadType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmLoadType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_load_type"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmLoadType end // // Struct: Database::PdmNuclearPreset // bool DatabaseInterfaceImpl::insert(Database::PdmNuclearPreset &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, detonation_value, impact_radius, border_length_inner, border_length_outer" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :detonation_value, :impact_radius, :border_length_inner, :border_length_outer )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":detonation_value"), data.detonationValue); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":border_length_inner"), data.borderLengthInner); m_query->bindValue(QStringLiteral(":border_length_outer"), data.borderLengthOuter); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmNuclearPreset &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, detonation_value, impact_radius, border_length_inner, border_length_outer" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :detonation_value, :impact_radius, :border_length_inner, :border_length_outer )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, detonation_value = :detonation_value, impact_radius = :impact_radius, border_length_inner = :border_length_inner, border_length_outer = :border_length_outer" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":detonation_value"), data.detonationValue); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":border_length_inner"), data.borderLengthInner); m_query->bindValue(QStringLiteral(":border_length_outer"), data.borderLengthOuter); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmNuclearPreset &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, detonation_value = :detonation_value, impact_radius = :impact_radius, border_length_inner = :border_length_inner, border_length_outer = :border_length_outer" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":detonation_value"), data.detonationValue); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":border_length_inner"), data.borderLengthInner); m_query->bindValue(QStringLiteral(":border_length_outer"), data.borderLengthOuter); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, detonation_value, impact_radius, border_length_inner, border_length_outer" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :detonation_value, :impact_radius, :border_length_inner, :border_length_outer )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":detonation_value"), data.detonationValue); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":border_length_inner"), data.borderLengthInner); m_query->bindValue(QStringLiteral(":border_length_outer"), data.borderLengthOuter); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmNuclearPreset(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, detonation_value, impact_radius, border_length_inner, border_length_outer" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :detonation_value, :impact_radius, :border_length_inner, :border_length_outer )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, detonation_value = :detonation_value, impact_radius = :impact_radius, border_length_inner = :border_length_inner, border_length_outer = :border_length_outer" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":detonation_value"), data.detonationValue); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":border_length_inner"), data.borderLengthInner); m_query->bindValue(QStringLiteral(":border_length_outer"), data.borderLengthOuter); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmNuclearPreset(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, detonation_value = :detonation_value, impact_radius = :impact_radius, border_length_inner = :border_length_inner, border_length_outer = :border_length_outer" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":detonation_value"), data.detonationValue); m_query->bindValue(QStringLiteral(":impact_radius"), data.impactRadius); m_query->bindValue(QStringLiteral(":border_length_inner"), data.borderLengthInner); m_query->bindValue(QStringLiteral(":border_length_outer"), data.borderLengthOuter); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmNuclearPreset &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmNuclearPreset(QString()) && selectFetchInternalPdmNuclearPreset(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmNuclearPreset(QString()) && selectFetchInternalPdmNuclearPreset(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmNuclearPreset(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); const QString stmt(QStringLiteral("SELECT id, name, detonation_value, impact_radius, border_length_inner, border_length_outer" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmNuclearPreset(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmNuclearPreset data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.detonationValue = m_query->value(i++).toDouble(); data.impactRadius = m_query->value(i++).toDouble(); data.borderLengthInner = m_query->value(i++).toDouble(); data.borderLengthOuter = m_query->value(i++).toDouble(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmNuclearPreset(qint32 id, Database::PdmNuclearPreset &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmNuclearPreset &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmNuclearPreset(where) || !selectFetchInternalPdmNuclearPreset(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmNuclearPreset(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmNuclearPreset() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmNuclearPreset() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_nuclear_preset"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmNuclearPreset end // // Struct: Database::PdmRadioGroup // bool DatabaseInterfaceImpl::insert(Database::PdmRadioGroup &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, base_group, issi, group_issi1, group_issi2, radio_hostname, radio_port, radio_backup_hostname, radio_backup_port" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :base_group, :issi, :group_issi1, :group_issi2, :radio_hostname, :radio_port, :radio_backup_hostname, :radio_backup_port )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":base_group"), data.baseGroup); m_query->bindValue(QStringLiteral(":issi"), data.issi); m_query->bindValue(QStringLiteral(":group_issi1"), data.groupIssi1); m_query->bindValue(QStringLiteral(":group_issi2"), data.groupIssi2); m_query->bindValue(QStringLiteral(":radio_hostname"), data.radioHostname); m_query->bindValue(QStringLiteral(":radio_port"), data.radioPort); m_query->bindValue(QStringLiteral(":radio_backup_hostname"), data.radioBackupHostname); m_query->bindValue(QStringLiteral(":radio_backup_port"), data.radioBackupPort); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmRadioGroup &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, base_group, issi, group_issi1, group_issi2, radio_hostname, radio_port, radio_backup_hostname, radio_backup_port" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :base_group, :issi, :group_issi1, :group_issi2, :radio_hostname, :radio_port, :radio_backup_hostname, :radio_backup_port )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, base_group = :base_group, issi = :issi, group_issi1 = :group_issi1, group_issi2 = :group_issi2, radio_hostname = :radio_hostname, radio_port = :radio_port, radio_backup_hostname = :radio_backup_hostname, radio_backup_port = :radio_backup_port" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":base_group"), data.baseGroup); m_query->bindValue(QStringLiteral(":issi"), data.issi); m_query->bindValue(QStringLiteral(":group_issi1"), data.groupIssi1); m_query->bindValue(QStringLiteral(":group_issi2"), data.groupIssi2); m_query->bindValue(QStringLiteral(":radio_hostname"), data.radioHostname); m_query->bindValue(QStringLiteral(":radio_port"), data.radioPort); m_query->bindValue(QStringLiteral(":radio_backup_hostname"), data.radioBackupHostname); m_query->bindValue(QStringLiteral(":radio_backup_port"), data.radioBackupPort); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmRadioGroup &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, base_group = :base_group, issi = :issi, group_issi1 = :group_issi1, group_issi2 = :group_issi2, radio_hostname = :radio_hostname, radio_port = :radio_port, radio_backup_hostname = :radio_backup_hostname, radio_backup_port = :radio_backup_port" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":base_group"), data.baseGroup); m_query->bindValue(QStringLiteral(":issi"), data.issi); m_query->bindValue(QStringLiteral(":group_issi1"), data.groupIssi1); m_query->bindValue(QStringLiteral(":group_issi2"), data.groupIssi2); m_query->bindValue(QStringLiteral(":radio_hostname"), data.radioHostname); m_query->bindValue(QStringLiteral(":radio_port"), data.radioPort); m_query->bindValue(QStringLiteral(":radio_backup_hostname"), data.radioBackupHostname); m_query->bindValue(QStringLiteral(":radio_backup_port"), data.radioBackupPort); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, base_group, issi, group_issi1, group_issi2, radio_hostname, radio_port, radio_backup_hostname, radio_backup_port" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :base_group, :issi, :group_issi1, :group_issi2, :radio_hostname, :radio_port, :radio_backup_hostname, :radio_backup_port )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":base_group"), data.baseGroup); m_query->bindValue(QStringLiteral(":issi"), data.issi); m_query->bindValue(QStringLiteral(":group_issi1"), data.groupIssi1); m_query->bindValue(QStringLiteral(":group_issi2"), data.groupIssi2); m_query->bindValue(QStringLiteral(":radio_hostname"), data.radioHostname); m_query->bindValue(QStringLiteral(":radio_port"), data.radioPort); m_query->bindValue(QStringLiteral(":radio_backup_hostname"), data.radioBackupHostname); m_query->bindValue(QStringLiteral(":radio_backup_port"), data.radioBackupPort); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmRadioGroup(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, base_group, issi, group_issi1, group_issi2, radio_hostname, radio_port, radio_backup_hostname, radio_backup_port" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :base_group, :issi, :group_issi1, :group_issi2, :radio_hostname, :radio_port, :radio_backup_hostname, :radio_backup_port )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, base_group = :base_group, issi = :issi, group_issi1 = :group_issi1, group_issi2 = :group_issi2, radio_hostname = :radio_hostname, radio_port = :radio_port, radio_backup_hostname = :radio_backup_hostname, radio_backup_port = :radio_backup_port" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":base_group"), data.baseGroup); m_query->bindValue(QStringLiteral(":issi"), data.issi); m_query->bindValue(QStringLiteral(":group_issi1"), data.groupIssi1); m_query->bindValue(QStringLiteral(":group_issi2"), data.groupIssi2); m_query->bindValue(QStringLiteral(":radio_hostname"), data.radioHostname); m_query->bindValue(QStringLiteral(":radio_port"), data.radioPort); m_query->bindValue(QStringLiteral(":radio_backup_hostname"), data.radioBackupHostname); m_query->bindValue(QStringLiteral(":radio_backup_port"), data.radioBackupPort); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmRadioGroup(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, base_group = :base_group, issi = :issi, group_issi1 = :group_issi1, group_issi2 = :group_issi2, radio_hostname = :radio_hostname, radio_port = :radio_port, radio_backup_hostname = :radio_backup_hostname, radio_backup_port = :radio_backup_port" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":base_group"), data.baseGroup); m_query->bindValue(QStringLiteral(":issi"), data.issi); m_query->bindValue(QStringLiteral(":group_issi1"), data.groupIssi1); m_query->bindValue(QStringLiteral(":group_issi2"), data.groupIssi2); m_query->bindValue(QStringLiteral(":radio_hostname"), data.radioHostname); m_query->bindValue(QStringLiteral(":radio_port"), data.radioPort); m_query->bindValue(QStringLiteral(":radio_backup_hostname"), data.radioBackupHostname); m_query->bindValue(QStringLiteral(":radio_backup_port"), data.radioBackupPort); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmRadioGroup &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmRadioGroup(QString()) && selectFetchInternalPdmRadioGroup(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmRadioGroup(QString()) && selectFetchInternalPdmRadioGroup(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmRadioGroup(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); const QString stmt(QStringLiteral("SELECT id, name, base_group, issi, group_issi1, group_issi2, radio_hostname, radio_port, radio_backup_hostname, radio_backup_port" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmRadioGroup(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmRadioGroup data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.baseGroup = m_query->value(i++).toBool(); data.issi = m_query->value(i++).toInt(); data.groupIssi1 = m_query->value(i++).toInt(); data.groupIssi2 = m_query->value(i++).toInt(); data.radioHostname = m_query->value(i++).toString(); data.radioPort = m_query->value(i++).toInt(); data.radioBackupHostname = m_query->value(i++).toString(); data.radioBackupPort = m_query->value(i++).toInt(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmRadioGroup(qint32 id, Database::PdmRadioGroup &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmRadioGroup &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmRadioGroup(where) || !selectFetchInternalPdmRadioGroup(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmRadioGroup(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmRadioGroup() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmRadioGroup() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_radio_group"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmRadioGroup end // // Struct: Database::PdmSanitationInjury // bool DatabaseInterfaceImpl::insert(Database::PdmSanitationInjury &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, kind, place_1, place_2, vbg" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :kind, :place_1, :place_2, :vbg )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":kind"), data.kind); m_query->bindValue(QStringLiteral(":place_1"), data.place1); m_query->bindValue(QStringLiteral(":place_2"), data.place2); m_query->bindValue(QStringLiteral(":vbg"), data.vbg); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmSanitationInjury &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, kind, place_1, place_2, vbg" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :kind, :place_1, :place_2, :vbg )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, kind = :kind, place_1 = :place_1, place_2 = :place_2, vbg = :vbg" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":kind"), data.kind); m_query->bindValue(QStringLiteral(":place_1"), data.place1); m_query->bindValue(QStringLiteral(":place_2"), data.place2); m_query->bindValue(QStringLiteral(":vbg"), data.vbg); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmSanitationInjury &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, kind = :kind, place_1 = :place_1, place_2 = :place_2, vbg = :vbg" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":kind"), data.kind); m_query->bindValue(QStringLiteral(":place_1"), data.place1); m_query->bindValue(QStringLiteral(":place_2"), data.place2); m_query->bindValue(QStringLiteral(":vbg"), data.vbg); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, kind, place_1, place_2, vbg" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :kind, :place_1, :place_2, :vbg )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":kind"), data.kind); m_query->bindValue(QStringLiteral(":place_1"), data.place1); m_query->bindValue(QStringLiteral(":place_2"), data.place2); m_query->bindValue(QStringLiteral(":vbg"), data.vbg); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, kind, place_1, place_2, vbg" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :kind, :place_1, :place_2, :vbg )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, kind = :kind, place_1 = :place_1, place_2 = :place_2, vbg = :vbg" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":kind"), data.kind); m_query->bindValue(QStringLiteral(":place_1"), data.place1); m_query->bindValue(QStringLiteral(":place_2"), data.place2); m_query->bindValue(QStringLiteral(":vbg"), data.vbg); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, kind = :kind, place_1 = :place_1, place_2 = :place_2, vbg = :vbg" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":kind"), data.kind); m_query->bindValue(QStringLiteral(":place_1"), data.place1); m_query->bindValue(QStringLiteral(":place_2"), data.place2); m_query->bindValue(QStringLiteral(":vbg"), data.vbg); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmSanitationInjury &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmSanitationInjury(QString()) && selectFetchInternalPdmSanitationInjury(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmSanitationInjury(QString()) && selectFetchInternalPdmSanitationInjury(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmSanitationInjury(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); const QString stmt(QStringLiteral("SELECT id, name, kind, place_1, place_2, vbg" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmSanitationInjury(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmSanitationInjury data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.kind = m_query->value(i++).toInt(); data.place1 = m_query->value(i++).toInt(); data.place2 = m_query->value(i++).toInt(); data.vbg = m_query->value(i++).toInt(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmSanitationInjury(qint32 id, Database::PdmSanitationInjury &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmSanitationInjury &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmSanitationInjury(where) || !selectFetchInternalPdmSanitationInjury(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmSanitationInjury(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmSanitationInjury() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmSanitationInjury() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmSanitationInjury end // // Struct: Database::PdmSanitationInjuryKind // bool DatabaseInterfaceImpl::insert(Database::PdmSanitationInjuryKind &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmSanitationInjuryKind &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmSanitationInjuryKind &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmSanitationInjuryKind &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmSanitationInjuryKind(QString()) && selectFetchInternalPdmSanitationInjuryKind(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmSanitationInjuryKind(QString()) && selectFetchInternalPdmSanitationInjuryKind(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmSanitationInjuryKind(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); const QString stmt(QStringLiteral("SELECT id, name, version" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmSanitationInjuryKind(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmSanitationInjuryKind data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.version = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmSanitationInjuryKind(qint32 id, Database::PdmSanitationInjuryKind &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmSanitationInjuryKind &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmSanitationInjuryKind(where) || !selectFetchInternalPdmSanitationInjuryKind(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmSanitationInjuryKind(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmSanitationInjuryKind() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmSanitationInjuryKind() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_kind"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmSanitationInjuryKind end // // Struct: Database::PdmSanitationInjuryPlace1 // bool DatabaseInterfaceImpl::insert(Database::PdmSanitationInjuryPlace1 &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmSanitationInjuryPlace1 &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmSanitationInjuryPlace1 &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmSanitationInjuryPlace1 &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmSanitationInjuryPlace1(QString()) && selectFetchInternalPdmSanitationInjuryPlace1(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmSanitationInjuryPlace1(QString()) && selectFetchInternalPdmSanitationInjuryPlace1(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmSanitationInjuryPlace1(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); const QString stmt(QStringLiteral("SELECT id, name, version" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmSanitationInjuryPlace1(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmSanitationInjuryPlace1 data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.version = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmSanitationInjuryPlace1(qint32 id, Database::PdmSanitationInjuryPlace1 &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmSanitationInjuryPlace1 &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmSanitationInjuryPlace1(where) || !selectFetchInternalPdmSanitationInjuryPlace1(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmSanitationInjuryPlace1(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmSanitationInjuryPlace1() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmSanitationInjuryPlace1() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_1"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmSanitationInjuryPlace1 end // // Struct: Database::PdmSanitationInjuryPlace2 // bool DatabaseInterfaceImpl::insert(Database::PdmSanitationInjuryPlace2 &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmSanitationInjuryPlace2 &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmSanitationInjuryPlace2 &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, version = :version" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmSanitationInjuryPlace2 &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmSanitationInjuryPlace2(QString()) && selectFetchInternalPdmSanitationInjuryPlace2(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmSanitationInjuryPlace2(QString()) && selectFetchInternalPdmSanitationInjuryPlace2(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmSanitationInjuryPlace2(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); const QString stmt(QStringLiteral("SELECT id, name, version" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmSanitationInjuryPlace2(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmSanitationInjuryPlace2 data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.version = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmSanitationInjuryPlace2(qint32 id, Database::PdmSanitationInjuryPlace2 &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmSanitationInjuryPlace2 &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmSanitationInjuryPlace2(where) || !selectFetchInternalPdmSanitationInjuryPlace2(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmSanitationInjuryPlace2(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmSanitationInjuryPlace2() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmSanitationInjuryPlace2() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_injury_place_2"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmSanitationInjuryPlace2 end // // Struct: Database::PdmSanitationMaterial // bool DatabaseInterfaceImpl::insert(Database::PdmSanitationMaterial &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, description, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :description, :version )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmSanitationMaterial &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, description, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :description, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, description = :description, version = :version" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmSanitationMaterial &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, description = :description, version = :version" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":version"), data.version); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, description, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :description, :version )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmSanitationMaterial(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, description, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :description, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, description = :description, version = :version" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmSanitationMaterial(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, description = :description, version = :version" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":description"), data.description); m_query->bindValue(QStringLiteral(":version"), data.version); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmSanitationMaterial &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmSanitationMaterial(QString()) && selectFetchInternalPdmSanitationMaterial(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmSanitationMaterial(QString()) && selectFetchInternalPdmSanitationMaterial(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmSanitationMaterial(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); const QString stmt(QStringLiteral("SELECT id, name, description, version" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmSanitationMaterial(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmSanitationMaterial data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.description = m_query->value(i++).toString(); data.version = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmSanitationMaterial(qint32 id, Database::PdmSanitationMaterial &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmSanitationMaterial &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmSanitationMaterial(where) || !selectFetchInternalPdmSanitationMaterial(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmSanitationMaterial(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmSanitationMaterial() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmSanitationMaterial() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_material"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmSanitationMaterial end // // Struct: Database::PdmSanitationProcedures // bool DatabaseInterfaceImpl::insert(Database::PdmSanitationProcedures &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, type, type_id, minimum_qualification, long_name, data_code, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :type, :type_id, :minimum_qualification, :long_name, :data_code, :version )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":type"), data.type); m_query->bindValue(QStringLiteral(":type_id"), data.typeId); m_query->bindValue(QStringLiteral(":minimum_qualification"), data.minimumQualification); m_query->bindValue(QStringLiteral(":long_name"), data.longName); m_query->bindValue(QStringLiteral(":data_code"), data.dataCode); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmSanitationProcedures &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, type, type_id, minimum_qualification, long_name, data_code, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :type, :type_id, :minimum_qualification, :long_name, :data_code, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, type = :type, type_id = :type_id, minimum_qualification = :minimum_qualification, long_name = :long_name, data_code = :data_code, version = :version" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":type"), data.type); m_query->bindValue(QStringLiteral(":type_id"), data.typeId); m_query->bindValue(QStringLiteral(":minimum_qualification"), data.minimumQualification); m_query->bindValue(QStringLiteral(":long_name"), data.longName); m_query->bindValue(QStringLiteral(":data_code"), data.dataCode); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmSanitationProcedures &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, type = :type, type_id = :type_id, minimum_qualification = :minimum_qualification, long_name = :long_name, data_code = :data_code, version = :version" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":type"), data.type); m_query->bindValue(QStringLiteral(":type_id"), data.typeId); m_query->bindValue(QStringLiteral(":minimum_qualification"), data.minimumQualification); m_query->bindValue(QStringLiteral(":long_name"), data.longName); m_query->bindValue(QStringLiteral(":data_code"), data.dataCode); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, type, type_id, minimum_qualification, long_name, data_code, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :type, :type_id, :minimum_qualification, :long_name, :data_code, :version )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":type"), data.type); m_query->bindValue(QStringLiteral(":type_id"), data.typeId); m_query->bindValue(QStringLiteral(":minimum_qualification"), data.minimumQualification); m_query->bindValue(QStringLiteral(":long_name"), data.longName); m_query->bindValue(QStringLiteral(":data_code"), data.dataCode); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" id, name, type, type_id, minimum_qualification, long_name, data_code, version" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":id, :name, :type, :type_id, :minimum_qualification, :long_name, :data_code, :version )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " id = :id, name = :name, type = :type, type_id = :type_id, minimum_qualification = :minimum_qualification, long_name = :long_name, data_code = :data_code, version = :version" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":type"), data.type); m_query->bindValue(QStringLiteral(":type_id"), data.typeId); m_query->bindValue(QStringLiteral(":minimum_qualification"), data.minimumQualification); m_query->bindValue(QStringLiteral(":long_name"), data.longName); m_query->bindValue(QStringLiteral(":data_code"), data.dataCode); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " id = :id, name = :name, type = :type, type_id = :type_id, minimum_qualification = :minimum_qualification, long_name = :long_name, data_code = :data_code, version = :version" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":type"), data.type); m_query->bindValue(QStringLiteral(":type_id"), data.typeId); m_query->bindValue(QStringLiteral(":minimum_qualification"), data.minimumQualification); m_query->bindValue(QStringLiteral(":long_name"), data.longName); m_query->bindValue(QStringLiteral(":data_code"), data.dataCode); m_query->bindValue(QStringLiteral(":version"), data.version); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmSanitationProcedures &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmSanitationProcedures(QString()) && selectFetchInternalPdmSanitationProcedures(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmSanitationProcedures(QString()) && selectFetchInternalPdmSanitationProcedures(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmSanitationProcedures(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); const QString stmt(QStringLiteral("SELECT id, name, type, type_id, minimum_qualification, long_name, data_code, version" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmSanitationProcedures(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmSanitationProcedures data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.type = m_query->value(i++).toString(); data.typeId = m_query->value(i++).toInt(); data.minimumQualification = m_query->value(i++).toInt(); data.longName = m_query->value(i++).toString(); data.dataCode = m_query->value(i++).toLongLong(); data.version = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmSanitationProcedures(qint32 id, Database::PdmSanitationProcedures &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmSanitationProcedures &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmSanitationProcedures(where) || !selectFetchInternalPdmSanitationProcedures(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmSanitationProcedures(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmSanitationProcedures() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmSanitationProcedures() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_sanitation_procedures"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmSanitationProcedures end // // Struct: Database::PdmTargetSubType // bool DatabaseInterfaceImpl::insert(Database::PdmTargetSubType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, abbreviation, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :abbreviation, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmTargetSubType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, abbreviation, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :abbreviation, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, abbreviation = :abbreviation, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmTargetSubType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, abbreviation = :abbreviation, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, abbreviation, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :abbreviation, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmTargetSubType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, abbreviation, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :abbreviation, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, abbreviation = :abbreviation, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmTargetSubType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, abbreviation = :abbreviation, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmTargetSubType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmTargetSubType(QString()) && selectFetchInternalPdmTargetSubType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmTargetSubType(QString()) && selectFetchInternalPdmTargetSubType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmTargetSubType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); const QString stmt(QStringLiteral("SELECT id, name, abbreviation, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmTargetSubType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmTargetSubType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.abbreviation = m_query->value(i++).toString(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmTargetSubType(qint32 id, Database::PdmTargetSubType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmTargetSubType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmTargetSubType(where) || !selectFetchInternalPdmTargetSubType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmTargetSubType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmTargetSubType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmTargetSubType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_subtype"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmTargetSubType end // // Struct: Database::PdmTargetType // bool DatabaseInterfaceImpl::insert(Database::PdmTargetType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, abbreviation, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :abbreviation, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmTargetType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, abbreviation, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :abbreviation, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, abbreviation = :abbreviation, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmTargetType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, abbreviation = :abbreviation, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, abbreviation, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :abbreviation, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmTargetType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" name, abbreviation, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":name, :abbreviation, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " name = :name, abbreviation = :abbreviation, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmTargetType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " name = :name, abbreviation = :abbreviation, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":name"), data.name); m_query->bindValue(QStringLiteral(":abbreviation"), data.abbreviation); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmTargetType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmTargetType(QString()) && selectFetchInternalPdmTargetType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmTargetType(QString()) && selectFetchInternalPdmTargetType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmTargetType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); const QString stmt(QStringLiteral("SELECT id, name, abbreviation, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmTargetType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmTargetType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.name = m_query->value(i++).toString(); data.abbreviation = m_query->value(i++).toString(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmTargetType(qint32 id, Database::PdmTargetType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmTargetType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmTargetType(where) || !selectFetchInternalPdmTargetType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmTargetType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmTargetType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmTargetType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_type"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmTargetType end // // Struct: Database::PdmTargetTypeTargetSubType // bool DatabaseInterfaceImpl::insert(Database::PdmTargetTypeTargetSubType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" target_type_id, target_subtype_id, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":target_type_id, :target_subtype_id, :properties )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":target_type_id"), data.targetTypeId); m_query->bindValue(QStringLiteral(":target_subtype_id"), data.targetSubtypeId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmTargetTypeTargetSubType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" target_type_id, target_subtype_id, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":target_type_id, :target_subtype_id, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " target_type_id = :target_type_id, target_subtype_id = :target_subtype_id, properties = :properties" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":target_type_id"), data.targetTypeId); m_query->bindValue(QStringLiteral(":target_subtype_id"), data.targetSubtypeId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmTargetTypeTargetSubType &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " target_type_id = :target_type_id, target_subtype_id = :target_subtype_id, properties = :properties" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":target_type_id"), data.targetTypeId); m_query->bindValue(QStringLiteral(":target_subtype_id"), data.targetSubtypeId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" target_type_id, target_subtype_id, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":target_type_id, :target_subtype_id, :properties )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":target_type_id"), data.targetTypeId); m_query->bindValue(QStringLiteral(":target_subtype_id"), data.targetSubtypeId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmTargetTypeTargetSubType(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" target_type_id, target_subtype_id, properties" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":target_type_id, :target_subtype_id, :properties )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " target_type_id = :target_type_id, target_subtype_id = :target_subtype_id, properties = :properties" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":target_type_id"), data.targetTypeId); m_query->bindValue(QStringLiteral(":target_subtype_id"), data.targetSubtypeId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmTargetTypeTargetSubType(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " target_type_id = :target_type_id, target_subtype_id = :target_subtype_id, properties = :properties" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":target_type_id"), data.targetTypeId); m_query->bindValue(QStringLiteral(":target_subtype_id"), data.targetSubtypeId); m_query->bindValue(QStringLiteral(":properties"), fixupEmptyJsonString(data.properties)); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmTargetTypeTargetSubType &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmTargetTypeTargetSubType(QString()) && selectFetchInternalPdmTargetTypeTargetSubType(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmTargetTypeTargetSubType(QString()) && selectFetchInternalPdmTargetTypeTargetSubType(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmTargetTypeTargetSubType(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); const QString stmt(QStringLiteral("SELECT id, target_type_id, target_subtype_id, properties" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmTargetTypeTargetSubType(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmTargetTypeTargetSubType data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.targetTypeId = m_query->value(i++).toInt(); data.targetSubtypeId = m_query->value(i++).toInt(); data.properties = qVariantToJsonString(m_query->value(i++)); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmTargetTypeTargetSubType(qint32 id, Database::PdmTargetTypeTargetSubType &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmTargetTypeTargetSubType &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmTargetTypeTargetSubType(where) || !selectFetchInternalPdmTargetTypeTargetSubType(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmTargetTypeTargetSubType(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmTargetTypeTargetSubType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmTargetTypeTargetSubType() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_target_type_target_subtype"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmTargetTypeTargetSubType end // // Struct: Database::PdmTranslation // bool DatabaseInterfaceImpl::insert(Database::PdmTranslation &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_translation"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = data.id != 0; if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" iso_code, context, key, disambiguation, translation" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":iso_code, :context, :key, :disambiguation, :translation )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":context"), data.context); m_query->bindValue(QStringLiteral(":key"), data.key); m_query->bindValue(QStringLiteral(":disambiguation"), data.disambiguation); m_query->bindValue(QStringLiteral(":translation"), data.translation); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmTranslation &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_translation"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" iso_code, context, key, disambiguation, translation" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":iso_code, :context, :key, :disambiguation, :translation )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " iso_code = :iso_code, context = :context, key = :key, disambiguation = :disambiguation, translation = :translation" " WHERE excluded.id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":context"), data.context); m_query->bindValue(QStringLiteral(":key"), data.key); m_query->bindValue(QStringLiteral(":disambiguation"), data.disambiguation); m_query->bindValue(QStringLiteral(":translation"), data.translation); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmTranslation &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_translation"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " iso_code = :iso_code, context = :context, key = :key, disambiguation = :disambiguation, translation = :translation" " WHERE id = :id")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":context"), data.context); m_query->bindValue(QStringLiteral(":key"), data.key); m_query->bindValue(QStringLiteral(":disambiguation"), data.disambiguation); m_query->bindValue(QStringLiteral(":translation"), data.translation); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_translation"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const bool bInsertWithKey = cont[0].id != 0; // the first element determines the stmt to be used if (bInsertWithKey) { keyColumnInsertKey = QStringLiteral("id, "); keyColumnInsertVal = QStringLiteral(" :id, "); } const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" iso_code, context, key, disambiguation, translation" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":iso_code, :context, :key, :disambiguation, :translation )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":context"), data.context); m_query->bindValue(QStringLiteral(":key"), data.key); m_query->bindValue(QStringLiteral(":disambiguation"), data.disambiguation); m_query->bindValue(QStringLiteral(":translation"), data.translation); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmTranslation(); } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_translation"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; const bool bInsertWithKey = true; keyColumnInsertVal = QStringLiteral(" :id, "); keyColumnInsertKey = QStringLiteral("id, "); // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("id "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" iso_code, context, key, disambiguation, translation" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":iso_code, :context, :key, :disambiguation, :translation )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " iso_code = :iso_code, context = :context, key = :key, disambiguation = :disambiguation, translation = :translation" " WHERE excluded.id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { if (bInsertWithKey) m_query->bindValue(QStringLiteral(":id"), data.id); m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":context"), data.context); m_query->bindValue(QStringLiteral(":key"), data.key); m_query->bindValue(QStringLiteral(":disambiguation"), data.disambiguation); m_query->bindValue(QStringLiteral(":translation"), data.translation); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } if (data.id == 0) data.id = m_query->lastInsertId().toInt(); } } if (bInsertWithKey) fixUpSequencePdmTranslation(); } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_translation"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " iso_code = :iso_code, context = :context, key = :key, disambiguation = :disambiguation, translation = :translation" " WHERE id = :id")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":iso_code"), data.isoCode); m_query->bindValue(QStringLiteral(":context"), data.context); m_query->bindValue(QStringLiteral(":key"), data.key); m_query->bindValue(QStringLiteral(":disambiguation"), data.disambiguation); m_query->bindValue(QStringLiteral(":translation"), data.translation); m_query->bindValue(QStringLiteral(":id"), data.id); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmTranslation &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmTranslation(QString()) && selectFetchInternalPdmTranslation(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmTranslation(QString()) && selectFetchInternalPdmTranslation(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmTranslation(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_translation"))); const QString stmt(QStringLiteral("SELECT id, iso_code, context, key, disambiguation, translation" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmTranslation(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmTranslation data; while (m_query->next()) { int i = 0; data.id = m_query->value(i++).toInt(); data.isoCode = m_query->value(i++).toString(); data.context = m_query->value(i++).toString(); data.key = m_query->value(i++).toString(); data.disambiguation = m_query->value(i++).toString(); data.translation = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmTranslation(qint32 id, Database::PdmTranslation &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmTranslation &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE id = %1").arg(id); if (!selectPrepareInternalPdmTranslation(where) || !selectFetchInternalPdmTranslation(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmTranslation(qint32 id) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_translation"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE id = ") + QString::number(id)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmTranslation() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_translation"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_id_seq', COALESCE((SELECT MAX(id)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmTranslation() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_translation"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmTranslation end // // Struct: Database::PdmVulnerabilityKind // bool DatabaseInterfaceImpl::insert(Database::PdmVulnerabilityKind &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" ta_vulnerability_kind, player_type_class_id, vulnerability_class_id, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":ta_vulnerability_kind, :player_type_class_id, :vulnerability_class_id, :name )")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":ta_vulnerability_kind"), data.taVulnerabilityKind); m_query->bindValue(QStringLiteral(":player_type_class_id"), data.playerTypeClassId); m_query->bindValue(QStringLiteral(":vulnerability_class_id"), static_cast(data.vulnerabilityClassId)); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::upsert(Database::PdmVulnerabilityKind &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; keyColumnInsertKeyConflict = QStringLiteral("ta_vulnerability_kind "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" ta_vulnerability_kind, player_type_class_id, vulnerability_class_id, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":ta_vulnerability_kind, :player_type_class_id, :vulnerability_class_id, :name )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " ta_vulnerability_kind = :ta_vulnerability_kind, player_type_class_id = :player_type_class_id, vulnerability_class_id = :vulnerability_class_id, name = :name" " WHERE excluded.ta_vulnerability_kind = :ta_vulnerability_kind")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":ta_vulnerability_kind"), data.taVulnerabilityKind); m_query->bindValue(QStringLiteral(":player_type_class_id"), data.playerTypeClassId); m_query->bindValue(QStringLiteral(":vulnerability_class_id"), static_cast(data.vulnerabilityClassId)); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } bool DatabaseInterfaceImpl::update(const Database::PdmVulnerabilityKind &data) { SqlQueryJanitor janitor(m_query); { const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " ta_vulnerability_kind = :ta_vulnerability_kind, player_type_class_id = :player_type_class_id, vulnerability_class_id = :vulnerability_class_id, name = :name" " WHERE ta_vulnerability_kind = :ta_vulnerability_kind")); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } m_query->bindValue(QStringLiteral(":ta_vulnerability_kind"), data.taVulnerabilityKind); m_query->bindValue(QStringLiteral(":player_type_class_id"), data.playerTypeClassId); m_query->bindValue(QStringLiteral(":vulnerability_class_id"), static_cast(data.vulnerabilityClassId)); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::insert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); QString keyColumnInsertKey; QString keyColumnInsertVal; const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" ta_vulnerability_kind, player_type_class_id, vulnerability_class_id, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":ta_vulnerability_kind, :player_type_class_id, :vulnerability_class_id, :name )")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":ta_vulnerability_kind"), data.taVulnerabilityKind); m_query->bindValue(QStringLiteral(":player_type_class_id"), data.playerTypeClassId); m_query->bindValue(QStringLiteral(":vulnerability_class_id"), static_cast(data.vulnerabilityClassId)); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::upsert(std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); QString keyColumnInsertKey; QString keyColumnInsertKeyConflict; QString keyColumnInsertVal; // the first element determines the stmt to be used keyColumnInsertKeyConflict = QStringLiteral("ta_vulnerability_kind "); const QString stmt(QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (") + keyColumnInsertKey + QStringLiteral(" ta_vulnerability_kind, player_type_class_id, vulnerability_class_id, name" " ) VALUES (") + keyColumnInsertVal + QStringLiteral(":ta_vulnerability_kind, :player_type_class_id, :vulnerability_class_id, :name )") + QStringLiteral(" ON CONFLICT (") + keyColumnInsertKeyConflict + QStringLiteral(") DO UPDATE ") + QStringLiteral(" SET" " ta_vulnerability_kind = :ta_vulnerability_kind, player_type_class_id = :player_type_class_id, vulnerability_class_id = :vulnerability_class_id, name = :name" " WHERE excluded.ta_vulnerability_kind = :ta_vulnerability_kind")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (auto &data : cont) { m_query->bindValue(QStringLiteral(":ta_vulnerability_kind"), data.taVulnerabilityKind); m_query->bindValue(QStringLiteral(":player_type_class_id"), data.playerTypeClassId); m_query->bindValue(QStringLiteral(":vulnerability_class_id"), static_cast(data.vulnerabilityClassId)); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } // current only implemented for 'plain' structures with only one affected table bool DatabaseInterfaceImpl::update(const std::vector &cont) { if (cont.empty()) return true; { const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); const QString stmt(QStringLiteral("UPDATE ") + tableName + QStringLiteral(" SET" " ta_vulnerability_kind = :ta_vulnerability_kind, player_type_class_id = :player_type_class_id, vulnerability_class_id = :vulnerability_class_id, name = :name" " WHERE ta_vulnerability_kind = :ta_vulnerability_kind")); { SqlQueryJanitor janitor(m_query); if (!m_query->prepare(stmt)) { m_lastError = m_query->lastError(); return false; } for (const auto &data : cont) { m_query->bindValue(QStringLiteral(":ta_vulnerability_kind"), data.taVulnerabilityKind); m_query->bindValue(QStringLiteral(":player_type_class_id"), data.playerTypeClassId); m_query->bindValue(QStringLiteral(":vulnerability_class_id"), static_cast(data.vulnerabilityClassId)); m_query->bindValue(QStringLiteral(":name"), data.name); if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } } } } return true; } bool DatabaseInterfaceImpl::select(QVector &dataVec) { SqlQueryJanitor janitor(m_query); const auto cb =[&dataVec] (const Database::PdmVulnerabilityKind &data) { dataVec.push_back(data); }; return selectPrepareInternalPdmVulnerabilityKind(QString()) && selectFetchInternalPdmVulnerabilityKind(cb); } bool DatabaseInterfaceImpl::select(const std::function &cb) { SqlQueryJanitor janitor(m_query); return selectPrepareInternalPdmVulnerabilityKind(QString()) && selectFetchInternalPdmVulnerabilityKind(cb); } bool DatabaseInterfaceImpl::selectPrepareInternalPdmVulnerabilityKind(const QString &where) { const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); const QString stmt(QStringLiteral("SELECT ta_vulnerability_kind, player_type_class_id, vulnerability_class_id, name" " FROM ") + tableName + where); return m_query->prepare(stmt); } bool DatabaseInterfaceImpl::selectFetchInternalPdmVulnerabilityKind(const std::function &cb) { if (!m_query->exec(m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } Database::PdmVulnerabilityKind data; while (m_query->next()) { int i = 0; data.taVulnerabilityKind = m_query->value(i++).toInt(); data.playerTypeClassId = m_query->value(i++).toInt(); data.vulnerabilityClassId = static_cast(m_query->value(i++).toInt()); data.name = m_query->value(i++).toString(); cb(data); } return true; } bool DatabaseInterfaceImpl::selectPdmVulnerabilityKind(qint32 taVulnerabilityKind, Database::PdmVulnerabilityKind &data) { SqlQueryJanitor janitor(m_query); int iCnt = 0; const auto cb =[&data, &iCnt] (const Database::PdmVulnerabilityKind &content) { data = content; ++iCnt; }; const QString where = QStringLiteral(" WHERE ta_vulnerability_kind = %1").arg(taVulnerabilityKind); if (!selectPrepareInternalPdmVulnerabilityKind(where) || !selectFetchInternalPdmVulnerabilityKind(cb)) return false; return (iCnt == 1); } bool DatabaseInterfaceImpl::removePdmVulnerabilityKind(qint32 taVulnerabilityKind) { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); const QString stmt(QStringLiteral("DELETE FROM ") + tableName + QStringLiteral(" WHERE ta_vulnerability_kind = ") + QString::number(taVulnerabilityKind)); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::fixUpSequencePdmVulnerabilityKind() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); const QString stmt(QStringLiteral("SELECT setval('") + tableName + QStringLiteral("_ta_vulnerability_kind_seq', COALESCE((SELECT MAX(ta_vulnerability_kind)+1 FROM ") + tableName + QStringLiteral("), 1),false)")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } bool DatabaseInterfaceImpl::truncatePdmVulnerabilityKind() { SqlQueryJanitor janitor(m_query); const QString tableName(getTableName(QStringLiteral("pdm_vulnerability_kind"))); const QString stmt(QStringLiteral("TRUNCATE TABLE ") + tableName + QStringLiteral(" CASCADE")); if (!m_query->exec(stmt, m_bEmitMessageOnError)) { m_lastError = m_query->lastError(); return false; } return true; } // Database::PdmVulnerabilityKind end } // namespace ProjectDataManagement