incubator-vxquery-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Eldon Carman <ecarm...@ucr.edu>
Subject Re: Arithmetic Functions
Date Sat, 16 Jun 2012 00:06:44 GMT
Ok. Now for these mixed types that are added together, there is a
promotion order. Basically the largest numeric type gets used. I have
been trying to find documentation on the promotion order. Is that what
I listed before? (size order)

 1. double (double-precision 64-bit floating point type) - Java type double
 2. float (single-precision 32-bit floating point type) - Java type float
 3. decimal (a minimum of 18 decimal digits) - Java type double ???
 4. integer (a decimal type with a fixed decimal point) - Java type long

Also do you know where that is in the xquery specification?

On Fri, Jun 15, 2012 at 4:39 PM, Vinayak Borkar <vborky@yahoo.com> wrote:
> Lexicographical order is text sort order. So:
>
> decimal
> double
> float
> integer
>
> xs:integer is supposed to be infinite precision, but we represent it as a 64
> bit fixed-precision signed-integer which is a long in java.
>
> Vinayak
>
>
>
> On 6/15/12 3:11 PM, Eldon Carman wrote:
>>
>> Thanks for the scaffolding. I have two questions. Is this the correct
>> lexicographical order?
>>  1. double
>>  2. float
>>  3. decimal
>>  4. integer
>>
>> Also do we always referrer to a integer as a long for this implementation?
>>
>> Preston
>>
>> On Fri, Jun 15, 2012 at 7:09 AM, Vinayak Borkar<vborky@yahoo.com>  wrote:
>>>
>>> Preston,
>>>
>>>
>>> I have now added some scaffolding so that implementing the arithmetic
>>> functions will be easier.
>>>
>>> I have also added the code for xs:integer + xs:integer which is needed
>>> for
>>> the 1 + 1 example, ant it works end-to-end.
>>>
>>> Look at the AddScalarEvaluatorFactory class. You will be creating a class
>>> like that for each of Subtract, Multiply, and Divide by extending
>>> AbstractArithmeticScalarEvaluatorFactory.
>>>
>>> The only method that you have to implement when you extend
>>> AbstractArithmeticScalarEvaluatorFactory is the
>>> createArithmeticOperation()
>>> method that creates an instance of AbstractArithmeticOperation.
>>>
>>> For example, the one for Add looks like this:
>>>
>>>    @Override
>>>    protected AbstractArithmeticOperation createArithmeticOperation() {
>>>        return new AddOperation();
>>>    }
>>>
>>>
>>> The AddOperation implements all the logic for what it means to add two
>>> values of various types.
>>>
>>> The AbstractArithmeticScalarEvaluatorFactory has all the logic to
>>> correctly
>>> dispatch to the correct method in AbstractArithmeticOperation based on
>>> XQuery rules.
>>>
>>> As your next step, please implement all the methods in AddOperation. The
>>> methods in this class look like
>>>
>>> void operateXY(X x, Y y, DataOutput dOut)
>>>
>>> where X and Y are type names.
>>>
>>> For example the method that computes the result for xs:integer and
>>> xs:double
>>> would read:
>>>
>>> void operateIntegerDouble(LongPointable longp, DoublePointable doublep,
>>> DataOutput dOut)
>>>
>>> Since Add is commutative, you can implement about half of the methods by
>>> delegating to the other half (by switching the arguments). The convention
>>> you should follow is have operateXY delegate to operateYX when X is
>>> lexicographically greater than Y.
>>>
>>> So in the above example, operateIntegerDouble will delegate to
>>> operateDoubleInteger in the AddOperation class.
>>>
>>> Note that this trick does not apply to Minus and Divide, but applied to
>>> Multiply.
>>>
>>> Let us know how it goes with implementing the unimplemented methods in
>>> AddOperation and then implemnting the other arithmetic operation classes.
>>>
>>> Vinayak
>>
>>
>

Mime
View raw message