Commit 256d9e53 authored by unknown's avatar unknown
Browse files

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

into  mysql.com:/home/jimw/my/mysql-5.1-clean

parents 5a888df6 2d8e733d
Loading
Loading
Loading
Loading
+38 −30
Original line number Diff line number Diff line
@@ -1443,38 +1443,40 @@ int do_system(struct st_query *q)

/*
  Print the content between echo and <delimiter> to result file.
  If content is a variable, the variable value will be retrieved
  Evaluate all variables in the string before printing, allow
  for variable names to be escaped using \

  SYNOPSIS
    do_echo()
    q  called command

  DESCRIPTION
    Usage 1:
    echo text
    Print the text after echo until end of command to result file

    Usage 2:
    echo $<var_name>
    Print the content of the variable <var_name> to result file

    echo Some text $<var_name>
    Print "Some text" plus the content of the variable <var_name> to
    result file

    echo Some text \$<var_name>
    Print "Some text" plus $<var_name> to result file
*/

int do_echo(struct st_query *q)
int do_echo(struct st_query *command)
{
  char *p= q->first_argument;
  DYNAMIC_STRING *ds;
  VAR v;
  var_init(&v,0,0,0,0);
  DYNAMIC_STRING *ds, ds_echo;

  ds= &ds_res;

  eval_expr(&v, p, 0); /* NULL terminated */
  if (v.str_val_len)
    dynstr_append_mem(ds, v.str_val, v.str_val_len);
  init_dynamic_string(&ds_echo, "", 256, 256);
  do_eval(&ds_echo, command->first_argument);
  dynstr_append_mem(ds, ds_echo.str, ds_echo.length);
  dynstr_append_mem(ds, "\n", 1);
  var_free(&v);
  q->last_argument= q->end;
  dynstr_free(&ds_echo);
  command->last_argument= command->end;
  return 0;
}

@@ -3733,7 +3735,7 @@ static void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,

  if (mysql_stmt_fetch(stmt) != MYSQL_NO_DATA)
    die("fetch didn't end with MYSQL_NO_DATA from statement: %d %s",
	mysql_stmt_error(stmt), mysql_stmt_errno(stmt));
	mysql_stmt_errno(stmt), mysql_stmt_error(stmt));

  free_replace_column();

@@ -4215,18 +4217,16 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,
    parameter markers.
  */

#ifdef BUG14013_FIXED
  if (cursor_protocol_enabled)
  {
    /*
      Use cursor when retrieving result
    */
  if (cursor_protocol_enabled)
  {
    ulong type= CURSOR_TYPE_READ_ONLY;
    if (mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*) &type))
      die("mysql_stmt_attr_set(STMT_ATTR_CURSOR_TYPE) failed': %d %s",
          mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
  }
