Skip to content

Commit a17110c

Browse files
committed
snapshot
1 parent 25fb8c1 commit a17110c

14 files changed

Lines changed: 177 additions & 151 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

file_classification_core/src/internal/file_group.rs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ use super::models::{FileGroupCondition, FileGroupDTO};
22
use crate::model::schema::file_groups;
33
use diesel::prelude::*;
44
use std::fmt::{Debug, Formatter, Result as fmtResult};
5+
use crate::utils::database::AnyConnection;
56

67
pub fn insert_file_group(
7-
conn: &mut SqliteConnection,
8+
conn: &mut AnyConnection,
89
file_group_dto: &FileGroupDTO,
910
) -> Result<usize, diesel::result::Error> {
1011
diesel::insert_into(file_groups::table)
@@ -13,7 +14,7 @@ pub fn insert_file_group(
1314
}
1415

1516
pub fn delete_file_group_by_id(
16-
conn: &mut SqliteConnection,
17+
conn: &mut AnyConnection,
1718
file_group_dto: &FileGroupDTO,
1819
) -> Result<usize, diesel::result::Error> {
1920
// 删除关联记录
@@ -31,10 +32,9 @@ impl Debug for FileGroupDTO {
3132
}
3233

3334
use crate::model::models::{FileGroupOrderBy, FileGroupQueryOptions, OrderDirection};
34-
use diesel::sqlite::Sqlite;
3535

3636
// 将 FileGroupCondition 转换为 diesel 查询条件的辅助函数
37-
fn build_file_group_condition(condition: FileGroupCondition) -> Box<dyn BoxableExpression<file_groups::table, Sqlite, SqlType=diesel::sql_types::Bool>> {
37+
fn build_file_group_condition(condition: FileGroupCondition) -> Box<dyn BoxableExpression<file_groups::table, <AnyConnection as Connection>::Backend, SqlType=diesel::sql_types::Bool>> {
3838
match condition {
3939
FileGroupCondition::FileId(id) => Box::new(file_groups::file_id.eq(id)),
4040
FileGroupCondition::GroupId(id) => Box::new(file_groups::group_id.eq(id)),
@@ -45,7 +45,7 @@ fn build_file_group_condition(condition: FileGroupCondition) -> Box<dyn BoxableE
4545
FileGroupCondition::GroupIdLessThan(value) => Box::new(file_groups::group_id.lt(value)),
4646

4747
FileGroupCondition::And(conditions) => {
48-
let mut result: Option<Box<dyn BoxableExpression<file_groups::table, Sqlite, SqlType=diesel::sql_types::Bool>>> = None;
48+
let mut result: Option<Box<dyn BoxableExpression<file_groups::table, <AnyConnection as Connection>::Backend, SqlType=diesel::sql_types::Bool>>> = None;
4949
for cond in conditions {
5050
let expr = build_file_group_condition(cond);
5151
match result {
@@ -56,7 +56,7 @@ fn build_file_group_condition(condition: FileGroupCondition) -> Box<dyn BoxableE
5656
result.unwrap_or_else(|| Box::new(true.into_sql::<diesel::sql_types::Bool>()))
5757
}
5858
FileGroupCondition::Or(conditions) => {
59-
let mut result: Option<Box<dyn BoxableExpression<file_groups::table, Sqlite, SqlType=diesel::sql_types::Bool>>> = None;
59+
let mut result: Option<Box<dyn BoxableExpression<file_groups::table, <AnyConnection as Connection>::Backend, SqlType=diesel::sql_types::Bool>>> = None;
6060
for cond in conditions {
6161
let expr = build_file_group_condition(cond);
6262
match result {
@@ -75,11 +75,11 @@ fn build_file_group_condition(condition: FileGroupCondition) -> Box<dyn BoxableE
7575

7676
// 根据 FileGroupCondition 向量查询文件组关联
7777
pub fn select_file_groups_by_conditions(
78-
conn: &mut SqliteConnection,
78+
conn: &mut AnyConnection,
7979
conditions: Vec<FileGroupCondition>,
8080
limit: Option<i64>,
8181
) -> Result<Vec<FileGroupDTO>, diesel::result::Error> {
82-
let mut query = file_groups::table.into_boxed::<Sqlite>();
82+
let mut query = file_groups::table.into_boxed::<<AnyConnection as Connection>::Backend>();
8383

8484
// 对每个条件应用 AND 逻辑
8585
for condition in conditions {
@@ -98,11 +98,11 @@ pub fn select_file_groups_by_conditions(
9898

9999
#[allow(dead_code)]
100100
pub fn select_file_groups_by_conditions_with_options(
101-
conn: &mut SqliteConnection,
101+
conn: &mut AnyConnection,
102102
conditions: Vec<FileGroupCondition>,
103103
options: FileGroupQueryOptions,
104104
) -> Result<Vec<FileGroupDTO>, diesel::result::Error> {
105-
let mut query = file_groups::table.into_boxed::<Sqlite>();
105+
let mut query = file_groups::table.into_boxed::<<AnyConnection as Connection>::Backend>();
106106

107107
// 对每个条件应用 AND 逻辑
108108
for condition in conditions {
@@ -143,10 +143,10 @@ pub fn select_file_groups_by_conditions_with_options(
143143
}
144144

145145
pub fn delete_file_groups_by_conditions(
146-
conn: &mut SqliteConnection,
146+
conn: &mut AnyConnection,
147147
conditions: Vec<FileGroupCondition>,
148148
) -> Result<usize, diesel::result::Error> {
149-
let mut query = diesel::delete(file_groups::table).into_boxed::<Sqlite>();
149+
let mut query = diesel::delete(file_groups::table).into_boxed::<<AnyConnection as Connection>::Backend>();
150150

151151
// 对每个条件应用 AND 逻辑
152152
for condition in conditions {
@@ -156,4 +156,3 @@ pub fn delete_file_groups_by_conditions(
156156

157157
query.execute(conn)
158158
}
159-

file_classification_core/src/internal/files.rs

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
use super::models::{CreateFileDTO, File, FileCondition, FileFilter, UpdateFileDTO};
22
use 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+
1618
pub 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

2527
pub 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]
3537
pub 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

6872
use crate::model::models::{FileOrderBy, FileQueryOptions, OrderDirection};
6973
use crate::model::schema::files;
7074
use crate::model::schema::files::dsl::*;
7175
use diesel::sql_types::Bool;
72-
use diesel::sqlite::Sqlite;
7376
use std::fmt::{Debug, Formatter, Result as fmtResult};
7477

7578
impl 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>
137138
pub 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)]
160161
pub 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

223224
pub 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

239240
pub 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 {

file_classification_core/src/internal/group_tag.rs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ use super::models::GroupTagDTO;
22
use crate::model::schema::group_tags;
33
use diesel::prelude::*;
44
use std::fmt::{Debug, Formatter, Result as fmtResult};
5+
use crate::utils::database::AnyConnection;
56

67
// 在 group_tag.rs 中添加数据访问层函数
78
pub fn insert_group_tag(
8-
conn: &mut SqliteConnection,
9+
conn: &mut AnyConnection,
910
group_tag_dto: &GroupTagDTO,
1011
) -> Result<usize, diesel::result::Error> {
1112
diesel::insert_into(group_tags::table)
@@ -14,7 +15,7 @@ pub fn insert_group_tag(
1415
}
1516

1617
pub fn delete_group_tag_by_id(
17-
conn: &mut SqliteConnection,
18+
conn: &mut AnyConnection,
1819
group_tag_dto: &GroupTagDTO,
1920
) -> Result<usize, diesel::result::Error> {
2021
diesel::delete(
@@ -31,16 +32,13 @@ impl Debug for GroupTagDTO {
3132
}
3233
}
3334

34-
// 在 groups.rs 文件中添加以下代码(需要添加到文件末尾,在其他 use 语句之后)
35-
3635
use super::models::GroupTagCondition;
3736
use crate::model::models::{GroupTagOrderBy, GroupTagQueryOptions, OrderDirection};
3837
use diesel::dsl::not;
3938
use diesel::sql_types::Bool;
40-
use diesel::sqlite::Sqlite;
4139

4240
// 将 GroupTagCondition 转换为 diesel 查询条件的辅助函数
43-
fn build_group_tag_condition(condition: GroupTagCondition) -> Box<dyn BoxableExpression<group_tags::table, Sqlite, SqlType=diesel::sql_types::Bool>> {
41+
fn build_group_tag_condition(condition: GroupTagCondition) -> Box<dyn BoxableExpression<group_tags::table, <AnyConnection as Connection>::Backend, SqlType=diesel::sql_types::Bool>> {
4442
match condition {
4543
GroupTagCondition::GroupId(id) => Box::new(group_tags::group_id.eq(id)),
4644
GroupTagCondition::TagId(id) => Box::new(group_tags::tag_id.eq(id)),
@@ -51,7 +49,7 @@ fn build_group_tag_condition(condition: GroupTagCondition) -> Box<dyn BoxableExp
5149
GroupTagCondition::TagIdLessThan(value) => Box::new(group_tags::tag_id.lt(value)),
5250

5351
GroupTagCondition::And(conditions) => {
54-
let mut result: Option<Box<dyn BoxableExpression<group_tags::table, Sqlite, SqlType=diesel::sql_types::Bool>>> = None;
52+
let mut result: Option<Box<dyn BoxableExpression<group_tags::table, <AnyConnection as Connection>::Backend, SqlType=diesel::sql_types::Bool>>> = None;
5553
for cond in conditions {
5654
let expr = build_group_tag_condition(cond);
5755
match result {
@@ -62,7 +60,7 @@ fn build_group_tag_condition(condition: GroupTagCondition) -> Box<dyn BoxableExp
6260
result.unwrap_or_else(|| Box::new(true.into_sql::<Bool>()))
6361
}
6462
GroupTagCondition::Or(conditions) => {
65-
let mut result: Option<Box<dyn BoxableExpression<group_tags::table, Sqlite, SqlType=diesel::sql_types::Bool>>> = None;
63+
let mut result: Option<Box<dyn BoxableExpression<group_tags::table, <AnyConnection as Connection>::Backend, SqlType=diesel::sql_types::Bool>>> = None;
6664
for cond in conditions {
6765
let expr = build_group_tag_condition(cond);
6866
match result {
@@ -81,11 +79,11 @@ fn build_group_tag_condition(condition: GroupTagCondition) -> Box<dyn BoxableExp
8179

8280
// 根据 GroupTagCondition 向量查询组标签关联
8381
pub fn select_group_tags_by_conditions(
84-
conn: &mut SqliteConnection,
82+
conn: &mut AnyConnection,
8583
conditions: Vec<GroupTagCondition>,
8684
limit: Option<i64>,
8785
) -> Result<Vec<GroupTagDTO>, diesel::result::Error> {
88-
let mut query = group_tags::table.into_boxed::<Sqlite>();
86+
let mut query = group_tags::table.into_boxed::<<AnyConnection as Connection>::Backend>();
8987

9088
// 对每个条件应用 AND 逻辑
9189
for condition in conditions {
@@ -104,11 +102,11 @@ pub fn select_group_tags_by_conditions(
104102

105103
#[allow(dead_code)]
106104
pub fn select_group_tags_by_conditions_with_options(
107-
conn: &mut SqliteConnection,
105+
conn: &mut AnyConnection,
108106
conditions: Vec<GroupTagCondition>,
109107
options: GroupTagQueryOptions,
110108
) -> Result<Vec<GroupTagDTO>, diesel::result::Error> {
111-
let mut query = group_tags::table.into_boxed::<Sqlite>();
109+
let mut query = group_tags::table.into_boxed::<<AnyConnection as Connection>::Backend>();
112110

113111
// 对每个条件应用 AND 逻辑
114112
for condition in conditions {
@@ -149,10 +147,10 @@ pub fn select_group_tags_by_conditions_with_options(
149147
}
150148

151149
pub fn delete_group_tags_by_conditions(
152-
conn: &mut SqliteConnection,
150+
conn: &mut AnyConnection,
153151
conditions: Vec<GroupTagCondition>,
154152
) -> Result<usize, diesel::result::Error> {
155-
let mut query = diesel::delete(group_tags::table).into_boxed::<Sqlite>();
153+
let mut query = diesel::delete(group_tags::table).into_boxed::<<AnyConnection as Connection>::Backend>();
156154

157155
// 对每个条件应用 AND 逻辑
158156
for condition in conditions {

0 commit comments

Comments
 (0)