Commit 9767b637 authored by unknown's avatar unknown
Browse files

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0

into poseidon.ndb.mysql.com:/home/tomas/mysql-5.0


ndb/src/mgmsrv/InitConfigFileParser.cpp:
  Auto merged
parents ad2a4306 14b89a32
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ path=`dirname $0`
if [ -z "$just_clean" ]
then
commands="$commands
CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\" CXXLDFLAGS=\"$CXXLDFLAGS\" \
CC=\"$CC\" CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\" CXXLDFLAGS=\"$CXXLDFLAGS\" \
$configure"
fi

+4 −0
Original line number Diff line number Diff line
@@ -104,6 +104,10 @@ else
  make=make
fi

if test -z "$CC" ; then
  CC=gcc
fi

if test -z "$CXX" ; then
  CXX=gcc
fi
+49 −27
Original line number Diff line number Diff line
@@ -1113,6 +1113,8 @@ static COMMANDS *find_command (char *name,char cmd_char)
{
  uint len;
  char *end;
  DBUG_ENTER("find_command");
  DBUG_PRINT("enter",("name: '%s'  char: %d", name ? name : "NULL", cmd_char));

  if (!name)
  {
@@ -1124,12 +1126,16 @@ static COMMANDS *find_command (char *name,char cmd_char)
    while (my_isspace(charset_info,*name))
      name++;
    /*
      As special case we allow row that starts with word delimiter
      to be able to change delimiter if someone has delimiter 'delimiter'.
      If there is an \\g in the row or if the row has a delimiter but
      this is not a delimiter command, let add_line() take care of
      parsing the row and calling find_command()
    */
    if (strstr(name, "\\g") || (strstr(name, delimiter) &&
				strncmp(name, "delimiter", 9)))
      return ((COMMANDS *) 0);
                                strlen(name) >= 9 &&
                                my_strnncoll(charset_info,(uchar*) name,
                                             9,
                                             (const uchar*) "delimiter", 9)))
      DBUG_RETURN((COMMANDS *) 0);
    if ((end=strcont(name," \t")))
    {
      len=(uint) (end - name);
@@ -1151,9 +1157,12 @@ static COMMANDS *find_command (char *name,char cmd_char)
	  !commands[i].name[len] &&
	  (!end || (end && commands[i].takes_params))) ||
	 !name && commands[i].cmd_char == cmd_char))
      return (&commands[i]);
    {
      DBUG_PRINT("exit",("found command: %s", commands[i].name));
      DBUG_RETURN(&commands[i]);
    }
  }
  return ((COMMANDS *) 0);
  DBUG_RETURN((COMMANDS *) 0);
}


