Fixes #41. MySQL columns now decode by their declared type instead of a blind try_get chain, so every non-string type (integers, DECIMAL, BIT, YEAR, DATE/TIME/DATETIME/TIMESTAMP) renders its value instead of NULL. MySQL restore runs in-process over the sqlx driver (no bundled MariaDB client, so MySQL 8 caching_sha2_password works) and the Clean toggle is implemented. .sql files can be opened with Gridline from the OS file manager. Verified: cargo test --lib 442 passed / 0 failed; bun run test 133 files / 1151 tests exit 0; tsc clean; both live MySQL 8 integration tests pass with the bundled CLI hidden.
71 lines
3.2 KiB
TOML
71 lines
3.2 KiB
TOML
[package]
|
|
name = "gridline"
|
|
version = "0.8.1"
|
|
description = "An open-source, high-performance database GUI client for PostgreSQL and beyond"
|
|
authors = ["you"]
|
|
edition = "2021"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[lib]
|
|
# The `_lib` suffix may seem redundant but it is necessary
|
|
# to make the lib name unique and wouldn't conflict with the bin name.
|
|
# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
|
|
name = "gridline_lib"
|
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
|
|
|
[build-dependencies]
|
|
tauri-build = { version = "2", features = [] }
|
|
|
|
[dependencies]
|
|
tauri = { version = "2", features = [] }
|
|
tauri-plugin-opener = "2"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
rusqlite = { version = "0.31", features = ["bundled"] }
|
|
# URL percent-encoding for tokio-postgres connection strings (user/password may contain special chars)
|
|
urlencoding = "2"
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
uuid = { version = "1", features = ["v4", "serde"] }
|
|
tauri-plugin-dialog = "2"
|
|
tauri-plugin-fs = "2"
|
|
tokio = { version = "1", features = ["full"] }
|
|
tokio-postgres = { version = "0.7", features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] }
|
|
bytes = "1"
|
|
futures-util = "0.3"
|
|
# chrono/bigdecimal: MySQL DECIMAL and DATE/TIME/DATETIME/TIMESTAMP have no
|
|
# decoder without them, so those columns silently rendered as NULL (#41).
|
|
sqlx = { version = "0.8", features = ["runtime-tokio", "mysql", "tls-rustls", "json", "chrono", "bigdecimal"] }
|
|
redis = { version = "0.27", features = ["tokio-comp"] }
|
|
# async-ssh2 is not available at v0.4; using synchronous ssh2 via tokio::task::spawn_blocking per plan's fallback
|
|
# vendored-openssl: link OpenSSL statically so the release binary has NO
|
|
# runtime dependency on the build machine's Homebrew openssl (@/opt/homebrew
|
|
# absolute LC_LOAD_DYLIB — dyld aborts on user machines without it).
|
|
ssh2 = { version = "0.9", features = ["vendored-openssl"] }
|
|
deadpool-postgres = { version = "0.14" }
|
|
indexmap = { version = "2", features = ["serde"] }
|
|
tauri-plugin-keyring-store = { version = "0.2.0", default-features = false }
|
|
tokio-postgres-rustls = "0.12"
|
|
# rustls: ring-only crypto provider (no aws-lc-rs / cmake C build); tls12 needed for Postgres
|
|
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12", "logging"] }
|
|
rustls-pemfile = "2"
|
|
rustls-pki-types = "1"
|
|
rustls-native-certs = "0.7"
|
|
|
|
# Keychain ACL normalization (explicit SecAccess on stored secrets so items
|
|
# survive app re-signs without permission prompts) — macOS only.
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
security-framework = "3.7"
|
|
security-framework-sys = "2.17"
|
|
# core-foundation: CFString/CFArray/TCFType helpers for the SecAccess FFI
|
|
# (already a transitive dep of security-framework; pinned to the same 0.10 line)
|
|
core-foundation = "0.10"
|
|
|
|
# Windows/Linux deliver an OS "open with" request as argv. Without this a
|
|
# second double-click would launch a second app instead of forwarding the path
|
|
# to the running one. macOS needs no equivalent: LaunchServices routes to the
|
|
# running app via RunEvent::Opened.
|
|
[target.'cfg(any(target_os = "windows", target_os = "linux"))'.dependencies]
|
|
tauri-plugin-single-instance = "2"
|
|
|