diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result index d21e78428c5..30b4ff11227 100644 --- a/mysql-test/r/auto_increment.result +++ b/mysql-test/r/auto_increment.result @@ -516,3 +516,25 @@ pk 1 18446744073709551614 DROP TABLE t1; +CREATE TABLE t1 (pk BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY (pk)); +insert into t1 values((1<<63)+1); +insert into t1 values(null); +select last_insert_id(); +last_insert_id() +9223372036854775810 +select * from t1; +pk +9223372036854775809 +9223372036854775810 +drop table t1; +CREATE TABLE t1 (pk BIGINT AUTO_INCREMENT, PRIMARY KEY (pk)); +insert into t1 values(-5); +insert into t1 values(null); +select last_insert_id(); +last_insert_id() +1 +select * from t1; +pk +-5 +1 +drop table t1; diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test index 2854f503034..884e0fabb5e 100644 --- a/mysql-test/t/auto_increment.test +++ b/mysql-test/t/auto_increment.test @@ -380,3 +380,19 @@ CREATE TABLE t1 (pk BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY (pk)); INSERT INTO t1 VALUES (NULL), (18446744073709551615-1), (NULL); SELECT * FROM t1; DROP TABLE t1; + +# MDEV-331 last_insert_id() returns a signed number +# Check that last_insert_id() generates a signed value +CREATE TABLE t1 (pk BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY (pk)); +insert into t1 values((1<<63)+1); +insert into t1 values(null); +select last_insert_id(); +select * from t1; +drop table t1; + +CREATE TABLE t1 (pk BIGINT AUTO_INCREMENT, PRIMARY KEY (pk)); +insert into t1 values(-5); +insert into t1 values(null); +select last_insert_id(); +select * from t1; +drop table t1; diff --git a/sql/item_func.h b/sql/item_func.h index 3b1a38cf447..f91107c5445 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1201,6 +1201,7 @@ public: { if (arg_count) max_length= args[0]->max_length; + unsigned_flag=1; } bool fix_fields(THD *thd, Item **ref); bool check_vcol_func_processor(uchar *int_arg)