summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/item.cc16
-rw-r--r--sql/item.h15
2 files changed, 17 insertions, 14 deletions
diff --git a/sql/item.cc b/sql/item.cc
index 69b1b78a961..182aef4c94c 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -297,6 +297,22 @@ longlong Item::val_int_from_decimal()
}
+void *Item::operator new(size_t size, Item *reuse, uint *rsize)
+{
+ if (reuse && size <= reuse->rsize)
+ {
+ reuse->cleanup();
+ TRASH((void *)reuse, size);
+ if (rsize)
+ (*rsize)= reuse->rsize;
+ return (void *)reuse;
+ }
+ if (rsize)
+ (*rsize)= size;
+ return (void *)sql_alloc((uint)size);
+}
+
+
Item::Item():
rsize(0), name(0), orig_name(0), name_length(0), fixed(0),
collation(&my_charset_bin, DERIVATION_COERCIBLE)
diff --git a/sql/item.h b/sql/item.h
index f8fe05cfdb2..18b419dd6d5 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -233,20 +233,7 @@ public:
static void *operator new(size_t size, MEM_ROOT *mem_root)
{ return (void*) alloc_root(mem_root, (uint) size); }
/* Special for SP local variable assignment - reusing slots */
- static void *operator new(size_t size, Item *reuse, uint *rsize)
- {
- if (reuse && size <= reuse->rsize)
- {
- reuse->cleanup();
- TRASH((void *)reuse, size);
- if (rsize)
- (*rsize)= reuse->rsize;
- return (void *)reuse;
- }
- if (rsize)
- (*rsize)= size;
- return (void *)sql_alloc((uint)size);
- }
+ static void *operator new(size_t size, Item *reuse, uint *rsize);
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
static void operator delete(void *ptr, MEM_ROOT *mem_root) {}