summaryrefslogtreecommitdiff
path: root/sql/item.h
diff options
context:
space:
mode:
authorunknown <gluh@eagle.(none)>2007-12-13 14:52:49 +0400
committerunknown <gluh@eagle.(none)>2007-12-13 14:52:49 +0400
commit33f82b17893edc7d39e523f3cf03858338b6a4a0 (patch)
treeb870e5e7b713672711344eb2e5b585f3e2c48375 /sql/item.h
parent0ced2a4d19839417ca6a6d6c8cc9c5cba259ef76 (diff)
parent196f0c751f9a36b34f0dd5e15df4a9fcd51c0b81 (diff)
downloadmariadb-git-33f82b17893edc7d39e523f3cf03858338b6a4a0.tar.gz
Merge mysql.com:/home/gluh/MySQL/Merge/5.0
into mysql.com:/home/gluh/MySQL/Merge/5.0-opt client/mysql.cc: Auto merged client/mysqltest.c: Auto merged include/mysql_com.h: Auto merged libmysql/CMakeLists.txt: Auto merged myisam/mi_check.c: Auto merged mysql-test/r/delayed.result: Auto merged mysql-test/r/innodb.result: Auto merged mysql-test/r/myisam.result: Auto merged mysql-test/r/ps.result: Auto merged mysql-test/t/merge.test: Auto merged mysql-test/t/myisam.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/type_datetime.test: Auto merged mysql-test/t/variables.test: Auto merged sql/field.cc: Auto merged sql/ha_myisam.cc: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/opt_range.cc: Auto merged sql/set_var.cc: Auto merged sql/set_var.h: Auto merged sql/sql_class.h: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/sql_yacc.yy: Auto merged mysql-test/r/func_misc.result: manual merge mysql-test/r/innodb_mysql.result: manual merge mysql-test/t/func_misc.test: manual merge mysql-test/t/innodb_mysql.test: manual merge sql/sql_insert.cc: manual merge
Diffstat (limited to 'sql/item.h')
-rw-r--r--sql/item.h22
1 files changed, 21 insertions, 1 deletions
diff --git a/sql/item.h b/sql/item.h
index fbf4b94b276..5f511557f47 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -2454,8 +2454,18 @@ class Item_cache: public Item
protected:
Item *example;
table_map used_table_map;
+ /*
+ Field that this object will get value from. This is set/used by
+ index-based subquery engines to detect and remove the equality injected
+ by IN->EXISTS transformation.
+ For all other uses of Item_cache, cached_field doesn't matter.
+ */
+ Field *cached_field;
public:
- Item_cache(): example(0), used_table_map(0) {fixed= 1; null_value= 1;}
+ Item_cache(): example(0), used_table_map(0), cached_field(0)
+ {
+ fixed= 1; null_value= 1;
+ }
void set_used_tables(table_map map) { used_table_map= map; }
@@ -2467,6 +2477,8 @@ public:
decimals= item->decimals;
collation.set(item->collation);
unsigned_flag= item->unsigned_flag;
+ if (item->type() == FIELD_ITEM)
+ cached_field= ((Item_field *)item)->field;
return 0;
};
virtual void store(Item *)= 0;
@@ -2477,6 +2489,14 @@ public:
// to prevent drop fixed flag (no need parent cleanup call)
void cleanup() {}
void print(String *str);
+ bool eq_def(Field *field)
+ {
+ return cached_field ? cached_field->eq_def (field) : FALSE;
+ }
+ bool eq(const Item *item, bool binary_cmp) const
+ {
+ return this == item;
+ }
};