diff options
author | pem@mysql.comhem.se <> | 2004-03-25 17:42:13 +0100 |
---|---|---|
committer | pem@mysql.comhem.se <> | 2004-03-25 17:42:13 +0100 |
commit | 6395822932ab4830d80b4d90fbb3faa4b0ee8723 (patch) | |
tree | b848643a5a893df72a10e6264bc0406b6c9ec236 /sql/item_func.cc | |
parent | 403001ff1ced529761f9737ad831c1be0b0740de (diff) | |
download | mariadb-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.cc | 19 |
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 */ |