diff options
Diffstat (limited to 'AudioManagerDaemon/src/CAmDatabaseHandlerSQLite.cpp')
-rw-r--r-- | AudioManagerDaemon/src/CAmDatabaseHandlerSQLite.cpp | 5651 |
1 files changed, 0 insertions, 5651 deletions
diff --git a/AudioManagerDaemon/src/CAmDatabaseHandlerSQLite.cpp b/AudioManagerDaemon/src/CAmDatabaseHandlerSQLite.cpp deleted file mode 100644 index 5e95c6c..0000000 --- a/AudioManagerDaemon/src/CAmDatabaseHandlerSQLite.cpp +++ /dev/null @@ -1,5651 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmDatabaseHandlerSQLite.cpp - * For further information see http://www.genivi.org/. - * - */ - -#include "CAmDatabaseHandlerSQLite.h" -#include <cassert> -#include <stdexcept> -#include <vector> -#include <fstream> -#include <sstream> -#include <string> -#include "CAmDatabaseObserver.h" -#include "CAmRouter.h" -#include "CAmDltWrapper.h" -#include <sqlite3.h> - -namespace am -{ - -/** - * Macro to handle SQLITE errors on prepare - */ -#define MY_SQLITE_PREPARE_V2(db,zSql,nByte,ppStmt,pzTail) \ - if ((eCode = sqlite3_prepare_v2(db, zSql, nByte, ppStmt, pzTail))) \ - { \ - logError("CAmDatabaseHandler::my_sqlite_prepare_v2 on Command",zSql,"failed with errorCode:", eCode); \ - return (E_DATABASE_ERROR); \ - } - -#define MY_SQLITE_PREPARE_V2_BOOL(db,zSql,nByte,ppStmt,pzTail) \ - if ((eCode = sqlite3_prepare_v2(db, zSql, nByte, ppStmt, pzTail))) \ - { \ - logError("CAmDatabaseHandler::my_sqlite_prepare_v2_bool on Command",zSql,"failed with errorCode:", eCode); \ - return (false); \ - } - -/** - * Macro to handle SQLITE errors bind text - */ -#define MY_SQLITE_BIND_TEXT(query,index,text,size,static_) \ - if ((eCode = sqlite3_bind_text(query, index, text, size, static_))) \ - { \ - logError("CAmDatabaseHandler::sqlite3_bind_text failed with errorCode:", eCode); \ - return (E_DATABASE_ERROR); \ - } - -/** - * Macro to handle SQLITE errors on bind int - */ -#define MY_SQLITE_BIND_INT(query, index, data) \ - if((eCode = sqlite3_bind_int(query, index, data))) \ - { \ - logError("CAmDatabaseHandler::sqlite3_bind_int failed with errorCode:", eCode); \ - return (E_DATABASE_ERROR); \ - } - -/** - * Macro to handle SQLITE errors on reset - */ -#define MY_SQLITE_RESET(query) \ - if((eCode = sqlite3_reset(query))) \ - { \ - logError("CAmDatabaseHandler::sqlite3_reset failed with errorCode:", eCode); \ - return (E_DATABASE_ERROR); \ - } - -/** - * Macro to handle SQLITE finalize - */ -#define MY_SQLITE_FINALIZE(query) \ - if((eCode = sqlite3_finalize(query))) \ - { \ - logError("CAmDatabaseHandler::sqlite3_finalize failed with errorCode:", eCode); \ - return (E_DATABASE_ERROR); \ - } - -#define MY_SQLITE_FINALIZE_BOOL(query) \ - if((eCode = sqlite3_finalize(query))) \ - { \ - logError("CAmDatabaseHandler::sqlite3_finalize failed with errorCode:", eCode); \ - return (true); \ - } - -#define DOMAIN_TABLE "Domains" //!< domain table -#define SOURCE_CLASS_TABLE "SourceClasses" //!< source class table -#define SINK_CLASS_TABLE "SinkClasses" //!< sink class table -#define SOURCE_TABLE "Sources" //!< source table -#define SINK_TABLE "Sinks" //!< sink table -#define GATEWAY_TABLE "Gateways" //!< gateway table -#define CONVERTER_TABLE "Converters" //!< converter table -#define CROSSFADER_TABLE "Crossfaders" //!< crossfader table -#define CONNECTION_TABLE "Connections" //!< connection table -#define MAINCONNECTION_TABLE "MainConnections" //!< main connection table -#define SYSTEM_TABLE "SystemProperties" //!< system properties table -/** - * table that holds table informations - */ -const std::string databaseTables[] = -{ " Domains (domainID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(50), busname VARCHAR(50), nodename VARCHAR(50), early BOOL, complete BOOL, state INTEGER, reserved BOOL);", // - " SourceClasses (sourceClassID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(50));", // - " SinkClasses (sinkClassID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(50));", // - " Sources (sourceID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, domainID INTEGER, name VARCHAR(50), sourceClassID INTEGER, sourceState INTEGER, volume INTEGER, visible BOOL, availability INTEGER, availabilityReason INTEGER, interruptState INTEGER, reserved BOOL);", // - " Sinks (sinkID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(50), domainID INTEGER, sinkClassID INTEGER, volume INTEGER, visible BOOL, availability INTEGER, availabilityReason INTEGER, muteState INTEGER, mainVolume INTEGER, reserved BOOL);", // - " Gateways (gatewayID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(50), sinkID INTEGER, sourceID INTEGER, domainSinkID INTEGER, domainSourceID INTEGER, controlDomainID INTEGER);", // - " Converters (converterID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(50), sinkID INTEGER, sourceID INTEGER, domainID INTEGER);", // - " Crossfaders (crossfaderID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(50), sinkID_A INTEGER, sinkID_B INTEGER, sourceID INTEGER, hotSink INTEGER);", // - " Connections (connectionID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, sourceID INTEGER, sinkID INTEGER, delay INTEGER, connectionFormat INTEGER, reserved BOOL);", // - " MainConnections (mainConnectionID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, sourceID INTEGER, sinkID INTEGER, connectionState INTEGER, delay INTEGER);", // - " SystemProperties (type INTEGER PRIMARY KEY, value INTEGER);" }; - -/** - * template to converts T to std::string - * @param x T - * @return string - */ -template<typename T> -inline std::string i2s(T const& x) -{ - std::ostringstream o; - o << x; - return (o.str()); -} - -CAmDatabaseHandlerSQLite::CAmDatabaseHandlerSQLite():mpDatabaseObserver(NULL), // - mFirstStaticSink(true), // - mFirstStaticSource(true), // - mFirstStaticGateway(true), // - mFirstStaticConverter(true), - mFirstStaticSinkClass(true), // - mFirstStaticSourceClass(true), // - mFirstStaticCrossfader(true), // - mListConnectionFormat(), - mpDatabase(NULL), // - mPath(std::string("")) -{ - -} - -CAmDatabaseHandlerSQLite::CAmDatabaseHandlerSQLite(std::string databasePath):mpDatabaseObserver(NULL), // - mFirstStaticSink(true), // - mFirstStaticSource(true), // - mFirstStaticGateway(true), // - mFirstStaticConverter(true), - mFirstStaticSinkClass(true), // - mFirstStaticSourceClass(true), // - mFirstStaticCrossfader(true), // - mListConnectionFormat(), - mpDatabase(NULL), // - mPath(databasePath) -{ - std::ifstream infile(mPath.c_str()); - - if (infile) - { - if(remove(mPath.c_str())==0) - { - logError("DatabaseHandler::DatabaseHandler Knocked down database failed !"); - } - logInfo("DatabaseHandler::DatabaseHandler Knocked down database"); - } - - bool dbOpen = openDatabase(); - if (!dbOpen) - { - logInfo("DatabaseHandler::DatabaseHandler problems opening the database!"); - } - - createTables(); -} - -CAmDatabaseHandlerSQLite::~CAmDatabaseHandlerSQLite() -{ - logInfo("Closed Database"); - mpDatabaseObserver = NULL; - if(mpDatabase) - sqlite3_close(mpDatabase); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterDomainDB(const am_Domain_s & domainData, am_domainID_t & domainID) -{ - assert(domainData.domainID==0); - assert(!domainData.name.empty()); - assert(!domainData.busname.empty()); - assert(domainData.state>=DS_UNKNOWN && domainData.state<=DS_MAX); - - //first check for a reserved domain - sqlite3_stmt* query = NULL; - int eCode = 0; - domainID=0; - std::string command = "SELECT domainID FROM " + std::string(DOMAIN_TABLE) + " WHERE name=?"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, domainData.name.c_str(), domainData.name.size(), SQLITE_STATIC) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - domainID = sqlite3_column_int(query, 0); - command = "UPDATE " + std::string(DOMAIN_TABLE) + " SET name=?, busname=?, nodename=?, early=?, complete=?, state=?, reserved=? WHERE domainID=" + i2s(sqlite3_column_int(query, 0)); - } - else if (eCode == SQLITE_DONE) - { - - command = "INSERT INTO " + std::string(DOMAIN_TABLE) + " (name, busname, nodename, early, complete, state, reserved) VALUES (?,?,?,?,?,?,?)"; - } - else - { - logError("DatabaseHandler::enterDomainDB SQLITE Step error code:", eCode); - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, domainData.name.c_str(), domainData.name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_TEXT(query, 2, domainData.busname.c_str(), domainData.busname.size(), SQLITE_STATIC) - MY_SQLITE_BIND_TEXT(query, 3, domainData.nodename.c_str(), domainData.nodename.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(query, 4, domainData.early) - MY_SQLITE_BIND_INT(query, 5, domainData.complete) - MY_SQLITE_BIND_INT(query, 6, domainData.state) - MY_SQLITE_BIND_INT(query, 7, 0) - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterDomainDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - if (domainID==0) - domainID = sqlite3_last_insert_rowid(mpDatabase); - logInfo("DatabaseHandler::enterDomainDB entered new domain with name=", domainData.name, "busname=", domainData.busname, "nodename=", domainData.nodename, "assigned ID:", domainID); - - am_Domain_s domain = domainData; - domain.domainID = domainID; - if (mpDatabaseObserver) - mpDatabaseObserver->newDomain(domain); - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterMainConnectionDB(const am_MainConnection_s & mainConnectionData, am_mainConnectionID_t & connectionID) -{ - assert(mainConnectionData.mainConnectionID==0); - assert(mainConnectionData.connectionState>=CS_UNKNOWN && mainConnectionData.connectionState<=CS_MAX); - assert(mainConnectionData.sinkID!=0); - assert(mainConnectionData.sourceID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - int16_t delay = 0; - std::string command = "INSERT INTO " + std::string(MAINCONNECTION_TABLE) + "(sourceID, sinkID, connectionState, delay) VALUES (?,?,?,-1)"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, mainConnectionData.sourceID) - MY_SQLITE_BIND_INT(query, 2, mainConnectionData.sinkID) - MY_SQLITE_BIND_INT(query, 3, mainConnectionData.connectionState) - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterMainConnectionDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - connectionID = sqlite3_last_insert_rowid(mpDatabase); - - //now check the connectionTable for all connections in the route. IF connectionID exist - command = "SELECT delay FROM " + std::string(CONNECTION_TABLE) + (" WHERE connectionID=?"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_connectionID_t>::const_iterator elementIterator = mainConnectionData.listConnectionID.begin(); - for (; elementIterator < mainConnectionData.listConnectionID.end(); ++elementIterator) - { - MY_SQLITE_BIND_INT(query, 1, *elementIterator) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - int16_t temp_delay = sqlite3_column_int(query, 1); - if (temp_delay != -1 && delay != -1) - delay += temp_delay; - else - delay = -1; - } - else - { - logError("DatabaseHandler::enterMainConnectionDB did not find route for MainConnection: ", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - - //now we create a table with references to the connections; - command = "CREATE TABLE MainConnectionRoute" + i2s(connectionID) + std::string("(connectionID INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - command = "INSERT INTO MainConnectionRoute" + i2s(connectionID) + "(connectionID) VALUES (?)"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_connectionID_t>::const_iterator listConnectionIterator(mainConnectionData.listConnectionID.begin()); - for (; listConnectionIterator < mainConnectionData.listConnectionID.end(); ++listConnectionIterator) - { - MY_SQLITE_BIND_INT(query, 1, *listConnectionIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterMainConnectionDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::enterMainConnectionDB entered new mainConnection with sourceID", mainConnectionData.sourceID, "sinkID:", mainConnectionData.sinkID, "delay:", delay, "assigned ID:", connectionID); - - if (mpDatabaseObserver) - { - am_MainConnectionType_s mainConnection; - mainConnection.mainConnectionID = connectionID; - mainConnection.connectionState = mainConnectionData.connectionState; - mainConnection.delay = delay; - mainConnection.sinkID = mainConnectionData.sinkID; - mainConnection.sourceID = mainConnectionData.sourceID; - mpDatabaseObserver->newMainConnection(mainConnection); - mpDatabaseObserver->mainConnectionStateChanged(connectionID, mainConnectionData.connectionState); - } - - //finally, we update the delay value for the maintable - if (delay == 0) - delay = -1; - return (changeDelayMainConnection(delay, connectionID)); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterSinkDB(const am_Sink_s & sinkData, am_sinkID_t & sinkID) -{ - assert(sinkData.sinkID<DYNAMIC_ID_BOUNDARY); - assert(sinkData.domainID!=0); - assert(!sinkData.name.empty()); - assert(sinkData.sinkClassID!=0); - //todo: need to check if class exists? - assert(!sinkData.listConnectionFormats.empty()); - assert(sinkData.muteState>=MS_UNKNOWN && sinkData.muteState<=MS_MAX); - - sqlite3_stmt *query = NULL; - int eCode = 0; - std::string command = "SELECT sinkID FROM " + std::string(SINK_TABLE) + " WHERE name=? AND reserved=1"; - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, sinkData.name.c_str(), sinkData.name.size(), SQLITE_STATIC) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - command = "UPDATE " + std::string(SINK_TABLE) + " SET name=?, domainID=?, sinkClassID=?, volume=?, visible=?, availability=?, availabilityReason=?, muteState=?, mainVolume=?, reserved=? WHERE sinkID=" + i2s(sqlite3_column_int(query, 0)); - } - else if (eCode == SQLITE_DONE) - { - //if sinkID is zero and the first Static Sink was already entered, the ID is created - if (sinkData.sinkID == 0 && !mFirstStaticSink && !existSinkName(sinkData.name)) - { - command = "INSERT INTO " + std::string(SINK_TABLE) + "(name, domainID, sinkClassID, volume, visible, availability, availabilityReason, muteState, mainVolume, reserved) VALUES (?,?,?,?,?,?,?,?,?,?)"; - } - else - { - //check if the ID already exists - if (existSinkNameOrID(sinkData.sinkID, sinkData.name)) - { - MY_SQLITE_FINALIZE(query) - return (E_ALREADY_EXISTS); - } - command = "INSERT INTO " + std::string(SINK_TABLE) + "(name, domainID, sinkClassID, volume, visible, availability, availabilityReason, muteState, mainVolume, reserved, sinkID) VALUES (?,?,?,?,?,?,?,?,?,?,?)"; - } - } - else - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, sinkData.name.c_str(), sinkData.name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(query, 2, sinkData.domainID) - MY_SQLITE_BIND_INT(query, 3, sinkData.sinkClassID) - MY_SQLITE_BIND_INT(query, 4, sinkData.volume) - MY_SQLITE_BIND_INT(query, 5, sinkData.visible) - MY_SQLITE_BIND_INT(query, 6, sinkData.available.availability) - MY_SQLITE_BIND_INT(query, 7, sinkData.available.availabilityReason) - MY_SQLITE_BIND_INT(query, 8, sinkData.muteState) - MY_SQLITE_BIND_INT(query, 9, sinkData.mainVolume) - MY_SQLITE_BIND_INT(query, 10, 0) - - //if the ID is not created, we add it to the query - if (sinkData.sinkID != 0) - { - MY_SQLITE_BIND_INT(query, 11, sinkData.sinkID) - } - - //if the first static sink is entered, we need to set it onto the boundary - else if (mFirstStaticSink) - { - MY_SQLITE_BIND_INT(query, 11, DYNAMIC_ID_BOUNDARY) - mFirstStaticSink = false; - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - //now read back the sinkID - command = "SELECT sinkID FROM " + std::string(SINK_TABLE) + " WHERE name=?"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, sinkData.name.c_str(), sinkData.name.size(), SQLITE_STATIC) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sinkID = sqlite3_column_int(query, 0); - } - else - { - sinkID = 0; - logError("DatabaseHandler::existSink database error!:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - //now we need to create the additional tables: - command = "CREATE TABLE SinkConnectionFormat" + i2s(sinkID) + std::string("(soundFormat INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - command = "CREATE TABLE SinkSoundProperty" + i2s(sinkID) + std::string("(soundPropertyType INTEGER, value INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - command = "CREATE TABLE SinkNotificationConfiguration" + i2s(sinkID) + std::string("(type INTEGER, status INTEGER, parameter INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO SinkConnectionFormat" + i2s(sinkID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = sinkData.listConnectionFormats.begin(); - for (; connectionFormatIterator < sinkData.listConnectionFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - //Fill SinkSoundProperties - command = "INSERT INTO SinkSoundProperty" + i2s(sinkID) + std::string("(soundPropertyType,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_SoundProperty_s>::const_iterator SoundPropertyIterator = sinkData.listSoundProperties.begin(); - for (; SoundPropertyIterator < sinkData.listSoundProperties.end(); ++SoundPropertyIterator) - { - MY_SQLITE_BIND_INT(query, 1, SoundPropertyIterator->type) - MY_SQLITE_BIND_INT(query, 2, SoundPropertyIterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - //Fill NotificationConfigurations - command = "INSERT INTO SinkNotificationConfiguration" + i2s(sinkID) + std::string("(type,status,parameter) VALUES (?,?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_NotificationConfiguration_s>::const_iterator NotificationConfigurationIterator(sinkData.listNotificationConfigurations.begin()); - for (; NotificationConfigurationIterator < sinkData.listNotificationConfigurations.end(); ++NotificationConfigurationIterator) - { - MY_SQLITE_BIND_INT(query, 1, NotificationConfigurationIterator->type) - MY_SQLITE_BIND_INT(query, 2, NotificationConfigurationIterator->status) - MY_SQLITE_BIND_INT(query, 3, NotificationConfigurationIterator->parameter) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - if (sinkData.visible == true) - { - command = "CREATE TABLE SinkMainSoundProperty" + i2s(sinkID) + std::string("(soundPropertyType INTEGER, value INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - //Fill MainSinkSoundProperties - command = "INSERT INTO SinkMainSoundProperty" + i2s(sinkID) + std::string("(soundPropertyType,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_MainSoundProperty_s>::const_iterator mainSoundPropertyIterator = sinkData.listMainSoundProperties.begin(); - for (; mainSoundPropertyIterator < sinkData.listMainSoundProperties.end(); ++mainSoundPropertyIterator) - { - MY_SQLITE_BIND_INT(query, 1, mainSoundPropertyIterator->type) - MY_SQLITE_BIND_INT(query, 2, mainSoundPropertyIterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - - //now we got MainNotificationConfigurations as well - command = "CREATE TABLE SinkMainNotificationConfiguration" + i2s(sinkID) + std::string("(type INTEGER, status INTEGER, parameter INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - command = "INSERT INTO SinkMainNotificationConfiguration" + i2s(sinkID) + std::string("(type,status,parameter) VALUES (?,?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_NotificationConfiguration_s>::const_iterator mainNotificationConfigurationIterator(sinkData.listMainNotificationConfigurations.begin()); - for (; mainNotificationConfigurationIterator < sinkData.listMainNotificationConfigurations.end(); ++mainNotificationConfigurationIterator) - { - MY_SQLITE_BIND_INT(query, 1, mainNotificationConfigurationIterator->type) - MY_SQLITE_BIND_INT(query, 2, mainNotificationConfigurationIterator->status) - MY_SQLITE_BIND_INT(query, 3, mainNotificationConfigurationIterator->parameter) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - logInfo("DatabaseHandler::enterSinkDB entered new sink with name", sinkData.name, "domainID:", sinkData.domainID, "classID:", sinkData.sinkClassID, "volume:", sinkData.volume, "assigned ID:", sinkID); - am_Sink_s sink = sinkData; - sink.sinkID = sinkID; - if (mpDatabaseObserver != NULL) - mpDatabaseObserver->newSink(sink); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterCrossfaderDB(const am_Crossfader_s & crossfaderData, am_crossfaderID_t & crossfaderID) -{ - assert(crossfaderData.crossfaderID<DYNAMIC_ID_BOUNDARY); - assert(crossfaderData.hotSink>=HS_UNKNOWN && crossfaderData.hotSink<=HS_MAX); - assert(!crossfaderData.name.empty()); - assert(existSink(crossfaderData.sinkID_A)); - assert(existSink(crossfaderData.sinkID_B)); - assert(existSource(crossfaderData.sourceID)); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - //if gatewayData is zero and the first Static Sink was already entered, the ID is created - if (crossfaderData.crossfaderID == 0 && !mFirstStaticCrossfader) - { - command = "INSERT INTO " + std::string(CROSSFADER_TABLE) + "(name, sinkID_A, sinkID_B, sourceID, hotSink) VALUES (?,?,?,?,?)"; - } - else - { - //check if the ID already exists - if (existCrossFader(crossfaderData.crossfaderID)) - return (E_ALREADY_EXISTS); - command = "INSERT INTO " + std::string(CROSSFADER_TABLE) + "(name, sinkID_A, sinkID_B, sourceID, hotSink, crossfaderID) VALUES (?,?,?,?,?,?)"; - } - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - MY_SQLITE_BIND_TEXT(query, 1, crossfaderData.name.c_str(), crossfaderData.name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(query, 2, crossfaderData.sinkID_A) - MY_SQLITE_BIND_INT(query, 3, crossfaderData.sinkID_B) - MY_SQLITE_BIND_INT(query, 4, crossfaderData.sourceID) - MY_SQLITE_BIND_INT(query, 5, crossfaderData.hotSink) - - //if the ID is not created, we add it to the query - if (crossfaderData.crossfaderID != 0) - { - MY_SQLITE_BIND_INT(query, 6, crossfaderData.crossfaderID) - } - - //if the first static sink is entered, we need to set it onto the boundary - else if (mFirstStaticCrossfader) - { - MY_SQLITE_BIND_INT(query, 6, DYNAMIC_ID_BOUNDARY) - mFirstStaticCrossfader = false; - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterCrossfaderDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - //now read back the crossfaderID - command = "SELECT crossfaderID FROM " + std::string(CROSSFADER_TABLE) + " WHERE name=?"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, crossfaderData.name.c_str(), crossfaderData.name.size(), SQLITE_STATIC) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - crossfaderID = sqlite3_column_int(query, 0); - } - else - { - crossfaderID = 0; - logError("DatabaseHandler::enterCrossfaderDB database error!:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::enterCrossfaderDB entered new crossfader with name=", crossfaderData.name, "sinkA= ", crossfaderData.sinkID_A, "sinkB=", crossfaderData.sinkID_B, "source=", crossfaderData.sourceID, "assigned ID:", crossfaderID); - - am_Crossfader_s crossfader(crossfaderData); - crossfader.crossfaderID = crossfaderID; - if (mpDatabaseObserver) - mpDatabaseObserver->newCrossfader(crossfader); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterGatewayDB(const am_Gateway_s & gatewayData, am_gatewayID_t & gatewayID) -{ - assert(gatewayData.gatewayID<DYNAMIC_ID_BOUNDARY); - assert(gatewayData.sinkID!=0); - assert(gatewayData.sourceID!=0); - assert(gatewayData.controlDomainID!=0); - assert(gatewayData.domainSinkID!=0); - assert(gatewayData.domainSourceID!=0); - assert(!gatewayData.name.empty()); - assert(!gatewayData.convertionMatrix.empty()); - assert(!gatewayData.listSinkFormats.empty()); - assert(!gatewayData.listSourceFormats.empty()); - - //might be that the sinks and sources are not there during registration time - //assert(existSink(gatewayData.sinkID)); - //assert(existSource(gatewayData.sourceID)); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - //if gatewayData is zero and the first Static Sink was already entered, the ID is created - if (gatewayData.gatewayID == 0 && !mFirstStaticGateway) - { - command = "INSERT INTO " + std::string(GATEWAY_TABLE) + "(name, sinkID, sourceID, domainSinkID, domainSourceID, controlDomainID) VALUES (?,?,?,?,?,?)"; - } - else - { - //check if the ID already exists - if (existGateway(gatewayData.gatewayID)) - return (E_ALREADY_EXISTS); - command = "INSERT INTO " + std::string(GATEWAY_TABLE) + "(name, sinkID, sourceID, domainSinkID, domainSourceID, controlDomainID, gatewayID) VALUES (?,?,?,?,?,?,?)"; - } - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, gatewayData.name.c_str(), gatewayData.name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(query, 2, gatewayData.sinkID) - MY_SQLITE_BIND_INT(query, 3, gatewayData.sourceID) - MY_SQLITE_BIND_INT(query, 4, gatewayData.domainSinkID) - MY_SQLITE_BIND_INT(query, 5, gatewayData.domainSourceID) - MY_SQLITE_BIND_INT(query, 6, gatewayData.controlDomainID) - - //if the ID is not created, we add it to the query - if (gatewayData.gatewayID != 0) - { - MY_SQLITE_BIND_INT(query, 7, gatewayData.gatewayID) - } - - //if the first static sink is entered, we need to set it onto the boundary - else if (mFirstStaticGateway) - { - MY_SQLITE_BIND_INT(query, 7, DYNAMIC_ID_BOUNDARY) - mFirstStaticGateway = false; - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterGatewayDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - gatewayID = sqlite3_last_insert_rowid(mpDatabase); - - //now the convertion matrix todo: change the map implementation sometimes to blob in sqlite - mListConnectionFormat.insert(std::make_pair(gatewayID, gatewayData.convertionMatrix)); - - command = "CREATE TABLE GatewaySourceFormat" + i2s(gatewayID) + std::string("(soundFormat INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - command = "CREATE TABLE GatewaySinkFormat" + i2s(gatewayID) + std::string("(soundFormat INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO GatewaySourceFormat" + i2s(gatewayID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = gatewayData.listSourceFormats.begin(); - for (; connectionFormatIterator < gatewayData.listSourceFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterGatewayDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - - command = "INSERT INTO GatewaySinkFormat" + i2s(gatewayID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - connectionFormatIterator = gatewayData.listSinkFormats.begin(); - for (; connectionFormatIterator < gatewayData.listSinkFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterGatewayDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::enterGatewayDB entered new gateway with name", gatewayData.name, "sourceID:", gatewayData.sourceID, "sinkID:", gatewayData.sinkID, "assigned ID:", gatewayID); - am_Gateway_s gateway = gatewayData; - gateway.gatewayID = gatewayID; - if (mpDatabaseObserver) - mpDatabaseObserver->newGateway(gateway); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterConverterDB(const am_Converter_s & converterData, am_converterID_t & converterID) -{ - assert(converterData.converterID<DYNAMIC_ID_BOUNDARY); - assert(converterData.sinkID!=0); - assert(converterData.sourceID!=0); - assert(converterData.domainID!=0); - assert(!converterData.name.empty()); - assert(!converterData.convertionMatrix.empty()); - assert(!converterData.listSinkFormats.empty()); - assert(!converterData.listSourceFormats.empty()); - - //might be that the sinks and sources are not there during registration time - //assert(existSink(gatewayData.sinkID)); - //assert(existSource(gatewayData.sourceID)); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - //if gatewayData is zero and the first Static Sink was already entered, the ID is created - if (converterData.converterID == 0 && !mFirstStaticConverter) - { - command = "INSERT INTO " + std::string(CONVERTER_TABLE) + "(name, sinkID, sourceID, domainID) VALUES (?,?,?,?)"; - } - else - { - //check if the ID already exists - if (existConverter(converterData.converterID)) - return (E_ALREADY_EXISTS); - command = "INSERT INTO " + std::string(CONVERTER_TABLE) + "(name, sinkID, sourceID, domainID, converterID) VALUES (?,?,?,?,?)"; - } - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, converterData.name.c_str(), converterData.name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(query, 2, converterData.sinkID) - MY_SQLITE_BIND_INT(query, 3, converterData.sourceID) - MY_SQLITE_BIND_INT(query, 4, converterData.domainID) - - //if the ID is not created, we add it to the query - if (converterData.converterID != 0) - { - MY_SQLITE_BIND_INT(query, 5, converterData.converterID) - } - - //if the first static sink is entered, we need to set it onto the boundary - else if (mFirstStaticConverter) - { - MY_SQLITE_BIND_INT(query, 5, DYNAMIC_ID_BOUNDARY) - mFirstStaticConverter = false; - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterConverterDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - converterID = sqlite3_last_insert_rowid(mpDatabase); - - //now the convertion matrix todo: change the map implementation sometimes to blob in sqlite - mListConnectionFormat.insert(std::make_pair(converterID, converterData.convertionMatrix)); - - command = "CREATE TABLE ConverterSourceFormat" + i2s(converterID) + std::string("(soundFormat INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - command = "CREATE TABLE ConverterSinkFormat" + i2s(converterID) + std::string("(soundFormat INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO ConverterSourceFormat" + i2s(converterID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = converterData.listSourceFormats.begin(); - for (; connectionFormatIterator < converterData.listSourceFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterConverterDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - - command = "INSERT INTO ConverterSinkFormat" + i2s(converterID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - connectionFormatIterator = converterData.listSinkFormats.begin(); - for (; connectionFormatIterator < converterData.listSinkFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterConverterDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::enterConverterDB entered new gateway with name", converterData.name, "sourceID:", converterData.sourceID, "sinkID:", converterData.sinkID, "assigned ID:", converterID); - am_Converter_s converter = converterData; - converter.converterID = converterID; - if (mpDatabaseObserver) - mpDatabaseObserver->newConverter(converter); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterSourceDB(const am_Source_s & sourceData, am_sourceID_t & sourceID) -{ - assert(sourceData.sourceID<DYNAMIC_ID_BOUNDARY); - assert(sourceData.domainID!=0); - assert(!sourceData.name.empty()); - assert(sourceData.sourceClassID!=0); - // \todo: need to check if class exists? - assert(!sourceData.listConnectionFormats.empty()); - assert(sourceData.sourceState>=SS_UNKNNOWN && sourceData.sourceState<=SS_MAX); - - sqlite3_stmt* query = NULL; - ; - int eCode = 0; - std::string command = "SELECT sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE name=? AND reserved=1"; - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, sourceData.name.c_str(), sourceData.name.size(), SQLITE_STATIC) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - command = "UPDATE " + std::string(SOURCE_TABLE) + " SET name=?, domainID=?, sourceClassID=?, sourceState=?, volume=?, visible=?, availability=?, availabilityReason=?, interruptState=?, reserved=? WHERE sourceID=" + i2s(sqlite3_column_int(query, 0)); - } - else if (eCode == SQLITE_DONE) - { - //if sinkID is zero and the first Static Sink was already entered, the ID is created - if (sourceData.sourceID == 0 && !mFirstStaticSource && !existSourceName(sourceData.name)) - { - command = "INSERT INTO " + std::string(SOURCE_TABLE) + "(name, domainID, sourceClassID, sourceState, volume, visible, availability, availabilityReason, interruptState, reserved) VALUES (?,?,?,?,?,?,?,?,?,?)"; - } - else - { - //check if the ID already exists - if (existSourceNameOrID(sourceData.sourceID, sourceData.name)) - { - MY_SQLITE_FINALIZE(query) - return (E_ALREADY_EXISTS); - } - command = "INSERT INTO " + std::string(SOURCE_TABLE) + "(name, domainID, sourceClassID, sourceState, volume, visible, availability, availabilityReason, interruptState, reserved, sourceID) VALUES (?,?,?,?,?,?,?,?,?,?,?)"; - } - } - else - { - logError("DatabaseHandler::enterSourceDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, sourceData.name.c_str(), sourceData.name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(query, 2, sourceData.domainID) - MY_SQLITE_BIND_INT(query, 3, sourceData.sourceClassID) - MY_SQLITE_BIND_INT(query, 4, sourceData.sourceState) - MY_SQLITE_BIND_INT(query, 5, sourceData.volume) - MY_SQLITE_BIND_INT(query, 6, sourceData.visible) - MY_SQLITE_BIND_INT(query, 7, sourceData.available.availability) - MY_SQLITE_BIND_INT(query, 8, sourceData.available.availabilityReason) - MY_SQLITE_BIND_INT(query, 9, sourceData.interruptState) - MY_SQLITE_BIND_INT(query, 10, 0) - - //if the ID is not created, we add it to the query - if (sourceData.sourceID != 0) - { - MY_SQLITE_BIND_INT(query, 11, sourceData.sourceID) - } - - //if the first static sink is entered, we need to set it onto the boundary - else if (mFirstStaticSource) - { - MY_SQLITE_BIND_INT(query, 11, DYNAMIC_ID_BOUNDARY) - mFirstStaticSource = false; - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSourceDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - //now read back the sinkID - command = "SELECT sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE name=?"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, sourceData.name.c_str(), sourceData.name.size(), SQLITE_STATIC) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sourceID = sqlite3_column_int(query, 0); - } - else - { - sourceID = 0; - logError("DatabaseHandler::existSink database error!:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - //now we need to create the additional tables: - command = "CREATE TABLE SourceConnectionFormat" + i2s(sourceID) + std::string("(soundFormat INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - command = "CREATE TABLE SourceSoundProperty" + i2s(sourceID) + std::string("(soundPropertyType INTEGER, value INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - command = "CREATE TABLE SourceNotificationConfiguration" + i2s(sourceID) + std::string("(type INTEGER, status INTEGER, parameter INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO SourceConnectionFormat" + i2s(sourceID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = sourceData.listConnectionFormats.begin(); - for (; connectionFormatIterator != sourceData.listConnectionFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSourceDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - - //Fill SinkSoundProperties - command = "INSERT INTO SourceSoundProperty" + i2s(sourceID) + std::string("(soundPropertyType,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_SoundProperty_s>::const_iterator SoundPropertyIterator = sourceData.listSoundProperties.begin(); - for (; SoundPropertyIterator != sourceData.listSoundProperties.end(); ++SoundPropertyIterator) - { - MY_SQLITE_BIND_INT(query, 1, SoundPropertyIterator->type) - MY_SQLITE_BIND_INT(query, 2, SoundPropertyIterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - //Fill NotificationConfigurations - command = "INSERT INTO SourceNotificationConfiguration" + i2s(sourceID) + std::string("(type,status,parameter) VALUES (?,?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_NotificationConfiguration_s>::const_iterator NotificationConfigurationIterator(sourceData.listNotificationConfigurations.begin()); - for (; NotificationConfigurationIterator < sourceData.listNotificationConfigurations.end(); ++NotificationConfigurationIterator) - { - MY_SQLITE_BIND_INT(query, 1, NotificationConfigurationIterator->type) - MY_SQLITE_BIND_INT(query, 2, NotificationConfigurationIterator->status) - MY_SQLITE_BIND_INT(query, 3, NotificationConfigurationIterator->parameter) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - if (sourceData.visible == true) - { - command = "CREATE TABLE SourceMainSoundProperty" + i2s(sourceID) + std::string("(soundPropertyType INTEGER, value INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - //Fill MainSinkSoundProperties - command = "INSERT INTO SourceMainSoundProperty" + i2s(sourceID) + std::string("(soundPropertyType,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_MainSoundProperty_s>::const_iterator mainSoundPropertyIterator = sourceData.listMainSoundProperties.begin(); - for (; mainSoundPropertyIterator != sourceData.listMainSoundProperties.end(); ++mainSoundPropertyIterator) - { - MY_SQLITE_BIND_INT(query, 1, mainSoundPropertyIterator->type) - MY_SQLITE_BIND_INT(query, 2, mainSoundPropertyIterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSourceDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - - //now we got MainNotificationConfigurations as well - command = "CREATE TABLE SourceMainNotificationConfiguration" + i2s(sourceID) + std::string("(type INTEGER, status INTEGER, parameter INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - command = "INSERT INTO SourceMainNotificationConfiguration" + i2s(sourceID) + std::string("(type,status,parameter) VALUES (?,?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_NotificationConfiguration_s>::const_iterator mainNotificationConfigurationIterator(sourceData.listMainNotificationConfigurations.begin()); - for (; mainNotificationConfigurationIterator != sourceData.listMainNotificationConfigurations.end(); ++mainNotificationConfigurationIterator) - { - MY_SQLITE_BIND_INT(query, 1, mainNotificationConfigurationIterator->type) - MY_SQLITE_BIND_INT(query, 2, mainNotificationConfigurationIterator->status) - MY_SQLITE_BIND_INT(query, 3, mainNotificationConfigurationIterator->parameter) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - logInfo("DatabaseHandler::enterSourceDB entered new source with name", sourceData.name, "domainID:", sourceData.domainID, "classID:", sourceData.sourceClassID, "visible:", sourceData.visible, "assigned ID:", sourceID); - - am_Source_s source = sourceData; - source.sourceID = sourceID; - if (mpDatabaseObserver) - mpDatabaseObserver->newSource(source); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeMainConnectionRouteDB(const am_mainConnectionID_t mainconnectionID, const std::vector<am_connectionID_t>& listConnectionID) -{ - assert(mainconnectionID!=0); - if (!existMainConnection(mainconnectionID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - int16_t delay = 0; - command = "SELECT delay FROM " + std::string(CONNECTION_TABLE) + (" WHERE connectionID=?"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_connectionID_t>::const_iterator elementIterator = listConnectionID.begin(); - for (; elementIterator < listConnectionID.end(); ++elementIterator) - { - MY_SQLITE_BIND_INT(query, 1, *elementIterator) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - int16_t temp_delay = sqlite3_column_int(query, 1); - if (temp_delay != -1 && delay != -1) - delay += temp_delay; - else - delay = -1; - } - else - { - logError("DatabaseHandler::changeMainConnectionRouteDB did not find route for MainConnection: ", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - MY_SQLITE_FINALIZE(query) - - //now we delete the data in the table - command = "DELETE from MainConnectionRoute" + i2s(mainconnectionID); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - command = "INSERT INTO MainConnectionRoute" + i2s(mainconnectionID) + "(connectionID) VALUES (?)"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_connectionID_t>::const_iterator listConnectionIterator(listConnectionID.begin()); - for (; listConnectionIterator != listConnectionID.end(); ++listConnectionIterator) - { - MY_SQLITE_BIND_INT(query, 1, *listConnectionIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainConnectionRouteDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - if (changeDelayMainConnection(delay,mainconnectionID)!=E_OK) - logError("DatabaseHandler::changeMainConnectionRouteDB error while changing mainConnectionDelay to ", delay); - - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeMainConnectionRouteDB entered new route:", mainconnectionID); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeMainConnectionStateDB(const am_mainConnectionID_t mainconnectionID, const am_ConnectionState_e connectionState) -{ - assert(mainconnectionID!=0); - assert(connectionState>=CS_UNKNOWN && connectionState<=CS_MAX); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existMainConnection(mainconnectionID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(MAINCONNECTION_TABLE) + " SET connectionState=? WHERE mainConnectionID=" + i2s(mainconnectionID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, connectionState) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainConnectionStateDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeMainConnectionStateDB changed mainConnectionState of MainConnection:", mainconnectionID, "to:", connectionState); - - if (mpDatabaseObserver) - mpDatabaseObserver->mainConnectionStateChanged(mainconnectionID, connectionState); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSinkMainVolumeDB(const am_mainVolume_t mainVolume, const am_sinkID_t sinkID) -{ - assert(sinkID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(SINK_TABLE) + " SET mainVolume=? WHERE sinkID=" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, mainVolume) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSinkMainVolumeDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeSinkMainVolumeDB changed mainVolume of sink:", sinkID, "to:", mainVolume); - - if (mpDatabaseObserver) - mpDatabaseObserver->volumeChanged(sinkID, mainVolume); - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSinkAvailabilityDB(const am_Availability_s & availability, const am_sinkID_t sinkID) -{ - assert(sinkID!=0); - assert(availability.availability>=A_UNKNOWN && availability.availability<=A_MAX); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(SINK_TABLE) + " SET availability=?, availabilityReason=? WHERE sinkID=" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, availability.availability) - MY_SQLITE_BIND_INT(query, 2, availability.availabilityReason) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSinkAvailabilityDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - assert(sinkID!=0); - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeSinkAvailabilityDB changed sinkAvailability of sink:", sinkID, "to:", availability.availability, "Reason:", availability.availabilityReason); - - if (mpDatabaseObserver && sourceVisible(sinkID)) - mpDatabaseObserver->sinkAvailabilityChanged(sinkID, availability); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changDomainStateDB(const am_DomainState_e domainState, const am_domainID_t domainID) -{ - assert(domainID!=0); - assert(domainState>=DS_UNKNOWN && domainState<=DS_MAX); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existDomain(domainID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(DOMAIN_TABLE) + " SET state=? WHERE domainID=" + i2s(domainID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, domainState) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changDomainStateDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::changDomainStateDB changed domainState of domain:", domainID, "to:", domainState); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSinkMuteStateDB(const am_MuteState_e muteState, const am_sinkID_t sinkID) -{ - assert(sinkID!=0); - assert(muteState>=MS_UNKNOWN && muteState<=MS_MAX); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(SINK_TABLE) + " SET muteState=? WHERE sinkID=" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, muteState) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSinkMuteStateDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - assert(sinkID!=0); - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeSinkMuteStateDB changed sinkMuteState of sink:", sinkID, "to:", muteState); - - if (mpDatabaseObserver) - mpDatabaseObserver->sinkMuteStateChanged(sinkID, muteState); - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeMainSinkSoundPropertyDB(const am_MainSoundProperty_s & soundProperty, const am_sinkID_t sinkID) -{ - assert(sinkID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE SinkMainSoundProperty" + i2s(sinkID) + " SET value=? WHERE soundPropertyType=" + i2s(soundProperty.type); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, soundProperty.value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainSinkSoundPropertyDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - assert(sinkID!=0); - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeMainSinkSoundPropertyDB changed MainSinkSoundProperty of sink:", sinkID, "type:", soundProperty.type, "to:", soundProperty.value); - if (mpDatabaseObserver) - mpDatabaseObserver->mainSinkSoundPropertyChanged(sinkID, soundProperty); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeMainSourceSoundPropertyDB(const am_MainSoundProperty_s & soundProperty, const am_sourceID_t sourceID) -{ - assert(sourceID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE SourceMainSoundProperty" + i2s(sourceID) + " SET value=? WHERE soundPropertyType=" + i2s(soundProperty.type); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, soundProperty.value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainSourceSoundPropertyDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::changeMainSourceSoundPropertyDB changed MainSinkSoundProperty of source:", sourceID, "type:", soundProperty.type, "to:", soundProperty.value); - - if (mpDatabaseObserver) - mpDatabaseObserver->mainSourceSoundPropertyChanged(sourceID, soundProperty); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSourceAvailabilityDB(const am_Availability_s & availability, const am_sourceID_t sourceID) -{ - assert(sourceID!=0); - assert(availability.availability>=A_UNKNOWN && availability.availability<=A_MAX); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(SOURCE_TABLE) + " SET availability=?, availabilityReason=? WHERE sourceID=" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, availability.availability) - MY_SQLITE_BIND_INT(query, 2, availability.availabilityReason) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSourceAvailabilityDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::changeSourceAvailabilityDB changed changeSourceAvailabilityDB of source:", sourceID, "to:", availability.availability, "Reason:", availability.availabilityReason); - - if (mpDatabaseObserver && sourceVisible(sourceID)) - mpDatabaseObserver->sourceAvailabilityChanged(sourceID, availability); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSystemPropertyDB(const am_SystemProperty_s & property) -{ - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "UPDATE " + std::string(SYSTEM_TABLE) + " set value=? WHERE type=?"; - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, property.value) - MY_SQLITE_BIND_INT(query, 2, property.type) - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSystemPropertyDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::changeSystemPropertyDB changed system property"); - - if (mpDatabaseObserver) - mpDatabaseObserver->systemPropertyChanged(property); - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeMainConnectionDB(const am_mainConnectionID_t mainConnectionID) -{ - assert(mainConnectionID!=0); - - if (!existMainConnection(mainConnectionID)) - { - return (E_NON_EXISTENT); - } - std::string command = "DELETE from " + std::string(MAINCONNECTION_TABLE) + " WHERE mainConnectionID=" + i2s(mainConnectionID); - std::string command1 = "DROP table MainConnectionRoute" + i2s(mainConnectionID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - if (!sqQuery(command1)) - return (E_DATABASE_ERROR); - logInfo("DatabaseHandler::removeMainConnectionDB removed:", mainConnectionID); - if (mpDatabaseObserver) - { - mpDatabaseObserver->mainConnectionStateChanged(mainConnectionID, CS_DISCONNECTED); - mpDatabaseObserver->removedMainConnection(mainConnectionID); - } - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeSinkDB(const am_sinkID_t sinkID) -{ - assert(sinkID!=0); - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - - bool visible = sinkVisible(sinkID); - - std::string command = "DELETE from " + std::string(SINK_TABLE) + " WHERE sinkID=" + i2s(sinkID); - std::string command1 = "DROP table SinkConnectionFormat" + i2s(sinkID); - std::string command2 = "DROP table SinkSoundProperty" + i2s(sinkID); - std::string command3 = "DROP table SinkMainSoundProperty" + i2s(sinkID); - std::string command4 = "DROP table SinkNotificationConfiguration" + i2s(sinkID); - std::string command5 = "DROP table SinkMainNotificationConfiguration" + i2s(sinkID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - if (!sqQuery(command1)) - return (E_DATABASE_ERROR); - if (!sqQuery(command2)) - return (E_DATABASE_ERROR); - if (!sqQuery(command4)) - return (E_DATABASE_ERROR); - if (visible) //only drop table if it ever existed - { - if (!sqQuery(command3)) - return (E_DATABASE_ERROR); - if (!sqQuery(command5)) - return (E_DATABASE_ERROR); - } - logInfo("DatabaseHandler::removeSinkDB removed:", sinkID); - - if (mpDatabaseObserver != NULL) - mpDatabaseObserver->removedSink(sinkID, visible); - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeSourceDB(const am_sourceID_t sourceID) -{ - assert(sourceID!=0); - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - - bool visible = sourceVisible(sourceID); - - std::string command = "DELETE from " + std::string(SOURCE_TABLE) + " WHERE sourceID=" + i2s(sourceID); - std::string command1 = "DROP table SourceConnectionFormat" + i2s(sourceID); - std::string command2 = "DROP table SourceMainSoundProperty" + i2s(sourceID); - std::string command3 = "DROP table SourceSoundProperty" + i2s(sourceID); - std::string command4 = "DROP table SourceNotificationConfiguration" + i2s(sourceID); - std::string command5 = "DROP table SourceMainNotificationConfiguration" + i2s(sourceID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - if (!sqQuery(command1)) - return (E_DATABASE_ERROR); - if (!sqQuery(command3)) - return (E_DATABASE_ERROR); - if (!sqQuery(command4)) - return (E_DATABASE_ERROR); - - if(visible) - { - if (!sqQuery(command2)) - return (E_DATABASE_ERROR); - if (!sqQuery(command5)) - return (E_DATABASE_ERROR); - } - logInfo("DatabaseHandler::removeSourceDB removed:", sourceID); - if (mpDatabaseObserver) - mpDatabaseObserver->removedSource(sourceID, visible); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeGatewayDB(const am_gatewayID_t gatewayID) -{ - assert(gatewayID!=0); - - if (!existGateway(gatewayID)) - { - return (E_NON_EXISTENT); - } - std::string command = "DELETE from " + std::string(GATEWAY_TABLE) + " WHERE gatewayID=" + i2s(gatewayID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - logInfo("DatabaseHandler::removeGatewayDB removed:", gatewayID); - if (mpDatabaseObserver) - mpDatabaseObserver->removeGateway(gatewayID); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeConverterDB(const am_converterID_t converterID) -{ - assert(converterID!=0); - - if (!existConverter(converterID)) - { - return (E_NON_EXISTENT); - } - std::string command = "DELETE from " + std::string(CONVERTER_TABLE) + " WHERE converterID=" + i2s(converterID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - logInfo("DatabaseHandler::removeConverterDB removed:", converterID); - if (mpDatabaseObserver) - mpDatabaseObserver->removeConverter(converterID); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeCrossfaderDB(const am_crossfaderID_t crossfaderID) -{ - assert(crossfaderID!=0); - - if (!existCrossFader(crossfaderID)) - { - return (E_NON_EXISTENT); - } - std::string command = "DELETE from " + std::string(CROSSFADER_TABLE) + " WHERE crossfaderID=" + i2s(crossfaderID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - logInfo("DatabaseHandler::removeCrossfaderDB removed:", crossfaderID); - if (mpDatabaseObserver) - mpDatabaseObserver->removeCrossfader(crossfaderID); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeDomainDB(const am_domainID_t domainID) -{ - assert(domainID!=0); - - if (!existDomain(domainID)) - { - return (E_NON_EXISTENT); - } - std::string command = "DELETE from " + std::string(DOMAIN_TABLE) + " WHERE domainID=" + i2s(domainID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - logInfo("DatabaseHandler::removeDomainDB removed:", domainID); - if (mpDatabaseObserver) - mpDatabaseObserver->removeDomain(domainID); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeSinkClassDB(const am_sinkClass_t sinkClassID) -{ - assert(sinkClassID!=0); - - if (!existSinkClass(sinkClassID)) - { - return (E_NON_EXISTENT); - } - std::string command = "DELETE from " + std::string(SINK_CLASS_TABLE) + " WHERE sinkClassID=" + i2s(sinkClassID); - std::string command1 = "DROP table SinkClassProperties" + i2s(sinkClassID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - if (!sqQuery(command1)) - return (E_DATABASE_ERROR); - - logInfo("DatabaseHandler::removeSinkClassDB removed:", sinkClassID); - if (mpDatabaseObserver) - mpDatabaseObserver->numberOfSinkClassesChanged(); - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeSourceClassDB(const am_sourceClass_t sourceClassID) -{ - assert(sourceClassID!=0); - - if (!existSourceClass(sourceClassID)) - { - return (E_NON_EXISTENT); - } - std::string command = "DELETE from " + std::string(SOURCE_CLASS_TABLE) + " WHERE sourceClassID=" + i2s(sourceClassID); - std::string command1 = "DROP table SourceClassProperties" + i2s(sourceClassID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - if (!sqQuery(command1)) - return (E_DATABASE_ERROR); - logInfo("DatabaseHandler::removeSourceClassDB removed:", sourceClassID); - if (mpDatabaseObserver) - mpDatabaseObserver->numberOfSourceClassesChanged(); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::removeConnection(const am_connectionID_t connectionID) -{ - assert(connectionID!=0); - - std::string command = "DELETE from " + std::string(CONNECTION_TABLE) + " WHERE connectionID=" + i2s(connectionID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - logInfo("DatabaseHandler::removeConnection removed:", connectionID); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSourceClassInfoDB(const am_sourceID_t sourceID, am_SourceClass_s & classInfo) const -{ - assert(sourceID!=0); - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - am_ClassProperty_s propertyTemp; - std::string command = "SELECT sourceClassID FROM " + std::string(SOURCE_TABLE) + " WHERE sourceID=" + (i2s(sourceID)); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - classInfo.sourceClassID = sqlite3_column_int(query, 0); - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::getSourceClassInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - command = "SELECT name FROM " + std::string(SOURCE_CLASS_TABLE) + " WHERE sourceClassID=" + (i2s(classInfo.sourceClassID)); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - classInfo.name = std::string((const char*) sqlite3_column_text(query, 0)); - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::getSourceClassInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - //read out Properties - command = "SELECT classProperty, value FROM SourceClassProperties" + i2s(classInfo.sourceClassID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - propertyTemp.classProperty = (am_CustomClassProperty_t) sqlite3_column_int(query, 0); - propertyTemp.value = sqlite3_column_int(query, 1); - classInfo.listClassProperties.push_back(propertyTemp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getSourceClassInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSinkInfoDB(const am_sinkID_t sinkID, am_Sink_s & sinkData) const -{ - - assert(sinkID!=0); - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - - sqlite3_stmt* query = NULL, *qConnectionFormat = NULL, *qSoundProperty = NULL, *qMAinSoundProperty = NULL, *qMainNotification = NULL, *qNotification = NULL; - int eCode = 0; - am_CustomConnectionFormat_t tempConnectionFormat; - am_SoundProperty_s tempSoundProperty; - am_MainSoundProperty_s tempMainSoundProperty; - am_NotificationConfiguration_s tempNotificationConfiguration,tempMainNotification; - std::string command = "SELECT name, domainID, sinkClassID, volume, visible, availability, availabilityReason, muteState, mainVolume, sinkID FROM " + std::string(SINK_TABLE) + " WHERE reserved=0 and sinkID=" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sinkData.name = std::string((const char*) sqlite3_column_text(query, 0)); - sinkData.domainID = sqlite3_column_int(query, 1); - sinkData.sinkClassID = sqlite3_column_int(query, 2); - sinkData.volume = sqlite3_column_int(query, 3); - sinkData.visible = sqlite3_column_int(query, 4); - sinkData.available.availability = (am_Availability_e) sqlite3_column_int(query, 5); - sinkData.available.availabilityReason = (am_CustomAvailabilityReason_t) sqlite3_column_int(query, 6); - sinkData.muteState = (am_MuteState_e) sqlite3_column_int(query, 7); - sinkData.mainVolume = sqlite3_column_int(query, 8); - sinkData.sinkID = sqlite3_column_int(query, 9); - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM SinkConnectionFormat" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qConnectionFormat, NULL) - while ((eCode = sqlite3_step(qConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qConnectionFormat, 0); - sinkData.listConnectionFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qConnectionFormat) - - //read out sound properties - std::string commandSoundProperty = "SELECT soundPropertyType, value FROM SinkSoundProperty" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandSoundProperty.c_str(), -1, &qSoundProperty, NULL) - while ((eCode = sqlite3_step(qSoundProperty)) == SQLITE_ROW) - { - tempSoundProperty.type = (am_CustomSoundPropertyType_t) sqlite3_column_int(qSoundProperty, 0); - tempSoundProperty.value = sqlite3_column_int(qSoundProperty, 1); - sinkData.listSoundProperties.push_back(tempSoundProperty); - } - - MY_SQLITE_FINALIZE(qSoundProperty) - - std::string notificationCommand = "SELECT type, status, parameter FROM SinkNotificationConfiguration" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, notificationCommand.c_str(), -1, &qNotification, NULL) - - while ((eCode = sqlite3_step(qNotification)) == SQLITE_ROW) - { - tempNotificationConfiguration.type = static_cast<am_CustomNotificationType_t>(sqlite3_column_int(qNotification, 0)); - tempNotificationConfiguration.status = static_cast<am_NotificationStatus_e>(sqlite3_column_int(qNotification, 1)); - tempNotificationConfiguration.parameter= static_cast<int16_t>(sqlite3_column_int(qNotification, 2)); - sinkData.listNotificationConfigurations.push_back(tempNotificationConfiguration); - } - MY_SQLITE_FINALIZE(qNotification) - - if (sinkData.visible) - { - - //read out MainSoundProperties - std::string commandMainSoundProperty = "SELECT soundPropertyType, value FROM SinkMainSoundProperty" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandMainSoundProperty.c_str(), -1, &qMAinSoundProperty, NULL) - while ((eCode = sqlite3_step(qMAinSoundProperty)) == SQLITE_ROW) - { - tempMainSoundProperty.type = (am_CustomMainSoundPropertyType_t) sqlite3_column_int(qMAinSoundProperty, 0); - tempMainSoundProperty.value = sqlite3_column_int(qMAinSoundProperty, 1); - sinkData.listMainSoundProperties.push_back(tempMainSoundProperty); - } - - MY_SQLITE_FINALIZE(qMAinSoundProperty) - - std::string mainNotificationCommand = "SELECT type, status, parameter FROM SinkMainNotificationConfiguration" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, mainNotificationCommand.c_str(), -1, &qMainNotification, NULL) - - while ((eCode = sqlite3_step(qMainNotification)) == SQLITE_ROW) - { - tempMainNotification.type = static_cast<am_CustomNotificationType_t>(sqlite3_column_int(qMainNotification, 0)); - tempMainNotification.status = static_cast<am_NotificationStatus_e>(sqlite3_column_int(qMainNotification, 1)); - tempMainNotification.parameter= static_cast<int16_t>(sqlite3_column_int(qMainNotification, 2)); - sinkData.listMainNotificationConfigurations.push_back(tempMainNotification); - } - MY_SQLITE_FINALIZE(qMainNotification) - } - } - - else if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getSinkInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSourceInfoDB(const am_sourceID_t sourceID, am_Source_s & sourceData) const -{ - assert(sourceID!=0); - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - - sqlite3_stmt* query = NULL, *qConnectionFormat = NULL, *qSoundProperty = NULL, *qMAinSoundProperty = NULL, *qMainNotification = NULL, *qNotification = NULL; - int eCode = 0; - am_CustomConnectionFormat_t tempConnectionFormat; - am_SoundProperty_s tempSoundProperty; - am_MainSoundProperty_s tempMainSoundProperty; - am_NotificationConfiguration_s tempNotificationConfiguration,tempMainNotification; - std::string command = "SELECT name, domainID, sourceClassID, sourceState, volume, visible, availability, availabilityReason, interruptState, sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE reserved=0 AND sourceID=" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sourceData.name = std::string((const char*) sqlite3_column_text(query, 0)); - sourceData.domainID = sqlite3_column_int(query, 1); - sourceData.sourceClassID = sqlite3_column_int(query, 2); - sourceData.sourceState = (am_SourceState_e) sqlite3_column_int(query, 3); - sourceData.volume = sqlite3_column_int(query, 4); - sourceData.visible = sqlite3_column_int(query, 5); - sourceData.available.availability = (am_Availability_e) sqlite3_column_int(query, 6); - sourceData.available.availabilityReason = (am_CustomAvailabilityReason_t) sqlite3_column_int(query, 7); - sourceData.interruptState = (am_InterruptState_e) sqlite3_column_int(query, 8); - sourceData.sourceID = sqlite3_column_int(query, 9); - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM SourceConnectionFormat" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qConnectionFormat, NULL) - while ((eCode = sqlite3_step(qConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qConnectionFormat, 0); - sourceData.listConnectionFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qConnectionFormat) - - //read out sound properties - std::string commandSoundProperty = "SELECT soundPropertyType, value FROM SourceSoundProperty" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandSoundProperty.c_str(), -1, &qSoundProperty, NULL); - while ((eCode = sqlite3_step(qSoundProperty)) == SQLITE_ROW) - { - tempSoundProperty.type = (am_CustomSoundPropertyType_t) sqlite3_column_int(qSoundProperty, 0); - tempSoundProperty.value = sqlite3_column_int(qSoundProperty, 1); - sourceData.listSoundProperties.push_back(tempSoundProperty); - } - - MY_SQLITE_FINALIZE(qSoundProperty) - - std::string notificationCommand = "SELECT type, status, parameter FROM SourceNotificationConfiguration" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, notificationCommand.c_str(), -1, &qNotification, NULL) - - while ((eCode = sqlite3_step(qNotification)) == SQLITE_ROW) - { - tempNotificationConfiguration.type = static_cast<am_CustomNotificationType_t>(sqlite3_column_int(qNotification, 0)); - tempNotificationConfiguration.status = static_cast<am_NotificationStatus_e>(sqlite3_column_int(qNotification, 1)); - tempNotificationConfiguration.parameter= static_cast<int16_t>(sqlite3_column_int(qNotification, 2)); - sourceData.listNotificationConfigurations.push_back(tempNotificationConfiguration); - } - MY_SQLITE_FINALIZE(qNotification) - - if (sourceData.visible) - { - - //read out MainSoundProperties - std::string commandMainSoundProperty = "SELECT soundPropertyType, value FROM SourceMainSoundProperty" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandMainSoundProperty.c_str(), -1, &qMAinSoundProperty, NULL) - while ((eCode = sqlite3_step(qMAinSoundProperty)) == SQLITE_ROW) - { - tempMainSoundProperty.type = (am_CustomMainSoundPropertyType_t) sqlite3_column_int(qMAinSoundProperty, 0); - tempMainSoundProperty.value = sqlite3_column_int(qMAinSoundProperty, 1); - sourceData.listMainSoundProperties.push_back(tempMainSoundProperty); - } - - MY_SQLITE_FINALIZE(qMAinSoundProperty) - - std::string mainNotificationCommand = "SELECT type, status, parameter FROM SourceMainNotificationConfiguration" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, mainNotificationCommand.c_str(), -1, &qMainNotification, NULL) - - while ((eCode = sqlite3_step(qMainNotification)) == SQLITE_ROW) - { - tempMainNotification.type = static_cast<am_CustomNotificationType_t>(sqlite3_column_int(qMainNotification, 0)); - tempMainNotification.status = static_cast<am_NotificationStatus_e>(sqlite3_column_int(qMainNotification, 1)); - tempMainNotification.parameter= static_cast<int16_t>(sqlite3_column_int(qMainNotification, 2)); - sourceData.listMainNotificationConfigurations.push_back(tempMainNotification); - } - MY_SQLITE_FINALIZE(qMainNotification) - - } - } - else if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getSourceInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e am::CAmDatabaseHandlerSQLite::getMainConnectionInfoDB(const am_mainConnectionID_t mainConnectionID, am_MainConnection_s & mainConnectionData) const -{ - assert(mainConnectionID!=0); - if (!existMainConnection(mainConnectionID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt *query = NULL, *query1 = NULL; - int eCode = 0; - am_MainConnection_s temp; - std::string command = "SELECT mainConnectionID, sourceID, sinkID, connectionState, delay FROM " + std::string(MAINCONNECTION_TABLE) + " WHERE mainConnectionID=" + i2s(mainConnectionID); - std::string command1 = "SELECT connectionID FROM MainConnectionRoute"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - mainConnectionData.mainConnectionID = sqlite3_column_int(query, 0); - mainConnectionData.sourceID = sqlite3_column_int(query, 1); - mainConnectionData.sinkID = sqlite3_column_int(query, 2); - mainConnectionData.connectionState = (am_ConnectionState_e) sqlite3_column_int(query, 3); - mainConnectionData.delay = sqlite3_column_int(query, 4); - std::string statement = command1 + i2s(mainConnectionID); - MY_SQLITE_PREPARE_V2(mpDatabase, statement.c_str(), -1, &query1, NULL) - while ((eCode = sqlite3_step(query1)) == SQLITE_ROW) - { - mainConnectionData.listConnectionID.push_back(sqlite3_column_int(query1, 0)); - } - MY_SQLITE_FINALIZE(query1) - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getMainConnectionInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSinkClassInfoDB(const am_SinkClass_s& sinkClass) -{ - assert(sinkClass.sinkClassID!=0); - assert(!sinkClass.listClassProperties.empty()); - - sqlite3_stmt* query = NULL; - int eCode = 0; - - //check if the ID already exists - if (!existSinkClass(sinkClass.sinkClassID)) - return (E_NON_EXISTENT); - - //fill ConnectionFormats - std::string command = "UPDATE SinkClassProperties" + i2s(sinkClass.sinkClassID) + " set value=? WHERE classProperty=?;"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_ClassProperty_s>::const_iterator Iterator = sinkClass.listClassProperties.begin(); - for (; Iterator < sinkClass.listClassProperties.end(); ++Iterator) - { - MY_SQLITE_BIND_INT(query, 1, Iterator->value) - MY_SQLITE_BIND_INT(query, 2, Iterator->classProperty) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::setSinkClassInfoDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainSourceNotificationConfigurationDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - } - MY_SQLITE_RESET(query) - } - - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::setSinkClassInfoDB set setSinkClassInfo"); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSourceClassInfoDB(const am_SourceClass_s& sourceClass) -{ - assert(sourceClass.sourceClassID!=0); - assert(!sourceClass.listClassProperties.empty()); - - sqlite3_stmt* query = NULL; - int eCode = 0; - - //check if the ID already exists - if (!existSourceClass(sourceClass.sourceClassID)) - return (E_NON_EXISTENT); - - //fill ConnectionFormats - std::string command = "UPDATE SourceClassProperties" + i2s(sourceClass.sourceClassID) + " set value=? WHERE classProperty=?;"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_ClassProperty_s>::const_iterator Iterator = sourceClass.listClassProperties.begin(); - for (; Iterator < sourceClass.listClassProperties.end(); ++Iterator) - { - MY_SQLITE_BIND_INT(query, 1, Iterator->value) - MY_SQLITE_BIND_INT(query, 2, Iterator->classProperty) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::setSinkClassInfoDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::setSinkClassInfoDB set setSinkClassInfo"); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSinkClassInfoDB(const am_sinkID_t sinkID, am_SinkClass_s & sinkClass) const -{ - assert(sinkID!=0); - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - am_ClassProperty_s propertyTemp; - std::string command = "SELECT sinkClassID FROM " + std::string(SINK_TABLE) + " WHERE sinkID=" + (i2s(sinkID)); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sinkClass.sinkClassID = sqlite3_column_int(query, 0); - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::getSinkClassInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - command = "SELECT name FROM " + std::string(SINK_CLASS_TABLE) + " WHERE sinkClassID=" + (i2s(sinkClass.sinkClassID)); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sinkClass.name = std::string((const char*) sqlite3_column_text(query, 0)); - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::getSinkClassInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - //read out Properties - command = "SELECT classProperty, value FROM SinkClassProperties" + i2s(sinkClass.sinkClassID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - propertyTemp.classProperty = (am_CustomClassProperty_t) sqlite3_column_int(query, 0); - propertyTemp.value = sqlite3_column_int(query, 1); - sinkClass.listClassProperties.push_back(propertyTemp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getSinkClassInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getGatewayInfoDB(const am_gatewayID_t gatewayID, am_Gateway_s & gatewayData) const -{ - assert(gatewayID!=0); - if (!existGateway(gatewayID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL, *qSinkConnectionFormat = NULL, *qSourceConnectionFormat = NULL; - int eCode = 0; - am_CustomConnectionFormat_t tempConnectionFormat; - std::string command = "SELECT name, sinkID, sourceID, domainSinkID, domainSourceID, controlDomainID, gatewayID FROM " + std::string(GATEWAY_TABLE) + " WHERE gatewayID=" + i2s(gatewayID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - gatewayData.name = std::string((const char*) sqlite3_column_text(query, 0)); - gatewayData.sinkID = sqlite3_column_int(query, 1); - gatewayData.sourceID = sqlite3_column_int(query, 2); - gatewayData.domainSinkID = sqlite3_column_int(query, 3); - gatewayData.domainSourceID = sqlite3_column_int(query, 4); - gatewayData.controlDomainID = sqlite3_column_int(query, 5); - gatewayData.gatewayID = sqlite3_column_int(query, 6); - - //convertionMatrix: - ListConnectionFormat::const_iterator iter = mListConnectionFormat.begin(); - iter = mListConnectionFormat.find(gatewayData.gatewayID); - if (iter == mListConnectionFormat.end()) - { - logError("DatabaseHandler::getGatewayInfoDB database error with convertionFormat"); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - gatewayData.convertionMatrix = iter->second; - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM GatewaySourceFormat" + i2s(gatewayData.gatewayID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qSourceConnectionFormat, NULL) - while ((eCode = sqlite3_step(qSourceConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qSourceConnectionFormat, 0); - gatewayData.listSourceFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qSourceConnectionFormat) - - //read out sound properties - commandConnectionFormat = "SELECT soundFormat FROM GatewaySinkFormat" + i2s(gatewayData.gatewayID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qSinkConnectionFormat, NULL) - while ((eCode = sqlite3_step(qSinkConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qSinkConnectionFormat, 0); - gatewayData.listSinkFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qSinkConnectionFormat) - - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getGatewayInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); - -} - -am_Error_e CAmDatabaseHandlerSQLite::getConverterInfoDB(const am_converterID_t converterID, am_Converter_s& converterData) const -{ - assert(converterID!=0); - if (!existConverter(converterID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL, *qSinkConnectionFormat = NULL, *qSourceConnectionFormat = NULL; - int eCode = 0; - am_CustomConnectionFormat_t tempConnectionFormat; - std::string command = "SELECT name, sinkID, sourceID, domainID, converterID FROM " + std::string(CONVERTER_TABLE) + " WHERE converterID=" + i2s(converterID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - converterData.name = std::string((const char*) sqlite3_column_text(query, 0)); - converterData.sinkID = sqlite3_column_int(query, 1); - converterData.sourceID = sqlite3_column_int(query, 2); - converterData.domainID = sqlite3_column_int(query, 3); - converterData.converterID = sqlite3_column_int(query, 4); - - //convertionMatrix: - ListConnectionFormat::const_iterator iter = mListConnectionFormat.begin(); - iter = mListConnectionFormat.find(converterData.converterID); - if (iter == mListConnectionFormat.end()) - { - logError("DatabaseHandler::getConverterInfoDB database error with convertionFormat"); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - converterData.convertionMatrix = iter->second; - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM ConverterSourceFormat" + i2s(converterData.converterID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qSourceConnectionFormat, NULL) - while ((eCode = sqlite3_step(qSourceConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qSourceConnectionFormat, 0); - converterData.listSourceFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qSourceConnectionFormat) - - //read out sound properties - commandConnectionFormat = "SELECT soundFormat FROM ConverterSinkFormat" + i2s(converterData.converterID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qSinkConnectionFormat, NULL) - while ((eCode = sqlite3_step(qSinkConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qSinkConnectionFormat, 0); - converterData.listSinkFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qSinkConnectionFormat) - - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getConverterInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); - -} - -am_Error_e CAmDatabaseHandlerSQLite::getCrossfaderInfoDB(const am_crossfaderID_t crossfaderID, am_Crossfader_s & crossfaderData) const -{ - assert(crossfaderID!=0); - if (!existCrossFader(crossfaderID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "SELECT name, sinkID_A, sinkID_B, sourceID, hotSink,crossfaderID FROM " + std::string(CROSSFADER_TABLE) + " WHERE crossfaderID=" + i2s(crossfaderID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - crossfaderData.name = std::string((const char*) sqlite3_column_text(query, 0)); - crossfaderData.sinkID_A = sqlite3_column_int(query, 1); - crossfaderData.sinkID_B = sqlite3_column_int(query, 2); - crossfaderData.sourceID = sqlite3_column_int(query, 3); - crossfaderData.hotSink = static_cast<am_HotSink_e>(sqlite3_column_int(query, 4)); - crossfaderData.crossfaderID = sqlite3_column_int(query, 5); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getCrossfaderInfoDB SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSinksOfDomain(const am_domainID_t domainID, std::vector<am_sinkID_t> & listSinkID) const -{ - assert(domainID!=0); - listSinkID.clear(); - if (!existDomain(domainID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - am_sinkID_t temp; - std::string command = "SELECT sinkID FROM " + std::string(SINK_TABLE) + " WHERE reserved=0 AND domainID=" + (i2s(domainID)); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp = sqlite3_column_int(query, 0); - listSinkID.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSinksOfDomain SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSourcesOfDomain(const am_domainID_t domainID, std::vector<am_sourceID_t> & listSourceID) const -{ - assert(domainID!=0); - listSourceID.clear(); - if (!existDomain(domainID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - am_sourceID_t temp; - std::string command = "SELECT sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE reserved=0 AND domainID=" + i2s(domainID); - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp = sqlite3_column_int(query, 0); - listSourceID.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSourcesOfDomain SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListCrossfadersOfDomain(const am_domainID_t domainID, std::vector<am_crossfaderID_t> & listCrossfader) const -{ - assert(domainID!=0); - listCrossfader.clear(); - if (!existDomain(domainID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - am_crossfaderID_t temp; - - std::string command = "SELECT c.crossfaderID FROM " + std::string(CROSSFADER_TABLE) + " c," + std::string(SOURCE_TABLE) + " s WHERE c.sourceID=s.sourceID AND s.domainID=" + i2s(domainID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp = sqlite3_column_int(query, 0); - listCrossfader.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListCrossfadersOfDomain SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); - -} - -am_Error_e CAmDatabaseHandlerSQLite::getListGatewaysOfDomain(const am_domainID_t domainID, std::vector<am_gatewayID_t> & listGatewaysID) const -{ - assert(domainID!=0); - listGatewaysID.clear(); - if (!existDomain(domainID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - am_gatewayID_t temp; - - std::string command = "SELECT gatewayID FROM " + std::string(GATEWAY_TABLE) + " WHERE controlDomainID=" + i2s(domainID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp = sqlite3_column_int(query, 0); - listGatewaysID.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListGatewaysOfDomain SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListConvertersOfDomain(const am_domainID_t domainID, std::vector<am_converterID_t>& listConvertersID) const -{ - assert(domainID!=0); - listConvertersID.clear(); - if (!existDomain(domainID)) - { - return (E_NON_EXISTENT); - } - sqlite3_stmt* query = NULL; - int eCode = 0; - am_gatewayID_t temp; - - std::string command = "SELECT converterID FROM " + std::string(CONVERTER_TABLE) + " WHERE domainID=" + i2s(domainID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp = sqlite3_column_int(query, 0); - listConvertersID.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListConvertersOfDomain SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListMainConnections(std::vector<am_MainConnection_s> & listMainConnections) const -{ - listMainConnections.clear(); - sqlite3_stmt *query = NULL, *query1 = NULL; - int eCode = 0; - am_MainConnection_s temp; - std::string command = "SELECT mainConnectionID, sourceID, sinkID, connectionState, delay FROM " + std::string(MAINCONNECTION_TABLE); - std::string command1 = "SELECT connectionID FROM MainConnectionRoute"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.mainConnectionID = sqlite3_column_int(query, 0); - temp.sourceID = sqlite3_column_int(query, 1); - temp.sinkID = sqlite3_column_int(query, 2); - temp.connectionState = (am_ConnectionState_e) sqlite3_column_int(query, 3); - temp.delay = sqlite3_column_int(query, 4); - std::string statement = command1 + i2s(temp.mainConnectionID); - MY_SQLITE_PREPARE_V2(mpDatabase, statement.c_str(), -1, &query1, NULL) - while ((eCode = sqlite3_step(query1)) == SQLITE_ROW) - { - temp.listConnectionID.push_back(sqlite3_column_int(query1, 0)); - } - listMainConnections.push_back(temp); - MY_SQLITE_FINALIZE(query1) - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListMainConnections SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListDomains(std::vector<am_Domain_s> & listDomains) const -{ - listDomains.clear(); - sqlite3_stmt* query = NULL; - int eCode = 0; - am_Domain_s temp; - std::string command = "SELECT domainID, name, busname, nodename, early, complete, state FROM " + std::string(DOMAIN_TABLE) + " WHERE reserved=0"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.domainID = sqlite3_column_int(query, 0); - temp.name = std::string((const char*) sqlite3_column_text(query, 1)); - temp.busname = std::string((const char*) sqlite3_column_text(query, 2)); - temp.nodename = std::string((const char*) sqlite3_column_text(query, 3)); - temp.early = sqlite3_column_int(query, 4); - temp.complete = sqlite3_column_int(query, 5); - temp.state = (am_DomainState_e) sqlite3_column_int(query, 6); - listDomains.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListDomains SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListConnections(std::vector<am_Connection_s> & listConnections) const -{ - listConnections.clear(); - sqlite3_stmt* query = NULL; - int eCode = 0; - am_Connection_s temp; - std::string command = "SELECT connectionID, sourceID, sinkID, delay, connectionFormat FROM " + std::string(CONNECTION_TABLE) + " WHERE reserved=0"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.connectionID = sqlite3_column_int(query, 0); - temp.sourceID = sqlite3_column_int(query, 1); - temp.sinkID = sqlite3_column_int(query, 2); - temp.delay = sqlite3_column_int(query, 3); - temp.connectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(query, 4); - listConnections.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListConnections SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSinks(std::vector<am_Sink_s> & listSinks) const -{ - listSinks.clear(); - return enumerateSinks([&](const am_Sink_s & sink){ listSinks.push_back(sink);}); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSources(std::vector<am_Source_s> & listSources) const -{ - listSources.clear(); - return enumerateSources([&](const am_Source_s & source){ listSources.push_back(source);}); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSourceClasses(std::vector<am_SourceClass_s> & listSourceClasses) const -{ - listSourceClasses.clear(); - - sqlite3_stmt* query = NULL, *subQuery = NULL; - int eCode = 0, eCode1; - am_SourceClass_s classTemp; - am_ClassProperty_s propertyTemp; - - std::string command = "SELECT sourceClassID, name FROM " + std::string(SOURCE_CLASS_TABLE); - std::string command2; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - classTemp.sourceClassID = sqlite3_column_int(query, 0); - classTemp.name = std::string((const char*) sqlite3_column_text(query, 1)); - - //read out Properties - command2 = "SELECT classProperty, value FROM SourceClassProperties" + i2s(classTemp.sourceClassID); - MY_SQLITE_PREPARE_V2(mpDatabase, command2.c_str(), -1, &subQuery, NULL) - - while ((eCode1 = sqlite3_step(subQuery)) == SQLITE_ROW) - { - propertyTemp.classProperty = (am_CustomClassProperty_t) sqlite3_column_int(subQuery, 0); - propertyTemp.value = sqlite3_column_int(subQuery, 1); - classTemp.listClassProperties.push_back(propertyTemp); - } - - if (eCode1 != SQLITE_DONE) - { - logError("DatabaseHandler::getListSourceClasses SQLITE error code:", eCode1); - MY_SQLITE_FINALIZE(query) - MY_SQLITE_FINALIZE(subQuery) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(subQuery) - - listSourceClasses.push_back(classTemp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSourceClasses SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(subQuery) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListCrossfaders(std::vector<am_Crossfader_s> & listCrossfaders) const -{ - listCrossfaders.clear(); - sqlite3_stmt* query = NULL; - int eCode = 0; - am_Crossfader_s tempData; - std::string command = "SELECT name, sinkID_A, sinkID_B, sourceID, hotSink,crossfaderID FROM " + std::string(CROSSFADER_TABLE); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - tempData.name = std::string((const char*) sqlite3_column_text(query, 0)); - tempData.sinkID_A = sqlite3_column_int(query, 1); - tempData.sinkID_B = sqlite3_column_int(query, 2); - tempData.sourceID = sqlite3_column_int(query, 3); - tempData.hotSink = static_cast<am_HotSink_e>(sqlite3_column_int(query, 4)); - tempData.crossfaderID = sqlite3_column_int(query, 5); - listCrossfaders.push_back(tempData); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListCrossfaders SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListGateways(std::vector<am_Gateway_s> & listGateways) const -{ - listGateways.clear(); - return enumerateGateways([&](const am_Gateway_s & gateway){ listGateways.push_back(gateway);}); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListConverters(std::vector<am_Converter_s> & listConverters) const -{ - listConverters.clear(); - return enumerateConverters([&](const am_Converter_s & converter){ listConverters.push_back(converter);}); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSinkClasses(std::vector<am_SinkClass_s> & listSinkClasses) const -{ - listSinkClasses.clear(); - - sqlite3_stmt* query = NULL, *subQuery = NULL; - int eCode = 0; - am_SinkClass_s classTemp; - am_ClassProperty_s propertyTemp; - - std::string command = "SELECT sinkClassID, name FROM " + std::string(SINK_CLASS_TABLE); - std::string command2; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - classTemp.sinkClassID = sqlite3_column_int(query, 0); - classTemp.name = std::string((const char*) sqlite3_column_text(query, 1)); - - //read out Properties - command2 = "SELECT classProperty, value FROM SinkClassProperties" + i2s(classTemp.sinkClassID); - MY_SQLITE_PREPARE_V2(mpDatabase, command2.c_str(), -1, &subQuery, NULL) - - while ((eCode = sqlite3_step(subQuery)) == SQLITE_ROW) - { - propertyTemp.classProperty = (am_CustomClassProperty_t) sqlite3_column_int(subQuery, 0); - propertyTemp.value = sqlite3_column_int(subQuery, 1); - classTemp.listClassProperties.push_back(propertyTemp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSourceClasses SQLITE error code:", eCode); - - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(subQuery) - - listSinkClasses.push_back(classTemp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSourceClasses SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListVisibleMainConnections(std::vector<am_MainConnectionType_s> & listConnections) const -{ - listConnections.clear(); - sqlite3_stmt *query = NULL; - int eCode = 0; - am_MainConnectionType_s temp; - - std::string command = "SELECT mainConnectionID, sourceID, sinkID, connectionState, delay FROM " + std::string(MAINCONNECTION_TABLE); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.mainConnectionID = sqlite3_column_int(query, 0); - temp.sourceID = sqlite3_column_int(query, 1); - temp.sinkID = sqlite3_column_int(query, 2); - temp.connectionState = (am_ConnectionState_e) sqlite3_column_int(query, 3); - temp.delay = sqlite3_column_int(query, 4); - listConnections.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListVisibleMainConnections SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListMainSinks(std::vector<am_SinkType_s> & listMainSinks) const -{ - listMainSinks.clear(); - sqlite3_stmt* query = NULL; - int eCode = 0; - am_SinkType_s temp; - - std::string command = "SELECT name, sinkID, availability, availabilityReason, muteState, mainVolume, sinkClassID FROM " + std::string(SINK_TABLE) + " WHERE visible=1 AND reserved=0"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.name = std::string((const char*) sqlite3_column_text(query, 0)); - temp.sinkID = sqlite3_column_int(query, 1); - temp.availability.availability = (am_Availability_e) sqlite3_column_int(query, 2); - temp.availability.availabilityReason = (am_CustomAvailabilityReason_t) sqlite3_column_int(query, 3); - temp.muteState = (am_MuteState_e) sqlite3_column_int(query, 4); - temp.volume = sqlite3_column_int(query, 5); - temp.sinkClassID = sqlite3_column_int(query, 6); - listMainSinks.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSinks SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListMainSources(std::vector<am_SourceType_s> & listMainSources) const -{ - listMainSources.clear(); - sqlite3_stmt* query = NULL; - int eCode = 0; - am_SourceType_s temp; - std::string command = "SELECT name, sourceClassID, availability, availabilityReason, sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE visible=1 AND reserved=0"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.name = std::string((const char*) sqlite3_column_text(query, 0)); - temp.sourceClassID = sqlite3_column_int(query, 1); - temp.availability.availability = (am_Availability_e) sqlite3_column_int(query, 2); - temp.availability.availabilityReason = (am_CustomAvailabilityReason_t) sqlite3_column_int(query, 3); - temp.sourceID = sqlite3_column_int(query, 4); - - listMainSources.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSources SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_MainSoundProperty_s> & listSoundProperties) const -{ - assert(sinkID!=0); - if (!existSink(sinkID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existen, but not shown in sequences - listSoundProperties.clear(); - - sqlite3_stmt* query = NULL; - int eCode = 0; - am_MainSoundProperty_s temp; - std::string command = "SELECT soundPropertyType, value FROM SinkMainSoundProperty" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.type = (am_CustomMainSoundPropertyType_t) sqlite3_column_int(query, 0); - temp.value = sqlite3_column_int(query, 1); - listSoundProperties.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListMainSinkSoundProperties SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListMainSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_MainSoundProperty_s> & listSourceProperties) const -{ - assert(sourceID!=0); - if (!existSource(sourceID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existen, but not shown in sequences - listSourceProperties.clear(); - - sqlite3_stmt* query = NULL; - int eCode = 0; - am_MainSoundProperty_s temp; - std::string command = "SELECT soundPropertyType, value FROM SourceMainSoundProperty" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.type = (am_CustomMainSoundPropertyType_t) sqlite3_column_int(query, 0); - temp.value = sqlite3_column_int(query, 1); - listSourceProperties.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListMainSourceSoundProperties SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_SoundProperty_s>& listSoundproperties) const -{ - assert(sinkID!=0); - if (!existSink(sinkID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existen, but not shown in sequences - listSoundproperties.clear(); - - sqlite3_stmt* query = NULL; - int eCode = 0; - am_SoundProperty_s temp; - std::string command = "SELECT soundPropertyType, value FROM SinkSoundProperty" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.type = (am_CustomMainSoundPropertyType_t) sqlite3_column_int(query, 0); - temp.value = sqlite3_column_int(query, 1); - listSoundproperties.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSinkSoundProperties SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_SoundProperty_s>& listSoundproperties) const -{ - assert(sourceID!=0); - if (!existSource(sourceID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existen, but not shown in sequences - listSoundproperties.clear(); - - sqlite3_stmt* query = NULL; - int eCode = 0; - am_SoundProperty_s temp; - std::string command = "SELECT soundPropertyType, value FROM SourceSoundProperty" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.type = (am_CustomMainSoundPropertyType_t) sqlite3_column_int(query, 0); - temp.value = sqlite3_column_int(query, 1); - listSoundproperties.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSourceSoundProperties SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListSystemProperties(std::vector<am_SystemProperty_s> & listSystemProperties) const -{ - listSystemProperties.clear(); - - sqlite3_stmt* query = NULL; - int eCode = 0; - am_SystemProperty_s temp; - std::string command = "SELECT type, value FROM " + std::string(SYSTEM_TABLE); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.type = (am_CustomSystemPropertyType_t) sqlite3_column_int(query, 0); - temp.value = sqlite3_column_int(query, 1); - listSystemProperties.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSystemProperties SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e am::CAmDatabaseHandlerSQLite::getListSinkConnectionFormats(const am_sinkID_t sinkID, std::vector<am_CustomConnectionFormat_t> & listConnectionFormats) const -{ - listConnectionFormats.clear(); - sqlite3_stmt *qConnectionFormat = NULL; - int eCode = 0; - am_CustomConnectionFormat_t tempConnectionFormat; - std::string commandConnectionFormat = "SELECT soundFormat FROM SinkConnectionFormat" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qConnectionFormat, NULL) - while ((eCode = sqlite3_step(qConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qConnectionFormat, 0); - listConnectionFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qConnectionFormat) - - return (E_OK); -} - -am_Error_e am::CAmDatabaseHandlerSQLite::getListSourceConnectionFormats(const am_sourceID_t sourceID, std::vector<am_CustomConnectionFormat_t> & listConnectionFormats) const -{ - listConnectionFormats.clear(); - sqlite3_stmt* qConnectionFormat = NULL; - int eCode = 0; - am_CustomConnectionFormat_t tempConnectionFormat; - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM SourceConnectionFormat" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qConnectionFormat, NULL) - while ((eCode = sqlite3_step(qConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qConnectionFormat, 0); - listConnectionFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qConnectionFormat) - - return (E_OK); -} - -am_Error_e am::CAmDatabaseHandlerSQLite::getListGatewayConnectionFormats(const am_gatewayID_t gatewayID, std::vector<bool> & listConnectionFormat) const -{ - ListConnectionFormat::const_iterator iter = mListConnectionFormat.begin(); - iter = mListConnectionFormat.find(gatewayID); - if (iter == mListConnectionFormat.end()) - { - logError("DatabaseHandler::getListGatewayConnectionFormats database error with convertionFormat"); - - return (E_DATABASE_ERROR); - } - listConnectionFormat = iter->second; - - return (E_OK); -} - -am_Error_e am::CAmDatabaseHandlerSQLite::getListConverterConnectionFormats(const am_converterID_t converterID, std::vector<bool> & listConnectionFormat) const -{ - ListConnectionFormat::const_iterator iter = mListConnectionFormat.begin(); - iter = mListConnectionFormat.find(converterID); - if (iter == mListConnectionFormat.end()) - { - logError("DatabaseHandler::getListConverterConnectionFormats database error with convertionFormat"); - - return (E_DATABASE_ERROR); - } - listConnectionFormat = iter->second; - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getTimingInformation(const am_mainConnectionID_t mainConnectionID, am_timeSync_t & delay) const -{ - assert(mainConnectionID!=0); - delay = -1; - sqlite3_stmt *query = NULL; - int eCode = 0; - - std::string command = "SELECT delay FROM " + std::string(MAINCONNECTION_TABLE) + " WHERE mainConnectionID=" + i2s(mainConnectionID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - delay = sqlite3_column_int(query, 0); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getTimingInformation SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - if (delay == -1) - return (E_NOT_POSSIBLE); - - return (E_OK); -} - -bool CAmDatabaseHandlerSQLite::sqQuery(const std::string& query) -{ - sqlite3_stmt* statement; - int eCode = 0; - if ((eCode = sqlite3_exec(mpDatabase, query.c_str(), NULL, &statement, NULL)) != SQLITE_OK) - { - logError("DatabaseHandler::sqQuery SQL Query failed:", query.c_str(), "error code:", eCode); - return (false); - } - return (true); -} - -bool CAmDatabaseHandlerSQLite::openDatabase() -{ - if (sqlite3_open_v2(mPath.c_str(), &mpDatabase, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX, NULL) == SQLITE_OK) - { - logInfo("DatabaseHandler::openDatabase opened database"); - return (true); - } - logError("DatabaseHandler::openDatabase failed to open database"); - return (false); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeDelayMainConnection(const am_timeSync_t & delay, const am_mainConnectionID_t & connectionID) -{ - assert(connectionID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "SELECT mainConnectionID FROM " + std::string(MAINCONNECTION_TABLE) + " WHERE delay=? AND mainConnectionID=?"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, delay) - MY_SQLITE_BIND_INT(query, 2, connectionID) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - MY_SQLITE_FINALIZE(query) - return (E_OK); - } - command = "UPDATE " + std::string(MAINCONNECTION_TABLE) + " SET delay=? WHERE mainConnectionID=?;"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, delay) - MY_SQLITE_BIND_INT(query, 2, connectionID) - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeDelayMainConnection SQLITE Step error code:", eCode); - - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - if (mpDatabaseObserver) - mpDatabaseObserver->timingInformationChanged(connectionID, delay); - - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterConnectionDB(const am_Connection_s& connection, am_connectionID_t& connectionID) -{ - assert(connection.connectionID==0); - assert(connection.sinkID!=0); - assert(connection.sourceID!=0); - //connection format is not checked, because it's project specific - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "INSERT INTO " + std::string(CONNECTION_TABLE) + "(sinkID, sourceID, delay, connectionFormat, reserved) VALUES (?,?,?,?,?)"; - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, connection.sinkID) - MY_SQLITE_BIND_INT(query, 2, connection.sourceID) - MY_SQLITE_BIND_INT(query, 3, connection.delay) - MY_SQLITE_BIND_INT(query, 4, connection.connectionFormat) - MY_SQLITE_BIND_INT(query, 5, true) - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterConnectionDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - connectionID = sqlite3_last_insert_rowid(mpDatabase); - - logInfo("DatabaseHandler::enterConnectionDB entered new connection sourceID=", connection.sourceID, "sinkID=", connection.sinkID, "sourceID=", connection.sourceID, "connectionFormat=", connection.connectionFormat, "assigned ID=", connectionID); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterSinkClassDB(const am_SinkClass_s & sinkClass, am_sinkClass_t & sinkClassID) -{ - assert(sinkClass.sinkClassID<DYNAMIC_ID_BOUNDARY); - assert(!sinkClass.name.empty()); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - //if sinkID is zero and the first Static Sink was already entered, the ID is created - if (sinkClass.sinkClassID == 0 && !mFirstStaticSinkClass) - { - command = "INSERT INTO " + std::string(SINK_CLASS_TABLE) + "(name) VALUES (?)"; - } - else - { - //check if the ID already exists - if (existSinkClass(sinkClass.sinkClassID)) - return (E_ALREADY_EXISTS); - command = "INSERT INTO " + std::string(SINK_CLASS_TABLE) + "(name, sinkClassID) VALUES (?,?)"; - } - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, sinkClass.name.c_str(), sinkClass.name.size(), SQLITE_STATIC) - - //if the ID is not created, we add it to the query - if (sinkClass.sinkClassID != 0) - { - MY_SQLITE_BIND_INT(query, 2, sinkClass.sinkClassID) - } - - //if the first static sink is entered, we need to set it onto the boundary - else if (mFirstStaticSinkClass) - { - MY_SQLITE_BIND_INT(query, 2, DYNAMIC_ID_BOUNDARY) - mFirstStaticSinkClass = false; - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkClassDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - sinkClassID = sqlite3_last_insert_rowid(mpDatabase); //todo:change last_insert implementations for mulithread usage... - - //now we need to create the additional tables: - command = "CREATE TABLE SinkClassProperties" + i2s(sinkClassID) + std::string("(classProperty INTEGER, value INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO SinkClassProperties" + i2s(sinkClassID) + std::string("(classProperty,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_ClassProperty_s>::const_iterator Iterator = sinkClass.listClassProperties.begin(); - for (; Iterator < sinkClass.listClassProperties.end(); ++Iterator) - { - MY_SQLITE_BIND_INT(query, 1, Iterator->classProperty) - MY_SQLITE_BIND_INT(query, 2, Iterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSinkClassDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::enterSinkClassDB entered new sinkClass"); - if (mpDatabaseObserver) - mpDatabaseObserver->numberOfSinkClassesChanged(); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterSourceClassDB(am_sourceClass_t & sourceClassID, const am_SourceClass_s & sourceClass) -{ - assert(sourceClass.sourceClassID<DYNAMIC_ID_BOUNDARY); - assert(!sourceClass.name.empty()); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - //if sinkID is zero and the first Static Sink was already entered, the ID is created - if (sourceClass.sourceClassID == 0 && !mFirstStaticSourceClass) - { - command = "INSERT INTO " + std::string(SOURCE_CLASS_TABLE) + "(name) VALUES (?)"; - } - else - { - //check if the ID already exists - if (existSourceClass(sourceClass.sourceClassID)) - return (E_ALREADY_EXISTS); - command = "INSERT INTO " + std::string(SOURCE_CLASS_TABLE) + "(name, sourceClassID) VALUES (?,?)"; - } - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, sourceClass.name.c_str(), sourceClass.name.size(), SQLITE_STATIC) - - //if the ID is not created, we add it to the query - if (sourceClass.sourceClassID != 0) - { - MY_SQLITE_BIND_INT(query, 2, sourceClass.sourceClassID) - } - - //if the first static sink is entered, we need to set it onto the boundary - else if (mFirstStaticSourceClass) - { - MY_SQLITE_BIND_INT(query, 2, DYNAMIC_ID_BOUNDARY) - mFirstStaticSourceClass = false; - } - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSourceClassDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - sourceClassID = sqlite3_last_insert_rowid(mpDatabase); //todo:change last_insert implementations for mulithread usage... - - //now we need to create the additional tables: - command = "CREATE TABLE SourceClassProperties" + i2s(sourceClassID) + std::string("(classProperty INTEGER, value INTEGER)"); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO SourceClassProperties" + i2s(sourceClassID) + std::string("(classProperty,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_ClassProperty_s>::const_iterator Iterator = sourceClass.listClassProperties.begin(); - for (; Iterator < sourceClass.listClassProperties.end(); ++Iterator) - { - MY_SQLITE_BIND_INT(query, 1, Iterator->classProperty) - MY_SQLITE_BIND_INT(query, 2, Iterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSourceClassDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::enterSourceClassDB entered new sourceClass"); - - if (mpDatabaseObserver) - mpDatabaseObserver->numberOfSourceClassesChanged(); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enterSystemProperties(const std::vector<am_SystemProperty_s> & listSystemProperties) -{ - assert(!listSystemProperties.empty()); - sqlite3_stmt* query = NULL; - int eCode = 0; - std::vector<am_SystemProperty_s>::const_iterator listIterator = listSystemProperties.begin(); - std::string command = "DELETE FROM " + std::string(SYSTEM_TABLE); - if (!this->sqQuery(command)) - return (E_DATABASE_ERROR); - - command = "INSERT INTO " + std::string(SYSTEM_TABLE) + " (type, value) VALUES (?,?)"; - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - for (; listIterator < listSystemProperties.end(); ++listIterator) - { - MY_SQLITE_BIND_INT(query, 1, listIterator->type) - MY_SQLITE_BIND_INT(query, 2, listIterator->value) - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterSystemProperties SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_RESET(query) - } - - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::enterSystemProperties entered system properties"); - return (E_OK); -} - -/** - * checks for a certain mainConnection - * @param mainConnectionID to be checked for - * @return true if it exists - */ -bool CAmDatabaseHandlerSQLite::existMainConnection(const am_mainConnectionID_t mainConnectionID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT mainConnectionID FROM " + std::string(MAINCONNECTION_TABLE) + " WHERE mainConnectionID=" + i2s(mainConnectionID); - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existMainConnection database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks for a certain Source - * @param sourceID to be checked for - * @return true if it exists - */ -bool CAmDatabaseHandlerSQLite::existSource(const am_sourceID_t sourceID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE reserved=0 AND sourceID=" + i2s(sourceID); - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existSource database error!:", eCode); - } - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks if a source name or ID exists - * @param sourceID the sourceID - * @param name the name - * @return true if it exits - */ -bool CAmDatabaseHandlerSQLite::existSourceNameOrID(const am_sourceID_t sourceID, const std::string & name) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE reserved=0 AND (name=? OR sourceID=?)"; - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_bind_text(query, 1, name.c_str(), name.size(), SQLITE_STATIC))) - { - logError("CAmDatabaseHandler::sqlite3_bind_text failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_bind_int(query, 2, sourceID))) - { - logError("CAmDatabaseHandler::sqlite3_bind_int failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existSource database error!:", eCode); - } - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks if a name exits - * @param name the name - * @return true if it exits - */ -bool CAmDatabaseHandlerSQLite::existSourceName(const std::string & name) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE reserved=0 AND name=?"; - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_bind_text(query, 1, name.c_str(), name.size(), SQLITE_STATIC))) - { - logError("CAmDatabaseHandler::sqlite3_bind_text failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existSource database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks for a certain Sink - * @param sinkID to be checked for - * @return true if it exists - */ -bool CAmDatabaseHandlerSQLite::existSink(const am_sinkID_t sinkID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT sinkID FROM " + std::string(SINK_TABLE) + " WHERE reserved=0 AND sinkID=" + i2s(sinkID); - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existSink database error!:", eCode); - } - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks if a sink with the ID or the name exists - * @param sinkID the ID - * @param name the name - * @return true if it exists. - */ -bool CAmDatabaseHandlerSQLite::existSinkNameOrID(const am_sinkID_t sinkID, const std::string & name) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT sinkID FROM " + std::string(SINK_TABLE) + " WHERE reserved=0 AND (name=? OR sinkID=?)"; - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_bind_text(query, 1, name.c_str(), name.size(), SQLITE_STATIC))) - { - logError("CAmDatabaseHandler::sqlite3_bind_text failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_bind_int(query, 2, sinkID))) - { - logError("CAmDatabaseHandler::sqlite3_bind_int failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existSink database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks if a sink with the name exists - * @param name the name - * @return true if it exists - */ -bool CAmDatabaseHandlerSQLite::existSinkName(const std::string & name) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT sinkID FROM " + std::string(SINK_TABLE) + " WHERE reserved=0 AND name=?"; - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_bind_text(query, 1, name.c_str(), name.size(), SQLITE_STATIC))) - { - logError("CAmDatabaseHandler::sqlite3_bind_text failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existSink database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks for a certain domain - * @param domainID to be checked for - * @return true if it exists - */ -bool CAmDatabaseHandlerSQLite::existDomain(const am_domainID_t domainID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT domainID FROM " + std::string(DOMAIN_TABLE) + " WHERE reserved=0 AND domainID=" + i2s(domainID); - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existDomain database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks for certain gateway - * @param gatewayID to be checked for - * @return true if it exists - */ -bool CAmDatabaseHandlerSQLite::existGateway(const am_gatewayID_t gatewayID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT gatewayID FROM " + std::string(GATEWAY_TABLE) + " WHERE gatewayID=" + i2s(gatewayID); - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existGateway database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -bool CAmDatabaseHandlerSQLite::existConverter(const am_converterID_t converterID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT converterID FROM " + std::string(CONVERTER_TABLE) + " WHERE converterID=" + i2s(converterID); - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existConverter database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -am_Error_e CAmDatabaseHandlerSQLite::getDomainOfSource(const am_sourceID_t sourceID, am_domainID_t & domainID) const -{ - assert(sourceID!=0); - - sqlite3_stmt* query = NULL; - std::string command = "SELECT domainID FROM " + std::string(SOURCE_TABLE) + " WHERE sourceID=" + i2s(sourceID); - int eCode = 0; - am_Error_e returnVal = E_DATABASE_ERROR; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - domainID = sqlite3_column_int(query, 0); - returnVal = E_OK; - } - else - { - logError("DatabaseHandler::getDomainOfSource database error!:", eCode); - } - - MY_SQLITE_FINALIZE(query) - return (returnVal); -} - -am_Error_e am::CAmDatabaseHandlerSQLite::getDomainOfSink(const am_sinkID_t sinkID, am_domainID_t & domainID) const -{ - assert(sinkID!=0); - - sqlite3_stmt* query = NULL; - std::string command = "SELECT domainID FROM " + std::string(SINK_TABLE) + " WHERE sinkID=" + i2s(sinkID); - int eCode = 0; - am_Error_e returnVal = E_DATABASE_ERROR; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - domainID = sqlite3_column_int(query, 0); - returnVal = E_OK; - } - else - { - logError("DatabaseHandler::getDomainOfSink database error!:", eCode); - } - - MY_SQLITE_FINALIZE(query) - return (returnVal); -} - -am_Error_e CAmDatabaseHandlerSQLite::getDomainOfCrossfader(const am_crossfaderID_t crossfader, am_domainID_t& domainID) const -{ - assert(crossfader!=0); - - am_sourceID_t sourceID = 0; - sqlite3_stmt* query = NULL; - std::string command = "SELECT sourceID FROM " + std::string(CROSSFADER_TABLE) + " WHERE crossfaderID=" + i2s(crossfader); - int eCode = 0; - am_Error_e returnVal = E_DATABASE_ERROR; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sourceID = sqlite3_column_int(query, 0); - MY_SQLITE_FINALIZE(query); - - sqlite3_stmt* querySrc = NULL; - command = "SELECT domainID FROM " + std::string(SOURCE_TABLE) + " WHERE sourceID=" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &querySrc, NULL) - if ((eCode = sqlite3_step(querySrc)) == SQLITE_ROW) - { - domainID = sqlite3_column_int(query, 0); - returnVal = E_OK; - } - else - { - logError("DatabaseHandler::getDomainOfCrossfader database error!:", eCode); - } - MY_SQLITE_FINALIZE(querySrc) - } - else - { - logError("DatabaseHandler::getDomainOfCrossfader database error!:", eCode); - } - MY_SQLITE_FINALIZE(query) - return (returnVal); -} - -/** - * checks for certain SinkClass - * @param sinkClassID - * @return true if it exists - */ -bool CAmDatabaseHandlerSQLite::existSinkClass(const am_sinkClass_t sinkClassID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT sinkClassID FROM " + std::string(SINK_CLASS_TABLE) + " WHERE sinkClassID=" + i2s(sinkClassID); - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existSinkClass database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks for certain sourceClass - * @param sourceClassID - * @return true if it exists - */ -bool CAmDatabaseHandlerSQLite::existSourceClass(const am_sourceClass_t sourceClassID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT sourceClassID FROM " + std::string(SOURCE_CLASS_TABLE) + " WHERE sourceClassID=" + i2s(sourceClassID); - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existSinkClass database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeConnectionTimingInformation(const am_connectionID_t connectionID, const am_timeSync_t delay) -{ - assert(connectionID!=0); - - sqlite3_stmt *query = NULL, *queryMainConnectionSubIDs = NULL; - int eCode = 0, eCode1 = 0; - std::string command = "UPDATE " + std::string(CONNECTION_TABLE) + " set delay=? WHERE connectionID=?"; - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, delay) - MY_SQLITE_BIND_INT(query, 2, connectionID) - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeConnectionTimingInformation SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - //now we need to find all mainConnections that use the changed connection and update their timing - - int tempMainConnectionID; - //first get all route tables for all mainconnections - command = "SELECT name FROM sqlite_master WHERE type ='table' and name LIKE 'MainConnectionRoute%'"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - //now check if the connection ID is in this table - std::string tablename = std::string((const char*) sqlite3_column_text(query, 0)); - std::string command2 = "SELECT connectionID FROM " + tablename + " WHERE connectionID=" + i2s(connectionID); - MY_SQLITE_PREPARE_V2(mpDatabase, command2.c_str(), -1, &queryMainConnectionSubIDs, NULL) - if ((eCode1 = sqlite3_step(queryMainConnectionSubIDs)) == SQLITE_ROW) - { - //if the connection ID is in, recalculate the mainconnection delay - std::stringstream(tablename.substr(tablename.find_first_not_of("MainConnectionRoute"))) >> tempMainConnectionID; - changeDelayMainConnection(calculateMainConnectionDelay(tempMainConnectionID), tempMainConnectionID); - } - else if (eCode1 != SQLITE_DONE) - { - logError("DatabaseHandler::changeConnectionTimingInformation SQLITE error code:", eCode1); - - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(queryMainConnectionSubIDs) - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::changeConnectionTimingInformation SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeConnectionFinal(const am_connectionID_t connectionID) -{ - assert(connectionID!=0); - - sqlite3_stmt *query = NULL; - int eCode = 0; - std::string command = "UPDATE " + std::string(CONNECTION_TABLE) + " set reserved=0 WHERE connectionID=?"; - - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, connectionID) - - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeConnectionFinal SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_timeSync_t CAmDatabaseHandlerSQLite::calculateMainConnectionDelay(const am_mainConnectionID_t mainConnectionID) const -{ - assert(mainConnectionID!=0); - sqlite3_stmt* query = NULL; - std::string command = "SELECT sum(Connections.delay),min(Connections.delay) FROM " + std::string(CONNECTION_TABLE) + ",MainConnectionRoute" + i2s(mainConnectionID) + " WHERE MainConnectionRoute" + i2s(mainConnectionID) + ".connectionID = Connections.connectionID"; - int eCode = 0; - am_timeSync_t delay = 0; - am_timeSync_t min = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - delay = sqlite3_column_int(query, 0); - min = sqlite3_column_int(query, 1); - } - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::calculateMainConnectionDelay SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - if ((eCode = sqlite3_finalize(query)) != SQLITE_OK) - { - logError("DatabaseHandler::calculateMainConnectionDelay SQLITE Finalize error code:", eCode); - return (E_DATABASE_ERROR); - } - if (min < 0) - delay = -1; - return (delay); - -} - -/** - * registers the Observer at the Database - * @param iObserver pointer to the observer - */ -void CAmDatabaseHandlerSQLite::registerObserver(CAmDatabaseObserver *iObserver) -{ - assert(iObserver!=NULL); - mpDatabaseObserver = iObserver; -} - -/** - * gives information about the visibility of a source - * @param sourceID the sourceID - * @return true if source is visible - */ -bool CAmDatabaseHandlerSQLite::sourceVisible(const am_sourceID_t sourceID) const -{ - assert(sourceID!=0); - sqlite3_stmt* query = NULL; - std::string command = "SELECT visible FROM " + std::string(SOURCE_TABLE) + " WHERE sourceID=" + i2s(sourceID); - int eCode = 0; - bool returnVal = false; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - returnVal = (bool) sqlite3_column_int(query, 0); - } - else if (eCode != SQLITE_DONE) - { - returnVal = false; - logError("DatabaseHandler::sourceVisible database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * gives information about the visibility of a sink - * @param sinkID the sinkID - * @return true if source is visible - */ -bool CAmDatabaseHandlerSQLite::sinkVisible(const am_sinkID_t sinkID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT visible FROM " + std::string(SINK_TABLE) + " WHERE reserved=0 AND sinkID=" + i2s(sinkID); - int eCode = 0; - bool returnVal = false; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - returnVal = sqlite3_column_int(query, 0); - } - else if (eCode != SQLITE_DONE) - { - returnVal = false; - logError("DatabaseHandler::sinkVisible database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks if a connection already exists. - * Only takes sink, source and format information for search! - * @param connection the connection to be checked - * @return true if connections exists - */ -bool CAmDatabaseHandlerSQLite::existConnection(const am_Connection_s & connection) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT connectionID FROM " + std::string(CONNECTION_TABLE) + " WHERE sinkID=? AND sourceID=? AND connectionFormat=? AND reserved=0"; - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_bind_int(query, 1, connection.sinkID))) - { - logError("CAmDatabaseHandler::sqlite3_bind_int failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_bind_int(query, 2, connection.sourceID))) - { - logError("CAmDatabaseHandler::sqlite3_bind_int failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_bind_int(query, 3, connection.connectionFormat))) - { - logError("CAmDatabaseHandler::sqlite3_bind_int failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existMainConnection database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks if a connection with the given ID exists - * @param connectionID - * @return true if connection exits - */ -bool CAmDatabaseHandlerSQLite::existConnectionID(const am_connectionID_t connectionID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT connectionID FROM " + std::string(CONNECTION_TABLE) + " WHERE connectionID=? AND reserved=0"; - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_bind_int(query, 1, connectionID))) - { - logError("CAmDatabaseHandler::sqlite3_bind_int failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existMainConnection database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -/** - * checks if a CrossFader exists - * @param crossfaderID the ID of the crossfader to be checked - * @return true if exists - */ -bool CAmDatabaseHandlerSQLite::existCrossFader(const am_crossfaderID_t crossfaderID) const -{ - sqlite3_stmt* query = NULL; - std::string command = "SELECT crossfaderID FROM " + std::string(CROSSFADER_TABLE) + " WHERE crossfaderID=?"; - int eCode = 0; - bool returnVal = true; - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_bind_int(query, 1, crossfaderID))) - { - logError("CAmDatabaseHandler::sqlite3_bind_int failed with errorCode:", eCode); - return (false); - } - - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - returnVal = false; - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::existMainConnection database error!:", eCode); - } - - MY_SQLITE_FINALIZE_BOOL(query) - return (returnVal); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSoureState(const am_sourceID_t sourceID, am_SourceState_e & sourceState) const -{ - assert(sourceID!=0); - sqlite3_stmt* query = NULL; - sourceState = SS_UNKNNOWN; - std::string command = "SELECT sourceState FROM " + std::string(SOURCE_TABLE) + " WHERE sourceID=" + i2s(sourceID); - int eCode = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sourceState = (am_SourceState_e) sqlite3_column_int(query, 0); - } - else if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - { - logError("DatabaseHandler::getSoureState database error!:", eCode); - } - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSourceState(const am_sourceID_t sourceID, const am_SourceState_e sourceState) -{ - assert(sourceID!=0); - assert(sourceState>=SS_UNKNNOWN && sourceState<=SS_MAX); - sqlite3_stmt* query = NULL; - std::string command = "UPDATE " + std::string(SOURCE_TABLE) + " SET sourceState=? WHERE sourceID=" + i2s(sourceID); - int eCode = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, sourceState) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSourceState SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSinkMainVolume(const am_sinkID_t sinkID, am_mainVolume_t& mainVolume) const { - assert(sinkID!=0); - sqlite3_stmt* query = NULL; - mainVolume = -1; - std::string command = "SELECT mainVolume FROM " + std::string(SINK_TABLE) + " WHERE sinkID=" + i2s(sinkID); - int eCode = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - mainVolume = sqlite3_column_int(query, 0); - } - else if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - { - logError("DatabaseHandler::getSinkVolume database error!:", eCode); - } - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSinkVolume(const am_sinkID_t sinkID, am_volume_t & volume) const -{ - assert(sinkID!=0); - sqlite3_stmt* query = NULL; - volume = -1; - std::string command = "SELECT volume FROM " + std::string(SINK_TABLE) + " WHERE sinkID=" + i2s(sinkID); - int eCode = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - volume = sqlite3_column_int(query, 0); - } - else if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - { - logError("DatabaseHandler::getSinkVolume database error!:", eCode); - } - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSourceVolume(const am_sourceID_t sourceID, am_volume_t & volume) const -{ - assert(sourceID!=0); - sqlite3_stmt* query = NULL; - volume = -1; - std::string command = "SELECT volume FROM " + std::string(SOURCE_TABLE) + " WHERE sourceID=" + i2s(sourceID); - int eCode = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - volume = sqlite3_column_int(query, 0); - } - else if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - { - logError("DatabaseHandler::getSourceVolume database error!:", eCode); - } - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getMainSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const -{ - assert(sinkID!=0); - if (!existSink(sinkID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existent, but not shown in sequences - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "SELECT value FROM SinkMainSoundProperty" + i2s(sinkID) + " WHERE soundPropertyType=" + i2s(propertyType); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - value = sqlite3_column_int(query, 0); - } - else - { - logError("DatabaseHandler::getDomainState database error!:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getMainSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const -{ - assert(sourceID!=0); - if (!existSource(sourceID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existent, but not shown in sequences - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "SELECT value FROM SourceMainSoundProperty" + i2s(sourceID) + " WHERE soundPropertyType=" + i2s(propertyType); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - value = sqlite3_column_int(query, 0); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getSinkSoundPropertyValue SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomSoundPropertyType_t propertyType, int16_t & value) const -{ - assert(sinkID!=0); - if (!existSink(sinkID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existent, but not shown in sequences - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "SELECT value FROM SinkSoundProperty" + i2s(sinkID) + " WHERE soundPropertyType=" + i2s(propertyType); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - value = sqlite3_column_int(query, 0); - } - else - { - logError("DatabaseHandler::getDomainState database error!:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomSoundPropertyType_t propertyType, int16_t & value) const -{ - assert(sourceID!=0); - if (!existSource(sourceID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existent, but not shown in sequences - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "SELECT value FROM SourceSoundProperty" + i2s(sourceID) + " WHERE soundPropertyType=" + i2s(propertyType); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - value = sqlite3_column_int(query, 0); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getSinkSoundPropertyValue SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getDomainState(const am_domainID_t domainID, am_DomainState_e& state) const -{ - assert(domainID!=0); - sqlite3_stmt* query = NULL; - state = DS_UNKNOWN; - std::string command = "SELECT domainState FROM " + std::string(DOMAIN_TABLE) + " WHERE domainID=" + i2s(domainID); - int eCode = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - state = (am_DomainState_e) sqlite3_column_int(query, 0); - } - else if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - { - logError("DatabaseHandler::getDomainState database error!:", eCode); - } - MY_SQLITE_FINALIZE(query) - return (E_OK); - -} - -am_Error_e CAmDatabaseHandlerSQLite::peekDomain(const std::string & name, am_domainID_t & domainID) -{ - domainID=0; - sqlite3_stmt* query = NULL, *queryInsert = NULL; - std::string command = "SELECT domainID FROM " + std::string(DOMAIN_TABLE) + " WHERE name=?"; - int eCode = 0, eCode1 = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, name.c_str(), name.size(), SQLITE_STATIC) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - domainID = sqlite3_column_int(query, 0); - } - else if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::peekDomain database error!:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - else - { - command = "INSERT INTO " + std::string(DOMAIN_TABLE) + " (name,reserved) VALUES (?,?)"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &queryInsert, NULL) - MY_SQLITE_BIND_TEXT(queryInsert, 1, name.c_str(), name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(queryInsert, 2, 1) - //reservation flag - if ((eCode1 = sqlite3_step(queryInsert)) != SQLITE_DONE) - { - logError("DatabaseHandler::peekDomain SQLITE Step error code:", eCode1); - MY_SQLITE_FINALIZE(queryInsert) - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(queryInsert) - - domainID = sqlite3_last_insert_rowid(mpDatabase); - } - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::peekSink(const std::string & name, am_sinkID_t & sinkID) -{ - sqlite3_stmt* query = NULL, *queryInsert = NULL; - std::string command = "SELECT sinkID FROM " + std::string(SINK_TABLE) + " WHERE name=?"; - int eCode = 0, eCode1 = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, name.c_str(), name.size(), SQLITE_STATIC) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sinkID = sqlite3_column_int(query, 0); - } - else if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::peekSink database error!:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - else - { - if (mFirstStaticSink) - { - command = "INSERT INTO " + std::string(SINK_TABLE) + " (name,reserved,sinkID) VALUES (?,?," + i2s(DYNAMIC_ID_BOUNDARY) + ")"; - mFirstStaticSink = false; - } - else - { - command = "INSERT INTO " + std::string(SINK_TABLE) + " (name,reserved) VALUES (?,?)"; - } - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &queryInsert, NULL) - MY_SQLITE_BIND_TEXT(queryInsert, 1, name.c_str(), name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(queryInsert, 2, 1) - //reservation flag - if ((eCode1 = sqlite3_step(queryInsert)) != SQLITE_DONE) - { - logError("DatabaseHandler::peekSink SQLITE Step error code:", eCode1); - MY_SQLITE_FINALIZE(queryInsert) - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(queryInsert) - - sinkID = sqlite3_last_insert_rowid(mpDatabase); - } - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::peekSource(const std::string & name, am_sourceID_t & sourceID) -{ - sqlite3_stmt* query = NULL, *queryInsert = NULL; - std::string command = "SELECT sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE name=?"; - int eCode = 0, eCode1 = 0; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, name.c_str(), name.size(), SQLITE_STATIC) - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sourceID = sqlite3_column_int(query, 0); - } - else if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::peekSink database error!:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - else - { - if (mFirstStaticSource) - { - command = "INSERT INTO " + std::string(SOURCE_TABLE) + " (name,reserved,sourceID) VALUES (?,?," + i2s(DYNAMIC_ID_BOUNDARY) + ")"; - mFirstStaticSource = false; - } - else - { - command = "INSERT INTO " + std::string(SOURCE_TABLE) + " (name,reserved) VALUES (?,?)"; - } - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &queryInsert, NULL) - MY_SQLITE_BIND_TEXT(queryInsert, 1, name.c_str(), name.size(), SQLITE_STATIC) - MY_SQLITE_BIND_INT(queryInsert, 2, 1) - //reservation flag - if ((eCode1 = sqlite3_step(queryInsert)) != SQLITE_DONE) - { - logError("DatabaseHandler::peekSink SQLITE Step error code:", eCode1); - MY_SQLITE_FINALIZE(queryInsert) - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(queryInsert) - sourceID = sqlite3_last_insert_rowid(mpDatabase); - } - - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSinkVolume(const am_sinkID_t sinkID, const am_volume_t volume) -{ - assert(sinkID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(SINK_TABLE) + " SET volume=? WHERE sinkID=" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, volume) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSinkVolume SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeSinkVolume changed volume of sink:", sinkID, "to:", volume); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSourceVolume(const am_sourceID_t sourceID, const am_volume_t volume) -{ - assert(sourceID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(SOURCE_TABLE) + " SET volume=? WHERE sourceID=" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, volume) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSourceVolume SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeSourceVolume changed volume of source=:", sourceID, "to:", volume); - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSourceSoundPropertyDB(const am_SoundProperty_s & soundProperty, const am_sourceID_t sourceID) -{ - assert(sourceID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE SourceSoundProperty" + i2s(sourceID) + " SET value=? WHERE soundPropertyType=" + i2s(soundProperty.type); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, soundProperty.value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSourceSoundPropertyDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeSourceSoundPropertyDB changed SourceSoundProperty of source:", sourceID, "type:", soundProperty.type, "to:", soundProperty.value); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSinkSoundPropertyDB(const am_SoundProperty_s & soundProperty, const am_sinkID_t sinkID) -{ - assert(sinkID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE SinkSoundProperty" + i2s(sinkID) + " SET value=? WHERE soundPropertyType=" + i2s(soundProperty.type); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, soundProperty.value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSinkSoundPropertyDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - assert(sinkID!=0); - - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeSinkSoundPropertyDB changed SinkSoundProperty of sink:", sinkID, "type:", soundProperty.type, "to:", soundProperty.value); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeCrossFaderHotSink(const am_crossfaderID_t crossfaderID, const am_HotSink_e hotsink) -{ - assert(crossfaderID!=0); - assert(hotsink>=HS_UNKNOWN && hotsink>=HS_MAX); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existCrossFader(crossfaderID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE " + std::string(CROSSFADER_TABLE) + " SET hotsink=? WHERE crossfaderID=" + i2s(crossfaderID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, hotsink) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeCrossFaderHotSink SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - logInfo("DatabaseHandler::changeCrossFaderHotSink changed hotsink of crossfader=", crossfaderID, "to:", hotsink); - return (E_OK); -} - -bool CAmDatabaseHandlerSQLite::isComponentConnected(const am_Gateway_s & gateway) const -{ - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - bool returnVal = true; - command = "SELECT 1 FROM " + std::string(CONNECTION_TABLE) + " c WHERE c.sinkID = ? OR c.sourceID = ?"; - - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, gateway.sinkID) - MY_SQLITE_BIND_INT(query, 2, gateway.sourceID) - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - { - returnVal = false; - } - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::isComponentConnected database error!:", eCode); - } - MY_SQLITE_FINALIZE(query) - return returnVal; -} - -bool CAmDatabaseHandlerSQLite::isComponentConnected(const am_Converter_s & converter) const -{ - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - bool returnVal = true; - command = "SELECT 1 FROM " + std::string(CONNECTION_TABLE) + " c WHERE c.sinkID = ? OR c.sourceID = ?"; - - MY_SQLITE_PREPARE_V2_BOOL(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, converter.sinkID) - MY_SQLITE_BIND_INT(query, 2, converter.sourceID) - if ((eCode = sqlite3_step(query)) == SQLITE_DONE) - { - returnVal = false; - } - else if (eCode != SQLITE_ROW) - { - returnVal = false; - logError("DatabaseHandler::isComponentConnected database error!:", eCode); - } - MY_SQLITE_FINALIZE(query) - - return returnVal; -} - -am_Error_e am::CAmDatabaseHandlerSQLite::peekSinkClassID(const std::string & name, am_sinkClass_t & sinkClassID) -{ - if (name.empty()) - return (E_NON_EXISTENT); - - am_Error_e returnVal = E_NON_EXISTENT; - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "SELECT sinkClassID FROM " + std::string(SINK_CLASS_TABLE) + " WHERE name=?"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, name.c_str(), name.size(), SQLITE_STATIC) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sinkClassID = sqlite3_column_int(query, 0); - returnVal = E_OK; - } - else if (eCode != SQLITE_DONE) - { - sinkClassID = 0; - logError("DatabaseHandler::peekSinkClassID SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - returnVal = E_DATABASE_ERROR; - } - - MY_SQLITE_FINALIZE(query) - return (returnVal); -} - -am_Error_e am::CAmDatabaseHandlerSQLite::peekSourceClassID(const std::string & name, am_sourceClass_t & sourceClassID) -{ - if (name.empty()) - return (E_NON_EXISTENT); - - am_Error_e returnVal = E_NON_EXISTENT; - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command = "SELECT sourceClassID FROM " + std::string(SOURCE_CLASS_TABLE) + " WHERE name=?"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_TEXT(query, 1, name.c_str(), name.size(), SQLITE_STATIC) - - if ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sourceClassID = sqlite3_column_int(query, 0); - returnVal = E_OK; - } - else if (eCode != SQLITE_DONE) - { - sourceClassID = 0; - logError("DatabaseHandler::peekSourceClassID SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - returnVal = E_DATABASE_ERROR; - } - - MY_SQLITE_FINALIZE(query) - return (returnVal); -} - - -am_Error_e CAmDatabaseHandlerSQLite::changeSourceDB(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomConnectionFormat_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties) -{ - assert(sourceID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - am_sourceClass_t sourceClassOut(sourceClassID); - std::vector<am_MainSoundProperty_s> listMainSoundPropertiesOut(listMainSoundProperties); - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - - //check if sinkClass needs to be changed - if (sourceClassID!=0) - { - command = "UPDATE"+ std::string(SOURCE_TABLE)+ " SET sourceClassID=? WHERE sourceID=" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, sourceClassID) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSource SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query); - } - - else //we need to read out the active one - { - command = "SELECT sourceClassID FROM " + std::string(SOURCE_TABLE) + " WHERE reserved=0 and sourceID=" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sourceClassOut = sqlite3_column_int(query, 0); - } - MY_SQLITE_FINALIZE(query) - } - - //check if soundProperties need to be updated - if (!listSoundProperties.empty()) - { - //first we drop the table - command = "DELETE from SourceSoundProperty" + i2s(sourceID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - //then we'll have a new one - //Fill SinkSoundProperties - command = "INSERT INTO SourceSoundProperty" + i2s(sourceID) + std::string("(soundPropertyType,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_SoundProperty_s>::const_iterator SoundPropertyIterator = listSoundProperties.begin(); - for (; SoundPropertyIterator < listSoundProperties.end(); ++SoundPropertyIterator) - { - MY_SQLITE_BIND_INT(query, 1, SoundPropertyIterator->type) - MY_SQLITE_BIND_INT(query, 2, SoundPropertyIterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSource SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - //check if we have to update the list of connectionformats - if (!listConnectionFormats.empty()) - { - //first clear the table - command = "DELETE from SourceConnectionFormat" + i2s(sourceID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO SourceConnectionFormat" + i2s(sourceID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = listConnectionFormats.begin(); - for (; connectionFormatIterator < listConnectionFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSink SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - //then we need to check if we need to update the listMainSoundProperties - if (!listMainSoundProperties.empty() && sourceVisible(sourceID)) - { - command = "DELETE from SourceMainSoundProperty" + i2s(sourceID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - //Fill MainSinkSoundProperties - command = "INSERT INTO SourceMainSoundProperty" + i2s(sourceID) + std::string("(soundPropertyType,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_MainSoundProperty_s>::const_iterator mainSoundPropertyIterator = listMainSoundProperties.begin(); - for (; mainSoundPropertyIterator < listMainSoundProperties.end(); ++mainSoundPropertyIterator) - { - MY_SQLITE_BIND_INT(query, 1, mainSoundPropertyIterator->type) - MY_SQLITE_BIND_INT(query, 2, mainSoundPropertyIterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSink SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - else //read out the properties - { - getListMainSourceSoundProperties(sourceID,listMainSoundPropertiesOut); - } - - logInfo("DatabaseHandler::changeSource changed changeSink of source:", sourceID); - - if (mpDatabaseObserver != NULL) - { - mpDatabaseObserver->sourceUpdated(sourceID,sourceClassOut,listMainSoundPropertiesOut,sourceVisible(sourceID)); - } - - return (E_OK); - -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSinkDB(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomConnectionFormat_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties) -{ - assert(sinkID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - am_sinkClass_t sinkClassOut(sinkClassID); - std::vector<am_MainSoundProperty_s> listMainSoundPropertiesOut(listMainSoundProperties); - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - - //check if sinkClass needs to be changed - if (sinkClassID!=0) - { - command = "UPDATE"+ std::string(SINK_TABLE)+ " SET sinkClassID=? WHERE sinkID=" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, sinkClassID) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSink SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query); - } - - else //we need to read out the active one - { - command = "SELECT sinkClassID FROM " + std::string(SINK_TABLE) + " WHERE reserved=0 and sinkID=" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - sinkClassOut = sqlite3_column_int(query, 0); - } - MY_SQLITE_FINALIZE(query) - } - - //check if soundProperties need to be updated - if (!listSoundProperties.empty()) - { - //first we drop the table - command = "DELETE from SinkSoundProperty" + i2s(sinkID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - //then we'll have a new one - //Fill SinkSoundProperties - command = "INSERT INTO SinkSoundProperty" + i2s(sinkID) + std::string("(soundPropertyType,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_SoundProperty_s>::const_iterator SoundPropertyIterator = listSoundProperties.begin(); - for (; SoundPropertyIterator < listSoundProperties.end(); ++SoundPropertyIterator) - { - MY_SQLITE_BIND_INT(query, 1, SoundPropertyIterator->type) - MY_SQLITE_BIND_INT(query, 2, SoundPropertyIterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSink SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - //check if we have to update the list of connectionformats - if (!listConnectionFormats.empty()) - { - //first clear the table - command = "DELETE from SinkConnectionFormat" + i2s(sinkID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO SinkConnectionFormat" + i2s(sinkID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = listConnectionFormats.begin(); - for (; connectionFormatIterator < listConnectionFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSink SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - //then we need to check if we need to update the listMainSoundProperties - if (!listMainSoundProperties.empty() && sinkVisible(sinkID)) - { - command = "DELETE from SinkMainSoundProperty" + i2s(sinkID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - //Fill MainSinkSoundProperties - command = "INSERT INTO SinkMainSoundProperty" + i2s(sinkID) + std::string("(soundPropertyType,value) VALUES (?,?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_MainSoundProperty_s>::const_iterator mainSoundPropertyIterator = listMainSoundProperties.begin(); - for (; mainSoundPropertyIterator < listMainSoundProperties.end(); ++mainSoundPropertyIterator) - { - MY_SQLITE_BIND_INT(query, 1, mainSoundPropertyIterator->type) - MY_SQLITE_BIND_INT(query, 2, mainSoundPropertyIterator->value) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeSink SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - else //read out the properties - { - getListMainSinkSoundProperties(sinkID,listMainSoundPropertiesOut); - } - - logInfo("DatabaseHandler::changeSink changed changeSink of sink:", sinkID); - - if (mpDatabaseObserver != NULL) - { - mpDatabaseObserver->sinkUpdated(sinkID,sinkClassOut,listMainSoundPropertiesOut,sinkVisible(sinkID)); - } - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::getListMainSinkNotificationConfigurations(const am_sinkID_t sinkID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations) -{ - assert(sinkID!=0); - if (!existSink(sinkID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existen, but not shown in sequences - listMainNotificationConfigurations.clear(); - - sqlite3_stmt* query = NULL; - int eCode = 0; - am_NotificationConfiguration_s temp; - std::string command = "SELECT type, status, parameter FROM SinkMainNotificationConfiguration" + i2s(sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.type = static_cast<am_CustomNotificationType_t>(sqlite3_column_int(query, 0)); - temp.status = static_cast<am_NotificationStatus_e>(sqlite3_column_int(query, 1)); - temp.parameter= static_cast<int16_t>(sqlite3_column_int(query, 2)); - listMainNotificationConfigurations.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSinkMainNotificationConfigurations SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); - -} - -am_Error_e CAmDatabaseHandlerSQLite::getListMainSourceNotificationConfigurations(const am_sourceID_t sourceID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations) -{ - assert(sourceID!=0); - if (!existSource(sourceID)) - return (E_DATABASE_ERROR); // todo: here we could change to non existen, but not shown in sequences - listMainNotificationConfigurations.clear(); - - sqlite3_stmt* query = NULL; - int eCode = 0; - am_NotificationConfiguration_s temp; - std::string command = "SELECT type, status, parameter FROM SourceMainNotificationConfiguration" + i2s(sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.type = static_cast<am_CustomNotificationType_t>(sqlite3_column_int(query, 0)); - temp.status = static_cast<am_NotificationStatus_e>(sqlite3_column_int(query, 1)); - temp.parameter= static_cast<int16_t>(sqlite3_column_int(query, 2)); - listMainNotificationConfigurations.push_back(temp); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSourceMainNotificationConfigurations SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeMainSinkNotificationConfigurationDB(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration) -{ - assert(sinkID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE SinkMainNotificationConfiguration" + i2s(sinkID) + " SET status=?, parameter=? WHERE type=" + i2s(mainNotificationConfiguration.type); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, mainNotificationConfiguration.status) - MY_SQLITE_BIND_INT(query, 2, mainNotificationConfiguration.parameter) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainSinkNotificationConfigurationDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::changeMainSinkNotificationConfigurationDB changed MainNotificationConfiguration of source:", sinkID, "type:", mainNotificationConfiguration.type, "to status=", mainNotificationConfiguration.status, "and parameter=",mainNotificationConfiguration.parameter); - - if (mpDatabaseObserver) - mpDatabaseObserver->sinkMainNotificationConfigurationChanged(sinkID, mainNotificationConfiguration); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeMainSourceNotificationConfigurationDB(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration) -{ - assert(sourceID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE SourceMainNotificationConfiguration" + i2s(sourceID) + " SET status=?, parameter=? WHERE type=" + i2s(mainNotificationConfiguration.type); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, mainNotificationConfiguration.status) - MY_SQLITE_BIND_INT(query, 2, mainNotificationConfiguration.parameter) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainSourceNotificationConfigurationDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::changeMainSourceNotificationConfigurationDB changed MainNotificationConfiguration of source:", sourceID, "type:", mainNotificationConfiguration.type, "to status=", mainNotificationConfiguration.status, "and parameter=",mainNotificationConfiguration.parameter); - - if (mpDatabaseObserver) - mpDatabaseObserver->sourceMainNotificationConfigurationChanged(sourceID, mainNotificationConfiguration); - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeGatewayDB(const am_gatewayID_t gatewayID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix) -{ - assert(gatewayID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existGateway(gatewayID)) - { - return (E_NON_EXISTENT); - } - - if (!listSourceConnectionFormats.empty()) - { - //clear Database - command = "DELETE from GatewaySourceFormat" + i2s(gatewayID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO GatewaySourceFormat" + i2s(gatewayID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = listSourceConnectionFormats.begin(); - for (; connectionFormatIterator < listSourceConnectionFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterGatewayDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - if (!listSinkConnectionFormats.empty()) - { - //clear Database - command = "DELETE from GatewaySinkFormat" + i2s(gatewayID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - command = "INSERT INTO GatewaySinkFormat" + i2s(gatewayID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = listSinkConnectionFormats.begin(); - for (; connectionFormatIterator < listSinkConnectionFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterGatewayDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - if (!convertionMatrix.empty()) - { - mListConnectionFormat.clear(); - mListConnectionFormat.insert(std::make_pair(gatewayID, convertionMatrix)); - } - - logInfo("DatabaseHandler::changeGatewayDB changed Gateway with ID", gatewayID); - - //todo: check if observer needs to be adopted. - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeConverterDB(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix) -{ - assert(converterID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existConverter(converterID)) - { - return (E_NON_EXISTENT); - } - - if (!listSourceConnectionFormats.empty()) - { - //clear Database - command = "DELETE from ConverterSourceFormat" + i2s(converterID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - //fill ConnectionFormats - command = "INSERT INTO ConverterSourceFormat" + i2s(converterID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = listSourceConnectionFormats.begin(); - for (; connectionFormatIterator < listSourceConnectionFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterConverterDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - if (!listSinkConnectionFormats.empty()) - { - //clear Database - command = "DELETE from ConverterSinkFormat" + i2s(converterID); - if (!sqQuery(command)) - return (E_DATABASE_ERROR); - - command = "INSERT INTO ConverterSinkFormat" + i2s(converterID) + std::string("(soundFormat) VALUES (?)"); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - std::vector<am_CustomConnectionFormat_t>::const_iterator connectionFormatIterator = listSinkConnectionFormats.begin(); - for (; connectionFormatIterator < listSinkConnectionFormats.end(); ++connectionFormatIterator) - { - MY_SQLITE_BIND_INT(query, 1, *connectionFormatIterator) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::enterConverterDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_RESET(query) - } - MY_SQLITE_FINALIZE(query) - } - - if (!convertionMatrix.empty()) - { - mListConnectionFormat.clear(); - mListConnectionFormat.insert(std::make_pair(converterID, convertionMatrix)); - } - - logInfo("DatabaseHandler::changeConverterDB changed Gateway with ID", converterID); - - //todo: check if observer needs to be adopted. - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSinkNotificationConfigurationDB(const am_sinkID_t sinkID, const am_NotificationConfiguration_s notificationConfiguration) -{ - assert(sinkID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSink(sinkID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE SinkNotificationConfiguration" + i2s(sinkID) + " SET status=?, parameter=? WHERE type=" + i2s(notificationConfiguration.type); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, notificationConfiguration.status) - MY_SQLITE_BIND_INT(query, 2, notificationConfiguration.parameter) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainSinkNotificationConfigurationDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::changeMainSinkNotificationConfigurationDB changed MainNotificationConfiguration of source:", sinkID, "type:", notificationConfiguration.type, "to status=", notificationConfiguration.status, "and parameter=",notificationConfiguration.parameter); - - //todo:: inform obsever here... - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::changeSourceNotificationConfigurationDB(const am_sourceID_t sourceID, const am_NotificationConfiguration_s notificationConfiguration) -{ - assert(sourceID!=0); - - sqlite3_stmt* query = NULL; - int eCode = 0; - std::string command; - - if (!existSource(sourceID)) - { - return (E_NON_EXISTENT); - } - command = "UPDATE SourceNotificationConfiguration" + i2s(sourceID) + " SET status=?, parameter=? WHERE type=" + i2s(notificationConfiguration.type); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - MY_SQLITE_BIND_INT(query, 1, notificationConfiguration.status) - MY_SQLITE_BIND_INT(query, 2, notificationConfiguration.parameter) - if ((eCode = sqlite3_step(query)) != SQLITE_DONE) - { - logError("DatabaseHandler::changeMainSourceNotificationConfigurationDB SQLITE Step error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - MY_SQLITE_FINALIZE(query) - - logInfo("DatabaseHandler::changeSourceNotificationConfigurationDB changed MainNotificationConfiguration of source:", sourceID, "type:", notificationConfiguration.type, "to status=", notificationConfiguration.status, "and parameter=",notificationConfiguration.parameter); - - //todo:: implement observer function - return (E_OK); -} - -void CAmDatabaseHandlerSQLite::createTables() -{ - for (uint16_t i = 0; i < sizeof(databaseTables) / sizeof(databaseTables[0]); i++) - { - if (!sqQuery("CREATE TABLE " + databaseTables[i])) - throw std::runtime_error("CAmDatabaseHandler Could not create tables!"); - } -} - -am_Error_e CAmDatabaseHandlerSQLite::enumerateSources(std::function<void(const am_Source_s & element)> cb) const -{ - sqlite3_stmt* query = NULL, *qConnectionFormat = NULL, *qSoundProperty = NULL, *qMAinSoundProperty = NULL, *qNotification(NULL), *qMainNotification(NULL); - int eCode = 0; - am_Source_s temp; - am_CustomConnectionFormat_t tempConnectionFormat; - am_SoundProperty_s tempSoundProperty; - am_MainSoundProperty_s tempMainSoundProperty; - am_NotificationConfiguration_s tempNotificationConfiguration; - std::string command = "SELECT name, domainID, sourceClassID, sourceState, volume, visible, availability, availabilityReason, interruptState, sourceID FROM " + std::string(SOURCE_TABLE) + " WHERE reserved=0"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.name = std::string((const char*) sqlite3_column_text(query, 0)); - temp.domainID = sqlite3_column_int(query, 1); - temp.sourceClassID = sqlite3_column_int(query, 2); - temp.sourceState = (am_SourceState_e) sqlite3_column_int(query, 3); - temp.volume = sqlite3_column_int(query, 4); - temp.visible = sqlite3_column_int(query, 5); - temp.available.availability = (am_Availability_e) sqlite3_column_int(query, 6); - temp.available.availabilityReason = (am_CustomAvailabilityReason_t) sqlite3_column_int(query, 7); - temp.interruptState = (am_InterruptState_e) sqlite3_column_int(query, 8); - temp.sourceID = sqlite3_column_int(query, 9); - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM SourceConnectionFormat" + i2s(temp.sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qConnectionFormat, NULL) - while ((eCode = sqlite3_step(qConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qConnectionFormat, 0); - temp.listConnectionFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qConnectionFormat) - - //read out sound properties - std::string commandSoundProperty = "SELECT soundPropertyType, value FROM SourceSoundProperty" + i2s(temp.sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandSoundProperty.c_str(), -1, &qSoundProperty, NULL) - while ((eCode = sqlite3_step(qSoundProperty)) == SQLITE_ROW) - { - tempSoundProperty.type = (am_CustomSoundPropertyType_t) sqlite3_column_int(qSoundProperty, 0); - tempSoundProperty.value = sqlite3_column_int(qSoundProperty, 1); - temp.listSoundProperties.push_back(tempSoundProperty); - } - - MY_SQLITE_FINALIZE(qSoundProperty) - - std::string notificationCommand = "SELECT type, status, parameter FROM SourceNotificationConfiguration" + i2s(temp.sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, notificationCommand.c_str(), -1, &qNotification, NULL) - - while ((eCode = sqlite3_step(qNotification)) == SQLITE_ROW) - { - tempNotificationConfiguration.type = static_cast<am_CustomNotificationType_t>(sqlite3_column_int(qNotification, 0)); - tempNotificationConfiguration.status = static_cast<am_NotificationStatus_e>(sqlite3_column_int(qNotification, 1)); - tempNotificationConfiguration.parameter= static_cast<int16_t>(sqlite3_column_int(qNotification, 2)); - temp.listNotificationConfigurations.push_back(tempNotificationConfiguration); - } - MY_SQLITE_FINALIZE(qNotification) - - //read out MainSoundProperties if source is visible - if(temp.visible) - { - std::string commandMainSoundProperty = "SELECT soundPropertyType, value FROM SourceMainSoundProperty" + i2s(temp.sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandMainSoundProperty.c_str(), -1, &qMAinSoundProperty, NULL) - while ((eCode = sqlite3_step(qMAinSoundProperty)) == SQLITE_ROW) - { - tempMainSoundProperty.type = (am_CustomMainSoundPropertyType_t) sqlite3_column_int(qMAinSoundProperty, 0); - tempMainSoundProperty.value = sqlite3_column_int(qMAinSoundProperty, 1); - temp.listMainSoundProperties.push_back(tempMainSoundProperty); - } - - MY_SQLITE_FINALIZE(qMAinSoundProperty) - - std::string mainNotificationCommand = "SELECT type, status, parameter FROM SourceMainNotificationConfiguration" + i2s(temp.sourceID); - MY_SQLITE_PREPARE_V2(mpDatabase, mainNotificationCommand.c_str(), -1, &qMainNotification, NULL) - - while ((eCode = sqlite3_step(qMainNotification)) == SQLITE_ROW) - { - tempNotificationConfiguration.type = static_cast<am_CustomNotificationType_t>(sqlite3_column_int(qMainNotification, 0)); - tempNotificationConfiguration.status = static_cast<am_NotificationStatus_e>(sqlite3_column_int(qMainNotification, 1)); - tempNotificationConfiguration.parameter= static_cast<int16_t>(sqlite3_column_int(qMainNotification, 2)); - temp.listMainNotificationConfigurations.push_back(tempNotificationConfiguration); - } - MY_SQLITE_FINALIZE(qMainNotification) - } - - - cb(temp); - temp.listConnectionFormats.clear(); - temp.listMainSoundProperties.clear(); - temp.listSoundProperties.clear(); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSources SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enumerateSinks(std::function<void(const am_Sink_s & element)> cb) const -{ - sqlite3_stmt* query = NULL, *qConnectionFormat = NULL, *qSoundProperty = NULL, *qNotificationConfiguration= NULL, *qMAinSoundProperty = NULL, *qMainNotificationConfiguration= NULL; - int eCode = 0; - am_Sink_s temp; - am_CustomConnectionFormat_t tempConnectionFormat; - am_SoundProperty_s tempSoundProperty; - am_MainSoundProperty_s tempMainSoundProperty; - am_NotificationConfiguration_s tempNotificationConfiguration; - am_NotificationConfiguration_s tempMainNotificationConfiguration; - std::string command = "SELECT name, domainID, sinkClassID, volume, visible, availability, availabilityReason, muteState, mainVolume, sinkID FROM " + std::string(SINK_TABLE) + " WHERE reserved=0"; - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.name = std::string((const char*) sqlite3_column_text(query, 0)); - temp.domainID = sqlite3_column_int(query, 1); - temp.sinkClassID = sqlite3_column_int(query, 2); - temp.volume = sqlite3_column_int(query, 3); - temp.visible = sqlite3_column_int(query, 4); - temp.available.availability = (am_Availability_e) sqlite3_column_int(query, 5); - temp.available.availabilityReason = (am_CustomAvailabilityReason_t) sqlite3_column_int(query, 6); - temp.muteState = (am_MuteState_e) sqlite3_column_int(query, 7); - temp.mainVolume = sqlite3_column_int(query, 8); - temp.sinkID = sqlite3_column_int(query, 9); - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM SinkConnectionFormat" + i2s(temp.sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qConnectionFormat, NULL) - while ((eCode = sqlite3_step(qConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qConnectionFormat, 0); - temp.listConnectionFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qConnectionFormat) - - //read out sound properties - std::string commandSoundProperty = "SELECT soundPropertyType, value FROM SinkSoundProperty" + i2s(temp.sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandSoundProperty.c_str(), -1, &qSoundProperty, NULL) - while ((eCode = sqlite3_step(qSoundProperty)) == SQLITE_ROW) - { - tempSoundProperty.type = (am_CustomSoundPropertyType_t) sqlite3_column_int(qSoundProperty, 0); - tempSoundProperty.value = sqlite3_column_int(qSoundProperty, 1); - temp.listSoundProperties.push_back(tempSoundProperty); - } - - MY_SQLITE_FINALIZE(qSoundProperty) - - //read out notifications - std::string commandNotificationConfiguration = "SELECT type, status, parameter FROM SinkNotificationConfiguration" + i2s(temp.sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandNotificationConfiguration.c_str(), -1, &qNotificationConfiguration, NULL) - while ((eCode = sqlite3_step(qNotificationConfiguration)) == SQLITE_ROW) - { - tempNotificationConfiguration.type = static_cast<am_CustomNotificationType_t> (sqlite3_column_int(qNotificationConfiguration, 0)); - tempNotificationConfiguration.status = static_cast<am_NotificationStatus_e> (sqlite3_column_int(qNotificationConfiguration, 1)); - tempNotificationConfiguration.parameter = static_cast<int16_t> (sqlite3_column_int(qNotificationConfiguration, 2)); - temp.listNotificationConfigurations.push_back(tempNotificationConfiguration); - } - - MY_SQLITE_FINALIZE(qNotificationConfiguration) - - //read out MainSoundProperties if sink is visible - if(temp.visible) - { - std::string commandMainSoundProperty = "SELECT soundPropertyType, value FROM SinkMainSoundProperty" + i2s(temp.sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandMainSoundProperty.c_str(), -1, &qMAinSoundProperty, NULL) - while ((eCode = sqlite3_step(qMAinSoundProperty)) == SQLITE_ROW) - { - tempMainSoundProperty.type = (am_CustomMainSoundPropertyType_t) sqlite3_column_int(qMAinSoundProperty, 0); - tempMainSoundProperty.value = sqlite3_column_int(qMAinSoundProperty, 1); - temp.listMainSoundProperties.push_back(tempMainSoundProperty); - } - - MY_SQLITE_FINALIZE(qMAinSoundProperty) - - //and mainNotificationConfigurations - std::string commandMainNotificationConfiguration = "SELECT type, status, parameter FROM SinkMainNotificationConfiguration" + i2s(temp.sinkID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandMainNotificationConfiguration.c_str(), -1, &qMainNotificationConfiguration, NULL) - while ((eCode = sqlite3_step(qMainNotificationConfiguration)) == SQLITE_ROW) - { - tempMainNotificationConfiguration.type = static_cast <am_CustomNotificationType_t> (sqlite3_column_int(qMainNotificationConfiguration, 0)); - tempMainNotificationConfiguration.status = static_cast <am_NotificationStatus_e> (sqlite3_column_int(qMainNotificationConfiguration, 1)); - tempMainNotificationConfiguration.parameter = static_cast <uint16_t>(sqlite3_column_int(qMainNotificationConfiguration, 2)); - temp.listMainNotificationConfigurations.push_back(tempMainNotificationConfiguration); - } - - MY_SQLITE_FINALIZE(qMainNotificationConfiguration) - } - - cb(temp); - temp.listConnectionFormats.clear(); - temp.listMainSoundProperties.clear(); - temp.listSoundProperties.clear(); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListSinks SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enumerateGateways(std::function<void(const am_Gateway_s & element)> cb) const -{ - sqlite3_stmt* query = NULL, *qSinkConnectionFormat = NULL, *qSourceConnectionFormat = NULL; - int eCode = 0; - am_Gateway_s temp; - am_CustomConnectionFormat_t tempConnectionFormat; - - std::string command = "SELECT name, sinkID, sourceID, domainSinkID, domainSourceID, controlDomainID, gatewayID FROM " + std::string(GATEWAY_TABLE); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.name = std::string((const char*) sqlite3_column_text(query, 0)); - temp.sinkID = sqlite3_column_int(query, 1); - temp.sourceID = sqlite3_column_int(query, 2); - temp.domainSinkID = sqlite3_column_int(query, 3); - temp.domainSourceID = sqlite3_column_int(query, 4); - temp.controlDomainID = sqlite3_column_int(query, 5); - temp.gatewayID = sqlite3_column_int(query, 6); - - //convertionMatrix: - ListConnectionFormat::const_iterator iter = mListConnectionFormat.begin(); - iter = mListConnectionFormat.find(temp.gatewayID); - if (iter == mListConnectionFormat.end()) - { - logError("DatabaseHandler::getListGateways database error with convertionFormat"); - - return (E_DATABASE_ERROR); - } - temp.convertionMatrix = iter->second; - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM GatewaySourceFormat" + i2s(temp.gatewayID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qSourceConnectionFormat, NULL) - while ((eCode = sqlite3_step(qSourceConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qSourceConnectionFormat, 0); - temp.listSourceFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qSourceConnectionFormat) - - //read out sound properties - commandConnectionFormat = "SELECT soundFormat FROM GatewaySinkFormat" + i2s(temp.gatewayID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qSinkConnectionFormat, NULL) - while ((eCode = sqlite3_step(qSinkConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qSinkConnectionFormat, 0); - temp.listSinkFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qSinkConnectionFormat) - - cb(temp); - temp.listSinkFormats.clear(); - temp.listSourceFormats.clear(); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListGateways SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -am_Error_e CAmDatabaseHandlerSQLite::enumerateConverters(std::function<void(const am_Converter_s & element)> cb) const -{ - sqlite3_stmt* query = NULL, *qSinkConnectionFormat = NULL, *qSourceConnectionFormat = NULL; - int eCode = 0; - am_Converter_s temp; - am_CustomConnectionFormat_t tempConnectionFormat; - - std::string command = "SELECT name, sinkID, sourceID, domainID, converterID FROM " + std::string(CONVERTER_TABLE); - MY_SQLITE_PREPARE_V2(mpDatabase, command.c_str(), -1, &query, NULL) - - while ((eCode = sqlite3_step(query)) == SQLITE_ROW) - { - temp.name = std::string((const char*) sqlite3_column_text(query, 0)); - temp.sinkID = sqlite3_column_int(query, 1); - temp.sourceID = sqlite3_column_int(query, 2); - temp.domainID = sqlite3_column_int(query, 3); - temp.converterID = sqlite3_column_int(query, 4); - - //convertionMatrix: - ListConnectionFormat::const_iterator iter = mListConnectionFormat.begin(); - iter = mListConnectionFormat.find(temp.converterID); - if (iter == mListConnectionFormat.end()) - { - logError("DatabaseHandler::getListConverters database error with convertionFormat"); - - return (E_DATABASE_ERROR); - } - temp.convertionMatrix = iter->second; - - //read out the connectionFormats - std::string commandConnectionFormat = "SELECT soundFormat FROM ConverterSourceFormat" + i2s(temp.converterID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qSourceConnectionFormat, NULL) - while ((eCode = sqlite3_step(qSourceConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qSourceConnectionFormat, 0); - temp.listSourceFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qSourceConnectionFormat) - - //read out sound properties - commandConnectionFormat = "SELECT soundFormat FROM ConverterSinkFormat" + i2s(temp.converterID); - MY_SQLITE_PREPARE_V2(mpDatabase, commandConnectionFormat.c_str(), -1, &qSinkConnectionFormat, NULL) - while ((eCode = sqlite3_step(qSinkConnectionFormat)) == SQLITE_ROW) - { - tempConnectionFormat = (am_CustomConnectionFormat_t) sqlite3_column_int(qSinkConnectionFormat, 0); - temp.listSinkFormats.push_back(tempConnectionFormat); - } - - MY_SQLITE_FINALIZE(qSinkConnectionFormat) - - cb(temp); - temp.listSinkFormats.clear(); - temp.listSourceFormats.clear(); - } - - if (eCode != SQLITE_DONE) - { - logError("DatabaseHandler::getListConverters SQLITE error code:", eCode); - MY_SQLITE_FINALIZE(query) - return (E_DATABASE_ERROR); - } - - MY_SQLITE_FINALIZE(query) - - return (E_OK); -} - -} |