Commit d8eafd95 authored by unknown's avatar unknown
Browse files

Merge bk@192.168.21.1:/usr/home/bk/mysql-5.0

into deer.(none):/home/hf/work/mysql-5.0.12938

parents d96cf23c 9ed942fe
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -312,6 +312,7 @@ emacs.h
extra/charset2html
extra/comp_err
extra/created_include_files
extra/innochecksum
extra/my_print_defaults
extra/mysql_install
extra/mysql_tzinfo_to_sql
+0 −0

Empty file added.

+2 −1
Original line number Diff line number Diff line
@@ -37,8 +37,9 @@ static char *add_load_option(char *ptr,const char *object,
			     const char *statement);

static my_bool	verbose=0,lock_tables=0,ignore_errors=0,opt_delete=0,
		replace=0,silent=0,ignore=0,opt_compress=0,opt_local_file=0,
		replace=0,silent=0,ignore=0,opt_compress=0,
                opt_low_priority= 0, tty_password= 0;
static uint     opt_local_file=0;
static MYSQL	mysql_connection;
static char	*opt_password=0, *current_user=0,
		*current_host=0, *current_db=0, *fields_terminated=0,
+107 −154
Original line number Diff line number Diff line
@@ -481,9 +481,10 @@ my_bool mysql_rpl_probe(MYSQL *mysql __attribute__((unused))) { return 1; }
static void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val,
				      int len);
static void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val);
static int normal_handle_error(const char *query, struct st_query *q,
                               MYSQL *mysql, DYNAMIC_STRING *ds);
static int normal_handle_no_error(struct st_query *q);
static int handle_error(const char *query, struct st_query *q,
                        unsigned int err_errno, const char *err_error,
                        const char *err_sqlstate, DYNAMIC_STRING *ds);
static int handle_no_error(struct st_query *q);