@@ -1164,15 +1173,16 @@ static bool add_line(String &buffer,char *line,char *in_string,
  char buff[80], *pos, *out;
  COMMANDS *com;
  bool need_space= 0;
  DBUG_ENTER("add_line");

  if (!line[0] && buffer.is_empty())
    return 0;
    DBUG_RETURN(0);
#ifdef HAVE_READLINE
  if (status.add_to_history && line[0] && not_in_history(line))
    add_history(line);
#endif
#ifdef USE_MB
  char *strend=line+(uint) strlen(line);
  char *end_of_line=line+(uint) strlen(line);
#endif

  for (pos=out=line ; (inchar= (uchar) *pos) ; pos++)
@@ -1181,10 +1191,11 @@ static bool add_line(String &buffer,char *line,char *in_string,
        buffer.is_empty())
      continue;
#ifdef USE_MB
    int l;
    int length;
    if (use_mb(charset_info) &&
        (l = my_ismbchar(charset_info, pos, strend))) {
	while (l--)
        (length= my_ismbchar(charset_info, pos, end_of_line)))
    {
      while (length--)
        *out++ = *pos++;
      pos--;
      continue;
@@ -1207,7 +1218,7 @@ static bool add_line(String &buffer,char *line,char *in_string,
	const String tmp(line,(uint) (out-line), charset_info);
	buffer.append(tmp);
	if ((*com->func)(&buffer,pos-1) > 0)
	  return 1;				// Quit
	  DBUG_RETURN(1);                       // Quit
	if (com->takes_params)
	{
	  for (pos++ ;
@@ -1225,29 +1236,40 @@ static bool add_line(String &buffer,char *line,char *in_string,
      {
	sprintf(buff,"Unknown command '\\%c'.",inchar);
	if (put_info(buff,INFO_ERROR) > 0)
	  return 1;
	  DBUG_RETURN(1);
	*out++='\\';
	*out++=(char) inchar;
	continue;
      }
    }

    else if (!*ml_comment && (*pos == *delimiter &&
			      is_prefix(pos + 1, delimiter + 1)) &&
	     !*in_string)
    else if (!*ml_comment && !*in_string &&
             (*pos == *delimiter && is_prefix(pos + 1, delimiter + 1) ||
              buffer.length() == 0 && (out - line) >= 9 &&
              !my_strcasecmp(charset_info, line, "delimiter")))
    {					
      uint old_delimiter_length= delimiter_length;
      if (out != line)
	buffer.append(line, (uint) (out - line));	// Add this line
      if ((com= find_command(buffer.c_ptr(), 0)))
      {
        if (com->func == com_delimiter)
        {
          /*
            Delimiter wants the get rest of the given line as argument to
            allow one to change ';' to ';;' and back
          */
          char *end= strend(pos);
          buffer.append(pos, (uint) (end - pos));
          /* Ensure pos will point at \0 after the pos+= below */
          pos= end - old_delimiter_length + 1;
        }
	if ((*com->func)(&buffer, buffer.c_ptr()) > 0)
	  return 1;				// Quit
	  DBUG_RETURN(1);                       // Quit
      }
      else
      {
	if (com_go(&buffer, 0) > 0)             // < 0 is not fatal
	  return 1;
	  DBUG_RETURN(1);
      }
      buffer.length(0);
      out= line;
@@ -1299,9 +1321,9 @@ static bool add_line(String &buffer,char *line,char *in_string,
    if (buffer.length() + length >= buffer.alloced_length())
      buffer.realloc(buffer.length()+length+IO_SIZE);
    if (!(*ml_comment) && buffer.append(line,length))
      return 1;
      DBUG_RETURN(1);
  }
  return 0;
  DBUG_RETURN(0);
}

/*****************************************************************
+69 −61
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@
** master/autocommit code by Brian Aker <brian@tangent.org>
** SSL by
** Andrei Errapart <andreie@no.spam.ee>
** Tõnu Samuel  <tonu@please.do.not.remove.this.spam.ee>
** Tõnu Samuel  <tonu@please.do.not.remove.this.spam.ee>
** XML by Gary Huntress <ghuntress@mediaone.net> 10/10/01, cleaned up
** and adapted to mysqldump 05/11/01 by Jani Tolonen
** Added --single-transaction option 06/06/2002 by Peter Zaitsev
@@ -1172,23 +1172,25 @@ static void print_xml_row(FILE *xml_file, const char *row_name,
  This function has logic to print the appropriate syntax depending on whether
  this is a procedure or functions

  RETURN 0 succes, 1 if error
  RETURN
    0  Success
    1  Error
*/

static uint dump_routines_for_db(char *db)
{
  char       query_buff[512];
  const char *routine_type[]= {"FUNCTION", "PROCEDURE"};
  char       db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3], *routine_name;
  char       db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3];
  char       *routine_name;
  int        i;
  FILE       *sql_file= md_result_file;
  MYSQL_RES  *routine_res, *routine_list_res;
  MYSQL_ROW  row, routine_list_row;

  DBUG_ENTER("dump_routines_for_db");
  DBUG_PRINT("enter", ("db: '%s'", db));

  mysql_real_escape_string(sock, db_name_buff, db, strlen(db));
  DBUG_PRINT("enter", ("db: '%s'", db_name_buff));

  /* nice comments */
  if (opt_comments)
@@ -1201,7 +1203,7 @@ static uint dump_routines_for_db (char *db)
  if (lock_tables)
    mysql_query(sock, "LOCK TABLES mysql.proc READ");

  fprintf(sql_file, "DELIMITER //\n");
  fprintf(sql_file, "DELIMITER ;;\n");

  /* 0, retrieve and dump functions, 1, procedures */
  for (i= 0; i <= 1; i++)
@@ -1238,16 +1240,18 @@ static uint dump_routines_for_db (char *db)
          if (strlen(row[2]))
          {
            if (opt_drop)
              fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */ //\n",
              fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */;;\n",
                      routine_type[i], routine_name);
            /*
              we need to change sql_mode only for the CREATE PROCEDURE/FUNCTION
              otherwise we may need to re-quote routine_name
              we need to change sql_mode only for the CREATE
              PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name
            */;
            fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/ //\n",
            fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/;;\n",
                    row[1] /* sql_mode */);
            fprintf(sql_file, "/*!50003 %s */ //\n", row[2]);
            fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/ //\n");
            fprintf(sql_file, "/*!50003 %s */;;\n", row[2]);
            fprintf(sql_file,
                    "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/"
                    ";;\n");
          }
        } /* end of routine printing */
      } /* end of list of routines */
