diff options
author | unknown <kroki@mysql.com> | 2006-04-12 19:31:00 +0400 |
---|---|---|
committer | unknown <kroki@mysql.com> | 2006-04-12 19:31:00 +0400 |
commit | 886a35bd82c153253007040202116b5f634705f4 (patch) | |
tree | 79c3147160f25f4c191b0d31943796b18cc50c8d /sql/item_func.h | |
parent | daac388624f52f9d95c43d186e9a759ff15fff18 (diff) | |
download | mariadb-git-886a35bd82c153253007040202116b5f634705f4.tar.gz |
Bug#16461: connection_id() does not work properly inside trigger
CONNECTION_ID() was implemented as a constant Item, i.e. an instance of
Item_static_int_func class holding value computed at creation time.
Since Items are created on parsing, and trigger statements are parsed
on table open, the first connection to open a particular table would
effectively set its own CONNECTION_ID() inside trigger statements for
that table.
Re-implement CONNECTION_ID() as a class derived from Item_int_func, and
compute connection_id on every call to fix_fields().
mysql-test/r/trigger.result:
Add result for bug#16461.
mysql-test/t/trigger.test:
Add test case for bug#16461.
sql/item.cc:
Remove now unused class Item_static_int_func.
sql/item.h:
Remove now unused class Item_static_int_func.
sql/item_create.cc:
Use new implementation of CONNECTION_ID().
sql/item_func.cc:
Re-implement CONNECTION_ID() as Item_func_connection_id
(was Item_static_int_func). Set max_length to 10, as it was before.
Compute connection_id dynamically on every call to fix_fields().
sql/item_func.h:
Re-implement CONNECTION_ID() as Item_func_connection_id
(was Item_static_int_func).
Diffstat (limited to 'sql/item_func.h')
-rw-r--r-- | sql/item_func.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sql/item_func.h b/sql/item_func.h index ccbbbab1df4..ed5924e8fe1 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -279,6 +279,18 @@ public: }; +class Item_func_connection_id :public Item_int_func +{ + longlong value; + +public: + const char *func_name() const { return "connection_id"; } + void fix_length_and_dec(); + bool fix_fields(THD *thd, Item **ref); + longlong val_int() { DBUG_ASSERT(fixed == 1); return value; } +}; + + class Item_func_signed :public Item_int_func { public: |