summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/item_func.cc38
-rw-r--r--sql/item_func.h5
2 files changed, 20 insertions, 23 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index abcdc1d2aab..680f3608d0d 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -4368,33 +4368,19 @@ longlong Item_func_row_count::val_int()
Item_func_sp::Item_func_sp(sp_name *name)
:Item_func(), m_name(name), m_sp(NULL)
{
- char *empty_name= (char *) "";
maybe_null= 1;
m_name->init_qname(current_thd);
- bzero(&dummy_table, sizeof(dummy_table));
- dummy_table.share.table_cache_key = empty_name;
- dummy_table.share.table_name = empty_name;
- dummy_table.table.alias = empty_name;
- dummy_table.share.table_name = empty_name;
- dummy_table.table.maybe_null = maybe_null;
- dummy_table.table.in_use= current_thd;
- dummy_table.table.s = &dummy_table.share;
+ dummy_table= (TABLE *)sql_alloc(sizeof(TABLE));
+ bzero(dummy_table, sizeof(TABLE));
}
Item_func_sp::Item_func_sp(sp_name *name, List<Item> &list)
:Item_func(list), m_name(name), m_sp(NULL)
{
- char *empty_name= (char *) "";
maybe_null= 1;
m_name->init_qname(current_thd);
- bzero(&dummy_table, sizeof(dummy_table));
- dummy_table.share.table_cache_key = empty_name;
- dummy_table.share.table_name = empty_name;
- dummy_table.table.alias = empty_name;
- dummy_table.share.table_name = empty_name;
- dummy_table.table.maybe_null = maybe_null;
- dummy_table.table.in_use= current_thd;
- dummy_table.table.s = &dummy_table.share;
+ dummy_table= (TABLE *)sql_alloc(sizeof(TABLE));
+ bzero(dummy_table, sizeof(TABLE));
}
const char *
@@ -4426,7 +4412,21 @@ Item_func_sp::sp_result_field(void) const
THD *thd= current_thd;
DBUG_ENTER("Item_func_sp::sp_result_field");
if (m_sp)
- field= m_sp->make_field(max_length, name, &dummy_table.table);
+ {
+ if (dummy_table->s == NULL)
+ {
+ char *empty_name= (char *) "";
+ TABLE_SHARE *share;
+ dummy_table->s= share= &dummy_table->share_not_to_be_used;
+ dummy_table->alias = empty_name;
+ dummy_table->maybe_null = maybe_null;
+ dummy_table->in_use= current_thd;
+ share->table_cache_key = empty_name;
+ share->table_name = empty_name;
+ share->table_name = empty_name;
+ }
+ field= m_sp->make_field(max_length, name, dummy_table);
+ }
DBUG_RETURN(field);
}
diff --git a/sql/item_func.h b/sql/item_func.h
index cd7f39e9557..eb9aa4ca0c7 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -1252,10 +1252,7 @@ class Item_func_sp :public Item_func
private:
sp_name *m_name;
mutable sp_head *m_sp;
- mutable struct {
- TABLE table;
- TABLE_SHARE share;
- } dummy_table;
+ TABLE *dummy_table;
int execute(Item **itp);
Field *sp_result_field(void) const;