#查询语言 #人性化 #人类 #搜索引擎 #PostgreSQL #解析器 #查询引擎

suchbar

suchbar - 用于数据库查询的终端用户可学习语言

2个版本 (1个稳定版)

1.0.0 2023年12月7日
0.5.0 2023年4月27日

#1192数据库接口

MIT 许可证

43KB
959

SuchBar - 用于数据库查询的终端用户可学习语言。

Crates.io MIT licensed Documentation

一种可以被普通用户学习的查询语言,类似于互联网搜索引擎。

如"plz=26440-26452 OR (Eisen AND sn!=Hammer*)"这样的查询可以生成相应的SQL语句

SELECT 
    pa.shortname, pa.description, pa.taxnumber, pb.longname, pb.postcode, pb.city, pb.street 
FROM partner_partner pa, partner_branchstore pb 
WHERE 
  pa.id = pb.cmrpartner AND 
  (
    ( pb.postcode>='26440' AND 
      pb.postcode<='26452' 
    ) OR
    ( pa.shortname LIKE '%Eisen%' OR 
      pa.description LIKE '%Eisen%' OR
      pa.taxnumber LIKE '%Eisen%' OR
      pb.city LIKE '%Eisen%' OR
      pb.street LIKE '%Eisen%' 
    ) AND 
    NOT pa.shortname LIKE 'Hammer%' 
 )
LIMIT 20;
布尔运算符 替代符号 描述
AND && 布尔运算符两边的术语都必须存在才能匹配。
NOT ! 需要后面的术语不存在。
OR || 需要任一术语(或两个术语)存在才能匹配。

用法

注册搜索字段。

可用于搜索的字段已注册:DbField::new, db-type, "permission", &["name", "alternative_name", "abbr"]),

示例

const SUCHBAR: Suchbar = Suchbar::new(&[
    DbField::new("pa.shortname", TEXT, "STD", &["sname", "sn"]),
    DbField::new("pa.description", TEXT, "STD", &["desc", "d"]),
    DbField::new("pa.taxnumber", VARCHAR(15), "STD", &["ust_id", "tax", "ustid"]),
    DbField::new("pb.city", VARCHAR(35), "STD", &["city"]),
    DbField::new("pb.street", VARCHAR(55), "STD", &["street", "st"]),
    DbField::new("pb.postcode", VARCHAR(5), "STD", &["plz", "zip"]),
]);

fn main() {
    let suche = "plz=26440-26452 OR (Eisen AND sn!=Hammer*)";
    match SUCHBAR.exec(suche) {
        Err(c) => println!("\n{c}"),
        Ok(sr) => {
            let query = format ! (
            "SELECT pa.shortname, pa.description, pa.taxnumber, \
                    pb.longname, pb.postcode AS INTEGER, pb.city, pb.street \
                    FROM partner_partner pa, partner_branchstore pb \
                    WHERE pa.id = pb.cmrpartner{} LIMIT 20",
            sr.to_sql("AND")
            );
        }
    }
}

依赖项

~3MB
~60K SLoC