예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
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);
}
예제 #4
0
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;
}
예제 #5
0
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;
}