#oracle #sql #database-access #macro

include-oracle-sql

一个受Yesql启发的宏,用于在Rust中使用Oracle SQL

5个版本

0.2.2 2023年3月7日
0.2.1 2023年2月15日
0.2.0 2023年2月14日
0.1.1 2023年2月8日
0.1.0 2022年4月18日

#2029数据库接口

每月21 次下载

MIT 许可证

27KB
532

crates.io Documentation MIT

include-oracle-sqlinclude-sql 的扩展,用于在Rust中使用Oracle SQL。它通过提供 impl_sql 宏来生成从包含的SQL中访问数据库的方法,从而补充了 include-sql。include-oracle-sql 使用 Sibyl 进行数据库访问。

示例

编写您的SQL并将其保存到文件中。例如,假设以下内容保存为项目 sql 文件夹中的 library.sql

-- name: get_loaned_books ?
--
-- Returns the list of books loaned to a patron
--
-- # Parameters
--
-- param: user_id: &str - user ID
--
SELECT book_title
  FROM library
 WHERE loaned_to = :user_id
 ORDER BY 1

-- name: loan_books!
--
-- Updates the book records to reflect loan to a patron
--
-- # Parameters
--
-- param: book_titles: &str - book titles
-- param: user_id: &str - user ID
--
UPDATE library
   SET loaned_to = :user_id
     , loaned_on = current_timestamp
 WHERE book_title IN (:book_titles)

然后在Rust中使用它

use include_oracle_sql::{include_sql, impl_sql};

include_sql!("sql/library.sql");

fn main() -> sibyl::Result<()> {
    let db_name = std::env::var("DBNAME").expect("database name");
    let db_user = std::env::var("DBUSER").expect("user name");
    let db_pass = std::env::var("DBPASS").expect("password");

    let oracle = sibyl::env()?;
    let session = oracle.connect(&db_name, &db_user, &db_pass)?;

    db.loan_books(&["War and Peace", "Gone With the Wind"], "Sheldon Cooper")?;

    db.get_loaned_books("Sheldon Cooper", |row| {
        let book_title : &str = row.get("BOOK_TITLE")?;
        println!("{}", book_title);
        Ok(())
    })?;

    Ok(())
}

文档

包含的 文档 描述了支持的SQL文件格式,并提供了有关生成的代码的更多详细信息。

💥 0.2中的重大更改

  • include-sql 将可选语句终止符从 ; 更改为 /。使用 ; 终止符的SQL文件需要将其更改为 / 或完全删除。

依赖关系

~4–12MB
~131K SLoC