.NET changes look good to me.

Pavel

On Mon, Feb 6, 2017 at 1:10 PM, Igor Sapego <isap...@gridgain.com> wrote:

> Vyacheslav, I can see two ODBC tests fail in C++ test suits that should
> not:
> - TestEscConvertFunctionFloat
> <http://ci.ignite.apache.org/viewLog.html?buildId=444207&tab=buildResultsDiv&buildTypeId=IgniteTests_IgnitePlatformCppLinux#testNameId-9178617718508801660>
> - TestEscConvertFunctionDouble
> <http://ci.ignite.apache.org/viewLog.html?buildId=444207&tab=buildResultsDiv&buildTypeId=IgniteTests_IgnitePlatformCppLinux#testNameId5432107083822590090>
> .
>
> I believe, this is because I can't see any changes in C++ Decimal
> marshaling code.
> Please, pay attention to file ignite\modules\platforms\cpp\
> odbc\src\utility.cpp,
> functions ReadDecimal and WriteDecimal.
>
> Best Regards,
> Igor
>
> On Mon, Feb 6, 2017 at 11:21 AM, Vyacheslav Daradur <daradu...@gmail.com>
> wrote:
>
>> Pavel, Igor
>>
>> Please, review it again.
>>
>> https://github.com/apache/ignite/pull/1473/files
>>
>> All tests
>> <http://ci.ignite.apache.org/viewLog.html?buildId=444231&tab=buildResultsDiv&buildTypeId=IgniteTests_RunAll>
>> .NET tests
>> <http://ci.ignite.apache.org/viewLog.html?buildId=443439&tab=buildResultsDiv&buildTypeId=IgniteTests_IgnitePlatformNet>
>>
>> How about this solution?
>>
>> 2017-02-03 13:59 GMT+03:00 Vyacheslav Daradur <daradu...@gmail.com>:
>>
>>> 1. On my first question
>>> I think up, if we serialize only positive numbers, we can write sign in
>>> first byte, because it is positive always.
>>> I will try to make this decision
>>>
>>> 2017-02-03 12:48 GMT+03:00 Pavel Tupitsyn <ptupit...@apache.org>:
>>>
>>>> Vyacheslav,
>>>>
>>>> I see the problem now. Yes, negative scale is not supported in .NET.
>>>>
>>>> I don't think we should do the multiplication. As you described, this
>>>> will
>>>> break equality on Java side. SQL queries might be broken, etc.
>>>> I think we should throw an exception in .NET when encountering negative
>>>> decimal scale.
>>>>
>>>> Vladimir O, any thoughts?
>>>>
>>>> Pavel
>>>>
>>>> On Fri, Feb 3, 2017 at 12:01 PM, Vyacheslav Daradur <
>>>> daradu...@gmail.com>
>>>> wrote:
>>>>
>>>> > Hello.
>>>> >
>>>> > I looked and understood the code of methods ReadDecimal and
>>>> WriteDecimal
>>>> > on .NET platform.
>>>> >
>>>> > 1. At the moment remaking of this methods for my Java-decimal-fix is
>>>> very
>>>> > difficult, it needs to write new methods for
>>>> serialization/deserialization
>>>> > of negative decimals.
>>>> >
>>>> > I can make it, but there is simpler decision: to add additional byte
>>>> for
>>>> > sign.
>>>> >
>>>> > I need advice: difficult solution (new methods .net) Versus : simple
>>>> > solutions (additional byte)?
>>>> >
>>>> > *I don't know yet, what changes are necessary on ะก++ platform.
>>>> >
>>>> > 2. I see a problem with the negative scale on .NET platform.
>>>> >
>>>> > Now negative scale is forbidden.
>>>> >
>>>> > We can make:
>>>> > if (scale < 0) return Decimal.Multiply(new decimal(lo, mid, hi, neg,
>>>> 0),
>>>> > new decimal(Math.Pow(10, -scale)));
>>>> >
>>>> > But there is the problem:
>>>> > * 1 Serialize in Java; number=123456789, scale=-4
>>>> > * 2 Deserialize in .NET; number=1234567890000, scale=0
>>>> > * 3 Serialize in .NET; number=1234567890000, scale=0
>>>> > * 4 Deserialize in Java; number=1234567890000, scale=0
>>>> >
>>>> > Logically: (1) 123456789 * 10^4 == (2)  1234567890000
>>>> >
>>>> > In Java (1) not equal (2), because scales are different.
>>>> >
>>>> > Any thougths?
>>>> >
>>>> > 2017-01-31 14:08 GMT+03:00 Pavel Tupitsyn <ptupit...@apache.org>:
>>>> >
>>>> >> Vyacheslav,
>>>> >>
>>>> >> I'm not sure I understand the code you attached.
>>>> >>
>>>> >> If you know how to fix the .NET part, can you just do it in your PR
>>>> and
>>>> >> run "Platform .NET" on TeamCity to verify?
>>>> >> http://ci.ignite.apache.org/viewType.html?buildTypeId=Ignite
>>>> >> Tests_IgnitePlatformNet
>>>> >>
>>>> >> Thanks,
>>>> >>
>>>> >> Pavel
>>>> >>
>>>> >> On Tue, Jan 31, 2017 at 1:35 PM, Vyacheslav Daradur <
>>>> daradu...@gmail.com>
>>>> >> wrote:
>>>> >>
>>>> >>> Pavel, I see that you are the main contributor of Ignite.NET.
>>>> >>>
>>>> >>> We should repair BinaryUtils#ReadDecimal and
>>>> BinaryUtils#WriteDecimal.
>>>> >>>
>>>> >>> *ReadDecimal:
>>>> >>> byte[] mag = ReadByteArray(stream); // including at least one sign
>>>> bit,
>>>> >>> which is (ceil((this.bitLength() + 1)/8))
>>>> >>> bool neg = (mag[0] < 0);
>>>> >>> if (scale < 0)
>>>> >>> // TODO: a scale of -3 means the unscaled value is multiplied by
>>>> 1000
>>>> >>>
>>>> >>> *WriteDecimal:
>>>> >>> int sign = vals[3] < 0 ? -1 : 0;
>>>> >>> stream.WriteInt(sign);
>>>> >>>
>>>> >>> Can you help with this task?
>>>> >>>
>>>> >>>
>>>> >>> 2017-01-31 12:46 GMT+03:00 Igor Sapego <isap...@gridgain.com>:
>>>> >>>
>>>> >>>> Vyacheslav,
>>>> >>>>
>>>> >>>> I had a look at your PR and left some comments in Jira.
>>>> >>>>
>>>> >>>> Best Regards,
>>>> >>>> Igor
>>>> >>>>
>>>> >>>> On Mon, Jan 30, 2017 at 12:52 PM, Vyacheslav Daradur <
>>>> >>>> daradu...@gmail.com>
>>>> >>>> wrote:
>>>> >>>>
>>>> >>>> > Hello. I fixed it. Please, review.
>>>> >>>> >
>>>> >>>> > https://issues.apache.org/jira/browse/IGNITE-3196 - Marshaling
>>>> works
>>>> >>>> wrong
>>>> >>>> > for the BigDecimals that have negative scale
>>>> >>>> >
>>>> >>>>
>>>> >>>
>>>> >>>
>>>> >>
>>>> >
>>>>
>>>
>>>
>>
>

Reply via email to