summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/mysql.cc1
-rw-r--r--include/mysql.h6
-rw-r--r--libmysql/libmysql.c171
-rw-r--r--mysql-test/r/func_group.result2
-rw-r--r--mysql-test/r/func_test.result10
-rw-r--r--mysql-test/r/grant.result2
-rw-r--r--mysql-test/r/loaddata.result2
-rw-r--r--mysql-test/r/lowercase_table.result3
-rw-r--r--mysql-test/r/mix_innodb_myisam_binlog.result94
-rw-r--r--mysql-test/r/myisam.result6
-rw-r--r--mysql-test/r/range.result36
-rw-r--r--mysql-test/r/rpl_loaddata.result2
-rw-r--r--mysql-test/r/rpl_loaddata_rule_m.result4
-rw-r--r--mysql-test/r/rpl_loaddata_rule_s.result4
-rw-r--r--mysql-test/r/rpl_log.result19
-rw-r--r--mysql-test/r/union.result8
-rw-r--r--mysql-test/t/lowercase_table.test2
-rw-r--r--mysql-test/t/myisam.test2
-rw-r--r--mysql-test/t/union.test4
-rw-r--r--sql-bench/compare-results.sh2
-rw-r--r--sql/field.h7
-rw-r--r--sql/ha_innodb.cc95
-rw-r--r--sql/item_cmpfunc.cc2
-rw-r--r--sql/log_event.cc25
-rw-r--r--sql/opt_range.cc9
-rw-r--r--sql/slave.cc1
-rw-r--r--sql/sql_acl.cc73
-rw-r--r--sql/sql_select.cc1
-rw-r--r--sql/sql_show.cc2
-rw-r--r--sql/sql_table.cc46
-rw-r--r--sql/sql_union.cc27
-rw-r--r--tests/client_test.c25
32 files changed, 259 insertions, 434 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 92aeb495629..37c83411091 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1812,7 +1812,6 @@ print_field_types(MYSQL_RES *result)
while ((field = mysql_fetch_field(result)))
{
tee_fprintf(PAGER,"Catalog: '%s'\nDatabase: '%s'\nTable: '%s'\nName: '%s'\nType: %d\nLength: %d\nMax length: %d\nIs_null: %d\nFlags: %d\nDecimals: %d\n\n",
- tee_fprintf(PAGER,"'%s.%s.%s.%s' %d %d %d %d %d\n",
field->catalog, field->db, field->table, field->name,
(int) field->type,
field->length, field->max_length,
diff --git a/include/mysql.h b/include/mysql.h
index 2e23a1e2f98..55fe4107d0c 100644
--- a/include/mysql.h
+++ b/include/mysql.h
@@ -499,10 +499,12 @@ typedef struct st_mysql_bind
/* Following are for internal use. Set by mysql_bind_param */
unsigned char *inter_buffer; /* for the current data position */
unsigned long offset; /* offset position for char/binary fetch */
+ unsigned long internal_length; /* Used if length is 0 */
unsigned int param_number; /* For null count and error messages */
my_bool long_data_used; /* If used with mysql_send_long_data */
my_bool binary_data; /* data buffer is binary */
my_bool null_field; /* NULL data cache flag */
+ my_bool internal_is_null; /* Used if is_null is 0 */
void (*store_param_func)(NET *net, struct st_mysql_bind *param);
void (*fetch_result)(struct st_mysql_bind *, unsigned char **row);
} MYSQL_BIND;
@@ -572,13 +574,13 @@ my_bool STDCALL mysql_rollback(MYSQL * mysql);
my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
int STDCALL mysql_fetch(MYSQL_STMT *stmt);
int STDCALL mysql_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
- my_ulonglong column,
+ unsigned int column,
unsigned long offset);
my_bool STDCALL mysql_send_long_data(MYSQL_STMT *stmt,
unsigned int param_number,
const char *data,
unsigned long length);
-MYSQL_RES *STDCALL mysql_prepare_result(MYSQL_STMT *stmt);
+MYSQL_RES *STDCALL mysql_get_metadata(MYSQL_STMT *stmt);
MYSQL_RES *STDCALL mysql_param_result(MYSQL_STMT *stmt);
my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt);
int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt);
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index cc45985a88c..afb785cf9d5 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -1715,10 +1715,10 @@ unsigned int alloc_stmt_fields(MYSQL_STMT *stmt)
*/
MYSQL_RES * STDCALL
-mysql_prepare_result(MYSQL_STMT *stmt)
+mysql_get_metadata(MYSQL_STMT *stmt)
{
MYSQL_RES *result;
- DBUG_ENTER("mysql_prepare_result");
+ DBUG_ENTER("mysql_get_metadata");
if (!stmt->field_count || !stmt->fields)
{
@@ -1758,7 +1758,6 @@ mysql_param_result(MYSQL_STMT *stmt)
}
-
/********************************************************************
Prepare-execute, and param handling
*********************************************************************/
@@ -1773,6 +1772,7 @@ static void store_param_type(NET *net, uint type)
net->write_pos+=2;
}
+
/****************************************************************************
Functions to store parameter data from a prepared statement.
@@ -1788,7 +1788,6 @@ static void store_param_type(NET *net, uint type)
1 Error (Can't alloc net->buffer)
****************************************************************************/
-
static void store_param_tinyint(NET *net, MYSQL_BIND *param)
{
*(net->write_pos++)= (uchar) *param->buffer;
@@ -2085,8 +2084,6 @@ my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt)
static my_bool int_is_null_true= 1; /* Used for MYSQL_TYPE_NULL */
static my_bool int_is_null_false= 0;
-static my_bool int_is_null_dummy;
-static unsigned long param_length_is_dummy;
/*
Setup the parameter data buffers from application
@@ -2422,7 +2419,10 @@ static void send_data_long(MYSQL_BIND *param, longlong value)
char tmp[22]; /* Enough for longlong */
uint length= (uint)(longlong10_to_str(value,(char *)tmp,10)-tmp);
ulong copy_length= min((ulong)length-param->offset, param->buffer_length);
- memcpy(buffer, (char *)tmp+param->offset, copy_length);
+ if ((long) copy_length < 0)
+ copy_length=0;
+ else
+ memcpy(buffer, (char *)tmp+param->offset, copy_length);
*param->length= length;
if (copy_length != param->buffer_length)
@@ -2470,7 +2470,10 @@ static void send_data_double(MYSQL_BIND *param, double value)
char tmp[128];
uint length= my_sprintf(tmp,(tmp,"%g",value));
ulong copy_length= min((ulong)length-param->offset, param->buffer_length);
- memcpy(buffer, (char *)tmp+param->offset, copy_length);
+ if ((long) copy_length < 0)
+ copy_length=0;
+ else
+ memcpy(buffer, (char *)tmp+param->offset, copy_length);
*param->length= length;
if (copy_length != param->buffer_length)
@@ -2535,15 +2538,19 @@ static void send_data_str(MYSQL_BIND *param, char *value, uint length)
case MYSQL_TYPE_BLOB:
*param->length= length;
length= min(length-param->offset, param->buffer_length);
- memcpy(buffer, value+param->offset, length);
+ if ((long) length > 0)
+ memcpy(buffer, value+param->offset, length);
break;
default:
*param->length= length;
length= min(length-param->offset, param->buffer_length);
- memcpy(buffer, value+param->offset, length);
+ if ((long) length < 0)
+ length= 0;
+ else
+ memcpy(buffer, value+param->offset, length);
if (length != param->buffer_length)
buffer[length]= '\0';
- }
+ }
}
@@ -2605,15 +2612,16 @@ static void send_data_time(MYSQL_BIND *param, MYSQL_TIME ltime,
/* Fetch data to buffers */
-static void fetch_results(MYSQL_BIND *param, uint field_type, uchar **row,
- my_bool field_is_unsigned)
+static void fetch_results(MYSQL_BIND *param, MYSQL_FIELD *field, uchar **row)
{
ulong length;
-
+ enum enum_field_types field_type= field->type;
+
switch (field_type) {
case MYSQL_TYPE_TINY:
{
char value= (char) **row;
+ uint field_is_unsigned= (field->flags & UNSIGNED_FLAG);
longlong data= ((field_is_unsigned) ? (longlong) (unsigned char) value:
(longlong) value);
send_data_long(param,data);
@@ -2624,6 +2632,7 @@ static void fetch_results(MYSQL_BIND *param, uint field_type, uchar **row,
case MYSQL_TYPE_YEAR:
{
short value= sint2korr(*row);
+ uint field_is_unsigned= (field->flags & UNSIGNED_FLAG);
longlong data= ((field_is_unsigned) ? (longlong) (unsigned short) value:
(longlong) value);
send_data_long(param,data);
@@ -2633,6 +2642,7 @@ static void fetch_results(MYSQL_BIND *param, uint field_type, uchar **row,
case MYSQL_TYPE_LONG:
{
long value= sint4korr(*row);
+ uint field_is_unsigned= (field->flags & UNSIGNED_FLAG);
longlong data= ((field_is_unsigned) ? (longlong) (unsigned long) value:
(longlong) value);
send_data_long(param,data);
@@ -2781,24 +2791,6 @@ static void fetch_result_str(MYSQL_BIND *param, uchar **row)
*row+= length;
}
-static uint default_binary_field_length(uint field_type)
-{
- switch(field_type) {
- case MYSQL_TYPE_TINY:
- return 1;
- case MYSQL_TYPE_SHORT:
- return 2;
- case MYSQL_TYPE_LONG:
- case MYSQL_TYPE_FLOAT:
- return 4;
- case MYSQL_TYPE_LONGLONG:
- case MYSQL_TYPE_DOUBLE:
- return 8;
- default:
- return 0;
- }
-}
-
/*
Setup the bind buffers for resultset processing
@@ -2838,10 +2830,10 @@ my_bool STDCALL mysql_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
This is to make the excute code easier
*/
if (!param->is_null)
- param->is_null= &int_is_null_dummy;
+ param->is_null= &param->internal_is_null;
if (!param->length)
- param->length= &param_length_is_dummy;
+ param->length= &param->internal_length;
param->param_number= param_count++;
param->offset= 0;
@@ -2945,10 +2937,7 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row)
if (field->type == bind->buffer_type)
(*bind->fetch_result)(bind, &row);
else
- {
- my_bool field_is_unsigned= (field->flags & UNSIGNED_FLAG) ? 1: 0;
- fetch_results(bind, field->type, &row, field_is_unsigned);
- }
+ fetch_results(bind, field, &row);
}
if (!((bit<<=1) & 255))
{
@@ -2970,8 +2959,8 @@ int STDCALL mysql_fetch(MYSQL_STMT *stmt)
uchar *row;
DBUG_ENTER("mysql_fetch");
- stmt->last_fetched_column= 0; /* reset */
- if (stmt->result_buffered) /* buffered */
+ stmt->last_fetched_column= 0; /* reset */
+ if (stmt->result_buffered) /* buffered */
{
MYSQL_RES *res;
@@ -2986,7 +2975,7 @@ int STDCALL mysql_fetch(MYSQL_STMT *stmt)
row= (uchar *)res->data_cursor->data;
res->data_cursor= res->data_cursor->next;
}
- else /* un-buffered */
+ else /* un-buffered */
{
if (packet_error == net_safe_read(mysql))
{
@@ -3012,107 +3001,55 @@ no_data:
/*
- Fetch only specified column data to buffers
+ Fetch datat for one specified column data
+
+ SYNOPSIS
+ mysql_fetch_column()
+ stmt Prepared statement handler
+ bind Where date should be placed. Should be filled in as
+ when calling mysql_bind_param()
+ column Column to fetch (first column is 0)
+ ulong offset Offset in result data (to fetch blob in pieces)
+ This is normally 0
+ RETURN
+ 0 ok
+ 1 error
*/
int STDCALL mysql_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
- my_ulonglong icol,
- ulong offset)
+ uint column, ulong offset)
{
- uchar *row;
- my_bool null_data;
-
+ MYSQL_BIND *param= stmt->bind+column;
DBUG_ENTER("mysql_fetch_column");
- if (!(row= stmt->current_row))
+ if (!stmt->current_row)
goto no_data;
#ifdef CHECK_EXTRA_ARGUMENTS
- if (!bind || icol >= stmt->field_count)
+ if (column >= stmt->field_count)
{
- set_stmt_errmsg(stmt, "Invalid column descriptor or offset",1,
- unknown_sqlstate);
+ set_stmt_errmsg(stmt, "Invalid column descriptor",1, unknown_sqlstate);
DBUG_RETURN(1);
}
#endif
- /* column '0' == first column */
- if (stmt->res_buffers)
- {
- /*
- Already buffers are parsed and cached to stmt->bind
- during mysql_fetch() call.
- */
- MYSQL_BIND *param= stmt->bind+icol;
- null_data= param->null_field;
- row= param->inter_buffer;
- }
- else
- {
- if (stmt->last_fetched_column == icol+1)
- {
- /*
- Data buffer is already parsed during the last call, get
- the cached information
- */
- if (!stmt->last_fetched_buffer)
- null_data= 1;
- else
- {
- null_data= 0;
- row= stmt->last_fetched_buffer;
- }
- }
- else
- {
- /*
- Advance the data buffer to icol position and cache
- the information for subsequent calls
- */
- uint bit= icol > 6 ? 1 : 4;
- stmt->last_fetched_column= icol+1;
-
- if (row[icol/8] & (bit << icol & 7))
- {
- stmt->last_fetched_buffer= 0;
- null_data= 1;
- }
- else
- {
- uint length, i;
-
- null_data= 0;
- row+= (stmt->field_count+9)/8; /* skip null bits */
-
- for (i=0; i < icol; i++)
- {
- if (!(length= default_binary_field_length((uint)(stmt->fields[i].
- type))))
- length= net_field_length(&row);
- row+= length;
- }
- stmt->last_fetched_buffer= row;
- }
- }
- }
- if (null_data)
+ if (param->null_field)
{
if (bind->is_null)
*bind->is_null= 1;
}
else
{
- MYSQL_FIELD *field= stmt->fields+icol;
- my_bool field_is_unsigned= (field->flags & UNSIGNED_FLAG) ? 1: 0;
-
+ MYSQL_FIELD *field= stmt->fields+column;
+ uchar *row= param->inter_buffer;
bind->offset= offset;
if (bind->is_null)
*bind->is_null= 0;
if (bind->length) /* Set the length if non char/binary types */
- *bind->length= default_binary_field_length(field->type);
+ *bind->length= *param->length;
else
- bind->length= &param_length_is_dummy;
- fetch_results(bind, field->type, &row, field_is_unsigned);
+ bind->length= &param->internal_length; /* Needed for fetch_result() */
+ fetch_results(bind, field, &row);
}
DBUG_RETURN(0);
diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result
index 8fad9d16dc2..3af75b3c5bc 100644
--- a/mysql-test/r/func_group.result
+++ b/mysql-test/r/func_group.result
@@ -551,7 +551,7 @@ id select_type table type possible_keys key key_len ref rows Extra
explain
select min(a1) from t1 where a1 between a3 and 'KKK';
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 14 Using where
+1 SIMPLE t1 ALL NULL NULL NULL NULL 14 Using where
explain
select min(a4) from t1 where (a4 + 0.01) between 0.07 and 0.08;
id select_type table type possible_keys key key_len ref rows Extra
diff --git a/mysql-test/r/func_test.result b/mysql-test/r/func_test.result
index a58c26f7507..851c308ba3e 100644
--- a/mysql-test/r/func_test.result
+++ b/mysql-test/r/func_test.result
@@ -1,4 +1,4 @@
-DROP TABLE IF EXISTS t1,t2;
+drop table if exists t1,t2;
select 0=0,1>0,1>=1,1<0,1<=0,1!=0,strcmp("abc","abcd"),strcmp("b","a"),strcmp("a","a") ;
0=0 1>0 1>=1 1<0 1<=0 1!=0 strcmp("abc","abcd") strcmp("b","a") strcmp("a","a")
1 1 1 0 0 1 -1 1 0
@@ -125,10 +125,10 @@ ERROR HY000: Illegal mix of collations (koi8r_general_ci,EXPLICIT) and (koi8r_bi
select _koi8r'a' LIKE _latin1'A';
ERROR HY000: Illegal mix of collations (koi8r_general_ci,COERCIBLE) and (latin1_swedish_ci,COERCIBLE) for operation 'like'
CREATE TABLE t1 ( faq_group_id int(11) NOT NULL default '0', faq_id int(11) NOT NULL default '0', title varchar(240) default NULL, keywords text, description longblob, solution longblob, status tinyint(4) NOT NULL default '0', access_id smallint(6) default NULL, lang_id smallint(6) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', updated datetime default NULL, last_access datetime default NULL, last_notify datetime default NULL, solved_count int(11) NOT NULL default '0', static_solved int(11) default NULL, solved_1 int(11) default NULL, solved_2 int(11) default NULL, solved_3 int(11) default NULL, solved_4 int(11) default NULL, solved_5 int(11) default NULL, expires datetime default NULL, notes text, assigned_to smallint(6) default NULL, assigned_group smallint(6) default NULL, last_edited_by smallint(6) default NULL, orig_ref_no varchar(15) binary default NULL, c$fundstate smallint(6) default NULL, c$contributor smallint(6) default NULL, UNIQUE KEY t1$faq_id (faq_id), KEY t1$group_id$faq_id (faq_group_id,faq_id), KEY t1$c$fundstate (c$fundstate) ) TYPE=MyISAM;
- INSERT INTO t1 VALUES (82,82,'How to use the DynaVox Usage Counts Feature','usages count, number, corner, white, box, button','<as-html>\r\n<table width=\"100%\" border=\"0\">\r\n <tr>\r\n <td width=\"3%\"> </td>\r\n <td width=\"97%\">\r\n <h3><font face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#000000\">How \r\n To</font><!-- #BeginEditable \"CS_troubleshoot_question\" --><font face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#000099\"><font color=\"#000000\">: \r\n Display or Hide the Usage Counts to find out how many times each button is being selected. </font></font><!-- #EndEditable --></h3>\r\n </td>\r\n </tr>\r\n</table>','<as-html>\r\n <table width=\"100%\" border=\"0\">\r\n <tr>\r\n <td width=\"3%\"> </td>\r\n \r\n<td width=\"97%\"><!-- #BeginEditable \"CS_troubleshoot_answer\" --> \r\n \r\n<p><font color=\"#000000\" face=\"Verdana, Arial, Helvetica, sans-serif\">1. Select \r\n the <i>On/Setup</i> button to access the DynaVox Setup Menu.<br>\r\n 2. Select <b>Button Features.</b><br>\r\n 3. Below the <b>OK</b> button is the <b>Usage Counts</b> button.<br>\r\n a. If it says \"Hidden\" then the Usage Counts will not be displayed.<br>\r\n b. If it says \"Displayed\" then the Usage Counts will be shown.<br>\r\n c. Select the <b>Usage Counts</b> Option Ring once and it will toggle \r\n to the alternative option.<br>\r\n 4. Once the correct setting has been chosen, select <b>OK</b> to leave the <i>Button \r\n Features</i> menu.<br>\r\n 5. Select <b>OK</b> out of the <i>Setup</i> menu and return to the communication \r\n page.</font></p>\r\n <p><font color=\"#000000\" face=\"Verdana, Arial, Helvetica, sans-serif\">For \r\n further information on <i>Usage Counts,</i> see the <i>Button Features \r\n Menu Entry</i> in the DynaVox/DynaMyte Reference Manual.</font></p>\r\n<!-- #EndEditable --></td>\r\n </tr>\r\n</table>',4,1,1,'2001-11-16 16:43:34','2002-11-25 12:09:43','2003-07-24 01:04:48',NULL,11,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,11,NULL,NULL,NULL);
- CREATE TABLE t2 ( access_id smallint(6) NOT NULL default '0', name varchar(20) binary default NULL, rank smallint(6) NOT NULL default '0', KEY t2$access_id (access_id) ) TYPE=MyISAM;
- INSERT INTO t2 VALUES (1,'Everyone',2),(2,'Help',3),(3,'Customer Support',1);
- SELECT f_acc.rank, a1.rank, a2.rank FROM t1 LEFT JOIN t1 f1 ON (f1.access_id=1 AND f1.faq_group_id = t1.faq_group_id) LEFT JOIN t2 a1 ON (a1.access_id = f1.access_id) LEFT JOIN t1 f2 ON (f2.access_id=3 AND f2.faq_group_id = t1.faq_group_id) LEFT JOIN t2 a2 ON (a2.access_id = f2.access_id), t2 f_acc WHERE LEAST(a1.rank,a2.rank) = f_acc.rank;
+INSERT INTO t1 VALUES (82,82,'How to use the DynaVox Usage Counts Feature','usages count, number, corner, white, box, button','<as-html>\r\n<table width=\"100%\" border=\"0\">\r\n <tr>\r\n <td width=\"3%\"> </td>\r\n <td width=\"97%\">\r\n <h3><font face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#000000\">How \r\n To</font><!-- #BeginEditable \"CS_troubleshoot_question\" --><font face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#000099\"><font color=\"#000000\">: \r\n Display or Hide the Usage Counts to find out how many times each button is being selected. </font></font><!-- #EndEditable --></h3>\r\n </td>\r\n </tr>\r\n</table>','<as-html>\r\n <table width=\"100%\" border=\"0\">\r\n <tr>\r\n <td width=\"3%\"> </td>\r\n \r\n<td width=\"97%\"><!-- #BeginEditable \"CS_troubleshoot_answer\" --> \r\n \r\n<p><font color=\"#000000\" face=\"Verdana, Arial, Helvetica, sans-serif\">1. Select \r\n the <i>On/Setup</i> button to access the DynaVox Setup Menu.<br>\r\n 2. Select <b>Button Features.</b><br>\r\n 3. Below the <b>OK</b> button is the <b>Usage Counts</b> button.<br>\r\n a. If it says \"Hidden\" then the Usage Counts will not be displayed.<br>\r\n b. If it says \"Displayed\" then the Usage Counts will be shown.<br>\r\n c. Select the <b>Usage Counts</b> Option Ring once and it will toggle \r\n to the alternative option.<br>\r\n 4. Once the correct setting has been chosen, select <b>OK</b> to leave the <i>Button \r\n Features</i> menu.<br>\r\n 5. Select <b>OK</b> out of the <i>Setup</i> menu and return to the communication \r\n page.</font></p>\r\n <p><font color=\"#000000\" face=\"Verdana, Arial, Helvetica, sans-serif\">For \r\n further information on <i>Usage Counts,</i> see the <i>Button Features \r\n Menu Entry</i> in the DynaVox/DynaMyte Reference Manual.</font></p>\r\n<!-- #EndEditable --></td>\r\n </tr>\r\n</table>',4,1,1,'2001-11-16 16:43:34','2002-11-25 12:09:43','2003-07-24 01:04:48',NULL,11,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,11,NULL,NULL,NULL);
+CREATE TABLE t2 ( access_id smallint(6) NOT NULL default '0', name varchar(20) binary default NULL, rank smallint(6) NOT NULL default '0', KEY t2$access_id (access_id) ) TYPE=MyISAM;
+INSERT INTO t2 VALUES (1,'Everyone',2),(2,'Help',3),(3,'Customer Support',1);
+SELECT f_acc.rank, a1.rank, a2.rank FROM t1 LEFT JOIN t1 f1 ON (f1.access_id=1 AND f1.faq_group_id = t1.faq_group_id) LEFT JOIN t2 a1 ON (a1.access_id = f1.access_id) LEFT JOIN t1 f2 ON (f2.access_id=3 AND f2.faq_group_id = t1.faq_group_id) LEFT JOIN t2 a2 ON (a2.access_id = f2.access_id), t2 f_acc WHERE LEAST(a1.rank,a2.rank) = f_acc.rank;
rank rank rank
2 2 NULL
DROP TABLE t1,t2;
diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result
index 20698852b98..df6f8fe3615 100644
--- a/mysql-test/r/grant.result
+++ b/mysql-test/r/grant.result
@@ -145,7 +145,7 @@ show grants for drop_user@localhost;
Grants for drop_user@localhost
GRANT ALL PRIVILEGES ON *.* TO 'drop_user'@'localhost' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON `test`.* TO 'drop_user'@'localhost' WITH GRANT OPTION
-GRANT SELECT (a) ON `test`.`t1` TO 'drop_user'@'localhost'
+GRANT USAGE ON `test`.`t1` TO 'drop_user'@'localhost'
revoke all privileges, grant from drop_user@localhost;
show grants for drop_user@localhost;
Grants for drop_user@localhost
diff --git a/mysql-test/r/loaddata.result b/mysql-test/r/loaddata.result
index 7d21ede0345..d738431e016 100644
--- a/mysql-test/r/loaddata.result
+++ b/mysql-test/r/loaddata.result
@@ -30,6 +30,8 @@ NULL 2003-03-03 2003-03-03 NULL
drop table t1;
create table t1 (a text, b text);
load data infile '../../std_data/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
+Warnings:
+Warning 1260 Record count is fewer than the column count at row 3
select concat('|',a,'|'), concat('|',b,'|') from t1;
concat('|',a,'|') concat('|',b,'|')
|Field A| |Field B|
diff --git a/mysql-test/r/lowercase_table.result b/mysql-test/r/lowercase_table.result
index dc5ae633ca5..9c6b212a4b6 100644
--- a/mysql-test/r/lowercase_table.result
+++ b/mysql-test/r/lowercase_table.result
@@ -13,7 +13,8 @@ SELECT T2.id from t1 as T2 LIMIT 1;
id
1
SELECT T2.id from t1 as t2 LIMIT 1;
-Unknown table 'T2' in field list
+id
+1
RENAME TABLE T1 TO T2;
ALTER TABLE T2 ADD new_col int not null;
ALTER TABLE T2 RENAME T3;
diff --git a/mysql-test/r/mix_innodb_myisam_binlog.result b/mysql-test/r/mix_innodb_myisam_binlog.result
index 8a3415a81d0..dd9876b4f90 100644
--- a/mysql-test/r/mix_innodb_myisam_binlog.result
+++ b/mysql-test/r/mix_innodb_myisam_binlog.result
@@ -8,10 +8,10 @@ insert into tm select * from ti;
commit;
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; BEGIN
-master-bin.001 119 Query 1 79 use test; insert into ti values(1)
-master-bin.001 178 Query 1 79 use test; insert into tm select * from ti
-master-bin.001 244 Query 1 244 use test; COMMIT
+master-bin.000001 79 Query 1 79 use ; BEGIN
+master-bin.000001 119 Query 1 79 use ; insert into ti values(1)
+master-bin.000001 178 Query 1 79 use ; insert into tm select * from ti
+master-bin.000001 244 Query 1 244 use ; COMMIT
delete from ti;
delete from tm;
reset master;
@@ -22,10 +22,10 @@ rollback;
Warning: Some non-transactional changed tables couldn't be rolled back
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; BEGIN
-master-bin.001 119 Query 1 79 use test; insert into ti values(2)
-master-bin.001 178 Query 1 79 use test; insert into tm select * from ti
-master-bin.001 244 Query 1 244 use test; ROLLBACK
+master-bin.000001 79 Query 1 79 use ; BEGIN
+master-bin.000001 119 Query 1 79 use ; insert into ti values(2)
+master-bin.000001 178 Query 1 79 use ; insert into tm select * from ti
+master-bin.000001 244 Query 1 244 use ; ROLLBACK
delete from ti;
delete from tm;
reset master;
@@ -39,13 +39,13 @@ Warning: Some non-transactional changed tables couldn't be rolled back
commit;
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; BEGIN
-master-bin.001 119 Query 1 79 use test; insert into ti values(3)
-master-bin.001 178 Query 1 79 use test; savepoint my_savepoint
-master-bin.001 235 Query 1 79 use test; insert into ti values(4)
-master-bin.001 294 Query 1 79 use test; insert into tm select * from ti
-master-bin.001 360 Query 1 79 use test; rollback to savepoint my_savepoint
-master-bin.001 429 Query 1 429 use test; COMMIT
+master-bin.000001 79 Query 1 79 use ; BEGIN
+master-bin.000001 119 Query 1 79 use ; insert into ti values(3)
+master-bin.000001 178 Query 1 79 use ; savepoint my_savepoint
+master-bin.000001 235 Query 1 79 use ; insert into ti values(4)
+master-bin.000001 294 Query 1 79 use ; insert into tm select * from ti
+master-bin.000001 360 Query 1 79 use ; rollback to savepoint my_savepoint
+master-bin.000001 429 Query 1 429 use ; COMMIT
delete from ti;
delete from tm;
reset master;
@@ -64,14 +64,14 @@ a
7
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; BEGIN
-master-bin.001 119 Query 1 79 use test; insert into ti values(5)
-master-bin.001 178 Query 1 79 use test; savepoint my_savepoint
-master-bin.001 235 Query 1 79 use test; insert into ti values(6)
-master-bin.001 294 Query 1 79 use test; insert into tm select * from ti
-master-bin.001 360 Query 1 79 use test; rollback to savepoint my_savepoint
-master-bin.001 429 Query 1 79 use test; insert into ti values(7)
-master-bin.001 488 Query 1 488 use test; COMMIT
+master-bin.000001 79 Query 1 79 use ; BEGIN
+master-bin.000001 119 Query 1 79 use ; insert into ti values(5)
+master-bin.000001 178 Query 1 79 use ; savepoint my_savepoint
+master-bin.000001 235 Query 1 79 use ; insert into ti values(6)
+master-bin.000001 294 Query 1 79 use ; insert into tm select * from ti
+master-bin.000001 360 Query 1 79 use ; rollback to savepoint my_savepoint
+master-bin.000001 429 Query 1 79 use ; insert into ti values(7)
+master-bin.000001 488 Query 1 488 use ; COMMIT
delete from ti;
delete from tm;
reset master;
@@ -86,10 +86,10 @@ get_lock("a",10)
1
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; BEGIN
-master-bin.001 119 Query 1 79 use test; insert into ti values(8)
-master-bin.001 178 Query 1 79 use test; insert into tm select * from ti
-master-bin.001 244 Query 1 244 use test; ROLLBACK
+master-bin.000001 79 Query 1 79 use ; BEGIN
+master-bin.000001 119 Query 1 79 use ; insert into ti values(8)
+master-bin.000001 178 Query 1 79 use ; insert into tm select * from ti
+master-bin.000001 244 Query 1 244 use ; ROLLBACK
delete from ti;
delete from tm;
reset master;
@@ -97,8 +97,8 @@ insert into ti values(9);
insert into tm select * from ti;
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; insert into ti values(9)
-master-bin.001 138 Query 1 138 use test; insert into tm select * from ti
+master-bin.000001 79 Query 1 79 use ; insert into ti values(9)
+master-bin.000001 138 Query 1 138 use ; insert into tm select * from ti
delete from ti;
delete from tm;
reset master;
@@ -107,17 +107,17 @@ begin;
insert into tm select * from ti;
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; insert into ti values(10)
-master-bin.001 139 Query 1 139 use test; insert into tm select * from ti
+master-bin.000001 79 Query 1 79 use ; insert into ti values(10)
+master-bin.000001 139 Query 1 139 use ; insert into tm select * from ti
insert into ti values(11);
commit;
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; insert into ti values(10)
-master-bin.001 139 Query 1 139 use test; insert into tm select * from ti
-master-bin.001 205 Query 1 205 use test; BEGIN
-master-bin.001 245 Query 1 205 use test; insert into ti values(11)
-master-bin.001 305 Query 1 305 use test; COMMIT
+master-bin.000001 79 Query 1 79 use ; insert into ti values(10)
+master-bin.000001 139 Query 1 139 use ; insert into tm select * from ti
+master-bin.000001 205 Query 1 205 use ; BEGIN
+master-bin.000001 245 Query 1 205 use ; insert into ti values(11)
+master-bin.000001 305 Query 1 305 use ; COMMIT
alter table tm type=INNODB;
delete from ti;
delete from tm;
@@ -128,10 +128,10 @@ insert into tm select * from ti;
commit;
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; BEGIN
-master-bin.001 119 Query 1 79 use test; insert into ti values(12)
-master-bin.001 179 Query 1 79 use test; insert into tm select * from ti
-master-bin.001 245 Query 1 245 use test; COMMIT
+master-bin.000001 79 Query 1 79 use ; BEGIN
+master-bin.000001 119 Query 1 79 use ; insert into ti values(12)
+master-bin.000001 179 Query 1 79 use ; insert into tm select * from ti
+master-bin.000001 245 Query 1 245 use ; COMMIT
delete from ti;
delete from tm;
reset master;
@@ -153,9 +153,9 @@ rollback to savepoint my_savepoint;
commit;
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; BEGIN
-master-bin.001 119 Query 1 79 use test; insert into ti values(14)
-master-bin.001 179 Query 1 179 use test; COMMIT
+master-bin.000001 79 Query 1 79 use ; BEGIN
+master-bin.000001 119 Query 1 79 use ; insert into ti values(14)
+master-bin.000001 179 Query 1 179 use ; COMMIT
delete from ti;
delete from tm;
reset master;
@@ -173,8 +173,8 @@ a
18
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.001 79 Query 1 79 use test; BEGIN
-master-bin.001 119 Query 1 79 use test; insert into ti values(16)
-master-bin.001 179 Query 1 79 use test; insert into ti values(18)
-master-bin.001 239 Query 1 239 use test; COMMIT
+master-bin.000001 79 Query 1 79 use ; BEGIN
+master-bin.000001 119 Query 1 79 use ; insert into ti values(16)
+master-bin.000001 179 Query 1 79 use ; insert into ti values(18)
+master-bin.000001 239 Query 1 239 use ; COMMIT
drop table ti,tm;
diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result
index 0cd35e63d91..4fa71dbaecc 100644
--- a/mysql-test/r/myisam.result
+++ b/mysql-test/r/myisam.result
@@ -290,6 +290,12 @@ update t1 set i1=0, i2=0, i3=0, i4=0, i5=0, i6=0, i7=0;
check table t1;
Table Op Msg_type Msg_text
test.t1 check status OK
+delete from t1 where i8=1;
+select i1,i2 from t1;
+i1 i2
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
drop table t1;
CREATE TABLE `t1` (
`post_id` mediumint(8) unsigned NOT NULL auto_increment,
diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result
index 86203fb6786..df84dd55d04 100644
--- a/mysql-test/r/range.result
+++ b/mysql-test/r/range.result
@@ -230,27 +230,27 @@ create table t1 (x int, y int, index(x), index(y));
insert into t1 (x) values (1),(2),(3),(4),(5),(6),(7),(8),(9);
update t1 set y=x;
explain select * from t1, t1 t2 where t1.y = 2 and t2.x between 7 and t1.y+0;
-table type possible_keys key key_len ref rows Extra
-t1 ref y y 5 const 1 Using where
-t2 range x x 5 NULL 4 Using where
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref y y 5 const 1 Using where
+1 SIMPLE t2 range x x 5 NULL 4 Using where
explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= 7 and t2.x <= t1.y+0;
-table type possible_keys key key_len ref rows Extra
-t1 ref y y 5 const 1 Using where
-t2 range x x 5 NULL 4 Using where
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref y y 5 const 1 Using where
+1 SIMPLE t2 range x x 5 NULL 4 Using where
explain select * from t1, t1 t2 where t1.y = 2 and t2.x between t1.y-1 and t1.y+1;
-table type possible_keys key key_len ref rows Extra
-t1 ref y y 5 const 1 Using where
-t2 ALL x NULL NULL NULL 9 Range checked for each record (index map: 1)
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref y y 5 const 1 Using where
+1 SIMPLE t2 ALL x NULL NULL NULL 9 Range checked for each record (index map: 1)
explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= t1.y-1 and t2.x <= t1.y+1;
-table type possible_keys key key_len ref rows Extra
-t1 ref y y 5 const 1 Using where
-t2 ALL x NULL NULL NULL 9 Range checked for each record (index map: 1)
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref y y 5 const 1 Using where
+1 SIMPLE t2 ALL x NULL NULL NULL 9 Range checked for each record (index map: 1)
explain select * from t1, t1 t2 where t1.y = 2 and t2.x between 0 and t1.y;
-table type possible_keys key key_len ref rows Extra
-t1 ref y y 5 const 1 Using where
-t2 ALL x NULL NULL NULL 9 Using where
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref y y 5 const 1 Using where
+1 SIMPLE t2 ALL x NULL NULL NULL 9 Using where
explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= 0 and t2.x <= t1.y;
-table type possible_keys key key_len ref rows Extra
-t1 ref y y 5 const 1 Using where
-t2 range x x 5 NULL 2 Using where
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref y y 5 const 1 Using where
+1 SIMPLE t2 range x x 5 NULL 2 Using where
drop table t1;
diff --git a/mysql-test/r/rpl_loaddata.result b/mysql-test/r/rpl_loaddata.result
index b8c0285e825..975ba1a9fe1 100644
--- a/mysql-test/r/rpl_loaddata.result
+++ b/mysql-test/r/rpl_loaddata.result
@@ -22,7 +22,7 @@ day id category name
2003-04-22 2416 a bbbbb
show master status;
File Position Binlog_do_db Binlog_ignore_db
-slave-bin.001 964
+slave-bin.000001 964
drop table t1;
drop table t2;
drop table t3;
diff --git a/mysql-test/r/rpl_loaddata_rule_m.result b/mysql-test/r/rpl_loaddata_rule_m.result
index 8d8ed749c71..c98b3fb358f 100644
--- a/mysql-test/r/rpl_loaddata_rule_m.result
+++ b/mysql-test/r/rpl_loaddata_rule_m.result
@@ -1,9 +1,9 @@
-slave stop;
+stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
-slave start;
+start slave;
reset master;
create database test2;
create table t1(a int, b int, unique(b));
diff --git a/mysql-test/r/rpl_loaddata_rule_s.result b/mysql-test/r/rpl_loaddata_rule_s.result
index a84368501a9..26893cb1e9e 100644
--- a/mysql-test/r/rpl_loaddata_rule_s.result
+++ b/mysql-test/r/rpl_loaddata_rule_s.result
@@ -1,9 +1,9 @@
-slave stop;
+stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
-slave start;
+start slave;
reset master;
create table t1(a int, b int, unique(b));
load data infile '../../std_data/rpl_loaddata.dat' into table test.t1;
diff --git a/mysql-test/r/rpl_log.result b/mysql-test/r/rpl_log.result
index 1583ac3038d..0c876d30ef4 100644
--- a/mysql-test/r/rpl_log.result
+++ b/mysql-test/r/rpl_log.result
@@ -12,7 +12,10 @@ create table t1(n int not null auto_increment primary key);
insert into t1 values (NULL);
drop table t1;
create table t1 (word char(20) not null);
-load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1 ignore 1 lines;
+select count(*) from t1;
+count(*)
+69
drop table t1;
show binlog events;
Log_name Pos Event_type Server_id Orig_log_pos Info
@@ -81,16 +84,16 @@ slave-bin.000001 200 Query 1 200 use `test`; insert into t1 values (NULL)
slave-bin.000001 263 Query 1 263 use `test`; drop table t1
slave-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null)
slave-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581
-slave-bin.000001 1065 Exec_load 1 1056 ;file_id=1
-slave-bin.000001 1088 Query 1 1079 use `test`; drop table t1
-slave-bin.000001 1136 Query 1 4 use `test`; create table t5 (a int)
-slave-bin.000001 1194 Query 1 62 use `test`; drop table t5
+slave-bin.000001 1065 Exec_load 1 1065 ;file_id=1
+slave-bin.000001 1088 Query 1 1088 use `test`; drop table t1
+slave-bin.000001 1136 Query 1 1136 use `test`; create table t5 (a int)
+slave-bin.000001 1194 Query 1 1194 use `test`; drop table t5
slave-bin.000001 1242 Rotate 2 1242 slave-bin.000002;pos=4
show binlog events in 'slave-bin.000002' from 4;
Log_name Pos Event_type Server_id Orig_log_pos Info
-slave-bin.000002 4 Query 1 110 use `test`; create table t1 (n int)
-slave-bin.000002 62 Query 1 168 use `test`; insert into t1 values (1)
-slave-bin.000002 122 Query 1 228 use `test`; drop table t1
+slave-bin.000002 4 Query 1 4 use `test`; create table t1 (n int)
+slave-bin.000002 62 Query 1 62 use `test`; insert into t1 values (1)
+slave-bin.000002 122 Query 1 122 use `test`; drop table t1
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
127.0.0.1 root MASTER_PORT 1 master-bin.000002 276 slave-relay-bin.000003 214 master-bin.000002 Yes Yes 0 0 276 214 No
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 888fe1b29f8..952ed566132 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -348,11 +348,7 @@ select found_rows();
found_rows()
4
(SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1) UNION SELECT * FROM t2 LIMIT 1;
-a
-1
-select found_rows();
-found_rows()
-4
+ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1 UNION all SELECT * FROM t2 LIMIT 2;
a
1
@@ -435,7 +431,7 @@ a
3
3
(SELECT * FROM t1) UNION all (SELECT SQL_CALC_FOUND_ROWS * FROM t2) LIMIT 1;
-Wrong usage/placement of 'SQL_CALC_FOUND_ROWS'
+ERROR 42000: Wrong usage/placement of 'SQL_CALC_FOUND_ROWS'
drop table t1,t2;
CREATE TABLE t1 ( id int(3) unsigned default '0') TYPE=MyISAM;
INSERT INTO t1 (id) VALUES("1");
diff --git a/mysql-test/t/lowercase_table.test b/mysql-test/t/lowercase_table.test
index 2e5cb5f89fc..28e45bde5c5 100644
--- a/mysql-test/t/lowercase_table.test
+++ b/mysql-test/t/lowercase_table.test
@@ -11,7 +11,7 @@ INSERT INTO T1 VALUES (1, 'a'), (2, 'b'), (3, 'c');
SELECT * FROM t1;
SELECT T1.id from T1 LIMIT 1;
SELECT T2.id from t1 as T2 LIMIT 1;
---error 1109
+# This gave an error in 4.0, but it's fixed in 4.1
SELECT T2.id from t1 as t2 LIMIT 1;
RENAME TABLE T1 TO T2;
ALTER TABLE T2 ADD new_col int not null;
diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test
index 55449dafa3a..541f2be65d5 100644
--- a/mysql-test/t/myisam.test
+++ b/mysql-test/t/myisam.test
@@ -299,7 +299,7 @@ update t1 set b=repeat('a',256);
update t1 set i1=0, i2=0, i3=0, i4=0, i5=0, i6=0, i7=0;
check table t1;
delete from t1 where i8=1;
-select * from t1;
+select i1,i2 from t1;
check table t1;
drop table t1;
diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test
index e7bda27d43e..dfb5a15bf40 100644
--- a/mysql-test/t/union.test
+++ b/mysql-test/t/union.test
@@ -212,8 +212,10 @@ select found_rows();
select found_rows();
(SELECT SQL_CALC_FOUND_ROWS * FROM t1) UNION all (SELECT * FROM t2 LIMIT 1);
select found_rows();
+# This used to work in 4.0 but not anymore in 4.1
+--error 1149
(SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1) UNION SELECT * FROM t2 LIMIT 1;
-select found_rows();
+#select found_rows();
# In these case found_rows() should work
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1 UNION all SELECT * FROM t2 LIMIT 2;
diff --git a/sql-bench/compare-results.sh b/sql-bench/compare-results.sh
index 9e3a8f2add8..e95bd23e6a3 100644
--- a/sql-bench/compare-results.sh
+++ b/sql-bench/compare-results.sh
@@ -93,7 +93,7 @@ foreach (@ARGV)
}
elsif (/Comments:\s+(.+)/i) {
$tot{$prog}{'comments'} = $1;
- } elsif (/^(\S+):\s*(estimated\s|)total\stime:\s+([\d.]+)\s+(wallclock\s|)secs/i)
+ } elsif (/^(\S+):.*(estimated\s|)total\stime:\s+([\d.]+)\s+(wallclock\s|)secs/i)
{
$tmp = $1; $tmp =~ s/://;
$tot{$prog}{$tmp} = [ $3, (length($2) ? "+" : "")];
diff --git a/sql/field.h b/sql/field.h
index 10d3e671867..fe5141e9d80 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -125,6 +125,13 @@ public:
{ return null_ptr ? (null_ptr[row_offset] & null_bit ? 1 : 0) : table->null_row; }
inline bool is_real_null(uint row_offset=0)
{ return null_ptr ? (null_ptr[row_offset] & null_bit ? 1 : 0) : 0; }
+ inline bool is_null_in_record(const uchar *record)
+ {
+ if (!null_ptr)
+ return 0;
+ return test(record[(uint) (null_ptr - (uchar*) table->record[0])] &
+ null_bit);
+ }
inline void set_null(int row_offset=0)
{ if (null_ptr) null_ptr[row_offset]|= null_bit; }
inline void set_notnull(int row_offset=0)
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc
index bcdb01da9ca..017151dfca0 100644
--- a/sql/ha_innodb.cc
+++ b/sql/ha_innodb.cc
@@ -1540,82 +1540,6 @@ ha_innobase::close(void)
DBUG_RETURN(0);
}
-/* The following accessor functions should really be inside MySQL code! */
-
-/******************************************************************
-Gets field offset for a field in a table. */
-inline
-uint
-get_field_offset(
-/*=============*/
- /* out: offset */
- TABLE* table, /* in: MySQL table object */
- Field* field) /* in: MySQL field object */
-{
- return((uint) (field->ptr - (char*) table->record[0]));
-}
-
-/******************************************************************
-Checks if a field in a record is SQL NULL. Uses the record format
-information in table to track the null bit in record. */
-inline
-uint
-field_in_record_is_null(
-/*====================*/
- /* out: 1 if NULL, 0 otherwise */
- TABLE* table, /* in: MySQL table object */
- Field* field, /* in: MySQL field object */
- char* record) /* in: a row in MySQL format */
-{
- int null_offset;
-
- if (!field->null_ptr) {
-
- return(0);
- }
-
- null_offset = (uint) ((char*) field->null_ptr
- - (char*) table->record[0]);
-
- if (record[null_offset] & field->null_bit) {
-
- return(1);
- }
-
- return(0);
-}
-
-/******************************************************************
-Sets a field in a record to SQL NULL. Uses the record format
-information in table to track the null bit in record. */
-inline
-void
-set_field_in_record_to_null(
-/*========================*/
- TABLE* table, /* in: MySQL table object */
- Field* field, /* in: MySQL field object */
- char* record) /* in: a row in MySQL format */
-{
- int null_offset;
-
- null_offset = (uint) ((char*) field->null_ptr
- - (char*) table->record[0]);
-
- record[null_offset] = record[null_offset] | field->null_bit;
-}
-
-/******************************************************************
-Resets SQL NULL bits in a record to zero. */
-inline
-void
-reset_null_bits(
-/*============*/
- TABLE* table, /* in: MySQL table object */
- char* record) /* in: a row in MySQL format */
-{
- bzero(record, table->null_bytes);
-}
-
extern "C" {
/*****************************************************************
InnoDB uses this function is to compare two data fields for which the
@@ -1825,11 +1749,10 @@ ha_innobase::store_key_val_for_row(
blob_data = row_mysql_read_blob_ref(&blob_len,
(byte*) (record
- + (ulint)get_field_offset(table, field)),
+ + (ulint) field->offset()),
(ulint) field->pack_length());
- ut_a(get_field_offset(table, field)
- == key_part->offset);
+ ut_a(field->offset() == key_part->offset);
if (blob_len > key_part->length) {
blob_len = key_part->length;
}
@@ -2009,9 +1932,7 @@ build_template(
templ->mysql_null_bit_mask = 0;
}
- templ->mysql_col_offset = (ulint)
- get_field_offset(table, field);
-
+ templ->mysql_col_offset = (ulint) field->offset();
templ->mysql_col_len = (ulint) field->pack_length();
templ->type = get_innobase_type_from_mysql_type(field);
templ->is_unsigned = (ulint) (field->flags & UNSIGNED_FLAG);
@@ -2348,8 +2269,8 @@ calc_row_difference(
/* goto skip_field;
}*/
- o_ptr = (byte*) old_row + get_field_offset(table, field);
- n_ptr = (byte*) new_row + get_field_offset(table, field);
+ o_ptr = (byte*) old_row + field->offset();
+ n_ptr = (byte*) new_row + field->offset();
o_len = field->pack_length();
n_len = field->pack_length();
@@ -2374,13 +2295,11 @@ calc_row_difference(
}
if (field->null_ptr) {
- if (field_in_record_is_null(table, field,
- (char*) old_row)) {
+ if (field->is_null_in_record((uchar*) old_row)) {
o_len = UNIV_SQL_NULL;
}
- if (field_in_record_is_null(table, field,
- (char*) new_row)) {
+ if (field->is_null_in_record((uchar*) new_row)) {
n_len = UNIV_SQL_NULL;
}
}
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index 09b92d7df40..c36b8dcc9d8 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -1459,7 +1459,7 @@ void Item_func_in::fix_length_and_dec()
DBUG_ASSERT(0);
return;
}
- if (array && !(current_thd->fatal_error)) // If not EOM
+ if (array && !(current_thd->is_fatal_error)) // If not EOM
{
uint j=0;
for (uint i=1 ; i < arg_count ; i++)
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 48c2000d11b..91349feec39 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -913,18 +913,6 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli)
mysql_parse(thd, thd->query, q_len);
/*
- Set a flag if we are inside an transaction so that we can restart
- the transaction from the start if we are killed
-
- This will only be done if we are supporting transactional tables
- in the slave.
- */
- if (!strcmp(thd->query,"BEGIN"))
- rli->inside_transaction= opt_using_transactions;
- else if (!(strcmp(thd->query,"COMMIT") && strcmp(thd->query,"ROLLBACK")))
- rli->inside_transaction=0;
-
- /*
If we expected a non-zero error code, and we don't get the same error
code, and none of them should be ignored.
*/
@@ -1771,7 +1759,7 @@ Fatal error running LOAD DATA INFILE on table '%s'. Default database: '%s'",
void Rotate_log_event::pack_info(Protocol *protocol)
{
char buf1[256], buf[22];
- String tmp(buf1, sizeof(buf1));
+ String tmp(buf1, sizeof(buf1), log_cs);
tmp.length(0);
tmp.append(new_log_ident, ident_len);
tmp.append(";pos=");
@@ -1896,16 +1884,19 @@ int Rotate_log_event::exec_event(struct st_relay_log_info* rli)
pthread_mutex_lock(&rli->data_lock);
+#ifdef TO_BE_CHECKED_BY_GUILHEM
if (rli->inside_transaction)
{
slave_print_error(rli, 0,
- "there is an unfinished transaction in the relay log \
-(could find neither COMMIT nor ROLLBACK in the relay log); it could be that \
-the master died while writing the transaction to its binary log. Now the slave \
-is rolling back the transaction.");
+ "\
+There is an unfinished transaction in the relay log (could find neither \
+COMMIT nor ROLLBACK in the relay log); It could be that the master died while \
+writing the transaction to its binary log. Now the slave is rolling back the \
+transaction.");
pthread_mutex_unlock(&rli->data_lock);
DBUG_RETURN(1);
}
+#endif
memcpy(log_name, new_log_ident, ident_len+1);
rli->group_master_log_pos = pos;
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 947c930b2f4..5a883ce8b2c 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -618,6 +618,7 @@ int SQL_SELECT::test_quick_select(key_map keys_to_use, table_map prev_tables,
SEL_TREE *tree;
KEY_PART *key_parts;
PARAM param;
+ THD *thd= current_thd;
/* set up parameter that is passed to all functions */
param.baseflag=basflag;
@@ -628,13 +629,13 @@ int SQL_SELECT::test_quick_select(key_map keys_to_use, table_map prev_tables,
param.keys=0;
param.mem_root= &alloc;
- current_thd->no_errors=1; // Don't warn about NULL
+ thd->no_errors=1; // Don't warn about NULL
init_sql_alloc(&alloc,2048,0);
if (!(param.key_parts = (KEY_PART*) alloc_root(&alloc,
sizeof(KEY_PART)*
head->key_parts)))
{
- current_thd->no_errors=0;
+ thd->no_errors=0;
free_root(&alloc,MYF(0)); // Return memory & allocator
DBUG_RETURN(0); // Can't use range
}
@@ -736,7 +737,7 @@ int SQL_SELECT::test_quick_select(key_map keys_to_use, table_map prev_tables,
}
free_root(&alloc,MYF(0)); // Return memory & allocator
my_pthread_setspecific_ptr(THR_MALLOC,old_root);
- current_thd->no_errors=0;
+ thd->no_errors=0;
}
DBUG_EXECUTE("info",print_quick(quick,needed_reg););
/*
@@ -764,7 +765,7 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond)
while ((item=li++))
{
SEL_TREE *new_tree=get_mm_tree(param,item);
- if(current_thd->fatal_error)
+ if (current_thd->is_fatal_error)
DBUG_RETURN(0); // out of memory
tree=tree_and(param,tree,new_tree);
if (tree && tree->type == SEL_TREE::IMPOSSIBLE)
diff --git a/sql/slave.cc b/sql/slave.cc
index 531b7897d83..0c8db2fe6cc 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -2963,7 +2963,6 @@ the slave SQL thread with \"SLAVE START\". We stopped at log \
restarts replication from a non-transactional statement (with CHANGE
MASTER).
*/
- rli->inside_transaction= 0;
/* Wake up master_pos_wait() */
pthread_mutex_unlock(&rli->data_lock);
DBUG_PRINT("info",("Signaling possibly waiting master_pos_wait() functions"));
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 60353d23c16..6f588427ede 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -532,36 +532,13 @@ static int acl_compare(ACL_ACCESS *a,ACL_ACCESS *b)
/*
- Prepare crypted scramble to be sent to the client
-*/
-
-void prepare_scramble(THD *thd, ACL_USER *acl_user,char* prepared_scramble)
-{
- /* Binary password format to be used for generation*/
- char bin_password[SCRAMBLE41_LENGTH];
- /* Generate new long scramble for the thread */
- create_random_string(SCRAMBLE41_LENGTH,&thd->rand,thd->scramble);
- thd->scramble[SCRAMBLE41_LENGTH]=0;
- /* Get binary form, First 4 bytes of prepared scramble is salt */
- get_hash_and_password(acl_user->salt,acl_user->pversion,prepared_scramble,
- (unsigned char*) bin_password);
- /* Store "*" as identifier for old passwords */
- if (!acl_user->pversion)
- prepared_scramble[0]='*';
- /* Finally encrypt password to get prepared scramble */
- password_crypt(thd->scramble, prepared_scramble+4, bin_password,
- SCRAMBLE41_LENGTH);
-}
-
+ Seek ACL entry for a user, check password, SSL cypher, and if
+ everything is OK, update THD user data and USER_RESOURCES struct.
-/*
- Seek ACL entry for a user, check password, SSL cypher, and if
- everything is OK, update THD user data and USER_RESOURCES struct.
-
- IMPLEMENTATION
- This function does not check if the user has any sensible privileges:
- only user's existence and validity is checked.
- Note, that entire operation is protected by acl_cache_lock.
+ IMPLEMENTATION
+ This function does not check if the user has any sensible privileges:
+ only user's existence and validity is checked.
+ Note, that entire operation is protected by acl_cache_lock.
SYNOPSIS
acl_getroot()
@@ -578,7 +555,7 @@ void prepare_scramble(THD *thd, ACL_USER *acl_user,char* prepared_scramble)
SCRAMBLE_LENGTH_323, SCRAMBLE_LENGTH
'thd' and 'mqh' are updated on success; other params are IN.
- RETURN VALUE
+ RETURN VALUE
0 success: thd->priv_user, thd->priv_host, thd->master_access, mqh are
updated
1 user not found or authentification failure
@@ -616,29 +593,29 @@ int acl_getroot(THD *thd, USER_RESOURCES *mqh,
for (uint i=0 ; i < acl_users.elements ; i++)
{
- ACL_USER *acl_user= dynamic_element(&acl_users,i,ACL_USER*);
- if (!acl_user->user || !strcmp(thd->user, acl_user->user))
+ ACL_USER *acl_user_tmp= dynamic_element(&acl_users,i,ACL_USER*);
+ if (!acl_user_tmp->user || !strcmp(thd->user, acl_user_tmp->user))
{
- if (compare_hostname(&acl_user->host, thd->host, thd->ip))
+ if (compare_hostname(&acl_user_tmp->host, thd->host, thd->ip))
{
/* check password: it should be empty or valid */
- if (passwd_len == acl_user->salt_len)
+ if (passwd_len == acl_user_tmp->salt_len)
{
- if (acl_user->salt_len == 0 ||
- acl_user->salt_len == SCRAMBLE_LENGTH &&
- check_scramble(passwd, thd->scramble, acl_user->salt) == 0 ||
+ if (acl_user_tmp->salt_len == 0 ||
+ acl_user_tmp->salt_len == SCRAMBLE_LENGTH &&
+ check_scramble(passwd, thd->scramble, acl_user_tmp->salt) == 0 ||
check_scramble_323(passwd, thd->scramble,
- (ulong *) acl_user->salt) == 0)
+ (ulong *) acl_user_tmp->salt) == 0)
{
- acl_user= acl_user;
+ acl_user= acl_user_tmp;
res= 0;
}
}
else if (passwd_len == SCRAMBLE_LENGTH &&
- acl_user->salt_len == SCRAMBLE_LENGTH_323)
+ acl_user_tmp->salt_len == SCRAMBLE_LENGTH_323)
res= -1;
else if (passwd_len == SCRAMBLE_LENGTH_323 &&
- acl_user->salt_len == SCRAMBLE_LENGTH)
+ acl_user_tmp->salt_len == SCRAMBLE_LENGTH)
res= 2;
/* linear search complete: */
break;
@@ -2472,7 +2449,7 @@ int mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
{
my_printf_error(ER_WRONG_USAGE, ER(ER_WRONG_USAGE), MYF(0),
"DB GRANT","GLOBAL PRIVILEGES");
- result= 1;
+ result= -1;
}
}
}
@@ -3113,7 +3090,7 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user)
protocol->store(global.ptr(),global.length(),global.charset());
if (protocol->write())
{
- error=-1;
+ error= -1;
goto end;
}
}
@@ -3171,7 +3148,7 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user)
protocol->store(db.ptr(),db.length(),db.charset());
if (protocol->write())
{
- error=-1;
+ error= -1;
goto end;
}
}
@@ -3421,7 +3398,7 @@ int mysql_drop_user(THD *thd, List <LEX_USER> &list)
{
if (!(acl_user= check_acl_user(user_name, &counter)))
{
- sql_print_error("DROP USER: Can't drop user: '%s'@'%s'",
+ sql_print_error("DROP USER: Can't drop user: '%s'@'%s'; No such user",
user_name->user.str,
user_name->host.str);
result= -1;
@@ -3429,7 +3406,7 @@ int mysql_drop_user(THD *thd, List <LEX_USER> &list)
}
if ((acl_user->access & ~0))
{
- sql_print_error("DROP USER: Can't drop user: '%s'@'%s'",
+ sql_print_error("DROP USER: Can't drop user: '%s'@'%s'; Global privileges exists",
user_name->user.str,
user_name->host.str);
result= -1;
@@ -3452,7 +3429,7 @@ int mysql_drop_user(THD *thd, List <LEX_USER> &list)
}
if (counter != acl_dbs.elements)
{
- sql_print_error("DROP USER: Can't drop user: '%s'@'%s'",
+ sql_print_error("DROP USER: Can't drop user: '%s'@'%s'; Database privileges exists",
user_name->user.str,
user_name->host.str);
result= -1;
@@ -3475,7 +3452,7 @@ int mysql_drop_user(THD *thd, List <LEX_USER> &list)
}
if (counter != column_priv_hash.records)
{
- sql_print_error("DROP USER: Can't drop user: '%s'@'%s'",
+ sql_print_error("DROP USER: Can't drop user: '%s'@'%s'; Table privileges exists",
user_name->user.str,
user_name->host.str);
result= -1;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 080e25cc7eb..eac4007d9fc 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -1414,6 +1414,7 @@ JOIN::exec()
curr_join->group_list : curr_join->order,
curr_join->select_limit, unit->select_limit_cnt))
DBUG_VOID_RETURN;
+ }
}
curr_join->having= curr_join->tmp_having;
thd->proc_info="Sending data";
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 0e1ad17c252..685d00db391 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1035,7 +1035,7 @@ static void append_directory(THD *thd, String *packet, const char *dir_type,
const char *filename)
{
uint length;
- if (filename && !(thd->sql_mode & MODE_NO_DIR_IN_CREATE))
+ if (filename && !(thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE))
{
length= dirname_length(filename);
packet->append(' ');
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 0a2821e02e3..af1cb634ed7 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -916,7 +916,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
thd->proc_info="creating table";
- if (thd->sql_mode & MODE_NO_DIR_IN_CREATE)
+ if (thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE)
create_info->data_file_name= create_info->index_file_name= 0;
create_info->table_options=db_options;
@@ -2597,7 +2597,8 @@ copy_data_between_tables(TABLE *from,TABLE *to,
DBUG_RETURN(error > 0 ? -1 : 0);
}
-int mysql_checksum_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT *check_opt)
+
+int mysql_checksum_table(THD *thd, TABLE_LIST *tables, HA_CHECK_OPT *check_opt)
{
TABLE_LIST *table;
List<Item> field_list;
@@ -2612,24 +2613,23 @@ int mysql_checksum_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT *check_opt)
if (protocol->send_fields(&field_list, 1))
DBUG_RETURN(-1);
- for (table = tables; table; table = table->next)
+ for (table= tables; table; table= table->next)
{
char table_name[NAME_LEN*2+2];
- char* db = (table->db) ? table->db : thd->db;
- bool fatal_error=0;
+ bool fatal_error= 0;
TABLE *t;
- strxmov(table_name,db ? db : "",".",table->real_name,NullS);
- t=table->table = open_ltable(thd, table, TL_READ_NO_INSERT);
-#ifdef EMBEDDED_LIBRARY
- thd->net.last_errno= 0; // these errors shouldn't get client
-#endif
+ strxmov(table_name, table->db ,".", table->real_name, NullS);
+
+ t= table->table= open_ltable(thd, table, TL_READ_NO_INSERT);
+ thd->clear_error(); // these errors shouldn't get client
protocol->prepare_for_resend();
protocol->store(table_name, system_charset_info);
if (!t)
{
+ /* Table didn't exist */
protocol->store_null();
thd->net.last_error[0]=0;
}
@@ -2641,45 +2641,42 @@ int mysql_checksum_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT *check_opt)
!(check_opt->flags & T_EXTEND))
protocol->store((ulonglong)t->file->checksum());
else if (!(t->file->table_flags() & HA_HAS_CHECKSUM) &&
- check_opt->flags & T_QUICK)
+ (check_opt->flags & T_QUICK))
protocol->store_null();
else
{
/* calculating table's checksum */
- ha_checksum crc=0;
+ ha_checksum crc= 0;
if (t->file->rnd_init(1))
protocol->store_null();
else
{
while (!t->file->rnd_next(t->record[0]))
{
- ha_checksum row_crc=0;
+ ha_checksum row_crc= 0;
if (t->record[0] != t->field[0]->ptr)
- row_crc=my_checksum(row_crc, t->record[0],
- t->field[0]->ptr - t->record[0]);
+ row_crc= my_checksum(row_crc, t->record[0],
+ t->field[0]->ptr - t->record[0]);
- for (uint i=0; i < t->fields; i++ )
+ for (uint i= 0; i < t->fields; i++ )
{
- Field *f=t->field[i];
+ Field *f= t->field[i];
if (f->type() == FIELD_TYPE_BLOB)
{
String tmp;
f->val_str(&tmp,&tmp);
- row_crc=my_checksum(row_crc, tmp.ptr(), tmp.length());
+ row_crc= my_checksum(row_crc, tmp.ptr(), tmp.length());
}
else
- row_crc=my_checksum(row_crc, f->ptr, f->pack_length());
+ row_crc= my_checksum(row_crc, f->ptr, f->pack_length());
}
- crc+=row_crc;
+ crc+= row_crc;
}
protocol->store((ulonglong)crc);
}
}
-#ifdef EMBEDDED_LIBRARY
- thd->net.last_errno= 0; // these errors shouldn't get client
-#endif
-
+ thd->clear_error();
close_thread_tables(thd);
table->table=0; // For query cache
}
@@ -2689,6 +2686,7 @@ int mysql_checksum_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT *check_opt)
send_eof(thd);
DBUG_RETURN(0);
+
err:
close_thread_tables(thd); // Shouldn't be needed
if (table)
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 7146630d132..381311b4975 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -262,23 +262,8 @@ int st_select_lex_unit::exec()
res= sl->join->reinit();
else
{
- /* Don't use offset for the last union if there is no braces */
- if (sl != lex_sl)
- {
- offset_limit_cnt= sl->offset_limit;
- select_limit_cnt= sl->select_limit+sl->offset_limit;
- }
- else
- {
- offset_limit_cnt= 0;
- /*
- We can't use LIMIT at this stage if we are using ORDER BY for the
- whole query
- */
- select_limit_cnt= HA_POS_ERROR;
- if (! sl->order_list.first)
- select_limit_cnt= sl->select_limit+sl->offset_limit;
- }
+ offset_limit_cnt= sl->offset_limit;
+ select_limit_cnt= sl->select_limit+sl->offset_limit;
if (select_limit_cnt < sl->select_limit)
select_limit_cnt= HA_POS_ERROR; // no limit
@@ -297,10 +282,10 @@ int st_select_lex_unit::exec()
sl->options|= found_rows_for_union;
}
- /*
- As far as union share table space we should reassign table map,
- which can be spoiled by 'prepare' of JOIN of other UNION parts
- if it use same tables
+ /*
+ As far as union share table space we should reassign table map,
+ which can be spoiled by 'prepare' of JOIN of other UNION parts
+ if it use same tables
*/
uint tablenr=0;
for (TABLE_LIST *table_list= (TABLE_LIST*) sl->table_list.first;
diff --git a/tests/client_test.c b/tests/client_test.c
index 46a272f2acb..2cbea7e27bc 100644
--- a/tests/client_test.c
+++ b/tests/client_test.c
@@ -412,7 +412,7 @@ uint my_process_stmt_result(MYSQL_STMT *stmt)
my_bool is_null[MAX_RES_FIELDS];
int rc, i;
- if (!(result= mysql_prepare_result(stmt))) /* No meta info */
+ if (!(result= mysql_get_metadata(stmt))) /* No meta info */
{
while (!mysql_fetch(stmt))
row_count++;
@@ -1017,7 +1017,7 @@ static void test_prepare_field_result()
verify_param_count(stmt,1);
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
my_print_result_metadata(result);
@@ -1765,7 +1765,6 @@ static void test_bug1115()
MYSQL_BIND bind[1];
ulong length[1];
char szData[11];
- int nData=1;
myheader("test_bug1115");
@@ -3728,7 +3727,7 @@ static void test_prepare_resultset()
verify_param_count(stmt,0);
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
my_print_result_metadata(result);
mysql_stmt_close(stmt);
@@ -5926,7 +5925,7 @@ static void test_field_misc()
rc = mysql_execute(stmt);
mystmt(stmt,rc);
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
myassert(1 == my_process_stmt_result(stmt));
@@ -5967,7 +5966,7 @@ static void test_field_misc()
stmt = mysql_prepare(mysql, "SELECT @@table_type", 30);
mystmt_init(stmt);
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
rc = mysql_execute(stmt);
@@ -5987,7 +5986,7 @@ static void test_field_misc()
stmt = mysql_prepare(mysql, "SELECT @@max_error_count", 30);
mystmt_init(stmt);
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
rc = mysql_execute(stmt);
@@ -6007,7 +6006,7 @@ static void test_field_misc()
stmt = mysql_prepare(mysql, "SELECT @@max_allowed_packet", 30);
mystmt_init(stmt);
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
rc = mysql_execute(stmt);
@@ -6027,7 +6026,7 @@ static void test_field_misc()
stmt = mysql_prepare(mysql, "SELECT @@sql_warnings", 30);
mystmt_init(stmt);
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
rc = mysql_execute(stmt);
@@ -6418,7 +6417,7 @@ static void test_explain_bug()
myassert( 2 == my_process_stmt_result(stmt));
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
fprintf(stdout, "\n total fields in the result: %d",
@@ -6454,7 +6453,7 @@ static void test_explain_bug()
myassert( 1 == my_process_stmt_result(stmt));
- result = mysql_prepare_result(stmt);
+ result = mysql_get_metadata(stmt);
mytest(result);
fprintf(stdout, "\n total fields in the result: %d",
@@ -7255,7 +7254,7 @@ static void test_mem_overun()
rc = mysql_execute(stmt);
mystmt(stmt,rc);
- field_res = mysql_prepare_result(stmt);
+ field_res = mysql_get_metadata(stmt);
mytest(field_res);
fprintf(stdout,"\n total fields : %d", mysql_num_fields(field_res));
@@ -7611,7 +7610,7 @@ static void test_ts()
stmt = mysql_prepare(mysql,"SELECT * FROM test_ts",50);
mystmt_init(stmt);
- prep_res = mysql_prepare_result(stmt);
+ prep_res = mysql_get_metadata(stmt);
mytest(prep_res);
rc = mysql_execute(stmt);