diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index c200cc8..b00106d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -202,17 +202,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdc70193dadb9d7287fa4b633f15f90c876915b31f6af17da307fc59c9859a8" -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "atk" version = "0.18.2" @@ -341,15 +330,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "bitpacking" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a7139abd3d9cebf8cd6f920a389cf3dc9576172e32f4563f188cae3c3eb019" -dependencies = [ - "crunchy", -] - [[package]] name = "bitvec" version = "1.0.1" @@ -380,31 +360,6 @@ dependencies = [ "objc2", ] -[[package]] -name = "bon" -version = "3.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47dbe92550676ee653353c310dfb9cf6ba17ee70396e1f7cf0a2020ad49b2fe" -dependencies = [ - "bon-macros", - "rustversion", -] - -[[package]] -name = "bon-macros" -version = "3.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "519bd3116aeeb42d5372c29d982d16d0170d3d4a5ed85fc7dd91642ffff3c67c" -dependencies = [ - "darling", - "ident_case", - "prettyplease", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.117", -] - [[package]] name = "branches" version = "0.4.4" @@ -550,17 +505,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" dependencies = [ "find-msvc-tools", - "jobserver", - "libc", "shlex", ] -[[package]] -name = "census" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" - [[package]] name = "cesu8" version = "1.1.0" @@ -617,9 +564,9 @@ checksum = "18758054972164c3264f7c8386f5fc6da6114cb46b619fd365d4e3b2dc3ae487" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -842,16 +789,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - [[package]] name = "crossbeam-epoch" version = "0.9.18" @@ -886,12 +823,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - [[package]] name = "crypto-common" version = "0.1.7" @@ -1016,17 +947,11 @@ dependencies = [ "parking_lot_core", ] -[[package]] -name = "datasketches" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c286de4e81ea2590afc24d754e0f83810c566f50a1388fa75ebd57928c0d9745" - [[package]] name = "db-keystore" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc758963ac0d7ead30f47ff2a02a2fd3456cf4d7fc695cf9bae72e951a3df2b" +checksum = "f9a1b2f1087c32a26a8c6c7d89eb80b50c33d8466e2431ea2a8345c969cded18" dependencies = [ "anyhow", "clap", @@ -1222,12 +1147,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" -[[package]] -name = "downcast-rs" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" - [[package]] name = "dpi" version = "0.1.2" @@ -1414,12 +1333,6 @@ dependencies = [ "siphasher 1.0.2", ] -[[package]] -name = "fastdivide" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afc2bd4d5a73106dd53d10d73d3401c2f32730ba2c0b93ddb888a8983680471" - [[package]] name = "fastrand" version = "2.4.1" @@ -1526,16 +1439,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs4" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" -dependencies = [ - "rustix 1.1.4", - "windows-sys 0.59.0", -] - [[package]] name = "funty" version = "2.0.0" @@ -1785,8 +1688,8 @@ dependencies = [ "libc", "log", "rustversion", - "windows-link 0.1.3", - "windows-result 0.3.4", + "windows-link 0.2.1", + "windows-result 0.4.1", ] [[package]] @@ -2029,17 +1932,6 @@ dependencies = [ "foldhash 0.1.5", ] -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash 0.2.0", -] - [[package]] name = "hashbrown" version = "0.17.0" @@ -2128,12 +2020,6 @@ dependencies = [ "markup5ever 0.38.0", ] -[[package]] -name = "htmlescape" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" - [[package]] name = "http" version = "1.4.0" @@ -2228,7 +2114,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -2415,15 +2301,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "inventory" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" -dependencies = [ - "rustversion", -] - [[package]] name = "io-uring" version = "0.7.12" @@ -2567,16 +2444,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - [[package]] name = "js-sys" version = "0.3.95" @@ -2664,12 +2531,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" -[[package]] -name = "levenshtein_automata" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" - [[package]] name = "libappindicator" version = "0.9.0" @@ -2853,21 +2714,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "lru" -version = "0.16.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" -dependencies = [ - "hashbrown 0.16.1", -] - -[[package]] -name = "lz4_flex" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e" - [[package]] name = "mac" version = "0.1.1" @@ -3015,30 +2861,12 @@ dependencies = [ "digest", ] -[[package]] -name = "measure_time" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51c55d61e72fc3ab704396c5fa16f4c184db37978ae4e94ca8959693a235fc0e" -dependencies = [ - "log", -] - [[package]] name = "memchr" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" -[[package]] -name = "memmap2" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" -dependencies = [ - "libc", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -3133,12 +2961,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "murmurhash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" - [[package]] name = "ndk" version = "0.9.0" @@ -3515,12 +3337,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" -[[package]] -name = "oneshot" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269bca4c2591a28585d6bf10d9ed0332b7d76900a1b02bec41bdc3a2cdcda107" - [[package]] name = "opaque-debug" version = "0.3.1" @@ -3545,15 +3361,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "ordered-float" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" -dependencies = [ - "num-traits", -] - [[package]] name = "os_pipe" version = "1.2.3" @@ -3564,15 +3371,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "ownedbytes" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbd56f7631767e61784dc43f8580f403f4475bd4aaa4da003e6295e1bab4a7e" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "owo-colors" version = "3.5.0" @@ -4259,26 +4057,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" -[[package]] -name = "rayon" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "redox_syscall" version = "0.5.18" @@ -4476,16 +4254,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "rust-stemmers" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" -dependencies = [ - "serde", - "serde_derive", -] - [[package]] name = "rustc-hash" version = "1.1.0" @@ -5058,15 +4826,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" -[[package]] -name = "sketches-ddsketch" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e40b6cf54d988dc1a2223531b969c9a9e30906ad90ef64890c27b4bfbb46ea" -dependencies = [ - "serde", -] - [[package]] name = "slab" version = "0.4.12" @@ -5568,9 +5327,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.39.2" +version = "0.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14311e7e9a03114cd4b65eedd54e8fed2945e17f08586ae97ef53bc0669f9581" +checksum = "21d0d938c10fcda3e897e28aaddf4ab462375d411f4378cd63b1c945f69aba96" dependencies = [ "libc", "memchr", @@ -5594,154 +5353,6 @@ dependencies = [ "version-compare", ] -[[package]] -name = "tantivy" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edde6a10743fff00a4e1a8c9ef020bf5f3cbad301b7d2d39f2b07f123c4eac07" -dependencies = [ - "aho-corasick", - "arc-swap", - "base64 0.22.1", - "bitpacking", - "bon", - "byteorder", - "census", - "crc32fast", - "crossbeam-channel", - "datasketches", - "downcast-rs 2.0.2", - "fastdivide", - "fnv", - "fs4", - "htmlescape", - "itertools 0.14.0", - "levenshtein_automata", - "log", - "lru", - "lz4_flex", - "measure_time", - "memmap2", - "once_cell", - "oneshot", - "rayon", - "regex", - "rust-stemmers", - "rustc-hash 2.1.2", - "serde", - "serde_json", - "sketches-ddsketch", - "smallvec", - "tantivy-bitpacker", - "tantivy-columnar", - "tantivy-common", - "tantivy-fst", - "tantivy-query-grammar", - "tantivy-stacker", - "tantivy-tokenizer-api", - "tempfile", - "thiserror 2.0.18", - "time", - "typetag", - "uuid", - "winapi", -] - -[[package]] -name = "tantivy-bitpacker" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fed3d674429bcd2de5d0a6d1aa5495fed8afd9c5ecce993019caf7615f53fa4" -dependencies = [ - "bitpacking", -] - -[[package]] -name = "tantivy-columnar" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c57166f5bcfd478f370ab8445afb4678dce44801fa5ce5c451aaf8595583c5dc" -dependencies = [ - "downcast-rs 2.0.2", - "fastdivide", - "itertools 0.14.0", - "serde", - "tantivy-bitpacker", - "tantivy-common", - "tantivy-sstable", - "tantivy-stacker", -] - -[[package]] -name = "tantivy-common" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf10915aa75da3c3b0d58b58853d2e889efbaf32d4982a4c3715dde6bba23e5" -dependencies = [ - "async-trait", - "byteorder", - "ownedbytes", - "serde", - "time", -] - -[[package]] -name = "tantivy-fst" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d60769b80ad7953d8a7b2c70cdfe722bbcdcac6bccc8ac934c40c034d866fc18" -dependencies = [ - "byteorder", - "regex-syntax", - "utf8-ranges", -] - -[[package]] -name = "tantivy-query-grammar" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfadb8526b6da90704feb293b0701a6aae62ea14983143344be2dc5ce30f1d82" -dependencies = [ - "fnv", - "nom", - "ordered-float", - "serde", - "serde_json", -] - -[[package]] -name = "tantivy-sstable" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2cfc3ac5164cbadc28965ffb145a8f47582a60ae5897859ad8d4316596c606" -dependencies = [ - "futures-util", - "itertools 0.14.0", - "tantivy-bitpacker", - "tantivy-common", - "tantivy-fst", - "zstd", -] - -[[package]] -name = "tantivy-stacker" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cbb051742da9d53ca9e8fff43a9b10e319338b24e2c0e15d0372df19ffeb951" -dependencies = [ - "murmurhash32", - "tantivy-common", -] - -[[package]] -name = "tantivy-tokenizer-api" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac258c2c6390673f2685813afeeafcb8c4e0ee7de8dd3fc46838dcc37263f98" -dependencies = [ - "serde", -] - [[package]] name = "tao" version = "0.35.2" @@ -6065,7 +5676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", "rustix 1.1.4", "windows-sys 0.61.2", @@ -6597,7 +6208,6 @@ dependencies = [ "smallvec", "strum", "strum_macros", - "tantivy", "tempfile", "thiserror 2.0.18", "tracing", @@ -6737,30 +6347,6 @@ version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" -[[package]] -name = "typetag" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a897b12c6c1151ad0b138b8db50252dc301f93bc3b027db05eec82aeed298c" -dependencies = [ - "erased-serde", - "inventory", - "once_cell", - "serde", - "typetag-impl", -] - -[[package]] -name = "typetag-impl" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf808357c6ed7e13ba0f3277ec8d8f21b2d501274895104263985330c726c1c5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "uncased" version = "0.9.10" @@ -6909,12 +6495,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf8-ranges" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -6929,9 +6509,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -7148,7 +6728,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" dependencies = [ "cc", - "downcast-rs 1.2.1", + "downcast-rs", "rustix 1.1.4", "scoped-tls", "smallvec", @@ -8229,31 +7809,3 @@ name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" - -[[package]] -name = "zstd" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/src-tauri/crates/mas-admin/src/lib.rs b/src-tauri/crates/mas-admin/src/lib.rs index d35ab8a..648d893 100644 --- a/src-tauri/crates/mas-admin/src/lib.rs +++ b/src-tauri/crates/mas-admin/src/lib.rs @@ -101,10 +101,7 @@ impl AdminService { ) -> Result<(), CoreError> { tracing::info!(process_id = process_id, "Killing MySQL process"); let pool = self.connection_manager.get_pool(connection_id)?; - let result = sqlx::query("KILL ?") - .bind(process_id) - .execute(&pool) - .await; + let result = sqlx::query("KILL ?").bind(process_id).execute(&pool).await; match result { Ok(_) => { tracing::info!(process_id = process_id, "Process killed successfully"); diff --git a/src-tauri/crates/mas-core/src/connection/manager.rs b/src-tauri/crates/mas-core/src/connection/manager.rs index f75aca4..4c5ed31 100644 --- a/src-tauri/crates/mas-core/src/connection/manager.rs +++ b/src-tauri/crates/mas-core/src/connection/manager.rs @@ -35,7 +35,10 @@ impl ConnectionManager { "Creating connection pool" ); - let charset = profile.charset.clone().unwrap_or_else(|| "utf8mb4".to_string()); + let charset = profile + .charset + .clone() + .unwrap_or_else(|| "utf8mb4".to_string()); let mut options = MySqlConnectOptions::new() .host(&profile.host) .port(profile.port) @@ -64,7 +67,9 @@ impl ConnectionManager { .after_connect(move |conn, _meta| { let charset = charset_for_after_connect.clone(); Box::pin(async move { - sqlx::query(&format!("SET NAMES {}", charset)).execute(&mut *conn).await?; + sqlx::query(&format!("SET NAMES {}", charset)) + .execute(&mut *conn) + .await?; Ok(()) }) }) @@ -150,7 +155,10 @@ impl ConnectionManager { ) -> Result { let start = Instant::now(); - let charset = profile.charset.clone().unwrap_or_else(|| "utf8mb4".to_string()); + let charset = profile + .charset + .clone() + .unwrap_or_else(|| "utf8mb4".to_string()); let mut options = MySqlConnectOptions::new() .host(&profile.host) .port(profile.port) diff --git a/src-tauri/crates/mas-core/src/connection/store.rs b/src-tauri/crates/mas-core/src/connection/store.rs index 8ad2816..d4d5884 100644 --- a/src-tauri/crates/mas-core/src/connection/store.rs +++ b/src-tauri/crates/mas-core/src/connection/store.rs @@ -55,12 +55,21 @@ impl ConnectionStore { db.execute("ALTER TABLE connection_profiles ADD COLUMN env TEXT", []) .ok(); // Migration: add advanced settings columns if missing - db.execute("ALTER TABLE connection_profiles ADD COLUMN connect_timeout_secs INTEGER", []) - .ok(); - db.execute("ALTER TABLE connection_profiles ADD COLUMN query_timeout_secs INTEGER", []) - .ok(); - db.execute("ALTER TABLE connection_profiles ADD COLUMN charset TEXT", []) - .ok(); + db.execute( + "ALTER TABLE connection_profiles ADD COLUMN connect_timeout_secs INTEGER", + [], + ) + .ok(); + db.execute( + "ALTER TABLE connection_profiles ADD COLUMN query_timeout_secs INTEGER", + [], + ) + .ok(); + db.execute( + "ALTER TABLE connection_profiles ADD COLUMN charset TEXT", + [], + ) + .ok(); tracing::debug!("Connection profiles table initialized"); Ok(()) } diff --git a/src-tauri/crates/mas-core/tests/integration_tests.rs b/src-tauri/crates/mas-core/tests/integration_tests.rs index 16be1dc..1c22cd0 100644 --- a/src-tauri/crates/mas-core/tests/integration_tests.rs +++ b/src-tauri/crates/mas-core/tests/integration_tests.rs @@ -42,6 +42,9 @@ fn test_profile() -> ConnectionProfile { pool_min: 1, pool_max: 5, read_only: false, + connect_timeout_secs: None, + query_timeout_secs: None, + charset: None, environment: None, created_at: Utc::now(), updated_at: Utc::now(), diff --git a/src-tauri/crates/mas-core/tests/query_database_context_regression.rs b/src-tauri/crates/mas-core/tests/query_database_context_regression.rs index 5d5db93..a345f5b 100644 --- a/src-tauri/crates/mas-core/tests/query_database_context_regression.rs +++ b/src-tauri/crates/mas-core/tests/query_database_context_regression.rs @@ -20,6 +20,9 @@ fn test_profile() -> ConnectionProfile { pool_min: 1, pool_max: 5, read_only: false, + connect_timeout_secs: None, + query_timeout_secs: None, + charset: None, environment: None, created_at: Utc::now(), updated_at: Utc::now(), diff --git a/src-tauri/src/commands/mod.rs b/src-tauri/src/commands/mod.rs index dfe8111..eee8951 100644 --- a/src-tauri/src/commands/mod.rs +++ b/src-tauri/src/commands/mod.rs @@ -534,7 +534,9 @@ pub async fn write_file_contents(path: String, contents: String) -> Result<(), S .ok_or_else(|| "Invalid path: missing file name".to_string())?, ) } else { - path_buf.canonicalize().map_err(|e| format!("Invalid path: {e}"))? + path_buf + .canonicalize() + .map_err(|e| format!("Invalid path: {e}"))? }; tokio::fs::write(&resolved, &contents).await.map_err(|e| { tracing::error!(error = %e, path = %path, "Failed to write file"); diff --git a/src/components/editor/__tests__/QueryToolbar.test.tsx b/src/components/editor/__tests__/QueryToolbar.test.tsx index 72daf6a..3cff48a 100644 --- a/src/components/editor/__tests__/QueryToolbar.test.tsx +++ b/src/components/editor/__tests__/QueryToolbar.test.tsx @@ -386,10 +386,10 @@ describe("QueryToolbar", () => { expect(screen.getByText("Save").closest("button")).toBeDisabled(); }); - it("shows Running state when executing", () => { + it("shows Cancel button when executing", () => { mockIsExecuting = true; render(); - expect(screen.getByText("Running...")).toBeInTheDocument(); + expect(screen.getByText("Cancel")).toBeInTheDocument(); expect(screen.queryByText("Run")).not.toBeInTheDocument(); }); diff --git a/src/hooks/useGridEditing.ts b/src/hooks/useGridEditing.ts index 4bf558d..b203c56 100644 --- a/src/hooks/useGridEditing.ts +++ b/src/hooks/useGridEditing.ts @@ -134,6 +134,7 @@ export function useGridEditing() { setDeletes(new Set()); undoStack.current = []; redoStack.current = []; + bumpVersion(); }, []); const applyAction = useCallback((action: EditAction): EditAction => { @@ -143,7 +144,11 @@ export function useGridEditing() { const next = new Map(prev); const rowChanges = [...(next.get(action.rowIndex) ?? [])]; const existing = rowChanges.findIndex((c) => c.column === action.column); - if (action.newValue === action.oldValue || (action.oldValue === undefined && action.newValue === action.oldValue)) { + if (existing >= 0 && action.newValue === rowChanges[existing].originalValue) { + rowChanges.splice(existing, 1); + if (rowChanges.length === 0) next.delete(action.rowIndex); + else next.set(action.rowIndex, rowChanges); + } else if (action.newValue === action.oldValue) { if (existing >= 0) { rowChanges.splice(existing, 1); if (rowChanges.length === 0) next.delete(action.rowIndex); @@ -172,6 +177,10 @@ export function useGridEditing() { return { ...action, index: -1 }; } case "deleteRow": { + if (action.rowIndex === -1) { + setInserts((prev) => prev.slice(0, -1)); + return { type: "insertRow", index: 0 }; // forward action for redo + } setDeletes((prev: Set) => { const next = new Set(prev); if (next.has(action.rowIndex)) next.delete(action.rowIndex); @@ -194,7 +203,9 @@ export function useGridEditing() { const redo = useCallback(() => { const action = redoStack.current.pop(); if (!action) return; - const reverse = applyAction(reverseAction(action)); + const reverse = action.type === "insertRow" + ? applyAction(action) + : applyAction(reverseAction(action)); undoStack.current.push(reverse); bumpVersion(); }, [applyAction]); diff --git a/src/stores/themeStore.ts b/src/stores/themeStore.ts index ae0d300..1f962a9 100644 --- a/src/stores/themeStore.ts +++ b/src/stores/themeStore.ts @@ -48,24 +48,27 @@ export const useThemeStore = create((set) => ({ }, })); -// Listen for system preference changes when mode is 'system' -let mediaQuery: MediaQueryList | undefined; - -const handleSystemThemeChange = () => { - const state = useThemeStore.getState(); - if (state.theme === "system") { - const effective = resolveEffective("system"); - applyTheme(effective); - useThemeStore.setState({ effectiveTheme: effective }); - } -}; +// Use a const object wrapper to persist cleanup across HMR module reloads +const _mqlState = { cleanup: null as (() => void) | null }; if (typeof window !== "undefined") { - mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); - mediaQuery.addEventListener("change", handleSystemThemeChange); + _mqlState.cleanup?.(); + + const mql = window.matchMedia("(prefers-color-scheme: dark)"); + const handler = () => { + const state = useThemeStore.getState(); + if (state.theme === "system") { + const effective = resolveEffective("system"); + applyTheme(effective); + useThemeStore.setState({ effectiveTheme: effective }); + } + }; + + mql.addEventListener("change", handler); + _mqlState.cleanup = () => mql.removeEventListener("change", handler); } /** Removes the system theme change listener. Useful for cleanup (e.g. in tests). */ export function cleanupThemeListener() { - mediaQuery?.removeEventListener("change", handleSystemThemeChange); + _mqlState.cleanup?.(); } \ No newline at end of file