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; }
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; }