docs: deixa explícito que o callback é opcional, e corrige a promessa de ordem - #55
Merged
Merged
Conversation
… de ordem Duas coisas que a documentacao dizia mal, as duas confirmadas rodando um gamemode de teste contra um servidor SA-MP e um MariaDB de verdade. 1. O callback e opcional, e ninguem percebia Nao-bloqueante nao obriga a escrever callback para tudo: as oito natives que aceitam `callback` aceitam com valor padrao `""`, e sem ele a query roda e o resultado e descartado. Uma escrita e uma linha, sem forward e sem public. As unicas excecoes sao `mysql_hash_password` e `mysql_verify_password`, cujo callback e obrigatorio - o hash so existe atraves dele - e que ja recusam callback vazio com aviso no log. Isso estava documentado em uma subsecao no fim da pagina de queries, enquanto a primeira linha dizia "o callback e invocado num tick posterior" e nenhum dos onze exemplos mostrava a forma sem callback. Quem lia saia convencido do contrario, e era a origem da reclamacao de que o plugin "obriga a encher o codigo de callback". 2. A garantia de ordem e de callback, nao de execucao `mysql_query` e FIFO na ENTREGA DOS CALLBACKS. A execucao nao e ordenada: cada query ganha uma thread e uma conexao do pool no momento em que e submetida, entao duas submetidas em sequencia rodam ao mesmo tempo no servidor. Um `CREATE TABLE` seguido de `INSERT` falha com "table doesn't exist" - foi o que o teste mostrou. A tabela comparativa ainda sugeria `mysql_query` para "SELECT chains that depend on order", que e exatamente o uso que quebra. Agora a pagina diz qual ferramenta serializa de verdade: `mysql_query_file` para schema e transacao para escritas dependentes, ambas verificadas no mesmo teste. Mudancas: README (destaque e quick start com as duas formas), pagina de queries (abertura, secao de ordem e tabela), `@param callback` do template do include - que alimenta o hover do PawnPro e chega aos dois includes gerados - e dois exemplos novos, 12_no_callback e 13_ordering.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Duas coisas que a documentação dizia mal. As duas foram verificadas rodando um gamemode de teste num servidor SA-MP com MariaDB de verdade, não por leitura de código.
1. O callback é opcional — e ninguém percebia
Não-bloqueante não obriga a escrever callback para tudo. As oito natives que aceitam
callbackaceitam com padrão"", e sem ele a query roda e o resultado é descartado:Uma linha, sem
forward, sempublic, e o servidor não trava. Verificado: oUPDATErodou e o banco ficou com o valor novo.As duas exceções são
mysql_hash_passwordemysql_verify_password: callback obrigatório, sem valor padrão, e já recusado em runtime com aviso no log — o hash só existe através dele.O problema não era falta de informação, era onde ela estava. Havia uma subseção
### Fire and forgetno fim da página de queries, enquanto:UPDATE;Quem lia saía convencido do contrário. É a origem da reclamação de que o plugin "obriga a encher o código de callback".
2. A garantia de ordem é de callback, não de execução
mysql_queryé FIFO na entrega dos callbacks. A execução não é ordenada:submit_queryfazthread::spawnpor query, cada uma pegando uma conexão do pool na hora. Duas submetidas em sequência rodam ao mesmo tempo no servidor.O teste deixou isso claro:
E a tabela comparativa ainda recomendava
mysql_querypara "SELECT chains that depend on order" — exatamente o uso que quebra.A página agora diz qual ferramenta serializa de verdade, as duas confirmadas no mesmo teste:
.sqlmysql_query_fileid=1 v=20, ordem corretamysql_transaction_*id=1 v=60, ordem corretaMudanças
README.md— o destaque de "non-blocking" agora diz que o callback é opcional; o quick start mostra as duas formas lado a lado.docs/queries.md— abertura reescrita, seção de ordem com o exemplo que quebra e a tabela de alternativas, e a linha enganosa da tabela comparativa corrigida (mais uma linha nova, "Execution order: not ordered").include/mysql_samp.inc.in—@param callbackagora diz "Optional" ou "REQUIRED" em cada caso. Vem do template, então chega aos dois includes gerados e ao hover do PawnPro.examples/12_no_callback.pwn— fire-and-forget, e o lembrete de queOnQueryErrorcontinua chegando.examples/13_ordering.pwn— o que é ordenado, o que não é, e o que usar no lugar.examples/README.md— os dois na tabela, mais uma nota no topo.Verificação
cargo test— 177 passed, 1 ignoredmkdocs build --strict— sem links quebradospawnccsem erro