john 1 rok pred
rodič
commit
b8a57dbbb3

+ 71 - 0
src-tauri/src/servics/files_servics/files_servics.rs

@@ -0,0 +1,71 @@
+// use std::fs::File;
+// use crate::files::file_struct::File;
+use tauri::command;
+// use crate::{common::sqlite};
+// use tauri::api::file::IntoInvokeHandler;
+
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error(transparent)]
+    Io(#[from] std::io::Error),
+}
+
+// 判断是否新建表
+// #[command]
+// pub async fn is_create(table_name: &str) -> bool {
+//     if table_name.len() < 1 {
+//         return false;
+//     }
+//     let connection = sqlite::open("tauri.db").await.unwrap();
+//     // let connection = load("sqlite::files.db").unwrap();
+//     let query: String = format!(
+//         "SELECT tbl_name FROM sqlite_master WHERE tbl_name = '{}'",
+//         table_name
+//     );
+//     let mut is_table: bool = false;
+//     connection
+//         .iterate(query, |pairs| {
+//             for &(_tpl_name, value) in pairs.iter() {
+//                 if value.unwrap() == table_name {
+//                     is_table = true
+//                 }
+//             }
+//             true
+//         })
+//         .unwrap();
+//     // is_table
+//     if !is_table {
+//         return create(table_name);
+//     }
+//     is_table
+// }
+
+// #[command]
+// pub async fn create(table_name: &str) -> bool {
+//     println!("28");
+//     if table_name.len() < 1 {
+//         return false;
+//     }
+//     let connection = sqlite::open("tauri.db").await.unwrap();
+//     // CREATE TABLE users (name TEXT, age INTEGER)
+//     let query: String = format!("CREATE TABLE '{}' ( name TEXT, path TEXT, history_path TEXT, uuid TEXT, parent_id TEXT, create_time INTEGER, update_time INTEGER, file_type TEXT, user TEXT, rule TEXT );", table_name);
+//     // let mut isTable: bool = false;
+//     println!("36");
+//     connection.execute(query).unwrap();
+//     true
+// }
+
+// #[command]
+// pub async fn inset(file: File) -> bool {
+//     // INSERT INTO files (name, path, history_path, uuid, parent_id, create_time, update_time, file_type, user, rule) VALUES ('1', '1', '2', '3', '4', 5, null, null, null, null)
+//     let query: String = format!("INSERT INTO files (name, path, history_path, uuid, parent_id, create_time, update_time, file_type, user, rule) VALUES ('{}', '{}', '{}', '{}', '{}', '{:?}', '{:?}', '{}', '{}', '{}')", file.name, file.path, file.history_path, file.uuid, file.parent_id, file.create_time, file.update_time, file.file_type, file.user, file.rule);
+//     let connection = sqlite::open("tauri.db").await.unwrap();
+//     connection.execute(query).await.unwrap();
+//     true
+// }
+
+#[command]
+pub fn test2(name: &str) -> Result<String, String> {
+    println!("36");
+    Ok(name.to_string())
+}

+ 79 - 0
src-tauri/src/servics/files_servics/migrations.rs

@@ -0,0 +1,79 @@
+use tauri_plugin_sql::{Migration, MigrationKind};
+
+// 这里维护可配置的
+pub fn set_files_migrations() -> Vec<Migration> {
+    vec![
+        // Define your migrations here
+        Migration {
+            version: 1,
+            description: "create_initial_tables",
+            sql: "CREATE TABLE select_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, time TIMESTAMP, name TEXT CHECK(length(name) <= 255), path TEXT CHECK(length(path) <= 500), checkboxAll INTEGER NOT NULL CHECK (checkboxAll IN (0, 1)), addType TEXT, passType TEXT, checkedSizeValues TEXT, checkboxSizeAll INTEGER NOT NULL CHECK (checkboxSizeAll IN (0, 1)), checkedTypeValues TEXT, UNIQUE (path) );",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 2,
+            description: "create_initial_tables",
+            sql: "CREATE TABLE search_files (id INTEGER PRIMARY KEY AUTOINCREMENT, time TIMESTAMP, sourceId INTEGER, type TEXT CHECK(length(name) <= 255), name TEXT CHECK(length(name) <= 255), path TEXT CHECK(length(path) <= 500), hash TEXT CHECK(length(path) <= 2000), unique(path));",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 3,
+            description: "deop filed",
+            sql: "ALTER TABLE search_files DROP COLUMN time;",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 4,
+            description: "add filed to",
+            sql: "ALTER TABLE search_files ADD time TIMESTAMP;",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 5,
+            description: "add filed to",
+            sql: "ALTER TABLE search_files RENAME COLUMN time TO create_time;",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 6,
+            description: "add filed to",
+            sql: "ALTER TABLE search_files RENAME COLUMN create_time TO time;",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 7,
+            description: "add filed to",
+            sql: "ALTER TABLE search_files DROP COLUMN time;",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 8,
+            description: "修改字段名称",
+            sql: "ALTER TABLE search_files ADD source2Id INTEGER;",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 9,
+            description: "迁移source2Id数据",
+            sql: "UPDATE search_files SET source2Id = sourceId;",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 10,
+            description: "删除sourceId的数据",
+            sql: "ALTER TABLE search_files DROP COLUMN sourceId;",
+            kind: MigrationKind::Up,
+        },
+        Migration {
+            version: 11,
+            description: "恢复sourceId的数据",
+            sql: "ALTER TABLE search_files ADD sourceId INTEGER;UPDATE search_files SET sourceId = source2Id;ALTER TABLE search_files DROP COLUMN source2Id;",
+            kind: MigrationKind::Up,
+        }
+    ]
+}
+// migrations 增加字段, 删除字段、修改字段、无法修改字段类型
+// 本地解决方案: 无法修改字段类型可以新建一个表,然后把数据进行迁移,最后把老的字段移除
+
+
+