diff options
author | unknown <monty@hundin.mysql.fi> | 2001-06-12 11:59:14 +0300 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2001-06-12 11:59:14 +0300 |
commit | 01c886ee22bd87b27348092d60a256b6735c3729 (patch) | |
tree | 4e438515e2f773e374dc634cf25249392ab69fc1 /client/mysqlshow.c | |
parent | 8b76fb7f3ef18727fcc1b06733fd190a0741a321 (diff) | |
download | mariadb-git-01c886ee22bd87b27348092d60a256b6735c3729.tar.gz |
Added --verbose option to mysqlshow
Fixes for making distribution
Build-tools/Do-compile:
Added --no-strip option
Docs/manual.texi:
Changelog and some fixes to comparison section
client/mysqlshow.c:
Added --verbose option
mysql-test/r/create.result:
Test of CREATE ... SELECT with keys
mysql-test/t/create.test:
Test of CREATE ... SELECT with keys
scripts/make_binary_distribution.sh:
Changed to use long options
sql-bench/Comments/postgres.benchmark:
update
sql-bench/server-cfg.sh:
update to use 'vacuum analyze'
Diffstat (limited to 'client/mysqlshow.c')
-rw-r--r-- | client/mysqlshow.c | 171 |
1 files changed, 159 insertions, 12 deletions
diff --git a/client/mysqlshow.c b/client/mysqlshow.c index 8fffe02a52f..199318abc2f 100644 --- a/client/mysqlshow.c +++ b/client/mysqlshow.c @@ -16,7 +16,7 @@ /* Show databases, tables or columns */ -#define SHOW_VERSION "8.2" +#define SHOW_VERSION "8.3" #include <global.h> #include <my_sys.h> @@ -30,6 +30,7 @@ static my_string host=0,opt_password=0,user=0; static my_bool opt_show_keys=0,opt_compress=0,opt_status=0; +static uint opt_verbose=0; static void get_options(int *argc,char ***argv); static uint opt_mysql_port=0; @@ -140,6 +141,7 @@ static struct option long_options[] = #ifndef DONT_ALLOW_USER_CHANGE {"user", required_argument, 0, 'u'}, #endif + {"verbose", no_argument, 0, 'v'}, {"version", no_argument, 0, 'V'}, {0, 0, 0, 0} }; @@ -181,6 +183,8 @@ static void usage(void) -u, --user=# user for login if not current user\n"); #endif printf("\ + -v, --verbose more verbose output; You can use this multiple times\n\ + to get even more verbose output.\n\ -V, --version output version information and exit\n"); puts("\n\ @@ -200,7 +204,7 @@ get_options(int *argc,char ***argv) int c,option_index; my_bool tty_password=0; - while ((c=getopt_long(*argc,*argv,"c:h:p::u:#::P:S:Ck?VWi",long_options, + while ((c=getopt_long(*argc,*argv,"c:h:p::u:#::P:S:Ck?vVWi",long_options, &option_index)) != EOF) { switch(c) { @@ -210,6 +214,9 @@ get_options(int *argc,char ***argv) case 'c': charsets_dir= optarg; break; + case 'v': + opt_verbose++; + break; case 'h': host = optarg; break; @@ -277,10 +284,13 @@ static int list_dbs(MYSQL *mysql,const char *wild) { const char *header; - uint length; + uint length, counter = 0; + ulong rowcount = 0L; + char tables[NAME_LEN+1], rows[NAME_LEN+1]; + char query[255]; MYSQL_FIELD *field; MYSQL_RES *result; - MYSQL_ROW row; + MYSQL_ROW row, trow, rrow; if (!(result=mysql_list_dbs(mysql,wild))) { @@ -297,10 +307,79 @@ list_dbs(MYSQL *mysql,const char *wild) if (length < field->max_length) length=field->max_length; - print_header(header,length,NullS); + if (!opt_verbose) + print_header(header,length,NullS); + else if (opt_verbose == 1) + print_header(header,length,"Tables",6,NullS); + else + print_header(header,length,"Tables",6,"Total Rows",12,NullS); + while ((row = mysql_fetch_row(result))) - print_row(row[0],length,0); - print_trailer(length,0); + { + counter++; + + if (opt_verbose) + { + /* + * Original code by MG16373; Slightly modified by Monty. + * Print now the count of tables and rows for each database. + */ + + if (!(mysql_select_db(mysql,row[0]))) + { + MYSQL_RES *tresult = mysql_list_tables(mysql,(char*)NULL); + if (mysql_affected_rows(mysql) > 0) + { + sprintf(tables,"%6lu",(ulong) mysql_affected_rows(mysql)); + rowcount = 0; + if (opt_verbose > 1) + { + while ((trow = mysql_fetch_row(tresult))) + { + sprintf(query,"SELECT COUNT(*) FROM `%s`",trow[0]); + if (!(mysql_query(mysql,query))) + { + MYSQL_RES *rresult; + if ((rresult = mysql_store_result(mysql))) + { + rrow = mysql_fetch_row(rresult); + rowcount += (ulong) strtoull(rrow[0], (char**) 0, 10); + mysql_free_result(rresult); + } + } + } + sprintf(rows,"%12lu",rowcount); + } + } + else + { + sprintf(tables,"%6d",0); + sprintf(rows,"%12d",0); + } + mysql_free_result(tresult); + } + else + { + strmov(tables,"N/A"); + strmov(rows,"N/A"); + } + } + + if (!opt_verbose) + print_row(row[0],length,0); + else if (opt_verbose == 1) + print_row(row[0],length,tables,6,NullS); + else + print_row(row[0],length,tables,6,rows,12,NullS); + } + + print_trailer(length, + (opt_verbose > 0 ? 6 : 0), + (opt_verbose > 1 ? 12 :0), + 0); + + if (counter && opt_verbose) + printf("%u row%s in set.\n",counter,(counter > 1) ? "s" : ""); mysql_free_result(result); return 0; } @@ -310,10 +389,11 @@ static int list_tables(MYSQL *mysql,const char *db,const char *table) { const char *header; - uint head_length; + uint head_length, counter = 0; + char query[255], rows[64], fields[16]; MYSQL_FIELD *field; MYSQL_RES *result; - MYSQL_ROW row; + MYSQL_ROW row, rrow; if (mysql_select_db(mysql,db)) { @@ -338,14 +418,81 @@ list_tables(MYSQL *mysql,const char *db,const char *table) if (head_length < field->max_length) head_length=field->max_length; - print_header(header,head_length,NullS); + 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))) - print_row(row[0],head_length,0); - print_trailer(head_length,0); + { + /* + * Modified by MG16373 + * Print now the count of rows for each table. + */ + counter++; + if (opt_verbose > 0) + { + if (!(mysql_select_db(mysql,db))) + { + MYSQL_RES *rresult = mysql_list_fields(mysql,row[0],NULL); + ulong rowcount=0L; + if (!rresult) + { + strmov(fields,"N/A"); + strmov(rows,"N/A"); + } + else + { + sprintf(fields,"%8u",(uint) mysql_num_fields(rresult)); + mysql_free_result(rresult); + + if (opt_verbose > 1) + { + sprintf(query,"SELECT COUNT(*) FROM `%s`",row[0]); + if (!(mysql_query(mysql,query))) + { + if ((rresult = mysql_store_result(mysql))) + { + rrow = mysql_fetch_row(rresult); + rowcount += (unsigned long) strtoull(rrow[0], (char**) 0, 10); + mysql_free_result(rresult); + } + sprintf(rows,"%10lu",rowcount); + } + else + sprintf(rows,"%10d",0); + } + } + } + else + { + strmov(fields,"N/A"); + strmov(rows,"N/A"); + } + } + if (!opt_verbose) + print_row(row[0],head_length,NullS); + else if (opt_verbose == 1) + print_row(row[0],head_length, fields,8, NullS); + 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), + 0); + + if (counter && opt_verbose) + printf("%u row%s in set.\n\n",counter,(counter > 1) ? "s" : ""); + mysql_free_result(result); return 0; } + static int list_table_status(MYSQL *mysql,const char *db,const char *wild) { |