From 9dd2e8b4247a0afe4b29c77349e33066a78d6045 Mon Sep 17 00:00:00 2001 From: JSR Date: Fri, 20 Mar 2026 18:03:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=81=E7=A7=BB=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E6=80=A7=E9=97=AE=E9=A2=98=EF=BC=8C=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=95=B0=E6=8D=AE=E5=BA=93=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-tauri/src/db/migration.rs | 36 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src-tauri/src/db/migration.rs b/src-tauri/src/db/migration.rs index 33f504a..cd1e72b 100644 --- a/src-tauri/src/db/migration.rs +++ b/src-tauri/src/db/migration.rs @@ -123,24 +123,26 @@ impl Migration { sqlite: bool, ) -> Result<(), DbErr> { let db_backend = Self::get_db_backend(sqlite); - let exists_sql = if sqlite { - "SELECT 1 AS exists FROM pragma_table_info('students') WHERE name = 'reward_points' LIMIT 1" - .to_string() - } else { - "SELECT 1 AS exists FROM information_schema.columns WHERE table_name = 'students' AND column_name = 'reward_points' LIMIT 1" - .to_string() - }; + let alter_sql = "ALTER TABLE students ADD COLUMN reward_points INTEGER DEFAULT 0"; + let result = conn + .execute(Statement::from_string(db_backend.clone(), alter_sql.to_string())) + .await; - let exists = conn - .query_one(Statement::from_string(db_backend.clone(), exists_sql)) - .await? - .is_some(); - - if !exists { - let alter_sql = "ALTER TABLE students ADD COLUMN reward_points INTEGER DEFAULT 0"; - conn.execute(Statement::from_string(db_backend.clone(), alter_sql.to_string())) - .await?; - info!("Added students.reward_points column"); + match result { + Ok(_) => { + info!("Added students.reward_points column"); + } + Err(e) => { + let msg = e.to_string().to_lowercase(); + let already_exists = msg.contains("duplicate column") + || msg.contains("already exists") + || msg.contains("duplicate"); + if already_exists { + info!("students.reward_points already exists, skip alter"); + } else { + return Err(e); + } + } } Ok(())