List:Internals« Previous MessageNext Message »
From:Michael Widenius Date:June 8 2012 7:00pm
Subject:re: last_insert_id() should return ulonglong, but is longlong
View as plain text  
Hi!

>>>>> "Dvir" == Dvir Azulay <dvir.azulay@stripped> writes:

Dvir> Hello, this is my first time on this mailing list so I hope I'm on the
Dvir> right place.

Dvir> Last night I encountered an issue with LAST_INSERT_ID(), when my ID
Dvir> column is an UNSIGNED BIGINT; the return value was a SIGNED BIGINT.

Dvir> So I looked at the source code and saw this line:
Dvir>  longlong Item_func_last_insert_id::val_int()

Dvir> When in other places, it was referred to as ulonglong, here it is
Dvir> longlong. (When it should be ulonglong of course).

Dvir> Is this correct or am I looking at the wrong place?

The val_int() is always returning a longlong. This is ok as the
storage space of longlong and ulonglong are idential and longlong can
easily be cast to ulonglong.

MySQL/MariaDB has a flag for each field (unsigned_flag) and item that
tells if the longlong value should be regarded as signed or unsigned
value.

I checked the Item_func_last_insert_id() function and you are right
that it's not declared as an unsigned function.

This is probably wrong, however it's not 100 % clear if changing it to
unsigned is the best way to go as the auto_increment column may be
signed or unsigned.

I will look into it if we can change it in MariaDB to be unsigned
without causing any backward compatibility problems.

Regards,
Monty
Thread
last_insert_id() should return ulonglong, but is longlongDvir Azulay31 May
  • re: last_insert_id() should return ulonglong, but is longlongMichael Widenius8 Jun
  • re: last_insert_id() should return ulonglong, but is longlongMichael Widenius8 Jun