From 27759a12c74b62b82b33e4661ccc74572fb6597a Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Mon, 30 Dec 2019 01:31:01 -0800 Subject: [PATCH] [MySQL] Allow not specifying database on initial connect --- sqlx-core/src/mysql/connection.rs | 13 +++++++------ sqlx-core/src/mysql/protocol/handshake_response.rs | 8 +++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/sqlx-core/src/mysql/connection.rs b/sqlx-core/src/mysql/connection.rs index 87197010..0592cd1f 100644 --- a/sqlx-core/src/mysql/connection.rs +++ b/sqlx-core/src/mysql/connection.rs @@ -152,10 +152,12 @@ impl MySqlConnection { let handshake_packet = self_.receive().await?; let handshake = Handshake::decode(handshake_packet)?; - let client_capabilities = Capabilities::PROTOCOL_41 - | Capabilities::IGNORE_SPACE - | Capabilities::FOUND_ROWS - | Capabilities::CONNECT_WITH_DB; + let mut client_capabilities = + Capabilities::PROTOCOL_41 | Capabilities::IGNORE_SPACE | Capabilities::FOUND_ROWS; + + if url.database().is_some() { + client_capabilities |= Capabilities::CONNECT_WITH_DB; + } // Fails if [Capabilities::PROTOCOL_41] is not in [server_capabilities] self_.capabilities = @@ -167,8 +169,7 @@ impl MySqlConnection { client_collation: 192, // utf8_unicode_ci max_packet_size: 1024, username: url.username().unwrap_or("root"), - // TODO: Remove the panic! - database: url.database().expect("required database"), + database: url.database(), auth_plugin_name: handshake.auth_plugin_name.as_deref(), auth_response: None, }); diff --git a/sqlx-core/src/mysql/protocol/handshake_response.rs b/sqlx-core/src/mysql/protocol/handshake_response.rs index 4bb1f14b..78851590 100644 --- a/sqlx-core/src/mysql/protocol/handshake_response.rs +++ b/sqlx-core/src/mysql/protocol/handshake_response.rs @@ -11,7 +11,7 @@ pub struct HandshakeResponse<'a> { pub max_packet_size: u32, pub client_collation: u8, pub username: &'a str, - pub database: &'a str, + pub database: Option<&'a str>, pub auth_plugin_name: Option<&'a str>, pub auth_response: Option<&'a str>, } @@ -55,8 +55,10 @@ impl Encode for HandshakeResponse<'_> { } if capabilities.contains(Capabilities::CONNECT_WITH_DB) { - // database : string - buf.put_str_nul(self.database); + if let Some(database) = self.database { + // database : string + buf.put_str_nul(database); + } } if capabilities.contains(Capabilities::PLUGIN_AUTH) {