diff options
author | unknown <monty@mashka.mysql.fi> | 2003-06-26 05:38:19 +0300 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-06-26 05:38:19 +0300 |
commit | a3beaaa3af7af26aabadda6836618d32d6c90e51 (patch) | |
tree | af26f54d96f10ded8e53e3634bc9beecf75bd15e /sql/item.h | |
parent | 3d5f6a8867c848459191ba320b573bd832e51d5a (diff) | |
download | mariadb-git-a3beaaa3af7af26aabadda6836618d32d6c90e51.tar.gz |
LEFT JOIN optimization: Change LEFT JOIN to normal join if possible
mysql-test/r/select.result:
Added test for LEFT JOIN optimization
mysql-test/t/select.test:
Added test for LEFT JOIN optimization
sql/item.h:
LEFT JOIN optimization
sql/item_cmpfunc.cc:
LEFT JOIN optimization
sql/item_cmpfunc.h:
LEFT JOIN optimization
sql/item_func.cc:
LEFT JOIN optimization
sql/item_func.h:
LEFT JOIN optimization
sql/item_strfunc.cc:
LEFT JOIN optimization
sql/sql_base.cc:
Heart of LEFT JOIN optimization
Diffstat (limited to 'sql/item.h')
-rw-r--r-- | sql/item.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/sql/item.h b/sql/item.h index 09d428509d0..1631bf76135 100644 --- a/sql/item.h +++ b/sql/item.h @@ -71,7 +71,24 @@ public: virtual double val_result() { return val(); } virtual longlong val_int_result() { return val_int(); } virtual String *str_result(String* tmp) { return val_str(tmp); } + /* bit map of tables used by item */ virtual table_map used_tables() const { return (table_map) 0L; } + /* + Return table map of tables that can't be NULL tables (tables that are + used in a context where if they would contain a NULL row generated + by a LEFT or RIGHT join, the item would not be true). + This expression is used on WHERE item to determinate if a LEFT JOIN can be + converted to a normal join. + Generally this function should return used_tables() if the function + would return null if any of the arguments are null + As this is only used in the beginning of optimization, the value don't + have to be updated in update_used_tables() + */ + virtual table_map not_null_tables() const { return used_tables(); } + /* + Returns true if this is a simple constant item like an integer, not + a constant expression + */ virtual bool basic_const_item() const { return 0; } virtual Item *new_item() { return 0; } /* Only for const items */ virtual cond_result eq_cmp_result() const { return COND_OK; } |