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