~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to client/drizzlecheck.cc

  • Committer: Brian Aker
  • Date: 2008-08-11 17:33:54 UTC
  • mfrom: (287.3.17 codestyle)
  • Revision ID: brian@tangent.org-20080811173354-ys7tgjknox52semx
Merge from Monty

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
   along with this program; if not, write to the Free Software
14
14
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
15
 
16
 
/* By Jani Tolonen, 2001-04-20, MySQL, DRIZZLE Development Team */
 
16
/* By Jani Tolonen, 2001-04-20, MySQL, MYSQL Development Team */
17
17
 
18
18
#define CHECK_VERSION "2.5.0"
19
19
 
 
20
#include <vector>
 
21
#include <string>
20
22
#include "client_priv.h"
21
23
#include <mystrings/m_ctype.h>
22
24
 
 
25
template class std::vector<std::string>;
 
26
 
 
27
using namespace std;
23
28
/* Exit codes */
24
29
 
25
30
#define EX_USAGE 1
40
45
      *default_charset = (char *)MYSQL_DEFAULT_CHARSET_NAME,
41
46
      *current_host = 0;
42
47
static int first_error = 0;
43
 
DYNAMIC_ARRAY tables4repair;
 
48
vector<string> tables4repair;
44
49
static uint opt_protocol=0;
45
50
static const CHARSET_INFO *charset_info= &my_charset_latin1;
46
51
 
170
175
static int process_all_tables_in_db(char *database);
171
176
static int process_one_db(char *database);
172
177
static int use_db(char *database);
173
 
static int handle_request_for_tables(char *tables, uint length);
 
178
static int handle_request_for_tables(const char *tables, uint length);
174
179
static int dbConnect(char *host, char *user,char *passwd);
175
180
static void dbDisconnect(char *host);
176
181
static void DBerror(DRIZZLE *drizzle, const char *when);
177
182
static void safe_exit(int error);
178
183
static void print_result(void);
179
184
static uint fixed_name_length(const char *name);
180
 
static char *fix_table_name(char *dest, char *src);
 
185
static char *fix_table_name(char *dest, const char *src);
181
186
int what_to_do = 0;
182
187
 
183
188
static void print_version(void)
434
439
}
435
440
 
436
441
 
437
 
static char *fix_table_name(char *dest, char *src)
 
442
static char *fix_table_name(char *dest, const char *src)
438
443
{
439
444
  *dest++= '`';
440
445
  for (; *src; src++)
588
593
} /* use_db */
589
594
 
590
595
 
591
 
static int handle_request_for_tables(char *tables, uint length)
 
596
static int handle_request_for_tables(const char *tables, uint length)
592
597
{
593
598
  char *query, *end, options[100], message[100];
594
599
  uint query_length= 0;
674
679
        list
675
680
      */
676
681
      if (found_error && opt_auto_repair && what_to_do != DO_REPAIR &&
677
 
    strcmp(row[3],"OK"))
678
 
  insert_dynamic(&tables4repair, (uchar*) prev);
 
682
          strcmp(row[3],"OK"))
 
683
        tables4repair.push_back(string(prev));
679
684
      found_error=0;
680
685
      if (opt_silent)
681
686
  continue;
695
700
  }
696
701
  /* add the last table to be repaired to the list */
697
702
  if (found_error && opt_auto_repair && what_to_do != DO_REPAIR)
698
 
    insert_dynamic(&tables4repair, (uchar*) prev);
 
703
    tables4repair.push_back(string(prev));
699
704
  drizzle_free_result(res);
700
705
}
701
706
 
766
771
  if (dbConnect(current_host, current_user, opt_password))
767
772
    exit(EX_MYSQLERR);
768
773
 
769
 
  if (opt_auto_repair &&
770
 
      my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16,64))
 
774
  if (opt_auto_repair)
771
775
  {
772
 
    first_error = 1;
773
 
    goto end;
 
776
    tables4repair.reserve(64);
 
777
    if (tables4repair.capacity() == 0)
 
778
    {
 
779
      first_error = 1;
 
780
      goto end;
 
781
    }
774
782
  }
775
783
 
 
784
 
776
785
  if (opt_alldbs)
777
786
    process_all_databases();
778
787
  /* Only one database and selected table(s) */
783
792
    process_databases(argv);
784
793
  if (opt_auto_repair)
785
794
  {
786
 
    uint i;
787
795
 
788
 
    if (!opt_silent && tables4repair.elements)
 
796
    if (!opt_silent && (tables4repair.size() > 0))
789
797
      puts("\nRepairing tables");
790
798
    what_to_do = DO_REPAIR;
791
 
    for (i = 0; i < tables4repair.elements ; i++)
 
799
    vector<string>::iterator i;
 
800
    for ( i= tables4repair.begin() ; i < tables4repair.end() ; i++)
792
801
    {
793
 
      char *name= (char*) dynamic_array_ptr(&tables4repair, i);
 
802
      const char *name= (*i).c_str();
794
803
      handle_request_for_tables(name, fixed_name_length(name));
795
804
    }
796
805
  }
797
806
 end:
798
807
  dbDisconnect(current_host);
799
 
  if (opt_auto_repair)
800
 
    delete_dynamic(&tables4repair);
801
808
  my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR));
802
809
  my_end(my_end_arg);
803
810
  return(first_error!=0);