#sql-parser #lexer #sql #parser #ansi

sqlparse

Rust 的 SQL 解析器和格式化工具

8 个版本

0.3.3 2022年7月26日
0.3.2 2022年6月27日
0.2.0 2022年6月13日
0.1.2 2022年6月6日

#37 in #sql-parser

每月 25 次下载
frazzers-utils 中使用

BSD-3-Clause 许可协议

130KB
2.5K SLoC

Rust 的 SQL 解析器和格式化工具

示例

解析 SQL 语句

    use sqlparse::{Parser};

    let sql = "SELECT a, b, 123, myfunc(b) \
    FROM table_1 \
    WHERE a > b AND b < 100 \
    ORDER BY a DESC, b";

    // grouping
    let tokens = p.parse(sql);
    println!("{:?}", tokens);
    // without grouping
    let tokens = p.parse_no_grouping(sql);
    println!("{:?}", tokens);

格式化简单的 SELECT 语句

    use sqlparse::{FormatOption, Formatter};

    let sql = "SELECT a, b, 123, myfunc(b) \
    FROM table_1 \
    WHERE a > b AND b < 100 \
    ORDER BY a DESC";

    let mut f = Formatter::default();
    let mut options = FormatOption::default();
    options.reindent = true;
    options.indent_width = 2;
    options.indent_char = " ";
    options.reindent_aligned = true;

    
    let formatted_sql = f.format(sql, &mut options);
    println!("{}", formatted_sql);

输出

SELECT a,
       b,
       123,
       myfunc(b)
  FROM table_1
 WHERE a > b
   AND b < 100
 ORDER BY a DESC

格式化多个语句

  use sqlparse::{FormatOption, Formatter};
  let sql = "SELECT firstname, lastname, email FROM employees WHERE employeeNumber = 1056; UPDATE employees SET email = '[email protected]' WHERE employeeNumber = 1056;";
  let mut formatter = FormatOption::default_reindent();
  formatter.reindent_aligned = true;
  let formatted_sql = f.format(sql, &mut formatter);
  println!("{}", formatted_sql);

输出

SELECT firstname,
       lastname,
       email
  FROM employees
 WHERE employeeNumber = 1056;
UPDATE employees
   SET email = 'mary.patterson@classicmodelcars.com'
 WHERE employeeNumber = 1056;

更多示例请查看 examples 目录

依赖项

~2.2–3MB
~53K SLoC