Ok, thanks for explanations.

What about this task?

2017-02-07 13:57 GMT+03:00 Igor Sapego <isap...@gridgain.com>:

> But that's Ok. Since we use int8_t for bytes in C++ as well I guess
> your -0x80 may have more sense than 0x80.
>
> Best Regards,
> Igor
>
> On Tue, Feb 7, 2017 at 1:54 PM, Igor Sapego <isap...@gridgain.com> wrote:
>
>> I was just curious.
>>
>> In C++ both constants 0x80 and -0x80 are of type 'int' and have the same
>> lower byte, so they give the same result. Though first number is actually
>> 0x00000080 when the second one is 0xFFFFFF80.
>>
>> So it's just made a minus sign look a little redundant and pointless to me
>> in C++ code.
>>
>> Best Regards,
>> Igor
>>
>> On Mon, Feb 6, 2017 at 10:15 PM, Vyacheslav Daradur <daradu...@gmail.com>
>> wrote:
>>
>>> Byte.MIN_VALUE = -128 = -0x80
>>> Byte.MAX_VALUE = 127 = 0x7F
>>>
>>> It is just more evident for me.
>>>
>>> Maybe, I just have the Java programming style.
>>>
>>> In Java:
>>> byte a = 100 | -0x80;  // compiled
>>> byte b = 100 | 0x80;  // doesn't compile, explicit type casting is
>>> neccessary (byte)(100 | 0x80)
>>> System.out.println(a | -0x80); // -28
>>> System.out.println(a | 0x80); // 228 - cast to int
>>>
>>> Is it bad style?
>>>
>>> 2017-02-06 20:04 GMT+03:00 Igor Sapego <isap...@gridgain.com>:
>>>
>>>> Vyacheslav,
>>>>
>>>> Overall looks good. But why do you use -0x80 instead of 0x80?
>>>>
>>>> Best Regards,
>>>> Igor
>>>>
>>>> On Mon, Feb 6, 2017 at 5:36 PM, Vyacheslav Daradur <daradu...@gmail.com
>>>> > wrote:
>>>>
>>>>> Igor,
>>>>>
>>>>> I didn't change the CPP code before approval approach.
>>>>> I shall write directly, sorry.
>>>>>
>>>>> But I made CPP changes already.
>>>>>
>>>>> > TestEscConvertFunctionFloat
>>>>> > TestEscConvertFunctionDouble.
>>>>> These tests were passed
>>>>> <http://ci.ignite.apache.org/viewQueued.html?itemId=445824>
>>>>>
>>>>>
>>>>>
>>>>> 2017-02-06 13:20 GMT+03:00 Pavel Tupitsyn <ptupit...@apache.org>:
>>>>>
>>>>>> .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_IgnitePlatformCppLi
>>>>>> nux#testNameId-9178617718508801660>
>>>>>> > - TestEscConvertFunctionDouble
>>>>>> > <http://ci.ignite.apache.org/viewLog.html?buildId=444207&tab
>>>>>> =buildResultsDiv&buildTypeId=IgniteTests_IgnitePlatformCppLi
>>>>>> nux#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