[SR-Users] Negative value returned when using sql_pvquery

Daniel-Constantin Mierla miconda at gmail.com
Tue Jan 5 19:49:02 CET 2016



On 05/01/16 17:51, Daniel Tryba wrote:
> On Tue, Jan 05, 2016 at 03:38:58PM +0000, Jonathan Hunter wrote:
>> sql_pvquery("cd","select DestinationMsisdn,SourceMsisdn from MsisdnPoolAllocations where PoolMsisdn='$rU'","$var(MOdest),$var(NewSourceMSISDN)");
>> However this returns a value of -509264926 for $var(MOdest) which should just be the 3785702370  number.
>> What can cause kamailio to interpret this as a negative value? Has anyone seen this before?
> What you are seeing is an integer overflow, in this case you are trying
> to store a number greater than 2^31 in a signed 32bit int. -509264926
> (3785702370-2^32) is the correct answer if the var is a signed 32bit
> int.
>
> I treat phonenumbers as strings (both in the database and kamailio)
> since I store them as E.164 with a leading + (which results in a bit
> more diskspace)
>
> If you don't need the number as int in kamailio, try casting it to a
> string in the query.
>
To complete, as just looked at the source -- if the bigint number
returned does not fit in 32bit size, then it is stored as string. If it
fits in 32bit, then is stored also as int. I see the code was added in
2011 by Alex Hermann.

Maybe the behavior is not that coherent, hard to predict if not knowing
what is in the db, and should be changed to be always stored as string,
then use {s.int} in config if wanted as int.

Cheers,
Daniel

-- 
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Book: SIP Routing With Kamailio - http://www.asipto.com
http://miconda.eu




More information about the sr-users mailing list