11// database.rs
22//! 数据库连接管理模块
33//!
4- //! 提供数据库连接的建立和管理功能,支持多种数据库类型(当前仅支持 SQLite) ,
4+ //! 提供数据库连接的建立和管理功能,支持多种数据库类型,
55//! 并封装了通用的数据库连接类型。
66
77pub use diesel:: { Connection , QueryResult } ;
88use diesel:: RunQueryDsl ;
9+
910/// 通用数据库连接枚举
1011///
1112/// 使用 `diesel::MultiConnection` 宏定义的枚举类型,支持多种数据库连接类型。
12- /// 当前仅支持 SQLite 连接,但预留了扩展其他数据库类型的接口。
1313#[ derive( diesel:: MultiConnection ) ]
1414pub enum AnyConnection {
15- // Postgresql(diesel::PgConnection),
16- // Mysql(diesel::MysqlConnection),
15+ #[ cfg( feature = "postgres" ) ]
16+ /// PostgreSQL 数据库连接
17+ Postgresql ( diesel:: PgConnection ) ,
18+
19+ #[ cfg( feature = "mysql" ) ]
20+ /// MySQL 数据库连接
21+ Mysql ( diesel:: MysqlConnection ) ,
22+
23+ #[ cfg( feature = "sqlite" ) ]
1724 /// SQLite 数据库连接
1825 Sqlite ( diesel:: SqliteConnection ) ,
1926}
@@ -24,13 +31,14 @@ pub enum AnyConnection {
2431///
2532/// 参数:
2633/// - `database_url`: 数据库连接字符串
27- /// - `database_type`: 数据库类型(当前仅支持 "sqlite")
34+ /// - `database_type`: 数据库类型
2835///
2936/// 返回值:
3037/// 成功时返回封装好的数据库连接对象,失败时会 panic 并输出错误信息
3138pub fn establish_connection ( database_url : & str , database_type : & str ) -> AnyConnection {
3239 // 根据数据库类型建立相应的连接
3340 match database_type {
41+ #[ cfg( feature = "sqlite" ) ]
3442 "sqlite" => {
3543 let mut conn = AnyConnection :: Sqlite (
3644 diesel:: SqliteConnection :: establish ( database_url)
@@ -44,8 +52,25 @@ pub fn establish_connection(database_url: &str, database_type: &str) -> AnyConne
4452
4553 conn
4654 } ,
55+
56+ #[ cfg( feature = "mysql" ) ]
57+ "mysql" => {
58+ AnyConnection :: Mysql (
59+ diesel:: MysqlConnection :: establish ( database_url)
60+ . unwrap_or_else ( |_| panic ! ( "Error connecting to {}" , database_url) ) ,
61+ )
62+ } ,
63+
64+ #[ cfg( feature = "postgres" ) ]
65+ "postgres" => {
66+ AnyConnection :: Postgresql (
67+ diesel:: PgConnection :: establish ( database_url)
68+ . unwrap_or_else ( |_| panic ! ( "Error connecting to {}" , database_url) ) ,
69+ )
70+ } ,
71+
4772 // 不支持的数据库类型直接 panic
48- _ => panic ! ( "Unsupported database type: {}" , database_type) ,
73+ _ => panic ! ( "Unsupported database type: {} or feature not enabled " , database_type) ,
4974 }
5075}
5176
0 commit comments