From a4cacf42da22fd22a65648c07ffefbc6367756ee Mon Sep 17 00:00:00 2001 From: imeepos Date: Wed, 16 Jul 2025 13:58:04 +0800 Subject: [PATCH] =?UTF-8?q?hotfix:=20=E4=BF=AE=E5=A4=8Dget=5Fall=5Fproject?= =?UTF-8?q?s=E6=8E=A5=E5=8F=A3description=E5=AD=97=E6=AE=B5NULL=E5=80=BC?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复project_repository.rs中row_to_project函数对description字段的错误处理 - 将description字段从String类型改为Option类型正确处理NULL值 - 修复material_repository.rs中类似的问题 - 解决'Invalid column type Null at index: 3, name: description'错误 问题根本原因: 数据库schema允许description为NULL,但代码尝试获取非空String类型, 当description为NULL时导致类型转换失败。 修复方案: 使用Option类型和filter方法正确处理NULL和空字符串情况。 --- .../src-tauri/src/data/repositories/material_repository.rs | 2 +- .../src-tauri/src/data/repositories/project_repository.rs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src-tauri/src/data/repositories/material_repository.rs b/apps/desktop/src-tauri/src/data/repositories/material_repository.rs index 32dbbf6..f9e0c9c 100644 --- a/apps/desktop/src-tauri/src/data/repositories/material_repository.rs +++ b/apps/desktop/src-tauri/src/data/repositories/material_repository.rs @@ -577,7 +577,7 @@ impl MaterialRepository { id: row.get(0)?, name: row.get(1)?, path: row.get(2)?, - description: row.get(3)?, + description: row.get::<_, Option>(3)?.filter(|s| !s.is_empty()), created_at, updated_at, is_active: row.get::<_, i32>(6)? != 0, diff --git a/apps/desktop/src-tauri/src/data/repositories/project_repository.rs b/apps/desktop/src-tauri/src/data/repositories/project_repository.rs index 77018ce..e969b84 100644 --- a/apps/desktop/src-tauri/src/data/repositories/project_repository.rs +++ b/apps/desktop/src-tauri/src/data/repositories/project_repository.rs @@ -194,8 +194,9 @@ impl ProjectRepository { .map_err(|_| rusqlite::Error::InvalidColumnType(5, "updated_at".to_string(), rusqlite::types::Type::Text))? .with_timezone(&Utc); - let description: String = row.get(3)?; - let description = if description.is_empty() { None } else { Some(description) }; + // 正确处理可能为NULL的description字段 + let description: Option = row.get(3)?; + let description = description.filter(|s| !s.is_empty()); Ok(Project { id: row.get(0)?,