mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Changes that will enable proper wildcarding of databases, plus
proper escaping of databases with '_' in their name. More explanations in the manual.
This commit is contained in:
@ -51,6 +51,7 @@ static my_string opt_mysql_unix_port=0;
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
my_bool first_argument_uses_wildcards=0;
|
||||||
char *wild;
|
char *wild;
|
||||||
MYSQL mysql;
|
MYSQL mysql;
|
||||||
MY_INIT(argv[0]);
|
MY_INIT(argv[0]);
|
||||||
@ -58,21 +59,37 @@ int main(int argc, char **argv)
|
|||||||
get_options(&argc,&argv);
|
get_options(&argc,&argv);
|
||||||
|
|
||||||
wild=0;
|
wild=0;
|
||||||
if (argc && strcont(argv[argc-1],"*?%_"))
|
if (argc)
|
||||||
{
|
{
|
||||||
char *pos;
|
char *pos= argv[argc-1], *to;
|
||||||
|
for (to= pos ; *pos ; pos++, to++)
|
||||||
wild=argv[--argc];
|
{
|
||||||
for (pos=wild ; *pos ; pos++)
|
switch (*pos)
|
||||||
{ /* Unix wildcards to sql */
|
{
|
||||||
if (*pos == '*')
|
case '*':
|
||||||
*pos='%';
|
*pos= '%';
|
||||||
else if (*pos == '?')
|
first_argument_uses_wildcards= 1;
|
||||||
*pos='_';
|
break;
|
||||||
}
|
case '?':
|
||||||
|
*pos= '_';
|
||||||
|
first_argument_uses_wildcards= 1;
|
||||||
|
break;
|
||||||
|
case '%':
|
||||||
|
case '_':
|
||||||
|
first_argument_uses_wildcards= 1;
|
||||||
|
break;
|
||||||
|
case '\\':
|
||||||
|
pos++;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
*to= *pos;
|
||||||
|
}
|
||||||
|
*to= *pos; // just to copy a '\0' if '\\' was used
|
||||||
}
|
}
|
||||||
|
if (first_argument_uses_wildcards)
|
||||||
|
wild= argv[--argc];
|
||||||
else if (argc == 3) /* We only want one field */
|
else if (argc == 3) /* We only want one field */
|
||||||
wild=argv[--argc];
|
wild= argv[--argc];
|
||||||
|
|
||||||
if (argc > 2)
|
if (argc > 2)
|
||||||
{
|
{
|
||||||
@ -88,7 +105,7 @@ int main(int argc, char **argv)
|
|||||||
opt_ssl_capath, opt_ssl_cipher);
|
opt_ssl_capath, opt_ssl_cipher);
|
||||||
#endif
|
#endif
|
||||||
if (!(mysql_real_connect(&mysql,host,user,opt_password,
|
if (!(mysql_real_connect(&mysql,host,user,opt_password,
|
||||||
argv[0],opt_mysql_port,opt_mysql_unix_port,
|
(first_argument_uses_wildcards) ? "" : argv[0],opt_mysql_port,opt_mysql_unix_port,
|
||||||
0)))
|
0)))
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s: %s\n",my_progname,mysql_error(&mysql));
|
fprintf(stderr,"%s: %s\n",my_progname,mysql_error(&mysql));
|
||||||
|
Reference in New Issue
Block a user