summaryrefslogtreecommitdiff
path: root/client/mysqlshow.c
diff options
context:
space:
mode:
authorjimw@rama.(none) <>2006-07-21 20:29:25 -0700
committerjimw@rama.(none) <>2006-07-21 20:29:25 -0700
commitdc0f4a21e65f9a74cbb8376df1a3223085e9a326 (patch)
tree9d40d89ba22d11e7092d8c13324a1d4be7fab53e /client/mysqlshow.c
parentb7a55b9b5c645fbedc81d7e751c25fed4a44d8db (diff)
downloadmariadb-git-dc0f4a21e65f9a74cbb8376df1a3223085e9a326.tar.gz
Bug #19147: mysqlshow INFORMATION_SCHEMA does not work
When a wildcard database name is given the mysqlshow, but that wildcard matches one database *exactly* (it contains the wildcard character), we list the contents of that database instead of just listing the database name as matching the wildcard. Probably the most common instance of users encountering this behavior would be with "mysqlshow information_schema".
Diffstat (limited to 'client/mysqlshow.c')
-rw-r--r--client/mysqlshow.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/client/mysqlshow.c b/client/mysqlshow.c
index d090495ff81..40405c53565 100644
--- a/client/mysqlshow.c
+++ b/client/mysqlshow.c
@@ -344,7 +344,7 @@ list_dbs(MYSQL *mysql,const char *wild)
char query[255];
MYSQL_FIELD *field;
MYSQL_RES *result;
- MYSQL_ROW row, rrow;
+ MYSQL_ROW row= NULL, rrow;
if (!(result=mysql_list_dbs(mysql,wild)))
{
@@ -352,6 +352,26 @@ list_dbs(MYSQL *mysql,const char *wild)
mysql_error(mysql));
return 1;
}
+
+ /*
+ If a wildcard was used, but there was only one row and it's name is an
+ exact match, we'll assume they really wanted to see the contents of that
+ database. This is because it is fairly common for database names to
+ contain the underscore (_), like INFORMATION_SCHEMA.
+ */
+ if (wild && mysql_num_rows(result) == 1)
+ {
+ row= mysql_fetch_row(result);
+ if (!my_strcasecmp(&my_charset_latin1, row[0], wild))
+ {
+ mysql_free_result(result);
+ if (opt_status)
+ return list_table_status(mysql, wild, NULL);
+ else
+ return list_tables(mysql, wild, NULL);
+ }
+ }
+
if (wild)
printf("Wildcard: %s\n",wild);
@@ -368,7 +388,8 @@ list_dbs(MYSQL *mysql,const char *wild)
else
print_header(header,length,"Tables",6,"Total Rows",12,NullS);
- while ((row = mysql_fetch_row(result)))
+ /* The first row may have already been read up above. */
+ while (row || (row= mysql_fetch_row(result)))
{
counter++;
@@ -422,6 +443,8 @@ list_dbs(MYSQL *mysql,const char *wild)
print_row(row[0],length,tables,6,NullS);
else
print_row(row[0],length,tables,6,rows,12,NullS);
+
+ row= NULL;
}
print_trailer(length,