Commit 95b72158 authored by unknown's avatar unknown
Browse files

Merge bk-internal:/home/bk/mysql-5.1

into  dl145s.mysql.com:/data0/bk/team_tree_merge/MERGE/mysql-5.1-opt


client/mysqltest.c:
  Auto merged
libmysql/libmysql.c:
  Auto merged
mysql-test/r/information_schema.result:
  Auto merged
mysql-test/t/disabled.def:
  Auto merged
mysql-test/t/information_schema.test:
  Auto merged
mysql-test/t/subselect.test:
  Auto merged
mysql-test/t/type_newdecimal.test:
  Auto merged
sql/field.cc:
  Auto merged
sql/field.h:
  Auto merged
sql/filesort.cc:
  Auto merged
sql/handler.cc:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/item_subselect.cc:
  Auto merged
sql/item_sum.cc:
  Auto merged
sql/item_timefunc.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/opt_range.cc:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_class.h:
  Auto merged
sql/sql_lex.cc:
  Auto merged
sql/sql_lex.h:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
sql-common/client.c:
  Auto merged
sql-common/my_time.c:
  Auto merged
sql/table.cc:
  Auto merged
strings/decimal.c:
  Auto merged
parents 76b4ccbd 7fe3f313
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -142,10 +142,15 @@ test-force:
test-force-full:
	$(MAKE) force=--force test-full

#used by autopush.pl to run memory based tests
test-force-mem:
	$(MAKE) 'force=--force --mem' test

# Keep these for a while
test-pl:	test
test-full-pl:	test-full
test-force-pl:	test-force
test-force-pl-mem:  test-force-mem
test-force-full-pl: test-force-full

# Don't update the files from bitkeeper
+78 −10
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
  Matt Wagner  <matt@mysql.com>
  Monty
  Jani
  Holyfoot
*/

#define MTEST_VERSION "3.0"
@@ -222,6 +223,12 @@ struct st_connection
  MYSQL* util_mysql;
  char *name;
  MYSQL_STMT* stmt;

  const char *cur_query;
  int cur_query_len;
  pthread_mutex_t mutex;
  pthread_cond_t cond;
  int query_done;
};
struct st_connection connections[128];
struct st_connection* cur_con, *next_con, *connections_end;
@@ -460,7 +467,6 @@ void mysql_disable_rpl_parse(MYSQL* mysql __attribute__((unused))) {}
int mysql_rpl_parse_enabled(MYSQL* mysql __attribute__((unused))) { return 1; }
my_bool mysql_rpl_probe(MYSQL *mysql __attribute__((unused))) { return 1; }
#endif

void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val,
                               int len);
void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val);
@@ -471,7 +477,56 @@ void handle_error(struct st_command*,
                  const char *err_sqlstate, DYNAMIC_STRING *ds);
void handle_no_error(struct st_command*);

#ifdef EMBEDDED_LIBRARY
/*
  send_one_query executes query in separate thread what is
  necessary in embedded library to run 'send' in proper way.
  This implementation doesn't handle errors returned
  by mysql_send_query. It's technically possible, though
  i don't see where it is needed.
*/
pthread_handler_t send_one_query(void *arg)
{
  struct st_connection *cn= (struct st_connection*)arg;

  mysql_thread_init();
  VOID(mysql_send_query(&cn->mysql, cn->cur_query, cn->cur_query_len));

  mysql_thread_end();
  pthread_mutex_lock(&cn->mutex);
  cn->query_done= 1;
  VOID(pthread_cond_signal(&cn->cond));
  pthread_mutex_unlock(&cn->mutex);
  pthread_exit(0);
  return 0;
}

static int do_send_query(struct st_connection *cn, const char *q, int q_len,
                         int flags)
{
  pthread_t tid;

  if (flags & QUERY_REAP_FLAG)
    return mysql_send_query(&cn->mysql, q, q_len);

  if (pthread_mutex_init(&cn->mutex, NULL) ||
      pthread_cond_init(&cn->cond, NULL))
    die("Error in the thread library");

  cn->cur_query= q;
  cn->cur_query_len= q_len;
  cn->query_done= 0;
  if (pthread_create(&tid, NULL, send_one_query, (void*)cn))
    die("Cannot start new thread for query");

  return 0;
}

#else /*EMBEDDED_LIBRARY*/

#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len)

#endif /*EMBEDDED_LIBRARY*/

void do_eval(DYNAMIC_STRING *query_eval, const char *query,
             const char *query_end, my_bool pass_through_escape_chars)
@@ -4506,7 +4561,6 @@ int append_warnings(DYNAMIC_STRING *ds, MYSQL* mysql)
}



/*
  Run query using MySQL C API

@@ -4523,11 +4577,12 @@ int append_warnings(DYNAMIC_STRING *ds, MYSQL* mysql)
  error - function will not return
*/

