summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authorpem@mysql.comhem.se <>2004-03-25 17:42:13 +0100
committerpem@mysql.comhem.se <>2004-03-25 17:42:13 +0100
commit6395822932ab4830d80b4d90fbb3faa4b0ee8723 (patch)
treeb848643a5a893df72a10e6264bc0406b6c9ec236 /sql/item_func.cc
parent403001ff1ced529761f9737ad831c1be0b0740de (diff)
downloadmariadb-git-6395822932ab4830d80b4d90fbb3faa4b0ee8723.tar.gz
Fixed BUG#3117: LAST_INSERT_ID() works incorrectly inside stored procedure.
This turned out to be a problem for prepared statements as well; the id was evaluated once, at parse time.
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc19
1 files changed, 14 insertions, 5 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 5151fb2876d..9f80686e72c 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -2139,13 +2139,22 @@ longlong Item_func_release_lock::val_int()
}
-longlong Item_func_set_last_insert_id::val_int()
+longlong Item_func_last_insert_id::val_int()
{
DBUG_ASSERT(fixed == 1);
- longlong value=args[0]->val_int();
- current_thd->insert_id(value);
- null_value=args[0]->null_value;
- return value;
+ if (arg_count)
+ {
+ longlong value=args[0]->val_int();
+ current_thd->insert_id(value);
+ null_value=args[0]->null_value;
+ return value;
+ }
+ else
+ {
+ Item *it= get_system_var(current_thd, OPT_SESSION, "last_insert_id", 14,
+ "last_insert_id()");
+ return it->val_int();
+ }
}
/* This function is just used to test speed of different functions */