Crate dm_database_parser_sqllog

Crate dm_database_parser_sqllog 

Source
Expand description

§DM Database Parser - SQL Log

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

§功能特性

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

§快速开始

§批量解析

use dm_database_parser_sqllog::parse_sqllogs_from_string;

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"#;
let results = parse_sqllogs_from_string(log_content);

for result in results {
    if let Ok(sqllog) = result {
        println!("时间戳: {}", sqllog.ts);
        println!("用户: {}", sqllog.meta.username);
        println!("SQL: {}", sqllog.body);
    }
}

§流式处理

use dm_database_parser_sqllog::for_each_sqllog_in_string;

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"#;

let _result = for_each_sqllog_in_string(log_content, |sqllog| {
    println!("处理记录: EP={}, 会话={}", sqllog.meta.ep, sqllog.meta.sess_id);
});

§从文件流式读取

use dm_database_parser_sqllog::for_each_sqllog;
use std::fs::File;
use std::io::BufReader;

let file = File::open("sqllog.txt").unwrap();
let reader = BufReader::new(file);

let _result = for_each_sqllog(reader, |sqllog| {
    // 处理每条日志记录
    println!("SQL: {}", 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::Record;
pub use parser::RecordParser;
pub use parser::SqllogParser;
pub use parser::for_each_sqllog;
pub use parser::for_each_sqllog_from_file;
pub use parser::for_each_sqllog_in_string;
pub use parser::iter_records_from_file;
pub use parser::iter_sqllogs_from_file;
pub use parser::parse_record;
pub use parser::parse_records_from_file;
pub use parser::parse_records_from_string;
pub use parser::parse_sqllogs_from_file;
pub use parser::parse_sqllogs_from_string;
pub use parser::records_from_file;Deprecated
pub use parser::sqllogs_from_file;Deprecated
pub use sqllog::Sqllog;

Modules§

error
错误类型定义
parser
Parser 模块 - 解析 DM 数据库 SQL 日志
sqllog
SQL 日志数据结构定义
tools
工具函数模块