dm-database-parser-sqllog 1.0.0

一个高性能的达梦数据库 sqllog 日志解析库,提供零分配或低分配的记录切分与解析功能
Documentation
//! # DM Database Parser - SQL Log
//!
//! 一个高性能的达梦数据库 SQL 日志解析器,支持批量解析和流式处理。
//!
//! ## 功能特性
//!
//! - **高性能解析**: 使用零拷贝和预编译正则表达式优化性能
//! - **灵活的 API**: 支持批量解析和流式处理两种模式
//! - **完整的类型安全**: 使用强类型结构表示日志数据
//! - **详细的错误信息**: 提供清晰的错误类型和消息
//!
//! ## 快速开始
//!
//! ### 从文件迭代处理 Sqllogs(推荐)
//!
//! ```rust,no_run
//! use dm_database_parser_sqllog::LogParser;
//!
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let parser = LogParser::from_path("sqllog.txt")?;
//! for result in parser.iter() {
//!     match result {
//!         Ok(sqllog) => {
//!             println!("时间戳: {}", sqllog.ts);
//!             println!("用户: {}", sqllog.parse_meta().username);
//!             println!("SQL: {}", sqllog.body());
//!         }
//!         Err(e) => eprintln!("解析错误: {}", e),
//!     }
//! }
//! # Ok(())
//! # }
//! ```
//!
//! ### 从文件批量加载并解析为 Sqllog(自动并行处理)
//!
//! ```rust,no_run
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
//! // 若需要一次性加载所有记录到内存,可从迭代器收集:
//! let parser = dm_database_parser_sqllog::LogParser::from_path("sqllog.txt")?;
//! let results: Vec<_> = parser.iter().collect();
//! let sqllogs: Vec<_> = results.iter().filter_map(|r| r.as_ref().ok().cloned()).collect();
//! let errors: Vec<_> = results.iter().filter_map(|r| r.as_ref().err().cloned()).collect();
//! println!("成功解析 {} 条 SQL 日志", sqllogs.len());
//! println!("遇到 {} 个错误", errors.len());
//!
//! // 直接使用解析好的 Sqllog
//! for sqllog in sqllogs {
//!     println!("用户: {}, SQL: {}", sqllog.parse_meta().username, sqllog.body());
//! }
//! # Ok(())
//! # }
//! ```
//!
//! ## 日志格式
//!
//! 支持的日志格式示例:
//!
//! ```text
//! 2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:myapp) SELECT * FROM table
//! ```
//!
//! 可选的性能指标:
//!
//! ```text
//! SELECT * FROM table EXECTIME: 10.5(ms) ROWCOUNT: 100(rows) EXEC_ID: 12345.
//! ```

pub(crate) mod error;
pub(crate) mod parser;
pub(crate) mod sqllog;

pub use error::ParseError;
pub use parser::{LogIterator, LogParser, RecordIndex, parse_record};
pub use sqllog::{MetaParts, PerformanceMetrics, Sqllog};