Commit b54f4c51 authored by unknown's avatar unknown
Browse files

Add support for showing table type to mysqlshow command. (Bug #5036)


client/mysqlshow.c:
  Add support for -t (--show-table-type) switch
mysql-test/mysql-test-run.sh:
  Add support for running mysqlshow
parent 268a3ecc
Loading
Loading
Loading
Loading
+62 −16
Original line number Diff line number Diff line
@@ -28,7 +28,8 @@
#include <sslopt-vars.h>

static my_string host=0,opt_password=0,user=0;
static my_bool opt_show_keys=0,opt_compress=0,opt_status=0, tty_password=0;
static my_bool opt_show_keys= 0, opt_compress= 0, opt_status= 0, 
  tty_password= 0, opt_table_type= 0;
static uint opt_verbose=0;
static char *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME;

@@ -193,6 +194,9 @@ static struct my_option my_long_options[] =
   "Base name of shared memory.", (gptr*) &shared_memory_base_name, (gptr*) &shared_memory_base_name,
   0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif
  {"show-table-type", 't', "Show table type column.",
   (gptr*) &opt_table_type, (gptr*) &opt_table_type, 0, GET_BOOL,
   NO_ARG, 0, 0, 0, 0, 0, 0},
  {"socket", 'S', "Socket file to use for connection.",
   (gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR,
   REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -418,7 +422,7 @@ list_tables(MYSQL *mysql,const char *db,const char *table)
{
  const char *header;
  uint head_length, counter = 0;
  char query[255], rows[64], fields[16];
  char query[255], rows[NAME_LEN], fields[16];
  MYSQL_FIELD *field;
  MYSQL_RES *result;
  MYSQL_ROW row, rrow;
@@ -429,7 +433,20 @@ list_tables(MYSQL *mysql,const char *db,const char *table)
	    mysql_error(mysql));
    return 1;
  }
  if (!(result=mysql_list_tables(mysql,table)))
  if (table)
  {
    /*
      We just hijack the 'rows' variable for a bit to store the escaped
      table name
    */
    mysql_escape_string(rows, table, sizeof(rows));
    my_snprintf(query, sizeof(query), "show%s tables like '%s'",
                opt_table_type ? " full" : "", rows);
  }
  else
    my_snprintf(query, sizeof(query), "show%s tables",
                opt_table_type ? " full" : "");
  if (mysql_query(mysql, query) || !(result= mysql_store_result(mysql)))
  {
    fprintf(stderr,"%s: Cannot list tables in %s: %s\n",my_progname,db,
	    mysql_error(mysql));
@@ -446,12 +463,27 @@ list_tables(MYSQL *mysql,const char *db,const char *table)
  if (head_length < field->max_length)
    head_length=field->max_length;

  if (opt_table_type)
  {
    if (!opt_verbose)
      print_header(header,head_length,"table_type",10,NullS);
    else if (opt_verbose == 1)
      print_header(header,head_length,"table_type",10,"Columns",8,NullS);
    else
    {
      print_header(header,head_length,"table_type",10,"Columns",8,
		   "Total Rows",10,NullS);
    }
  }
  else
  {
    if (!opt_verbose)
      print_header(header,head_length,NullS);
    else if (opt_verbose == 1)
      print_header(header,head_length,"Columns",8,NullS);
    else
      print_header(header,head_length,"Columns",8, "Total Rows",10,NullS);
  }

  while ((row = mysql_fetch_row(result)))
  {
@@ -500,6 +532,17 @@ list_tables(MYSQL *mysql,const char *db,const char *table)
	strmov(rows,"N/A");
      }
    }
    if (opt_table_type)
    {
      if (!opt_verbose)
	print_row(row[0],head_length,row[1],10,NullS);
      else if (opt_verbose == 1)
	print_row(row[0],head_length,row[1],10,fields,8,NullS);
      else
	print_row(row[0],head_length,row[1],10,fields,8,rows,10,NullS);
    }
    else
    {
      if (!opt_verbose)
	print_row(row[0],head_length,NullS);
      else if (opt_verbose == 1)
@@ -507,10 +550,13 @@ list_tables(MYSQL *mysql,const char *db,const char *table)
      else
	print_row(row[0],head_length, fields,8, rows,10, NullS);
    }
  }

  print_trailer(head_length,
		(opt_verbose > 0 ? 8 : 0),
		(opt_verbose > 1 ? 10 :0),
		(opt_table_type ? 10 : opt_verbose > 0 ? 8 : 0),
		(opt_table_type ? (opt_verbose > 0 ? 8 : 0) 
		 : (opt_verbose > 1 ? 10 :0)),
		!opt_table_type ? 0 : opt_verbose > 1 ? 10 :0,
		0);

  if (counter && opt_verbose)
+12 −2
Original line number Diff line number Diff line
@@ -222,6 +222,7 @@ FAILED_CASES=
EXTRA_MASTER_OPT=""
EXTRA_MYSQL_TEST_OPT=""
EXTRA_MYSQLDUMP_OPT=""
EXTRA_MYSQLSHOW_OPT=""
EXTRA_MYSQLBINLOG_OPT=""
USE_RUNNING_SERVER=0
USE_NDBCLUSTER=@USE_NDBCLUSTER@
@@ -453,6 +454,8 @@ while test $# -gt 0; do
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqltest.trace"
      EXTRA_MYSQLDUMP_OPT="$EXTRA_MYSQLDUMP_OPT \
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqldump.trace"
      EXTRA_MYSQLSHOW_OPT="$EXTRA_MYSQLSHOW_OPT \
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqlshow.trace"
      EXTRA_MYSQLBINLOG_OPT="$EXTRA_MYSQLBINLOG_OPT \
       --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqlbinlog.trace"
      EXTRA_MYSQL_CLIENT_TEST_OPT="--debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysql_client_test.trace"
@@ -556,6 +559,11 @@ if [ x$SOURCE_DIST = x1 ] ; then
 else
   MYSQL_DUMP="$BASEDIR/client/mysqldump"
 fi
 if [ -f "$BASEDIR/client/.libs/mysqlshow" ] ; then
   MYSQL_SHOW="$BASEDIR/client/.libs/mysqlshow"
 else
   MYSQL_SHOW="$BASEDIR/client/mysqlshow"
 fi
 if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
   MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
 else
@@ -627,6 +635,7 @@ else
 fi
 MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
 MYSQL_DUMP="$CLIENT_BINDIR/mysqldump"
 MYSQL_SHOW="$CLIENT_BINDIR/mysqlshow"
 MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog"
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
 WAIT_PID="$CLIENT_BINDIR/mysql_waitpid"
@@ -697,10 +706,11 @@ fi

MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent $EXTRA_MYSQL_CLIENT_TEST_OPT"
MYSQL_DUMP="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
MYSQL_SHOW="$MYSQL_SHOW -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLSHOW_OPT"
MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR  --character-sets-dir=$CHARSETSDIR $EXTRA_MYSQLBINLOG_OPT"
MYSQL_FIX_SYSTEM_TABLES="$MYSQL_FIX_SYSTEM_TABLES --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD --basedir=$BASEDIR --bindir=$CLIENT_BINDIR --verbose"
MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD"
export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
export MYSQL MYSQL_DUMP MYSQL_SHOW MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
export NDB_TOOLS_DIR
export NDB_MGM
@@ -731,7 +741,7 @@ if [ -n "$DO_CLIENT_GDB" -o -n "$DO_GDB" ] ; then
  XTERM=`which xterm`
fi

export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES CLIENT_BINDIR MASTER_MYSOCK
export MYSQL MYSQL_DUMP MYSQL_SHOW MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES CLIENT_BINDIR MASTER_MYSOCK

#++
# Function Definitions
+76 −0
Original line number Diff line number Diff line
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE TABLE t2 (a int, b int);
show tables;
Tables_in_test
t1
t2
select "--------------------" as "";

--------------------
Database: test
+--------+
| Tables |
+--------+
| t1     |
| t2     |
+--------+
select "---- -v ------------" as "";

---- -v ------------
Database: test
+--------+----------+
| Tables | Columns  |
+--------+----------+
| t1     |        1 |
| t2     |        2 |
+--------+----------+
2 rows in set.

select "---- -v -v ---------" as "";

---- -v -v ---------
Database: test
+--------+----------+------------+
| Tables | Columns  | Total Rows |
+--------+----------+------------+
| t1     |        1 |          3 |
| t2     |        2 |          0 |
+--------+----------+------------+
2 rows in set.

select "----- -t -----------" as "";

----- -t -----------
Database: test
+--------+------------+
| Tables | table_type |
+--------+------------+
| t1     | BASE TABLE |
| t2     | BASE TABLE |
+--------+------------+
select "---- -v -t ---------" as "";

---- -v -t ---------
Database: test
+--------+------------+----------+
| Tables | table_type | Columns  |
+--------+------------+----------+
| t1     | BASE TABLE |        1 |
| t2     | BASE TABLE |        2 |
+--------+------------+----------+
2 rows in set.

select "---- -v -v -t ------" as "";

---- -v -v -t ------
Database: test
+--------+------------+----------+------------+
| Tables | table_type | Columns  | Total Rows |
+--------+------------+----------+------------+
| t1     | BASE TABLE |        1 |          3 |
| t2     | BASE TABLE |        2 |          0 |
+--------+------------+----------+------------+
2 rows in set.

DROP TABLE t1, t2;
+20 −0
Original line number Diff line number Diff line
#
## Bug #5036 mysqlshow is missing a column
#
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE TABLE t2 (a int, b int);
show tables;
select "--------------------" as "";
--exec $MYSQL_SHOW test
select "---- -v ------------" as "";
--exec $MYSQL_SHOW test -v
select "---- -v -v ---------" as "";
--exec $MYSQL_SHOW test -v -v
select "----- -t -----------" as "";
--exec $MYSQL_SHOW test -t
select "---- -v -t ---------" as "";
--exec $MYSQL_SHOW test -v -t
select "---- -v -v -t ------" as "";
--exec $MYSQL_SHOW test -v -v -t
DROP TABLE t1, t2;