Commit c2621f3d authored by unknown's avatar unknown
Browse files

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

into  mysql.com:/home/my/mysql-5.0


BUILD/SETUP.sh:
  Auto merged
client/mysql.cc:
  Auto merged
client/mysqldump.c:
  Auto merged
client/mysqltest.c:
  Auto merged
include/my_sys.h:
  Auto merged
mysql-test/r/func_str.result:
  Auto merged
mysql-test/r/information_schema.result:
  Auto merged
mysql-test/r/information_schema_inno.result:
  Auto merged
mysql-test/r/multi_statement.result:
  Auto merged
mysql-test/r/mysqldump.result:
  Auto merged
mysql-test/r/temp_table.result:
  Auto merged
mysql-test/t/func_str.test:
  Auto merged
mysql-test/t/information_schema.test:
  Auto merged
mysql-test/t/information_schema_inno.test:
  Auto merged
mysql-test/t/multi_statement.test:
  Auto merged
mysql-test/t/mysql.test:
  Auto merged
mysql-test/t/temp_table.test:
  Auto merged
sql/ha_federated.cc:
  Auto merged
sql/item.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/opt_range.cc:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/structs.h:
  Auto merged
sql/table.h:
  Auto merged
strings/decimal.c:
  Auto merged
sql/sql_parse.cc:
  manual merge
sql/sql_prepare.cc:
  manual merge
sql/table.cc:
  manual merge
parents 63e7824f d67485c8
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);
}

/*****************************************************************
+31 −28
Original line number Diff line number Diff line
@@ -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 */
@@ -1753,7 +1757,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 +1774,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 +1788,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 +1815,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)
+5 −3
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",
Loading