pub struct SimpleNl2SqlEngine { /* private fields */ }Expand description
基于规则匹配的 NL→SQL 引擎(内存模拟,无需 LLM API)
通过关键词匹配和模式识别,将常见自然语言查询转换为 SQL。 支持以下查询模式:
- 简单 SELECT(
SELECT */SELECT col1, col2) - COUNT / COUNT DISTINCT
- 聚合函数(SUM, AVG, MIN, MAX)
- WHERE 条件(=, >, <, >=, <=, !=, LIKE)
- ORDER BY(ASC / DESC)
- GROUP BY
- JOIN(通过外键名称推断关联)
- LIMIT
所有生成的 SQL 使用 $1, $2 等参数化占位符防止注入。
§示例
ⓘ
use sz_orm_ai::nl2sql::{SimpleNl2SqlEngine, Nl2SqlEngine, SchemaContext, TableInfo, ColumnInfo};
let engine = SimpleNl2SqlEngine::new();
let schema = SchemaContext {
tables: vec![TableInfo {
name: "users".into(),
columns: vec![
ColumnInfo { name: "id".into(), data_type: "INTEGER".into(), nullable: false, is_primary_key: true },
ColumnInfo { name: "name".into(), data_type: "TEXT".into(), nullable: true, is_primary_key: false },
],
}],
};
let result = engine.generate("show all users", &schema).await?;
assert_eq!(result.sql, "SELECT * FROM users");Implementations§
Trait Implementations§
Source§impl Default for SimpleNl2SqlEngine
impl Default for SimpleNl2SqlEngine
Source§impl Nl2SqlEngine for SimpleNl2SqlEngine
impl Nl2SqlEngine for SimpleNl2SqlEngine
Source§fn generate<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
nl_query: &'life1 str,
schema: &'life2 SchemaContext,
) -> Pin<Box<dyn Future<Output = Result<SqlQuery, Nl2SqlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn generate<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
nl_query: &'life1 str,
schema: &'life2 SchemaContext,
) -> Pin<Box<dyn Future<Output = Result<SqlQuery, Nl2SqlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
将自然语言查询转换为 SQL Read more
Auto Trait Implementations§
impl Freeze for SimpleNl2SqlEngine
impl RefUnwindSafe for SimpleNl2SqlEngine
impl Send for SimpleNl2SqlEngine
impl Sync for SimpleNl2SqlEngine
impl Unpin for SimpleNl2SqlEngine
impl UnsafeUnpin for SimpleNl2SqlEngine
impl UnwindSafe for SimpleNl2SqlEngine
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more