@@ -1283,7 +1287,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
{
  MYSQL_RES  *tableRes;
  MYSQL_ROW  row;
  my_bool    init=0;
  my_bool    init=0, delayed, write_data, complete_insert;
  uint       num_fields;
  char	     *result_table, *opt_quoted_table;
  const char *insert_option;
@@ -1292,31 +1296,33 @@ static uint get_table_structure(char *table, char *db, char *table_type,
  char       query_buff[512];
  FILE       *sql_file = md_result_file;
  int        len;

  DBUG_ENTER("get_table_structure");
  DBUG_PRINT("enter", ("db: %s, table: %s", db, table));
  DBUG_PRINT("enter", ("db: %s  table: %s", db, table));

  *ignore_flag= check_if_ignore_table(table, table_type);

  if (opt_delayed && (*ignore_flag & IGNORE_INSERT_DELAYED))
  delayed= opt_delayed;
  if (delayed && (*ignore_flag & IGNORE_INSERT_DELAYED))
  {
    delayed= 0;
    if (verbose)
      fprintf(stderr,
	      "-- Unable to use delayed inserts for table '%s' because it's of\
 type %s\n", table, table_type);
              "-- Warning: Unable to use delayed inserts for table '%s' "
              "because it's of type %s\n", table, table_type);
  }

  if (!(*ignore_flag & IGNORE_DATA))
  complete_insert= 0;
  if ((write_data= !(*ignore_flag & IGNORE_DATA)))
  {
    complete_insert= opt_complete_insert;
    if (!insert_pat_inited)
      insert_pat_inited= init_dynamic_string(&insert_pat, "", 1024, 1024);
    else
      dynstr_set(&insert_pat, "");
  }

  insert_option= ((opt_delayed && opt_ignore &&
                   !(*ignore_flag & IGNORE_INSERT_DELAYED)) ?
                  " DELAYED IGNORE " :
                  opt_delayed && !(*ignore_flag & IGNORE_INSERT_DELAYED) ? " DELAYED " :
                  opt_ignore ? " IGNORE " : "");
  insert_option= ((delayed && opt_ignore) ? " DELAYED IGNORE " :
                  delayed ? " DELAYED " : opt_ignore ? " IGNORE " : "");

  if (verbose)
    fprintf(stderr, "-- Retrieving table structure for table %s...\n", table);
@@ -1448,17 +1454,18 @@ static uint get_table_structure(char *table, char *db, char *table_type,
    }

    /*
      if *ignore_flag & IGNORE_DATA is true, then we don't build up insert statements 
      for the table's data. Note: in subsequent lines of code, this test will 
      have to be performed each time we are appending to insert_pat.
      If write_data is true, then we build up insert statements for
      the table's data. Note: in subsequent lines of code, this test
      will have to be performed each time we are appending to
      insert_pat.
    */
    if (!(*ignore_flag & IGNORE_DATA))
    if (write_data)
    {
      dynstr_append_mem(&insert_pat, "INSERT ", 7);
      dynstr_append(&insert_pat, insert_option);
      dynstr_append_mem(&insert_pat, "INTO ", 5);
      dynstr_append(&insert_pat, opt_quoted_table);
      if (opt_complete_insert)
      if (complete_insert)
      {
        dynstr_append_mem(&insert_pat, " (", 2);
      }
@@ -1471,17 +1478,18 @@ static uint get_table_structure(char *table, char *db, char *table_type,
    }

    while ((row=mysql_fetch_row(tableRes)))
    {
      if (complete_insert)
      {
        if (init)
        {
        if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA))
          dynstr_append_mem(&insert_pat, ", ", 2);
        }
        init=1;
      if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA))
        dynstr_append(&insert_pat,
                      quote_name(row[SHOW_FIELDNAME], name_buff, 0));
      }
    }
    num_fields= (uint) mysql_num_rows(tableRes);
    mysql_free_result(tableRes);
  }
@@ -1528,7 +1536,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
      check_io(sql_file);
    }

    if (!(*ignore_flag & IGNORE_DATA))
    if (write_data)
    {
      dynstr_append_mem(&insert_pat, "INSERT ", 7);
      dynstr_append(&insert_pat, insert_option);
@@ -1554,11 +1562,11 @@ static uint get_table_structure(char *table, char *db, char *table_type,
	  fputs(",\n",sql_file);
	  check_io(sql_file);
	}
        if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA))
        if (complete_insert)
          dynstr_append_mem(&insert_pat, ", ", 2);
      }
      init=1;
      if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA))
      if (opt_complete_insert)
        dynstr_append(&insert_pat,
                      quote_name(row[SHOW_FIELDNAME], name_buff, 0));
      if (!tFlag)