void run_query_normal(MYSQL *mysql, struct st_command *command,
void run_query_normal(struct st_connection *cn, struct st_command *command,
                      int flags, char *query, int query_len,
                      DYNAMIC_STRING *ds, DYNAMIC_STRING *ds_warnings)
{
  MYSQL_RES *res= 0;
  MYSQL *mysql= &cn->mysql;
  int err= 0, counter= 0;
  DBUG_ENTER("run_query_normal");
  DBUG_PRINT("enter",("flags: %d", flags));
@@ -4538,14 +4593,26 @@ void run_query_normal(MYSQL *mysql, struct st_command *command,
    /*
      Send the query
    */
    if (mysql_send_query(mysql, query, query_len))
    if (do_send_query(cn, query, query_len, flags))
    {
      handle_error(command, mysql_errno(mysql), mysql_error(mysql),
		   mysql_sqlstate(mysql), ds);
      goto end;
    }
  }

#ifdef EMBEDDED_LIBRARY
  /*
   Here we handle 'reap' command, so we need to check if the
   query's thread was finished and probably wait
  */
  else if (flags & QUERY_REAP_FLAG)
  {
    pthread_mutex_lock(&cn->mutex);
    while (!cn->query_done)
      pthread_cond_wait(&cn->cond, &cn->mutex);
    pthread_mutex_unlock(&cn->mutex);
  }
#endif /*EMBEDDED_LIBRARY*/
  if (!(flags & QUERY_REAP_FLAG))
    DBUG_VOID_RETURN;

@@ -5036,8 +5103,9 @@ int util_query(MYSQL* org_mysql, const char* query){

*/

void run_query(MYSQL *mysql, struct st_command *command, int flags)
void run_query(struct st_connection *cn, struct st_command *command, int flags)
{
  MYSQL *mysql= &cn->mysql;
  DYNAMIC_STRING *ds;
  DYNAMIC_STRING ds_result;
  DYNAMIC_STRING ds_warnings;
@@ -5194,7 +5262,7 @@ void run_query(MYSQL *mysql, struct st_command *command, int flags)
      match_re(&ps_re, query))
    run_query_stmt(mysql, command, query, query_len, ds, &ds_warnings);
  else
    run_query_normal(mysql, command, flags, query, query_len,
    run_query_normal(cn, command, flags, query, query_len,
		     ds, &ds_warnings);

  if (sp_created)
@@ -5659,7 +5727,7 @@ int main(int argc, char **argv)
	  strmake(command->require_file, save_file, sizeof(save_file));
	  save_file[0]= 0;
	}
	run_query(&cur_con->mysql, command, QUERY_REAP_FLAG|QUERY_SEND_FLAG);
	run_query(cur_con, command, QUERY_REAP_FLAG|QUERY_SEND_FLAG);
	display_result_vertically= old_display_result_vertically;
        command->last_argument= command->end;
        command_executed++;
@@ -5690,7 +5758,7 @@ int main(int argc, char **argv)
	  strmake(command->require_file, save_file, sizeof(save_file));
	  save_file[0]= 0;
	}
	run_query(&cur_con->mysql, command, flags);
	run_query(cur_con, command, flags);
	command_executed++;
        command->last_argument= command->end;
	break;
@@ -5716,7 +5784,7 @@ int main(int argc, char **argv)
          the query and read the result some time later when reap instruction
	  is given on this connection.
        */
	run_query(&cur_con->mysql, command, QUERY_SEND_FLAG);
	run_query(cur_con, command, QUERY_SEND_FLAG);
	command_executed++;
        command->last_argument= command->end;
	break;
+2 −0
Original line number Diff line number Diff line
@@ -73,6 +73,8 @@ typedef long my_time_t;
#define TIME_MAX_VALUE (TIME_MAX_HOUR*10000 + TIME_MAX_MINUTE*100 + \
                        TIME_MAX_SECOND)

my_bool check_date(const MYSQL_TIME *ltime, my_bool not_zero_date,
                   ulong flags, int *was_cut);
enum enum_mysql_timestamp_type
str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
                uint flags, int *was_cut);
+0 −8
Original line number Diff line number Diff line
@@ -4762,14 +4762,6 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
    DBUG_RETURN(1);
  }

  if (result->data)
  {
    free_root(&result->alloc, MYF(MY_KEEP_PREALLOC));
    result->data= NULL;
    result->rows= 0;
    stmt->data_cursor= NULL;
  }

  if (stmt->update_max_length && !stmt->bind_result_done)
  {
    /*
+1 −0
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
  mysql->affected_rows= ~(my_ulonglong) 0;
  mysql->field_count= 0;
  net->last_errno= 0;
  thd->current_stmt= stmt;

  thd->store_globals();				// Fix if more than one connect
  /* 
Loading