summaryrefslogtreecommitdiff
path: root/sql/sql_base.cc
diff options
context:
space:
mode:
authorGeorgi Kodinov <kgeorge@mysql.com>2008-10-17 17:55:06 +0300
committerGeorgi Kodinov <kgeorge@mysql.com>2008-10-17 17:55:06 +0300
commita0e3001cdbe8a308e01f984a006cc003c82ebd82 (patch)
tree9cc59e113b7bc151b40b190f7fc2e5bb12aa8534 /sql/sql_base.cc
parent4ab10baace0960f18a843beb880c99b6cd9ca2e3 (diff)
downloadmariadb-git-a0e3001cdbe8a308e01f984a006cc003c82ebd82.tar.gz
Bug #33811: Call to stored procedure with SELECT * / RIGHT JOIN
fails after the first time Two separate problems : 1. When flattening joins the linked list used for name resolution (next_name_resolution_table) was not updated. Fixed by updating the pointers when extending the table list 2. The items created by expanding a * (star) as a column reference were marked as fixed, but no cached table was assigned to them (unlike what Item_field::fix_fields does). Fixed by assigning a cached table (so the re-preparation is done faster). Note that the fix for #2 hides the fix for #1 in most cases (except when a table reference cannot be cached).
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r--sql/sql_base.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index d969c837891..873a3eac24e 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -5508,6 +5508,10 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
if (!(item= field_iterator.create_item(thd)))
DBUG_RETURN(TRUE);
+ DBUG_ASSERT(item->fixed);
+ /* cache the table for the Item_fields inserted by expanding stars */
+ if (item->type() == Item::FIELD_ITEM && tables->cacheable_table)
+ ((Item_field *)item)->cached_table= tables;
if (!found)
{