@@ -1719,7 +1727,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
      check_io(sql_file);
    }
  }
  if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA))
  if (opt_complete_insert)
  {
    dynstr_append_mem(&insert_pat, ") VALUES ", 9);
    if (!extended_insert)
@@ -1753,7 +1761,6 @@ static void dump_triggers_for_table (char *table, char *db)
  char	     name_buff[NAME_LEN*4+3], table_buff[NAME_LEN*2+3];
  char       query_buff[512];
  FILE       *sql_file = md_result_file;

  DBUG_ENTER("dump_triggers_for_table");
  DBUG_PRINT("enter", ("db: %s, table: %s", db, table));
  result_table=     quote_name(table, table_buff, 1);
@@ -1771,11 +1778,11 @@ static void dump_triggers_for_table (char *table, char *db)
  }
  if (mysql_num_rows(result))
    fprintf(sql_file, "\n/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;\n\
DELIMITER //;\n");
DELIMITER ;;\n");
  while ((row=mysql_fetch_row(result)))
  {
    fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */ //\n\
/*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s */ //\n\n",
    fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n\
/*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s */;;\n\n",
            row[6], /* sql_mode */
            quote_name(row[0], name_buff, 0), /* Trigger */
            row[4], /* Timing */
@@ -1785,8 +1792,8 @@ DELIMITER //;\n");
  }
  if (mysql_num_rows(result))
    fprintf(sql_file,
            "DELIMITER ;//\n\
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;");
            "DELIMITER ;\n"
            "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;\n");
  mysql_free_result(result);
  DBUG_VOID_RETURN;
}
@@ -1812,10 +1819,10 @@ static char *add_load_option(char *ptr,const char *object,


/*
** Allow the user to specify field terminator strings like:
** "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline)
** This is done by doubleing ' and add a end -\ if needed to avoid
** syntax errors from the SQL parser.
  Allow the user to specify field terminator strings like:
  "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline)
  This is done by doubling ' and add a end -\ if needed to avoid
  syntax errors from the SQL parser.
*/

static char *field_escape(char *to,const char *from,uint length)
@@ -1889,7 +1896,7 @@ static void dump_table(char *table, char *db)
    Make sure you get the create table info before the following check for
    --no-data flag below. Otherwise, the create table info won't be printed.
  */
  num_fields= get_table_structure(table, db, (char *)&table_type, &ignore_flag);
  num_fields= get_table_structure(table, db, table_type, &ignore_flag);

  /* Check --no-data flag */
  if (dFlag)
@@ -1901,7 +1908,9 @@ static void dump_table(char *table, char *db)
    DBUG_VOID_RETURN;
  }

  DBUG_PRINT("info", ("ignore_flag %x num_fields %d", ignore_flag, num_fields));
  DBUG_PRINT("info",
             ("ignore_flag: %x  num_fields: %d", (int) ignore_flag,
              num_fields));
  /*
    If the table type is a merge table or any type that has to be
     _completely_ ignored and no data dumped
@@ -1910,7 +1919,7 @@ static void dump_table(char *table, char *db)
  {
    if (verbose)
      fprintf(stderr,
	      "-- Skipping data for table '%s' because it's of type %s\n",
	      "-- Warning: Skipping data for table '%s' because it's of type %s\n",
	      table, table_type);
    DBUG_VOID_RETURN;
  }
@@ -1927,7 +1936,6 @@ static void dump_table(char *table, char *db)
  result_table= quote_name(table,table_buff, 1);
  opt_quoted_table= quote_name(table, table_buff2, 0);


  if (verbose)
    fprintf(stderr, "-- Sending SELECT query...\n");
  if (path)
+7 −9
Original line number Diff line number Diff line
@@ -143,7 +143,8 @@ typedef struct
  long        code;
} st_error;

static st_error global_error[] = {
static st_error global_error[] =
{
#include <mysqld_ername.h>
  { 0, 0 }
};
@@ -218,7 +219,8 @@ static int ps_match_re(char *);
static char *ps_eprint(int);
static void ps_free_reg(void);

static const char *embedded_server_groups[] = {
static const char *embedded_server_groups[]=
{
  "server",
  "embedded",
  "mysqltest_SERVER",
@@ -735,9 +737,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
static int check_result(DYNAMIC_STRING* ds, const char *fname,
			my_bool require_option)
{
  int error= RESULT_OK;
  int res= dyn_string_cmp(ds, fname);

  DBUG_ENTER("check_result");

  if (res && require_option)
@@ -747,18 +747,16 @@ static int check_result(DYNAMIC_STRING* ds, const char *fname,
    break; /* ok */
  case RESULT_LENGTH_MISMATCH:
    verbose_msg("Result length mismatch");
    error= RESULT_LENGTH_MISMATCH;
    break;
  case RESULT_CONTENT_MISMATCH:
    verbose_msg("Result content mismatch");
    error= RESULT_CONTENT_MISMATCH;
    break;
  default: /* impossible */
    die("Unknown error code from dyn_string_cmp()");
  }
  if (error)
  if (res != RESULT_OK)
    reject_dump(fname, ds->str, ds->length);
  DBUG_RETURN(error);
  DBUG_RETURN(res);
}


Loading