static void do_eval(DYNAMIC_STRING* query_eval, const char *query)
{
@@ -2071,11 +2072,12 @@ int connect_n_handle_errors(struct st_query *q, MYSQL* con, const char* host,
  if (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0,
                          CLIENT_MULTI_STATEMENTS))
  {
    error= normal_handle_error("connect", q, con, ds);
    error= handle_error("connect", q, mysql_errno(con), mysql_error(con),
                        mysql_sqlstate(con), ds);
    *create_conn= 0;
    goto err;
  }
  else if (normal_handle_no_error(q))
  else if (handle_no_error(q))
  {
    /*
      Fail if there was no error but we expected it.
@@ -2380,8 +2382,10 @@ int read_line(char *buf, int size)
    if (feof(cur_file->file))
    {
  found_eof:
      if (cur_file->file != stdin)
      if (cur_file->file != stdin){
	my_fclose(cur_file->file, MYF(0));
        cur_file->file= 0;
      }
      my_free((gptr)cur_file->file_name, MYF(MY_ALLOW_ZERO_PTR));
      cur_file->file_name= 0;
      lineno--;
@@ -2755,10 +2759,11 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
	argument= buff;
      }
      fn_format(buff, argument, "", "", 4);
      DBUG_ASSERT(cur_file->file == 0);
      DBUG_ASSERT(cur_file == file_stack && cur_file->file == 0);
      if (!(cur_file->file=
            my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(MY_WME))))
	die("Could not open %s: errno = %d", argument, errno);
	die("Could not open %s: errno = %d", buff, errno);
      cur_file->file_name= my_strdup(buff, MYF(MY_FAE));
      break;
    }
  case 'm':
@@ -2961,8 +2966,6 @@ static void append_result(DYNAMIC_STRING *ds, MYSQL_RES *res)
static int run_query_normal(MYSQL *mysql, struct st_query *q, int flags);
static int run_query_stmt  (MYSQL *mysql, struct st_query *q, int flags);
static void run_query_stmt_handle_warnings(MYSQL *mysql, DYNAMIC_STRING *ds);
static int run_query_stmt_handle_error(char *query, struct st_query *q,
                                       MYSQL_STMT *stmt, DYNAMIC_STRING *ds);
static void run_query_display_metadata(MYSQL_FIELD *field, uint num_fields,
                                       DYNAMIC_STRING *ds);

@@ -3046,12 +3049,13 @@ static int run_query_normal(MYSQL* mysql, struct st_query* q, int flags)
	 (!(last_result= res= mysql_store_result(mysql)) &&
	  mysql_field_count(mysql)))
    {
      if (normal_handle_error(query, q, mysql, ds))
      if (handle_error(query, q, mysql_errno(mysql), mysql_error(mysql),
                       mysql_sqlstate(mysql), ds))
        error= 1;
      goto end;
    }

    if (normal_handle_no_error(q))
    if (handle_no_error(q))
    {
      error= 1;
      goto end;
@@ -3166,14 +3170,15 @@ static int run_query_normal(MYSQL* mysql, struct st_query* q, int flags)


/*
  Handle errors which occurred after execution of conventional (non-prepared)
  statement.
  Handle errors which occurred after execution

  SYNOPSIS
    normal_handle_error()
    handle_error()
      query - query string
      q     - query context
      mysql - connection through which query was sent to server
      err_errno - error number
      err_error - error message
      err_sqlstate - sql state
      ds    - dynamic string which is used for output buffer

  NOTE
@@ -3185,35 +3190,35 @@ static int run_query_normal(MYSQL* mysql, struct st_query* q, int flags)
    1 - Some other error was expected.
*/

static int normal_handle_error(const char *query, struct st_query *q,
                               MYSQL *mysql, DYNAMIC_STRING *ds)
static int handle_error(const char *query, struct st_query *q,
                        unsigned int err_errno, const char *err_error,
                        const char* err_sqlstate, DYNAMIC_STRING *ds)
{
  uint i;
 
  DBUG_ENTER("normal_handle_error");
  DBUG_ENTER("handle_error");

  if (q->require_file)
    abort_not_supported_test();
 
  if (q->abort_on_error)
    die("query '%s' failed: %d: %s", query,
        mysql_errno(mysql), mysql_error(mysql));
  else
  {
        err_errno, err_error);

  for (i= 0 ; (uint) i < q->expected_errors ; i++)
  {
    if (((q->expected_errno[i].type == ERR_ERRNO) &&
            (q->expected_errno[i].code.errnum == mysql_errno(mysql))) ||
         (q->expected_errno[i].code.errnum == err_errno)) ||
        ((q->expected_errno[i].type == ERR_SQLSTATE) &&
           (strcmp(q->expected_errno[i].code.sqlstate, mysql_sqlstate(mysql)) == 0)))
         (strcmp(q->expected_errno[i].code.sqlstate, err_sqlstate) == 0)))
    {
      if (q->expected_errors == 1)
      {
        /* Only log error if there is one possible error */
        dynstr_append_mem(ds, "ERROR ", 6);
          replace_dynstr_append(ds, mysql_sqlstate(mysql));
        replace_dynstr_append(ds, err_sqlstate);
        dynstr_append_mem(ds, ": ", 2);
          replace_dynstr_append(ds, mysql_error(mysql));
        replace_dynstr_append(ds, err_error);
        dynstr_append_mem(ds,"\n",1);
      }
      /* Don't log error if we may not get an error */
@@ -3229,20 +3234,20 @@ static int normal_handle_error(const char *query, struct st_query *q,
  DBUG_PRINT("info",("i: %d  expected_errors: %d", i, q->expected_errors));

  dynstr_append_mem(ds, "ERROR ",6);
    replace_dynstr_append(ds, mysql_sqlstate(mysql));
  replace_dynstr_append(ds, err_sqlstate);
  dynstr_append_mem(ds, ": ", 2);
    replace_dynstr_append(ds, mysql_error(mysql));
  replace_dynstr_append(ds, err_error);
  dynstr_append_mem(ds, "\n", 1);

  if (i)
  {
    if (q->expected_errno[0].type == ERR_ERRNO)
      verbose_msg("query '%s' failed with wrong errno %d instead of %d...",
                    q->query, mysql_errno(mysql),
                  q->query, err_errno,
                  q->expected_errno[0].code.errnum);
    else
      verbose_msg("query '%s' failed with wrong sqlstate %s instead of %s...",
                    q->query, mysql_sqlstate(mysql),
                  q->query, err_sqlstate,
                  q->expected_errno[0].code.sqlstate);
    DBUG_RETURN(1);
  }
@@ -3251,19 +3256,17 @@ static int normal_handle_error(const char *query, struct st_query *q,
    If we do not abort on error, failure to run the query does not fail the
    whole test case.
  */
    verbose_msg("query '%s' failed: %d: %s", q->query, mysql_errno(mysql),
                mysql_error(mysql));
  verbose_msg("query '%s' failed: %d: %s", q->query, err_errno,
              err_error);
  DBUG_RETURN(0);
}
  return 0; /* Keep compiler happy */
}


/*
  Handle absence of errors after execution of convetional statement.
  Handle absence of errors after execution

  SYNOPSIS
    normal_handle_error()
    handle_no_error()
      q - context of query

  RETURN VALUE
@@ -3271,9 +3274,9 @@ static int normal_handle_error(const char *query, struct st_query *q,
    1 - Some error was expected from this query.
*/

static int normal_handle_no_error(struct st_query *q)
static int handle_no_error(struct st_query *q)
{
  DBUG_ENTER("normal_handle_no_error");
  DBUG_ENTER("handle_no_error");

  if (q->expected_errno[0].type == ERR_ERRNO &&
      q->expected_errno[0].code.errnum != 0)
@@ -3367,17 +3370,17 @@ static int run_query_stmt(MYSQL *mysql, struct st_query *q, int flags)
  {
    if (q->abort_on_error)
    {
      die("unable to prepare statement '%s': "
          "%s (mysql_stmt_errno=%d returned=%d)",
          query,
          mysql_stmt_error(stmt), mysql_stmt_errno(stmt), err);
      die("query '%s' failed: %d: %s", query,
          mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
    }
    else
    {
      /*
        Preparing is part of normal execution and some errors may be expected
      */
      error= run_query_stmt_handle_error(query, q, stmt, ds);
      error= handle_error(query, q, mysql_stmt_errno(stmt),
                          mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt),
                          ds);
      goto end;
    }
  }
@@ -3410,7 +3413,9 @@ static int run_query_stmt(MYSQL *mysql, struct st_query *q, int flags)
    else
    {
      /* We got an error, maybe expected */
      error= run_query_stmt_handle_error(query, q, stmt, ds);
      error= handle_error(query, q, mysql_stmt_errno(stmt),
                          mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt),
                          ds);
      goto end;
    }
  }
@@ -3446,18 +3451,16 @@ static int run_query_stmt(MYSQL *mysql, struct st_query *q, int flags)
    else
    {
      /* We got an error, maybe expected */
      error= run_query_stmt_handle_error(query, q, stmt, ds);
      error= handle_error(query, q, mysql_stmt_errno(stmt),
                          mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt),
                          ds);
      goto end;
    }
  }

  /* If we got here the statement was both executed and read succeesfully */

  if (q->expected_errno[0].type == ERR_ERRNO &&
      q->expected_errno[0].code.errnum != 0)
  if (handle_no_error(q))
  {
    verbose_msg("query '%s' succeeded - should have failed with errno %d...",
                q->query, q->expected_errno[0].code.errnum);
    error= 1;
    goto end;
  }
