summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <hf@deer.(none)>2003-06-11 20:09:37 +0500
committerunknown <hf@deer.(none)>2003-06-11 20:09:37 +0500
commita59410fd68b4b9d859299dd5fcfc5be64a995e22 (patch)
treea86c3efd40d62c8c075c3b20fbaa871e3c8b84a2 /sql
parenta1a58d6c5a9799cd3746d5bef85a9347051ef356 (diff)
downloadmariadb-git-a59410fd68b4b9d859299dd5fcfc5be64a995e22.tar.gz
Bugfix for #614
Item_extract needs special implementation for eq(). Item_func::eq doesn't work correctly because we have to compare Item_extract::int_type parameters also We need to propagate this to 4.1 sql/item_timefunc.cc: Item_extract::eq implementation added sql/item_timefunc.h: Item_extract::eq definition added BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
Diffstat (limited to 'sql')
-rw-r--r--sql/item_timefunc.cc16
-rw-r--r--sql/item_timefunc.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 6a95c15a226..84e7a44ac61 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -1137,6 +1137,22 @@ longlong Item_extract::val_int()
return 0; // Impossible
}
+bool Item_extract::eq(const Item *item, bool binary_cmp) const
+{
+ if (this == item)
+ return 1;
+ if (item->type() != FUNC_ITEM ||
+ func_name() != ((Item_func*)item)->func_name())
+ return 0;
+
+ Item_extract* ie= (Item_extract*)item;
+ if (ie->int_type != int_type)
+ return 0;
+
+ if (!args[0]->eq(ie->args[0], binary_cmp))
+ return 0;
+ return 1;
+}
void Item_typecast::print(String *str)
{
diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h
index 0ca2a36609d..e04e24627d9 100644
--- a/sql/item_timefunc.h
+++ b/sql/item_timefunc.h
@@ -422,6 +422,7 @@ class Item_extract :public Item_int_func
longlong val_int();
const char *func_name() const { return "extract"; }
void fix_length_and_dec();
+ bool eq(const Item *item, bool binary_cmp) const;
unsigned int size_of() { return sizeof(*this);}
};