Manual merge of mysql-5.0-bugteam -> mysql-5.1-bugteam
Note: NULL merge of sql/sql_yacc.yy, the fix for bug#38296 will be provided separately for 5.1
This commit is contained in:
commit
385b4bf7ff
@ -50,7 +50,8 @@ class Field
|
|||||||
Field(const Item &); /* Prevent use of these */
|
Field(const Item &); /* Prevent use of these */
|
||||||
void operator=(Field &);
|
void operator=(Field &);
|
||||||
public:
|
public:
|
||||||
static void *operator new(size_t size) {return sql_alloc(size); }
|
static void *operator new(size_t size) throw ()
|
||||||
|
{ return sql_alloc(size); }
|
||||||
static void operator delete(void *ptr_arg, size_t size) { TRASH(ptr_arg, size); }
|
static void operator delete(void *ptr_arg, size_t size) { TRASH(ptr_arg, size); }
|
||||||
|
|
||||||
uchar *ptr; // Position to field in record
|
uchar *ptr; // Position to field in record
|
||||||
|
@ -467,9 +467,9 @@ class Item {
|
|||||||
Item(const Item &); /* Prevent use of these */
|
Item(const Item &); /* Prevent use of these */
|
||||||
void operator=(Item &);
|
void operator=(Item &);
|
||||||
public:
|
public:
|
||||||
static void *operator new(size_t size)
|
static void *operator new(size_t size) throw ()
|
||||||
{ return sql_alloc(size); }
|
{ return sql_alloc(size); }
|
||||||
static void *operator new(size_t size, MEM_ROOT *mem_root)
|
static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
|
||||||
{ return alloc_root(mem_root, size); }
|
{ return alloc_root(mem_root, size); }
|
||||||
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
|
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
|
||||||
static void operator delete(void *ptr, MEM_ROOT *mem_root) {}
|
static void operator delete(void *ptr, MEM_ROOT *mem_root) {}
|
||||||
|
@ -475,7 +475,7 @@ sp_head::operator new(size_t size) throw()
|
|||||||
init_sql_alloc(&own_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC);
|
init_sql_alloc(&own_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC);
|
||||||
sp= (sp_head *) alloc_root(&own_root, size);
|
sp= (sp_head *) alloc_root(&own_root, size);
|
||||||
if (sp == NULL)
|
if (sp == NULL)
|
||||||
return NULL;
|
DBUG_RETURN(NULL);
|
||||||
sp->main_mem_root= own_root;
|
sp->main_mem_root= own_root;
|
||||||
DBUG_PRINT("info", ("mem_root 0x%lx", (ulong) &sp->mem_root));
|
DBUG_PRINT("info", ("mem_root 0x%lx", (ulong) &sp->mem_root));
|
||||||
DBUG_RETURN(sp);
|
DBUG_RETURN(sp);
|
||||||
|
@ -155,6 +155,7 @@ int mysql_open_cursor(THD *thd, uint flags, select_result *result,
|
|||||||
if (! (sensitive_cursor= new (thd->mem_root) Sensitive_cursor(thd, result)))
|
if (! (sensitive_cursor= new (thd->mem_root) Sensitive_cursor(thd, result)))
|
||||||
{
|
{
|
||||||
delete result_materialize;
|
delete result_materialize;
|
||||||
|
result_materialize= NULL;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,6 +213,7 @@ int mysql_open_cursor(THD *thd, uint flags, select_result *result,
|
|||||||
if ((rc= materialized_cursor->open(0)))
|
if ((rc= materialized_cursor->open(0)))
|
||||||
{
|
{
|
||||||
delete materialized_cursor;
|
delete materialized_cursor;
|
||||||
|
materialized_cursor= NULL;
|
||||||
goto err_open;
|
goto err_open;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,11 +417,11 @@ public:
|
|||||||
bool no_table_names_allowed; /* used for global order by */
|
bool no_table_names_allowed; /* used for global order by */
|
||||||
bool no_error; /* suppress error message (convert it to warnings) */
|
bool no_error; /* suppress error message (convert it to warnings) */
|
||||||
|
|
||||||
static void *operator new(size_t size)
|
static void *operator new(size_t size) throw ()
|
||||||
{
|
{
|
||||||
return sql_alloc(size);
|
return sql_alloc(size);
|
||||||
}
|
}
|
||||||
static void *operator new(size_t size, MEM_ROOT *mem_root)
|
static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
|
||||||
{ return (void*) alloc_root(mem_root, (uint) size); }
|
{ return (void*) alloc_root(mem_root, (uint) size); }
|
||||||
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
|
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
|
||||||
static void operator delete(void *ptr, MEM_ROOT *mem_root) {}
|
static void operator delete(void *ptr, MEM_ROOT *mem_root) {}
|
||||||
|
@ -29,7 +29,7 @@ public:
|
|||||||
{
|
{
|
||||||
return sql_alloc(size);
|
return sql_alloc(size);
|
||||||
}
|
}
|
||||||
static void *operator new[](size_t size)
|
static void *operator new[](size_t size) throw ()
|
||||||
{
|
{
|
||||||
return sql_alloc(size);
|
return sql_alloc(size);
|
||||||
}
|
}
|
||||||
@ -450,7 +450,7 @@ public:
|
|||||||
struct ilink
|
struct ilink
|
||||||
{
|
{
|
||||||
struct ilink **prev,*next;
|
struct ilink **prev,*next;
|
||||||
static void *operator new(size_t size)
|
static void *operator new(size_t size) throw ()
|
||||||
{
|
{
|
||||||
return (void*)my_malloc((uint)size, MYF(MY_WME | MY_FAE));
|
return (void*)my_malloc((uint)size, MYF(MY_WME | MY_FAE));
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ public:
|
|||||||
Alloced_length=str.Alloced_length; alloced=0;
|
Alloced_length=str.Alloced_length; alloced=0;
|
||||||
str_charset=str.str_charset;
|
str_charset=str.str_charset;
|
||||||
}
|
}
|
||||||
static void *operator new(size_t size, MEM_ROOT *mem_root)
|
static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
|
||||||
{ return (void*) alloc_root(mem_root, (uint) size); }
|
{ return (void*) alloc_root(mem_root, (uint) size); }
|
||||||
static void operator delete(void *ptr_arg,size_t size)
|
static void operator delete(void *ptr_arg,size_t size)
|
||||||
{ TRASH(ptr_arg, size); }
|
{ TRASH(ptr_arg, size); }
|
||||||
|
@ -17594,6 +17594,33 @@ static void test_wl4166_2()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Bug#38486 Crash when using cursor protocol
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void test_bug38486(void)
|
||||||
|
{
|
||||||
|
myheader("test_bug38486");
|
||||||
|
|
||||||
|
MYSQL_STMT *stmt;
|
||||||
|
stmt= mysql_stmt_init(mysql);
|
||||||
|
unsigned long type= CURSOR_TYPE_READ_ONLY;
|
||||||
|
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*)&type);
|
||||||
|
const char *sql= "CREATE TABLE t1 (a INT)";
|
||||||
|
mysql_stmt_prepare(stmt,sql,strlen(sql));
|
||||||
|
|
||||||
|
mysql_stmt_execute(stmt);
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
|
||||||
|
stmt= mysql_stmt_init(mysql);
|
||||||
|
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*)&type);
|
||||||
|
const char *sql2= "INSERT INTO t1 VALUES (1)";
|
||||||
|
mysql_stmt_prepare(stmt,sql2,strlen(sql2));
|
||||||
|
mysql_stmt_execute(stmt);
|
||||||
|
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read and parse arguments and MySQL options from my.cnf
|
Read and parse arguments and MySQL options from my.cnf
|
||||||
*/
|
*/
|
||||||
@ -17902,6 +17929,7 @@ static struct my_tests_st my_tests[]= {
|
|||||||
{ "test_bug28386", test_bug28386 },
|
{ "test_bug28386", test_bug28386 },
|
||||||
{ "test_wl4166_1", test_wl4166_1 },
|
{ "test_wl4166_1", test_wl4166_1 },
|
||||||
{ "test_wl4166_2", test_wl4166_2 },
|
{ "test_wl4166_2", test_wl4166_2 },
|
||||||
|
{ "test_bug38486", test_bug38486 },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user