1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//! # fdb_driver
//!
//! Um driver síncrono, puramente em Rust, para o **Firebird 5+**, que fala o
//! protocolo de comunicação nativo (wire protocol) diretamente sobre TCP — sem
//! dependência do `libfbclient`.
//!
//! ## Por onde começar
//!
//! Se você só quer usar o banco, comece por estes tipos:
//!
//! - [`ConnectConfig`]: dados de host, banco, usuário e senha.
//! - [`Connection`]: a conexão aberta com o Firebird.
//! - [`Transaction`]: o bloco de trabalho confirmado por `commit` ou desfeito
//! por `rollback`.
//! - [`Statement`]: um SQL preparado para executar e buscar linhas.
//! - [`Value`]: valores enviados como parâmetros ou recebidos em linhas.
//!
//! Um primeiro uso costuma seguir esta ordem:
//!
//! ```no_run
//! use fdb_driver::{ConnectConfig, Connection, Value};
//!
//! fn main() -> fdb_driver::Result<()> {
//! let cfg = ConnectConfig::new()
//! .host("127.0.0.1")
//! .port(3050)
//! .database("/dados/app.fdb")
//! .user("SYSDBA")
//! .password("masterkey");
//!
//! let mut conn = Connection::connect(&cfg)?;
//! let tx = conn.begin()?;
//!
//! let mut stmt = conn.prepare(&tx, "SELECT ? FROM RDB$DATABASE")?;
//! stmt.execute(&mut conn, &tx, &[Value::Int(42)])?;
//! if let Some(row) = stmt.fetch(&mut conn)? {
//! println!("{:?}", row[0]);
//! }
//! stmt.drop_statement(&mut conn)?;
//!
//! tx.commit(&mut conn)?;
//! conn.close()?;
//! Ok(())
//! }
//! ```
//!
//! Para uma explicação mais didática, leia `COMECE-AQUI.md` no repositório.
//!
//! Destaques:
//! - API bloqueante baseada na biblioteca padrão.
//! - Autenticação SRP / Srp256 com criptografia de comunicação opcional ARC4 / ChaCha20.
//! - Prepared statements, cursores roláveis (FB5), transações.
//! - **DML em lote / array** via o protocolo de batch do FB4+ (`op_batch_*`).
//! - Pool de conexões.
//! - **Gerenciador de serviços** (`op_service_*`): versão do servidor, log, etc.
//!
//! A crate é construída em camadas. Os módulos `wire`, `auth`, `blr`, `message`
//! e similares são implementação de baixo nível; para uso comum prefira os tipos
//! reexportados no topo da crate.
//! Isto é um trabalho em andamento — veja o README da crate para a superfície já implementada.
pub use ;
pub use ;
pub use ;
pub use Charset;
pub use ;
pub use Connection;
pub use ;
pub use ;
pub use EventListener;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
/// Emite um aviso (apenas em builds de debug) quando um recurso com estado no
/// servidor (`Statement`, `Transaction`, `Blob`, `BlobWriter`) é solto sem ser
/// liberado explicitamente. O handle permanece alocado no servidor até o
/// `detach`; este aviso ajuda a localizar vazamentos durante o desenvolvimento.
/// Em builds de release é um no-op (sem custo).
pub