Crate dm_database_parser_sqllog

Crate dm_database_parser_sqllog 

Source
Expand description

§DM Database Parser - SQL Log

一个高性能的达梦数据库 SQL 日志解析器,支持批量解析和流式处理。

§功能特性

  • 高性能解析: 使用零拷贝和预编译正则表达式优化性能
  • 灵活的 API: 支持批量解析和流式处理两种模式
  • 完整的类型安全: 使用强类型结构表示日志数据
  • 详细的错误信息: 提供清晰的错误类型和消息

§快速开始

§从文件迭代处理 Sqllogs(推荐)

use dm_database_parser_sqllog::LogParser;

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),
    }
}

§从文件批量加载并解析为 Sqllog(自动并行处理)

// 若需要一次性加载所有记录到内存,可从迭代器收集:
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());
}

§日志格式

支持的日志格式示例:

2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:myapp) SELECT * FROM table

可选的性能指标:

SELECT * FROM table EXECTIME: 10.5(ms) ROWCOUNT: 100(rows) EXEC_ID: 12345.

Re-exports§

pub use error::ParseError;
pub use parser::LogParser;
pub use sqllog::Sqllog;

Modules§

error
错误类型定义
parser
sqllog
tools
工具函数模块