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::iter_records_from_file;
18//!
19//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
20//! for result in iter_records_from_file("sqllog.txt")? {
21//!     match result {
22//!         Ok(sqllog) => {
23//!             println!("时间戳: {}", sqllog.ts);
24//!             println!("用户: {}", sqllog.meta.username);
25//!             println!("SQL: {}", sqllog.body);
26//!         }
27//!         Err(e) => eprintln!("解析错误: {}", e),
28//!     }
29//! }
30//! # Ok(())
31//! # }
32//! ```
33//!
34//! ### 从文件批量加载并解析为 Sqllog(自动并行处理)
35//!
36//! ```rust,no_run
37//! use dm_database_parser_sqllog::parse_records_from_file;
38//!
39//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
40//! // parse_records_from_file 现在直接返回 Vec<Sqllog>,内部自动使用并行处理
41//! let (sqllogs, errors) = parse_records_from_file("sqllog.txt")?;
42//! println!("成功解析 {} 条 SQL 日志", sqllogs.len());
43//! println!("遇到 {} 个错误", errors.len());
44//!
45//! // 直接使用解析好的 Sqllog
46//! for sqllog in sqllogs {
47//!     println!("用户: {}, SQL: {}", sqllog.meta.username, sqllog.body);
48//! }
49//! # Ok(())
50//! # }
51//! ```
52//!
53//! ## 日志格式
54//!
55//! 支持的日志格式示例:
56//!
57//! ```text
58//! 2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:myapp) SELECT * FROM table
59//! ```
60//!
61//! 可选的性能指标:
62//!
63//! ```text
64//! SELECT * FROM table EXECTIME: 10.5(ms) ROWCOUNT: 100(rows) EXEC_ID: 12345.
65//! ```
66
67pub mod error;
68pub mod sqllog;
69
70// 保留 parser 和 tools 模块作为公共模块,但不自动重导出所有内容
71pub mod parser;
72pub mod tools;
73
74// 核心类型
75pub use error::ParseError;
76pub use sqllog::Sqllog;
77
78// 文件解析 API
79pub use parser::{iter_records_from_file, parse_records_from_file};
80
81// 测试辅助 API - 仅供测试使用
82#[doc(hidden)]
83pub mod __test_helpers {
84    pub use crate::parser::parse_functions::*;
85}