mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Cleanup of MDEV-14974: --port ignored for --host=localhost
The old code added to 10.6 was inconsisting in how TCP/IP and socket connection was chosen. One got also a confusing warning in some cases. Examples: > ../client/mysql --print-defaults ../client/mysql would have been started with the following arguments: --socket=/tmp/mariadbd.sock --port=3307 --no-auto-rehash > ../client/mysql ERROR 2002 (HY000): Can't connect to local server through socket '/tmp/mariadbd.sock' (2) > ../client/mysql --print-defaults ../client/mysql would have been started with the following arguments: --socket=/tmp/mariadbd.sock --port=3307 --no-auto-rehash > ../client/mysql --port=3333 WARNING: Forcing protocol to TCP due to option specification. Please explicitly state intended protocol. ERROR 2002 (HY000): Can't connect to server on 'localhost' (111) > ../client/mysql --port=3333 --socket=sss ERROR 2002 (HY000): Can't connect to local server through socket 'sss' (2) > ../client/mysql --socket=sss --port=3333 ERROR 2002 (HY000): Can't connect to local server through socket 'sss' (2) Some notable things: - One gets a warning if one uses just --port if config file sets socket - Using port and socket gives no warning - Using socket and then port still uses socket This patch changes things the following ways: If --port= is given on the command line, the the protocol is automatically changed to "TCP/IP". - If --socket= is given on the command line, the protocol is automatically changed to "socket". - The last option wins - No warning is given if protocol changes automatically.
This commit is contained in:
@@ -148,51 +148,3 @@ enum options_client
|
||||
#else
|
||||
#define SOCKET_PROTOCOL_TO_FORCE MYSQL_PROTOCOL_PIPE
|
||||
#endif
|
||||
|
||||
/**
|
||||
Utility function to implicitly change the connection protocol to a
|
||||
consistent value given the command line arguments. Additionally,
|
||||
warns the user that the protocol has been changed.
|
||||
|
||||
Arguments:
|
||||
@param [in] host Name of the host to connect to
|
||||
@param [in, out] opt_protocol Location of the protocol option
|
||||
variable to update
|
||||
@param [in] new_protocol New protocol to force
|
||||
*/
|
||||
static inline void warn_protocol_override(char *host,
|
||||
uint *opt_protocol,
|
||||
uint new_protocol)
|
||||
{
|
||||
DBUG_ASSERT(new_protocol == MYSQL_PROTOCOL_TCP
|
||||
|| new_protocol == SOCKET_PROTOCOL_TO_FORCE);
|
||||
|
||||
|
||||
if ((host == NULL
|
||||
|| strncmp(host, LOCAL_HOST, sizeof(LOCAL_HOST)-1) == 0))
|
||||
{
|
||||
const char *protocol_name;
|
||||
|
||||
if (*opt_protocol == MYSQL_PROTOCOL_DEFAULT
|
||||
#ifndef _WIN32
|
||||
&& new_protocol == MYSQL_PROTOCOL_SOCKET
|
||||
#else
|
||||
&& new_protocol == MYSQL_PROTOCOL_TCP
|
||||
#endif
|
||||
)
|
||||
{
|
||||
/* This is already the default behavior, do nothing */
|
||||
return;
|
||||
}
|
||||
|
||||
protocol_name= sql_protocol_typelib.type_names[new_protocol-1];
|
||||
|
||||
fprintf(stderr, "%s %s %s\n",
|
||||
"WARNING: Forcing protocol to ",
|
||||
protocol_name,
|
||||
" due to option specification. "
|
||||
"Please explicitly state intended protocol.");
|
||||
|
||||
*opt_protocol = new_protocol;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user