Repository navigation
feat(linux): connection URLs and Unix sockets for PostgreSQL and MySQL - #4048
Merged
Merged
Conversation
…th channel binding
…the driver cannot enforce
… the unused url crate
…me the host does not match
…te name the route cannot check
…on and immutable files from a URL
…S when leaving a socket
datlechin
enabled auto-merge (squash)
November 5, 2026 08:04
…ocket # Conflicts: # core/crates/core/src/unsupported_feature.rs # linux/crates/app/src/ui/error_text/unsupported.rs # linux/docs/decisions/README.md
datlechin
disabled auto-merge
November 6, 2026 01:15
…ocket # Conflicts: # core/crates/drivers/mysql/src/errors.rs # core/crates/drivers/mysql/src/physical.rs # linux/docs/decisions/README.md
…ocket # Conflicts: # linux/crates/app/src/ui/error_text/mod.rs # linux/po/POTFILES.in
This was referenced Nov 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
tablepro_core::connection_url, replaces the one inffi. It reads libpq, MySQL/MariaDB (mysqlxtoo), SQL Server (URL and JDBC;properties), MongoDB (+srv, host lists,replicaSet,authSource), Redis/Valkey, ClickHouse, Cassandra/ScyllaDB and SQLite/DuckDB file URLs, thejdbc:prefix anduser/passwordparameters, and passwords with an unescaped@or#.sslmode/ssl-mode/tlsmode,ssl/tls/secure,sslaccept,encryptwithtrustServerCertificate,sslrootcert/tlsCAFile,sslcert/sslkey,hostNameInCertificate,rediss/valkeys/mongodb+srv.preferno longer maps to Disable; it leaves the connection's default.channel_binding=requireis kept and sent to tokio-postgres asChannelBinding::Require(a Require Channel Binding row in the dialog);requirepeer,require_auth,sslcrl,sslcrldirandgssencmode/sslcertmode=requirerefuse the URL rather than being dropped, as do MySQL's RSA key pins and CRLs, SQL Server logins other than SQL ones, certificate pins and trust stores, and MongoDB's CRL and an insisted SCRAM-SHA-256. Every other parameter the connection has no setting for, except pool sizes, timeouts and client names, is named in a toast. MariaDB'suseSslverifies the certificate; JDBC's last property wins.urlleaves the workspace: the parser splits URLs itself, sinceurl2.5.8 refuses host lists, an empty host with a user, JDBC properties and#in a password.connections.json. A refused URL marks the row and says why without echoing it..s.PGSQL.<port>, as libpq) and MySQL/MariaDB (the socket file): a host that is an absolute path.tablepro_net::LocalSocketTransport(cfg(unix)),TransportKind/TransportClass::LocalSocket,TransportError::LocalSocket. Peer,auth_socketandunix_socketlogins work. A socket takes no SSH tunnel. PostgreSQL takes no TLS on one; MySQL keeps its TLS mode there, and with Encryption off logs in asPreferred, since MySQL expectscaching_sha2_password's password in the clear on a socket and sqlx sends it only inside TLS.NetworkOptions.replica_setandmore_hostsseed the client with no direct connection; refused over SSH and with a seed list;directConnection=truekeeps the one named server. Other Hosts and Replica Set rows in the dialog./run/postgresql:roand/run/mysqld:ro(ADR 0035, amending 0008); a missing socket in the Flatpak says which folders it sees.ParsedConnectionUrlcarries the CA file, client certificate, key and server name into the draft (bindings regenerated); a URL needing what its connections cannot hold (a socket, a seed list, a replica set, another authentication database, required channel binding) is refused withurl.settings_unsupported; every newurl.*code has a string.Test plan
tablepro-core: parser cases for every engine and provider form (Supabase, Neon, Heroku, Atlas, Upstash, PlanetScale, Aiven, Azure JDBC), socket naming and default lookup, host list and socket validation.tablepro-net: the socket transport against aUnixListener, a missing socket and a dead one.tablepro-session: a socket host dials the engine's socket file; refused without a socket option and with TLS.tablepro-driver-mongodb: a host list seeds the replica set; refused over an in-process route.tablepro-driver-mysql: an unknown auth plugin maps toAuthPlugin.tableprowidget tests: URL fill and clear, a refused URL, Edit hides the row, MongoDB rows, the socket switch and a path typed as the host. Form tests: the URL password reaches the keyring list and not the saved JSON.requires docker: PostgreSQL logs in through its socket folder with no password; MySQL and MariaDB root log in through the socket on the first login after a start (coldcaching_sha2_passwordcache). Linux CI only: Docker Desktop does not pass a Unix socket to the host.auth_socket,unix_socket, cold cache).Screenshots
Before, light and dark:
After: the Connection URL row and the Unix Socket switch, light and dark:
After, with Unix Socket on: