Beispiel #1
0
ByteArray ConnectorMySQL::Call(const ByteArray &command, ErrorCode &error_code)
{
	if (IsConnected())
	{
		mysql_real_query(&mysql_, command.data(), command.size());
		int error = mysql_errno(&mysql_);
		if (error != 0)
		{
			error_code.SetError(error, mysql_error(&mysql_));
			return ByteArray();
		}

		ByteArray bytes;
		MYSQL_RES *sql_result = mysql_store_result(&mysql_);
		if (sql_result != nullptr)
		{
			mysql_stuff::Serialize(sql_result, &bytes);
			mysql_free_result(sql_result);
		}
		else
		{
			ProcedureMySQL procedure(command);
			if (procedure.HasVariable())
			{
				ByteArray query_variable = procedure.QueryVariableValue();
				mysql_real_query(&mysql_, query_variable.data(), query_variable.size());
				int error = mysql_errno(&mysql_);
				if (error != 0)
				{
					error_code.SetError(error, mysql_error(&mysql_));
					return ByteArray();
				}

				MYSQL_RES *sql_result = mysql_store_result(&mysql_);
				mysql_stuff::Serialize(sql_result, &bytes);
				mysql_free_result(sql_result);
			}
		}
		return bytes;
	}
	else
	{
		throw NotConnected();
	}
}
Beispiel #2
0
void ConnectorMySQL::SetCharacterSet(const char *csname, ErrorCode &error_code)
{
	if (IsConnected())
	{
		mysql_set_character_set(&mysql_, csname);
		int error = mysql_errno(&mysql_);
		if (error != 0)
		{
			error_code.SetError(error, mysql_error(&mysql_));
		}
	}
	else
	{
		throw NotConnected();
	}
}
Beispiel #3
0
void ConnectorMySQL::SelectDatabase(const char *db, ErrorCode &error_code)
{
	if (IsConnected())
	{
		mysql_select_db(&mysql_, db);
		int error = mysql_errno(&mysql_);
		if (error == 0)
		{
			select_db_ = db;
		}
		else
		{
			error_code.SetError(error, mysql_error(&mysql_));
		}
	}
	else
	{
		throw NotConnected();
	}
}
Beispiel #4
0
ByteArray ConnectorMySQL::Insert(const ByteArray &command, ErrorCode &error_code)
{
	if (IsConnected())
	{
		mysql_real_query(&mysql_, command.data(), command.size());
		int error = mysql_errno(&mysql_);
		if (error != 0)
		{
			error_code.SetError(error, mysql_error(&mysql_));
			return ByteArray();
		}

		ByteArray bytes;
		mysql_stuff::SerializeAffectedRowsAndInsertID(mysql_, &bytes);
		return bytes;
	}
	else
	{
		throw NotConnected();
	}
}
Beispiel #5
0
ByteArray ConnectorMySQL::Select(const ByteArray &command, ErrorCode &error_code)
{
	if (IsConnected())
	{
		mysql_real_query(&mysql_, command.data(), command.size());
		int error = mysql_errno(&mysql_);
		if (error != 0)
		{
			error_code.SetError(error, mysql_error(&mysql_));
			return ByteArray();
		}

		ByteArray bytes;
		MYSQL_RES *sql_result = mysql_store_result(&mysql_);
		mysql_stuff::Serialize(sql_result, &bytes);
		mysql_free_result(sql_result);
		return bytes;
	}
	else
	{
		throw NotConnected();
	}
}