Home
NumbersNumbers
All "constant" numbers (those provided in the SQL) are represented by JoSQL as java.lang.Double. Similarly, all expressions that provide a numeric result are represented as java.lang.Double objects. This is a design choice to prevent certain issues that can arise, such as number compatibility, casting and accuracy. However JoSQL does not force functions to return an instance of java.lang.Double (if a return value is necessary) so it is possible that the results of a query can contain a mix of number types.

For example, defining the following function:
/**
 * Convert the passed in number to an integer.
 */
public int convert (Number o)
And then performing the following SQL statement:
SELECT convert (12345),
       12345,
       1 + 1
FROM   java.lang.Object
LIMIT  1, 1
will cause a List to be returned that holds 1 List which in turn holds at index 0 an instance of java.lang.Integer, an instance of java.lang.Double at index 1 and an instance of java.lang.Double at index 2 (even though a java.lang.Short would have sufficed).

Care should be taken for this situation since it is very likely that a CCE could occur unless the results are dealt with as java.lang.Number objects, thus:
List res = q.execute (myObjs);

for (int i = 0; i < res.size (); i++)
{

   List iRes = (List) res.get (i);

   for (int j = 0; j < iRes.size (); j++)
   {

       Number n = (Number) iRes.get (j);

       int v = n.intValue ();

   }

}
See Also