11use super :: models:: { CreateFileDTO , File , FileCondition , FileFilter , UpdateFileDTO } ;
22use diesel:: prelude:: * ;
3+ use crate :: utils:: database:: AnyConnection ;
34
4- pub fn create_file ( conn : & mut SqliteConnection , new_file : & CreateFileDTO ) -> Result < usize , diesel:: result:: Error > {
5+ pub fn create_file ( conn : & mut AnyConnection , new_file : & CreateFileDTO ) -> Result < usize , diesel:: result:: Error > {
56 diesel:: insert_into ( files:: table)
67 . values ( new_file) . execute ( conn)
78}
89
9- pub fn find_file_by_id ( conn : & mut SqliteConnection , _id : i32 ) -> Result < Option < File > , diesel:: result:: Error > {
10+ pub fn find_file_by_id ( conn : & mut AnyConnection , _id : i32 ) -> Result < Option < File > , diesel:: result:: Error > {
1011 files:: table
1112 . filter ( files:: id. eq ( _id) )
12- . select ( File :: as_select ( ) )
13+ . select ( ( files :: id , files :: type_ , files :: path , files :: reference_count , files :: group_id ) )
1314 . first ( conn)
1415 . optional ( )
1516}
17+
1618pub fn increase_file_reference_count (
17- conn : & mut SqliteConnection ,
19+ conn : & mut AnyConnection ,
1820 file_id : i32 ,
1921) -> Result < usize , diesel:: result:: Error > {
2022 diesel:: update ( files:: table. find ( file_id) )
@@ -23,7 +25,7 @@ pub fn increase_file_reference_count(
2325}
2426
2527pub fn decrease_file_reference_count (
26- conn : & mut SqliteConnection ,
28+ conn : & mut AnyConnection ,
2729 file_id : i32 ,
2830) -> Result < usize , diesel:: result:: Error > {
2931 diesel:: update ( files:: table. find ( file_id) )
@@ -33,12 +35,12 @@ pub fn decrease_file_reference_count(
3335
3436#[ deprecated]
3537pub fn select_files (
36- conn : & mut SqliteConnection ,
38+ conn : & mut AnyConnection ,
3739 search_input : FileFilter ,
3840 limit : i64 ,
3941) -> Result < Vec < File > , diesel:: result:: Error > {
4042 // 使用 into_boxed() 来对查询进行类型擦除
41- let mut base_query = files. limit ( limit) . select ( File :: as_select ( ) ) . into_boxed ( ) ;
43+ let mut base_query = files. limit ( limit) . into_boxed :: < < AnyConnection as Connection > :: Backend > ( ) ;
4244
4345 // 如果 search_input 中有各字段,则添加相应的过滤条件
4446 if let Some ( file_id) = search_input. id {
@@ -58,18 +60,19 @@ pub fn select_files(
5860 }
5961
6062 // 执行查询
61- base_query. load ( conn)
63+ base_query
64+ . select ( ( files:: id, files:: type_, files:: path, files:: reference_count, files:: group_id) )
65+ . load ( conn)
6266}
6367
64- pub fn delete_file_by_id ( conn : & mut SqliteConnection , file_id : i32 ) -> Result < usize , diesel:: result:: Error > {
68+ pub fn delete_file_by_id ( conn : & mut AnyConnection , file_id : i32 ) -> Result < usize , diesel:: result:: Error > {
6569 diesel:: delete ( files. filter ( files:: id. eq ( file_id) ) ) . execute ( conn)
6670}
6771
6872use crate :: model:: models:: { FileOrderBy , FileQueryOptions , OrderDirection } ;
6973use crate :: model:: schema:: files;
7074use crate :: model:: schema:: files:: dsl:: * ;
7175use diesel:: sql_types:: Bool ;
72- use diesel:: sqlite:: Sqlite ;
7376use std:: fmt:: { Debug , Formatter , Result as fmtResult} ;
7477
7578impl Debug for File {
@@ -82,10 +85,9 @@ impl Debug for File {
8285 }
8386}
8487
85-
8688// 将 FileCondition 转换为 diesel 查询条件的辅助函数
8789// 更新 build_condition 函数以处理新增的条件类型
88- fn build_file_condition ( condition : FileCondition ) -> Box < dyn BoxableExpression < files:: table , Sqlite , SqlType =diesel:: sql_types:: Bool > > {
90+ fn build_file_condition ( condition : FileCondition ) -> Box < dyn BoxableExpression < files:: table , < AnyConnection as Connection > :: Backend , SqlType =diesel:: sql_types:: Bool > > {
8991 match condition {
9092 FileCondition :: Id ( _id) => Box :: new ( files:: id. eq ( _id) ) ,
9193 FileCondition :: Type ( t) => Box :: new ( files:: type_. eq ( t) ) ,
@@ -104,7 +106,7 @@ fn build_file_condition(condition: FileCondition) -> Box<dyn BoxableExpression<f
104106 FileCondition :: GroupIdLessThan ( value) => Box :: new ( files:: group_id. lt ( value) ) ,
105107
106108 FileCondition :: And ( conditions) => {
107- let mut result: Option < Box < dyn BoxableExpression < files:: table , Sqlite , SqlType =diesel:: sql_types:: Bool > > > = None ;
109+ let mut result: Option < Box < dyn BoxableExpression < files:: table , < AnyConnection as Connection > :: Backend , SqlType =diesel:: sql_types:: Bool > > > = None ;
108110 for cond in conditions {
109111 let expr = build_file_condition ( cond) ;
110112 match result {
@@ -115,7 +117,7 @@ fn build_file_condition(condition: FileCondition) -> Box<dyn BoxableExpression<f
115117 result. unwrap_or_else ( || Box :: new ( true . into_sql :: < Bool > ( ) ) )
116118 }
117119 FileCondition :: Or ( conditions) => {
118- let mut result: Option < Box < dyn BoxableExpression < files:: table , Sqlite , SqlType =diesel:: sql_types:: Bool > > > = None ;
120+ let mut result: Option < Box < dyn BoxableExpression < files:: table , < AnyConnection as Connection > :: Backend , SqlType =diesel:: sql_types:: Bool > > > = None ;
119121 for cond in conditions {
120122 let expr = build_file_condition ( cond) ;
121123 match result {
@@ -132,14 +134,13 @@ fn build_file_condition(condition: FileCondition) -> Box<dyn BoxableExpression<f
132134 }
133135}
134136
135-
136137// 修改 select_files_by_condition 函数以接受 Vec<FileCondition>
137138pub fn select_files_by_conditions (
138- conn : & mut SqliteConnection ,
139+ conn : & mut AnyConnection ,
139140 conditions : Vec < FileCondition > ,
140141 limit : Option < i64 > ,
141142) -> Result < Vec < File > , diesel:: result:: Error > {
142- let mut query = files:: table. into_boxed :: < Sqlite > ( ) ;
143+ let mut query = files:: table. into_boxed :: < < AnyConnection as Connection > :: Backend > ( ) ;
143144
144145 // 对每个条件应用 AND 逻辑
145146 for condition in conditions {
@@ -152,17 +153,17 @@ pub fn select_files_by_conditions(
152153 }
153154
154155 query
155- . select ( File :: as_select ( ) )
156+ . select ( ( files :: id , files :: type_ , files :: path , files :: reference_count , files :: group_id ) )
156157 . load ( conn)
157158}
158159
159160#[ allow( dead_code) ]
160161pub fn select_files_by_conditions_with_options (
161- conn : & mut SqliteConnection ,
162+ conn : & mut AnyConnection ,
162163 conditions : Vec < FileCondition > ,
163164 options : FileQueryOptions ,
164165) -> Result < Vec < File > , diesel:: result:: Error > {
165- let mut query = files:: table. into_boxed :: < Sqlite > ( ) ;
166+ let mut query = files:: table. into_boxed :: < < AnyConnection as Connection > :: Backend > ( ) ;
166167
167168 // 对每个条件应用 AND 逻辑
168169 for condition in conditions {
@@ -216,16 +217,16 @@ pub fn select_files_by_conditions_with_options(
216217 }
217218
218219 query
219- . select ( File :: as_select ( ) )
220+ . select ( ( files :: id , files :: type_ , files :: path , files :: reference_count , files :: group_id ) )
220221 . load ( conn)
221222}
222223
223224pub fn update_files_by_conditions (
224- conn : & mut SqliteConnection ,
225+ conn : & mut AnyConnection ,
225226 conditions : Vec < FileCondition > ,
226227 update_set : UpdateFileDTO ,
227228) -> Result < usize , diesel:: result:: Error > {
228- let mut query = diesel:: update ( files:: table) . into_boxed :: < Sqlite > ( ) ;
229+ let mut query = diesel:: update ( files:: table) . into_boxed :: < < AnyConnection as Connection > :: Backend > ( ) ;
229230
230231 // 应用所有条件
231232 for condition in conditions {
@@ -237,10 +238,10 @@ pub fn update_files_by_conditions(
237238}
238239
239240pub fn delete_files_by_conditions (
240- conn : & mut SqliteConnection ,
241+ conn : & mut AnyConnection ,
241242 conditions : Vec < FileCondition > ,
242243) -> Result < usize , diesel:: result:: Error > {
243- let mut query = diesel:: delete ( files:: table) . into_boxed :: < Sqlite > ( ) ;
244+ let mut query = diesel:: delete ( files:: table) . into_boxed :: < < AnyConnection as Connection > :: Backend > ( ) ;
244245
245246 // 应用所有条件
246247 for condition in conditions {
0 commit comments