[Tarantool-patches] [PATCH v2 4/4] sql: introduce mem_cmp_msgpack()
Mergen Imeev
imeevma at tarantool.org
Thu Jul 15 09:58:30 MSK 2021
Hi! Thank you for the review! My answer below.
On 15.07.2021 00:53, Vladislav Shpilevoy wrote:
> Hi! Thanks for the fixes!
>
>>>> + if (mem_cmp_msgpack(mem, &p, &rc, coll) != 0)
>>>> + rc = 0;
>>>> if (rc != 0) {
>>>> - if (unpacked->key_def->parts[i].sort_order !=
>>>> - SORT_ORDER_ASC)
>>>> + if (part->sort_order == SORT_ORDER_ASC)
>>> Why did you change != to ==?
>>>
>> I did this because function sqlVdbeCompareMsgpack() compared packed value as
>> left operand and MEM as right operand. In mem_cmp_msgpack() order was reversed,
>> now MEM is left operand and packed value is right operand.
> Shouldn't you then change the other place too?
There I changed returned value instead of operation.
>
>> @@ -2721,13 +2586,15 @@ sqlVdbeRecordCompareMsgpack(const void *key1,
>> n = MIN(n, key2->nField);
>>
>> for (i = 0; i != n; i++) {
>> - rc = sqlVdbeCompareMsgpack((const char**)&key1, key2, i);
>> + struct key_part *part = &key2->key_def->parts[i];
>> + struct Mem *mem = key2->aMem + i;
>> + struct coll *coll = part->coll;
>> + if (mem_cmp_msgpack(mem, (const char **)&key1, &rc, coll) != 0)
>> + rc = 0;
>> if (rc != 0) {
>> - if (key2->key_def->parts[i].sort_order !=
>> - SORT_ORDER_ASC) {
>> - rc = -rc;
>> - }
>> - return rc;
>> + if (part->sort_order != SORT_ORDER_ASC)
>> + return rc;
>> + return -rc;
>> }
> Here it was cmp(key1, key), now it is cmp(key2, key1). Shouldn't
> then the sort_order check become `== SORT_ORDER_ASC`?
Although it is true that I have not changed '!=' to '==', now in case
'!=' the
function returns rc, and in the case of '==' it returns -rc. Previously
it was
-rc for '!=' and rc for '=='. Is there any other reason to change '!='
to '=='?
More information about the Tarantool-patches
mailing list