bool P2pMachine::store() { if(validate() == false) return false; try { shared_ptr<IDbConnection> connection = Engine::instance()->createSystemConnection(); DbSqlValues values; values.set(_S("id"), m_id.toHex()); values.set(_S("public_key"), m_publicKey); shared_ptr<IDbStatement> statement = connection->_prepare(connection->prepare_insert(_S("os_machines"), values)); for(DbSqlValues::iterator i = values.begin(); i != values.end(); i++) { statement->addParameter()->setValue(i->second); } statement->execute(); return true; } catch(std::exception &e) { OS_LOG_ERROR(e.what()); } return false; }
String IDbConnection::prepare_insert(const String &table, const DbSqlValues &values) const { String record_fields; String record_values; record_fields = _S("("); record_values = _S("("); for(DbSqlValues::iterator i = values.begin(); i != values.end(); ++i) { if(i != values.begin()) { record_fields += _S(", "); record_values += _S(", "); } record_fields += escape(i->first); record_values += _S("?"); } record_fields += _S(")"); record_values += _S(")"); return _S("insert into ") + escape(table) + _S(" ") + record_fields + _S(" values ") + record_values; }
bool IExtensionsExtension::updateExtension(shared_ptr<Portal> portal, shared_ptr<IPortalDatabase> db, const Version &version) { OS_ASSERT(portal != nullptr); //shared_ptr<IPortalDatabase> db = portal->getDatabase(); OS_EXCEPT_IF(db == nullptr, "Invalid database"); DbSqlValues values; values.set(DBTABLES::EXTENSIONS::VERSION, static_cast<String>(version.toString())); String sql = db->getConnection()->prepare_update(DBTABLES::EXTENSIONS_TABLE, values, DBTABLES::EXTENSIONS::ID, Convert::toSQL(getID().toUTF16())); return db->getConnection()->executeStatement(sql, values); }
String IDbConnection::prepare_update(const String &table, const DbSqlValues &values, const String &f1, const String &v1, const String &f2, const String &v2) const { String record_values; for(DbSqlValues::iterator i = values.begin(); i != values.end(); ++i) { if(i != values.begin()) record_values += _S(", "); record_values += escape(i->first) + _S(" = ?"); } return _S("update ") + escape(table) + _S(" set ") + record_values + _S(" where ") + escape(f1) + _S(" = ") + v1 + _S(" and ") + escape(f2) + _S(" = ") + v2; }
bool IDbConnection::executeStatement(const String &sql, const DbSqlValues &values) { try { shared_ptr<IDbStatement> statement = _prepare(sql); for(DbSqlValues::iterator i = values.begin(); i != values.end(); i++) { statement->addParameter()->setValue(i->second); } statement->execute(); return true; } catch(std::exception &e) { logError(sql, e); } return false; }