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//! ### 批量解析
15//!
16//! ```rust
17//! use dm_database_parser_sqllog::parse_sqllogs_from_string;
18//!
19//! let log_content = r#"2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:app) SELECT * FROM users"#;
20//! let results = parse_sqllogs_from_string(log_content);
21//!
22//! for result in results {
23//!     if let Ok(sqllog) = result {
24//!         println!("时间戳: {}", sqllog.ts);
25//!         println!("用户: {}", sqllog.meta.username);
26//!         println!("SQL: {}", sqllog.body);
27//!     }
28//! }
29//! ```
30//!
31//! ### 流式处理
32//!
33//! ```rust
34//! use dm_database_parser_sqllog::for_each_sqllog_in_string;
35//!
36//! let log_content = r#"2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:app) SELECT 1"#;
37//!
38//! let _result = for_each_sqllog_in_string(log_content, |sqllog| {
39//!     println!("处理记录: EP={}, 会话={}", sqllog.meta.ep, sqllog.meta.sess_id);
40//! });
41//! ```
42//!
43//! ### 从文件流式读取
44//!
45//! ```rust,no_run
46//! use dm_database_parser_sqllog::for_each_sqllog;
47//! use std::fs::File;
48//! use std::io::BufReader;
49//!
50//! let file = File::open("sqllog.txt").unwrap();
51//! let reader = BufReader::new(file);
52//!
53//! let _result = for_each_sqllog(reader, |sqllog| {
54//!     // 处理每条日志记录
55//!     println!("SQL: {}", sqllog.body);
56//! });
57//! ```
58//!
59//! ## 日志格式
60//!
61//! 支持的日志格式示例:
62//!
63//! ```text
64//! 2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:myapp) SELECT * FROM table
65//! ```
66//!
67//! 可选的性能指标:
68//!
69//! ```text
70//! SELECT * FROM table EXECTIME: 10.5(ms) ROWCOUNT: 100(rows) EXEC_ID: 12345.
71//! ```
72
73pub mod error;
74pub mod parser;
75pub mod sqllog;
76pub mod tools;
77
78pub use error::ParseError;
79pub use parser::{
80    Record,
81    RecordParser,
82    SqllogParser,
83    for_each_sqllog,
84    for_each_sqllog_from_file,
85    for_each_sqllog_in_string,
86    iter_records_from_file,
87    iter_sqllogs_from_file,
88    parse_record,
89    parse_records_from_file,
90    parse_records_from_string,
91    parse_sqllogs_from_file,
92    parse_sqllogs_from_string,
93    // 向后兼容的 deprecated 别名
94    records_from_file,
95    sqllogs_from_file,
96};
97pub use sqllog::Sqllog;