dm_database_parser_sqllog/lib.rs
1//! # DM Database Parser - SQL Log
2//!
3//! 一个高性能的达梦数据库 SQL 日志解析器,支持流式处理。
4//!
5//! ## 功能特性
6//!
7//! - **高性能解析**: 使用内存映射和预编译模式优化性能
8//! - **简洁的 API**: 所有字段在解析时一次性填充,直接访问
9//! - **完整的类型安全**: 使用强类型结构表示日志数据
10//! - **详细的错误信息**: 提供清晰的错误类型和消息
11//!
12//! ## 快速开始
13//!
14//! 以下示例展示了最常见的三种使用场景。所有示例假设日志文件为 `sqllog.txt`。
15//!
16//! ### 示例 1:基础迭代
17//!
18//! 使用 `LogParserBuilder` 构建解析器,遍历所有 SQL 记录并打印时间戳和 SQL 语句体。
19//!
20//! ```rust,no_run
21//! use dm_database_parser_sqllog::LogParserBuilder;
22//!
23//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
24//! let parser = LogParserBuilder::new("sqllog.txt").build()?;
25//! for result in parser.iter()? {
26//! let record = result?;
27//! println!("时间戳: {}", record.ts);
28//! println!("SQL: {}", record.sql);
29//! }
30//! # Ok(())
31//! # }
32//! ```
33//!
34//! ### 示例 2:过滤慢查询
35//!
36//! 使用 `filter_by_exec_time(100.0)` 过滤出执行时间 >= 100ms 的慢查询。
37//!
38//! ```rust,no_run
39//! use dm_database_parser_sqllog::LogParserBuilder;
40//!
41//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
42//! let parser = LogParserBuilder::new("sqllog.txt").build()?;
43//! for record in parser.iter()?.filter_by_exec_time(100.0) {
44//! let sqllog = record?;
45//! println!("{}ms - {}", sqllog.exectime, sqllog.sql);
46//! }
47//! # Ok(())
48//! # }
49//! ```
50//!
51//! ### 示例 3:批量导出
52//!
53//! 收集所有记录,提取元数据字段和 SQL 语句体。
54//!
55//! ```rust,no_run
56//! use dm_database_parser_sqllog::LogParserBuilder;
57//!
58//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
59//! let parser = LogParserBuilder::new("sqllog.txt").build()?;
60//! let records: Vec<_> = parser.iter()?.filter_map(|r| r.ok()).collect();
61//! for sqllog in &records {
62//! println!("{} | {} | {}", sqllog.ts, sqllog.username, sqllog.sql);
63//! }
64//! # Ok(())
65//! # }
66//! ```
67//!
68//! ## 日志格式
69//!
70//! 支持的日志格式示例:
71//!
72//! ```text
73//! 2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:myapp) SELECT * FROM table
74//! ```
75//!
76//! 可选的性能指标:
77//!
78//! ```text
79//! SELECT * FROM table EXECTIME: 10.5(ms) ROWCOUNT: 100(rows) EXEC_ID: 12345.
80//! ```
81
82pub(crate) mod error;
83pub(crate) mod filter;
84pub(crate) mod parser;
85pub(crate) mod record;
86
87pub use error::ParseError;
88pub use filter::{Filter, FilterBuilder};
89pub use parser::{FileEncodingHint, LogIterator, LogParser, LogParserBuilder};
90pub use record::Sqllog;
91
92#[cfg(feature = "async")]
93pub mod async_api;
94#[cfg(feature = "async")]
95pub use async_api::{AsyncError, AsyncLogParser};