@@ -3737,71 +3740,6 @@ static void run_query_stmt_handle_warnings(MYSQL *mysql, DYNAMIC_STRING *ds)
}


static int run_query_stmt_handle_error(char *query, struct st_query *q,
                                       MYSQL_STMT *stmt, DYNAMIC_STRING *ds)
{
  if (q->require_file)              /* FIXME don't understand this one */
  {
    abort_not_supported_test();
  }

  if (q->abort_on_error)
    die("query '%s' failed: %d: %s", query,
        mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
  else
  {
    int i;

    for (i=0 ; (uint) i < q->expected_errors ; i++)
    {
      if (((q->expected_errno[i].type == ERR_ERRNO) &&
           (q->expected_errno[i].code.errnum == mysql_stmt_errno(stmt))) ||
          ((q->expected_errno[i].type == ERR_SQLSTATE) &&
           (strcmp(q->expected_errno[i].code.sqlstate,
                   mysql_stmt_sqlstate(stmt)) == 0)))
      {
        if (i == 0 && q->expected_errors == 1)
        {
          /* Only log error if there is one possible error */
          dynstr_append_mem(ds,"ERROR ",6);
          replace_dynstr_append(ds, mysql_stmt_sqlstate(stmt));
          dynstr_append_mem(ds, ": ", 2);
          replace_dynstr_append(ds,mysql_stmt_error(stmt));
          dynstr_append_mem(ds,"\n",1);
        }
        /* Don't log error if we may not get an error */
        else if (q->expected_errno[0].type == ERR_SQLSTATE ||
                 (q->expected_errno[0].type == ERR_ERRNO &&
                  q->expected_errno[0].code.errnum != 0))
          dynstr_append(ds,"Got one of the listed errors\n");
        return 0; /* Ok */
      }
    }
    DBUG_PRINT("info",("i: %d  expected_errors: %d", i,
                       q->expected_errors));
    dynstr_append_mem(ds, "ERROR ",6);
    replace_dynstr_append(ds, mysql_stmt_sqlstate(stmt));
    dynstr_append_mem(ds,": ",2);
    replace_dynstr_append(ds, mysql_stmt_error(stmt));
    dynstr_append_mem(ds,"\n",1);
    if (i)
    {
      verbose_msg("query '%s' failed with wrong errno %d instead of %d...",
                  q->query, mysql_stmt_errno(stmt), q->expected_errno[0]);
      return 1; /* Error */
    }
    verbose_msg("query '%s' failed: %d: %s", q->query, mysql_stmt_errno(stmt),
                mysql_stmt_error(stmt));
    /*
      if we do not abort on error, failure to run the query does
      not fail the whole test case
    */
    return 0;
  }

  return 0;
}

/****************************************************************************\
 *  Functions to match SQL statements that can be prepared
\****************************************************************************/
@@ -3898,6 +3836,22 @@ void get_query_type(struct st_query* q)
        q->type != Q_DISABLE_PARSING)
      q->type= Q_COMMENT;
  }
  else if (q->type == Q_COMMENT_WITH_COMMAND &&
           q->query[q->first_word_len-1] == ';')
  {
    /*
       Detect comment with command using extra delimiter
       Ex --disable_query_log;
                             ^ Extra delimiter causing the command
                               to be skipped
    */
    save= q->query[q->first_word_len-1];
    q->query[q->first_word_len-1]= 0;
    type= find_type(q->query, &command_typelib, 1+2);
    q->query[q->first_word_len-1]= save;
    if (type > 0)
      die("Extra delimiter \";\" found");
  }
  DBUG_VOID_RETURN;
}

@@ -4025,9 +3979,8 @@ int main(int argc, char **argv)
			embedded_server_args,
			(char**) embedded_server_groups))
    die("Can't initialize MySQL server");
  if (cur_file == file_stack)
  if (cur_file == file_stack && cur_file->file == 0)
  {
    DBUG_ASSERT(cur_file->file == 0);
    cur_file->file= stdin;
    cur_file->file_name= my_strdup("<stdin>", MYF(MY_WME));
  }
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ AC_DEFUN([MYSQL_CHECK_FEDERATED], [
  AC_ARG_WITH([federated-storage-engine],
              [
  --with-federated-storage-engine
                        Enable the MySQL Storage Engine],
                        Enable the MySQL Federated Storage Engine],
              [federateddb="$withval"],
              [federateddb=no])
  AC_MSG_CHECKING([for MySQL federated storage engine])
Loading