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//! ### 从文件迭代处理 Sqllogs(推荐)
15//!
16//! ```rust,no_run
17//! use dm_database_parser_sqllog::LogParser;
18//!
19//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
20//! let parser = LogParser::from_path("sqllog.txt")?;
21//! for result in parser.iter() {
22//!     match result {
23//!         Ok(sqllog) => {
24//!             println!("时间戳: {}", sqllog.ts);
25//!             println!("用户: {}", sqllog.parse_meta().username);
26//!             println!("SQL: {}", sqllog.body());
27//!         }
28//!         Err(e) => eprintln!("解析错误: {}", e),
29//!     }
30//! }
31//! # Ok(())
32//! # }
33//! ```
34//!
35//! ### 从文件批量加载并解析为 Sqllog(自动并行处理)
36//!
37//! ```rust,no_run
38//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
39//! // 若需要一次性加载所有记录到内存,可从迭代器收集:
40//! let parser = dm_database_parser_sqllog::LogParser::from_path("sqllog.txt")?;
41//! let results: Vec<_> = parser.iter().collect();
42//! let sqllogs: Vec<_> = results.iter().filter_map(|r| r.as_ref().ok().cloned()).collect();
43//! let errors: Vec<_> = results.iter().filter_map(|r| r.as_ref().err().cloned()).collect();
44//! println!("成功解析 {} 条 SQL 日志", sqllogs.len());
45//! println!("遇到 {} 个错误", errors.len());
46//!
47//! // 直接使用解析好的 Sqllog
48//! for sqllog in sqllogs {
49//!     println!("用户: {}, SQL: {}", sqllog.parse_meta().username, sqllog.body());
50//! }
51//! # Ok(())
52//! # }
53//! ```
54//!
55//! ## 日志格式
56//!
57//! 支持的日志格式示例:
58//!
59//! ```text
60//! 2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:myapp) SELECT * FROM table
61//! ```
62//!
63//! 可选的性能指标:
64//!
65//! ```text
66//! SELECT * FROM table EXECTIME: 10.5(ms) ROWCOUNT: 100(rows) EXEC_ID: 12345.
67//! ```
68
69pub mod error;
70pub mod parser;
71pub mod sqllog;
72
73// 保留 parser 和 tools 模块作为公共模块,但不自动重导出所有内容
74pub mod tools;
75
76// 核心类型
77pub use error::ParseError;
78pub use parser::LogParser;
79pub use sqllog::Sqllog;