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 <[email protected]> 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<[email protected]> 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 >> >> >
