@@ -571,35 +571,50 @@ tx.commit().await?;
571571
572572### Cross-Database Operations
573573
574- Attach other databases for cross-database queries:
574+ Attach other databases for cross-database queries. For Rust API usage, you need to load
575+ both databases first, then create ` AttachedSpec ` instances using their inner database
576+ references:
575577
576578``` rust
577- use tauri_plugin_sqlite :: AttachedDatabaseSpec ;
579+ use tauri_plugin_sqlite :: {DatabaseWrapper , AttachedSpec , AttachedMode };
580+ use std :: sync :: Arc ;
581+
582+ // Load both databases
583+ let main_db = DatabaseWrapper :: load (" /path/to/main.db" . into (), None ). await ? ;
584+ let stats_db = DatabaseWrapper :: load (" /path/to/stats.db" . into (), None ). await ? ;
585+
586+ // Create attached spec using the inner database reference
587+ let stats_spec = AttachedSpec {
588+ database : Arc :: clone (stats_db . inner ()),
589+ schema_name : " stats" . to_string (),
590+ mode : AttachedMode :: ReadWrite ,
591+ };
578592
579593// Simple transaction with attached database
580- let results = db . execute_transaction (vec! [
594+ let results = main_db . execute_transaction (vec! [
581595 (" INSERT INTO main.orders (user_id) VALUES (?)" , vec! [json! (1 )]),
582596 (" UPDATE stats.order_count SET count = count + 1" , vec! []),
583597])
584- . attach (vec! [AttachedDatabaseSpec {
585- database_path : " stats.db" . into (),
586- schema_name : " stats" . into (),
587- mode : tauri_plugin_sqlite :: AttachedDatabaseMode :: ReadWrite ,
588- }])
598+ . attach (vec! [stats_spec ])
589599. await ? ;
590-
591600println! (" Cross-database transaction completed: {} statements" , results . len ());
592601
593602// Interruptible transaction with attached database
603+ // Load the inventory database
604+ let inventory_db = DatabaseWrapper :: load (" /path/to/inventory.db" . into (), None ). await ? ;
605+
606+ // Create spec for inventory database
607+ let inv_spec = AttachedSpec {
608+ database : Arc :: clone (inventory_db . inner ()),
609+ schema_name : " inv" . to_string (),
610+ mode : AttachedMode :: ReadWrite ,
611+ };
612+
594613// Assuming product_id is defined in your application context
595614let product_id = 789 ;
596615
597- let _tx = db . begin_interruptible_transaction ()
598- . attach (vec! [AttachedDatabaseSpec {
599- database_path : " inventory.db" . into (),
600- schema_name : " inv" . into (),
601- mode : tauri_plugin_sqlite :: AttachedDatabaseMode :: ReadWrite ,
602- }])
616+ let _tx = main_db . begin_interruptible_transaction ()
617+ . attach (vec! [inv_spec ])
603618 . execute (vec! [
604619 (" UPDATE inv.stock SET quantity = quantity - ? WHERE product_id = ?" , vec! [json! (1 ), json! (product_id )]),
605620 ])
0 commit comments