Plugin MySQL para SA:MP escrito em Rust — por NullSablex
Warning
Este projeto está em fase inicial de desenvolvimento. A API pode sofrer alterações entre versões.
mysql_samp é um plugin MySQL moderno para SA:MP (San Andreas Multiplayer) e open.mp construído inteiramente em Rust. Fornece uma API completa para conectividade com banco de dados, queries non-blocking, sistema de cache e ORM, sem nenhuma dependência externa em runtime.
- Zero dependências externas — sem
libmysqlclient, sem OpenSSL. O protocolo MySQL e o TLS (via rustls) são compilados diretamente no binário. - Todas as queries são non-blocking —
mysql_queryexecuta em threads separadas com ordenação FIFO. Nunca trava o servidor. - Pool de conexões — reutilização automática de conexões via
mysql::Pool, com thread safety nativa. - ORM integrado — mapeamento de variáveis Pawn para colunas do banco com operações CRUD automáticas.
- Sistema de cache — acesso aos resultados via stack automático ou persistência manual com
cache_save. - Seguro por padrão — escape automático de strings, UTF-8 forçado, proteção contra SQL injection e memory exhaustion.
- Deploy simples — copie o
.soou.dlle funciona. Sem bibliotecas extras para instalar.
- Baixe a versão mais recente para sua plataforma:
mysql_samp.so(Linux)mysql_samp.dll(Windows)
- Coloque o arquivo no diretório
plugins/do seu servidor. - Copie
mysql_samp.incpara a pasta de includes do compilador:- Windows:
pawno/include/ouqawno/include/ - Linux:
include/(na raiz do servidor)
- Windows:
- Adicione ao
server.cfg(ouconfig.jsonno open.mp):No Windows:plugins mysql_samp.soplugins mysql_samp.dll
Important
Não é necessário instalar libmysqlclient ou qualquer outra biblioteca. O plugin é auto-contido.
#include <a_samp>
#include <mysql_samp>
new gMysql;
public OnGameModeInit() {
gMysql = mysql_connect("127.0.0.1", "root", "senha", "samp_db");
if (mysql_errno()) {
return 1;
}
// Query non-blocking com callback
mysql_query(gMysql, "SELECT * FROM players LIMIT 10", "OnPlayersLoaded");
return 1;
}
forward OnPlayersLoaded();
public OnPlayersLoaded() {
new rows = cache_get_row_count();
printf("Jogadores encontrados: %d", rows);
new name[MAX_PLAYER_NAME];
for (new i = 0; i < rows; i++) {
cache_get_value_name(i, "name", name);
printf(" - %s", name);
}
}
public OnGameModeExit() {
mysql_close(gMysql);
return 1;
}A documentacao completa do plugin esta em docs/:
| Documento | Conteudo |
|---|---|
| Instalacao e configuracao | Setup, server.cfg, requisitos |
| Conexao | mysql_connect, mysql_close, options, charset, SSL |
| Queries | mysql_query, mysql_pquery, mysql_format, mysql_escape_string |
| Cache | Todas as funcoes cache_*, save/restore, ciclo de vida |
| ORM | Mapeamento objeto-relacional, CRUD, bindings |
| Tratamento de erros | mysql_errno, mysql_error, OnQueryError, codigos |
| Referencia da API | Tabela completa de todas as natives e forwards |
| Seguranca | Escape, UTF-8, limites, boas praticas |
| Migracao do R41-4 | Diferencas e como migrar do mysql R41-4 |
- Toolchain Rust com targets:
i686-unknown-linux-gnu,i686-pc-windows-gnu - Nenhuma biblioteca do sistema necessaria (build 100% Rust)
cargo buildbash scripts/build.shOs arquivos sao gerados em dist/ com checksums SHA-256.
Caution
Este plugin e distribuido sob a GPL v3. Qualquer trabalho derivado deve manter o codigo-fonte aberto sob a mesma licenca.
Copyright (c) 2026 NullSablex
Este projeto esta licenciado sob a GNU General Public License v3.0.