#endif

  /*
    Execute the query
@@ -4238,6 +4238,13 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,
    goto end;
  }

  /*
    When running in cursor_protocol get the warnings from execute here
    and keep them in a separate string for later.
  */
  if (cursor_protocol_enabled && !disable_warnings)
    append_warnings(&ds_execute_warnings, mysql);

  /*
    We instruct that we want to update the "max_length" field in
     mysql_stmt_store_result(), this is our only way to know how much
@@ -4303,6 +4310,7 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,

      /* Append warnings to ds - if there are any */
      if (append_warnings(&ds_execute_warnings, mysql) ||
          ds_execute_warnings.length ||
          ds_prepare_warnings.length ||
          ds_warnings->length)
      {
+34 −2
Original line number Diff line number Diff line
@@ -2002,6 +2002,7 @@ mysql_stmt_init(MYSQL *mysql)
  stmt->mysql= mysql;
  stmt->read_row_func= stmt_read_row_no_result_set;
  stmt->prefetch_rows= DEFAULT_PREFETCH_ROWS;
  strmov(stmt->sqlstate, not_error_sqlstate);
  /* The rest of statement members was bzeroed inside malloc */

  DBUG_RETURN(stmt);
@@ -4751,12 +4752,39 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)

  if (!stmt->field_count)
    DBUG_RETURN(0);
  if ((int) stmt->state < (int) MYSQL_STMT_EXECUTE_DONE ||
      mysql->status != MYSQL_STATUS_GET_RESULT)

  if ((int) stmt->state < (int) MYSQL_STMT_EXECUTE_DONE)
  {
    set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
    DBUG_RETURN(1);
  }

  if (mysql->status == MYSQL_STATUS_READY &&
      stmt->server_status & SERVER_STATUS_CURSOR_EXISTS)
  {
    /*
      Server side cursor exist, tell server to start sending the rows
    */
    NET *net= &mysql->net;
    char buff[4 /* statement id */ +
              4 /* number of rows to fetch */];

    /* Send row request to the server */
    int4store(buff, stmt->stmt_id);
    int4store(buff + 4, (int)~0); /* number of rows to fetch */
    if (cli_advanced_command(mysql, COM_STMT_FETCH, buff, sizeof(buff),
                             NullS, 0, 1))
    {
      set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
      DBUG_RETURN(1);
    }
  }
  else if (mysql->status != MYSQL_STATUS_GET_RESULT)
  {
    set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
    DBUG_RETURN(1);
  }

  if (result->data)
  {
    free_root(&result->alloc, MYF(MY_KEEP_PREALLOC));
@@ -4797,6 +4825,10 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
    DBUG_RETURN(1);
  }

  /* Assert that if there was a cursor, all rows have been fetched */
  DBUG_ASSERT(mysql->status != MYSQL_STATUS_READY ||
              (mysql->server_status & SERVER_STATUS_LAST_ROW_SENT));

  if (stmt->update_max_length)
  {
    MYSQL_ROWS *cur= result->data;
+17 −2
Original line number Diff line number Diff line
@@ -201,8 +201,14 @@ source database
- world''s most
-- popular open
# source database
'$message'
"$message"
'# MySQL: The
- world''s most
-- popular open
# source database'
"# MySQL: The
- world''s most
-- popular open
# source database"
hej
hej 
hej
@@ -221,6 +227,15 @@ mysqltest: At line 1: Missing arguments to let
mysqltest: At line 1: Missing variable name in let
mysqltest: At line 1: Missing variable name in let
mysqltest: At line 1: Missing assignment operator in let
# Execute: --echo # <whatever> success: $success
# <whatever> success: 1
# Execute: echo # <whatever> success: $success ;
# <whatever> success: 1 
# The next two variants work fine and expand the content of $success
# Execute: --echo $success
1
# Execute: echo $success ;
1 
mysqltest: At line 1: Missing file name in source
mysqltest: At line 1: Could not open file ./non_existingFile
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql": At line 1: Source directives are nesting too deep
+12 −0
Original line number Diff line number Diff line
@@ -300,3 +300,15 @@ select * from t1 where f1 = 10;
f1	f2
10	1
drop table t1;
set session storage_engine= 'memory';
create table t1 (f_int1 int(11) default null) engine = memory
partition by range (f_int1) subpartition by hash (f_int1)
(partition part1 values less than (1000)
(subpartition subpart11 engine = memory));
set session storage_engine='myisam';
create table t1 (f_int1 integer, f_int2 integer, primary key (f_int1))
partition by hash(f_int1) partitions 2;
insert into t1 values (1,1),(2,2);
replace into t1 values (1,1),(2,2);
drop table t1;
End of 5.1 tests
+0 −1
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ ndb_autodiscover2 : Needs to be fixed w.r.t binlog
ndb_binlog_basic     : Results are not deterministic, Tomas will fix
ndb_binlog_ddl_multi : Bug#17038 [PATCH PENDING]
ndb_gis              : garbled msgs from corrupt THD*
ndb_load             : Bug#17233
partition_03ndb      : Bug#16385
ps_7ndb              : dbug assert in RBR mode when executing test suite
rpl_bit_npk          : Bug#13418
Loading