From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 22DB86EC58; Tue, 3 Aug 2021 16:38:51 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 22DB86EC58 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1627997931; bh=8s8IaI4OHzZZsB/eEyqY6iKAtTDmY9+zWP7J83FM0E0=; h=To:References:In-Reply-To:Date:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=wiMfnOqKE1BfqHf5G88LDWTHrk9qW2FfJBecZg3b/nz0TlcWMHRXrLZ9Q67uwUkJD kBCPmRt8tWqONGZ4gC/cgmJgyKaT+9qYD4HCw1AmSKjsOmHyTxmyugqjhkFzNUHpem SL14UM9z9/t7MMP1K7TMXG6xypEfXB4yN0WsMkaU= Received: from smtp46.i.mail.ru (smtp46.i.mail.ru [94.100.177.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id E88CE6EC58 for ; Tue, 3 Aug 2021 16:38:49 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org E88CE6EC58 Received: by smtp46.i.mail.ru with esmtpa (envelope-from ) id 1mAud5-0008NY-BE; Tue, 03 Aug 2021 16:38:49 +0300 To: , References: <652dc466ebae43d3ac541785b57864d6519a91c7.1627864075.git.tsafin@tarantool.org> In-Reply-To: <652dc466ebae43d3ac541785b57864d6519a91c7.1627864075.git.tsafin@tarantool.org> Date: Tue, 3 Aug 2021 16:38:44 +0300 Message-ID: <0ea601d7886c$e12e6a80$a38b3f80$@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQKU0cwvkTasfMq0ugtyZVj5je82UANEZrzOqc0Qs5A= Content-Language: ru X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD941C43E597735A9C36A98DBA789EBB6AE26DB9A6C1D9BF7E0182A05F538085040C1FC0F7D1BBF3BE2D7823D01951489B2F778C84F2EDDCB048D280342A18C71A6 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7E628FE8A185FCFBEEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637D3219148F76DED538638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8D5772C933CC587F81550F995EA4A5C11117882F4460429724CE54428C33FAD305F5C1EE8F4F765FCAA867293B0326636D2E47CDBA5A96583BD4B6F7A4D31EC0BC014FD901B82EE079FA2833FD35BB23D27C277FBC8AE2E8BF1175FABE1C0F9B6A471835C12D1D977C4224003CC836476EB9C4185024447017B076A6E789B0E975F5C1EE8F4F765FC6C26A347C79991473AA81AA40904B5D9CF19DD082D7633A078D18283394535A93AA81AA40904B5D98AA50765F7900637551633F68DD64AD2D81D268191BDAD3D698AB9A7B718F8C4D1B931868CE1C5781A620F70A64A45A98AA50765F79006372E808ACE2090B5E1725E5C173C3A84C3C5EA940A35A165FF2DBA43225CD8A89FB26E97DCB74E625235872C767BF85DA2F004C90652538430E4A6367B16DE6309 X-C1DE0DAB: 0D63561A33F958A57978BA72AF85828BD592DDA439DF316A9BBB5A1FD6B68CC0D59269BC5F550898D99A6476B3ADF6B47008B74DF8BB9EF7333BD3B22AA88B938A852937E12ACA751B940EDA0DFB0535410CA545F18667F91A7EA1CDA0B5A7A0 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D340CB2836B82369449DD0D2D0CA0138B5FAD387175B802BCAA49A43CB66ED9CB03AC3A301055D491A91D7E09C32AA3244C4F4EFAB876974C057F2BD0AA54220954F522A1CF68F4BE0583B48618A63566E0 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2bioj9N286KAyvN7iiVKpVCpfdA== X-Mailru-Sender: 6CA451E36783D721CBEA96CEA26D325D7AF38F5BAB1B7A53F95EFBBB7FF66BFDB7CBEF92542CD7C82F97C478340294DCC77752E0C033A69E0F0C7111264B8915FF1320A92A5534336C18EFA0BB12DBB0 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH v3 5/9] box, datetime: messagepack support for datetime X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Timur Safin via Tarantool-patches Reply-To: Timur Safin Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" After discussions with Sergey Petrenko I've realized that there were several bugs in a way datetime was introduced to fied_def.c, please see patch below... > From: Timur Safin > Subject: [PATCH v3 5/9] box, datetime: messagepack support for = datetime >=20 > Serialize datetime_t as newly introduced MP_EXT type. > It saves 1 required integer field and upto 2 optional > unsigned fields in very compact fashion. > - secs is required field; > - but nsec, offset are both optional; >=20 > * json, yaml serialization formats, lua output mode > supported; > * exported symbols for datetime messagepack size calculations > so they are available for usage on Lua side. >=20 > Part of #5941 > Part of #5946 >=20 > diff --git a/src/box/field_def.c b/src/box/field_def.c > index 51acb8025..6964e3e9f 100644 > --- a/src/box/field_def.c > +++ b/src/box/field_def.c > @@ -67,11 +67,12 @@ const uint32_t field_mp_type[] =3D { > /* [FIELD_TYPE_VARBINARY] =3D */ 1U << MP_BIN, > /* [FIELD_TYPE_SCALAR] =3D */ (1U << MP_UINT) | (1U << MP_INT) | > (1U << MP_FLOAT) | (1U << MP_DOUBLE) | (1U << MP_STR) | > - (1U << MP_BIN) | (1U << MP_BOOL), > + (1U << MP_BIN) | (1U << MP_BOOL) | (1U << MP_DATETIME), > /* [FIELD_TYPE_DECIMAL] =3D */ 0, /* only MP_DECIMAL is supported = */ > /* [FIELD_TYPE_UUID] =3D */ 0, /* only MP_UUID is supported */ > /* [FIELD_TYPE_ARRAY] =3D */ 1U << MP_ARRAY, > /* [FIELD_TYPE_MAP] =3D */ (1U << MP_MAP), > + /* [FIELD_TYPE_DATETIME] =3D */ 0, /* only MP_DATETIME is supported = */ > }; Here datetime is in the incorrect definition: it's in field_mp_type[] but should be in field_ext_type[] as bein MP_EXT type. >=20 > const uint32_t field_ext_type[] =3D { > @@ -88,6 +89,7 @@ const uint32_t field_ext_type[] =3D { > /* [FIELD_TYPE_UUID] =3D */ 1U << MP_UUID, > /* [FIELD_TYPE_ARRAY] =3D */ 0, > /* [FIELD_TYPE_MAP] =3D */ 0, > + /* [FIELD_TYPE_DATETIME] =3D */ 1U << MP_DATETIME, > }; >=20 > const char *field_type_strs[] =3D { > @@ -104,6 +106,7 @@ const char *field_type_strs[] =3D { > /* [FIELD_TYPE_UUID] =3D */ "uuid", > /* [FIELD_TYPE_ARRAY] =3D */ "array", > /* [FIELD_TYPE_MAP] =3D */ "map", > + /* [FIELD_TYPE_DATETIME] =3D */ "datetime", > }; >=20 > const char *on_conflict_action_strs[] =3D { > @@ -128,20 +131,21 @@ field_type_by_name_wrapper(const char *str, = uint32_t > len) > * values can be stored in the j type. > */ > static const bool field_type_compatibility[] =3D { > - /* ANY UNSIGNED STRING NUMBER DOUBLE INTEGER BOOLEAN > VARBINARY SCALAR DECIMAL UUID ARRAY MAP */ > -/* ANY */ true, false, false, false, false, false, = false, > false, false, false, false, false, false, > -/* UNSIGNED */ true, true, false, true, false, true, = false, > false, true, false, false, false, false, > -/* STRING */ true, false, true, false, false, false, = false, > false, true, false, false, false, false, > -/* NUMBER */ true, false, false, true, false, false, = false, > false, true, false, false, false, false, > -/* DOUBLE */ true, false, false, true, true, false, = false, > false, true, false, false, false, false, > -/* INTEGER */ true, false, false, true, false, true, = false, > false, true, false, false, false, false, > -/* BOOLEAN */ true, false, false, false, false, false, = true, > false, true, false, false, false, false, > -/* VARBINARY*/ true, false, false, false, false, false, = false, > true, true, false, false, false, false, > -/* SCALAR */ true, false, false, false, false, false, = false, > false, true, false, false, false, false, > -/* DECIMAL */ true, false, false, true, false, false, = false, > false, true, true, false, false, false, > -/* UUID */ true, false, false, false, false, false, = false, > false, false, false, true, false, false, > -/* ARRAY */ true, false, false, false, false, false, = false, > false, false, false, false, true, false, > -/* MAP */ true, false, false, false, false, false, = false, > false, false, false, false, false, true, > + /* ANY UNSIGNED STRING NUMBER DOUBLE INTEGER BOOLEAN > VARBINARY SCALAR DECIMAL UUID ARRAY MAP DATETIME */ > +/* ANY */ true, false, false, false, false, false, = false, > false, false, false, false, false, false, false, > +/* UNSIGNED */ true, true, false, true, false, true, = false, > false, true, false, false, false, false, false, > +/* STRING */ true, false, true, false, false, false, = false, > false, true, false, false, false, false, false, > +/* NUMBER */ true, false, false, true, false, false, = false, > false, true, false, false, false, false, false, > +/* DOUBLE */ true, false, false, true, true, false, = false, > false, true, false, false, false, false, false, > +/* INTEGER */ true, false, false, true, false, true, = false, > false, true, false, false, false, false, false, > +/* BOOLEAN */ true, false, false, false, false, false, = true, > false, true, false, false, false, false, false, > +/* VARBINARY*/ true, false, false, false, false, false, = false, > true, true, false, false, false, false, false, > +/* SCALAR */ true, false, false, false, false, false, = false, > false, true, false, false, false, false, false, > +/* DECIMAL */ true, false, false, true, false, false, = false, > false, true, true, false, false, false, false, > +/* UUID */ true, false, false, false, false, false, = false, > false, false, false, true, false, false, false, > +/* ARRAY */ true, false, false, false, false, false, = false, > false, false, false, false, true, false, false, > +/* MAP */ true, false, false, false, false, false, = false, > false, false, false, false, false, true, false, > +/* DATETIME */ true, false, false, false, false, false, = false, > false, false, false, false, false, false, true, > }; Also here we did not put datetime to the scalar column, while as=20 being scalar type it should be possible to assign datetime values to the scalar field. [Also we may pay attention to the fact that uuid has the same problem - it will be investigated separately] Here are changes we need to introduce to the code in patch: ------------------------------------------ diff --git a/src/box/field_def.c b/src/box/field_def.c index 6964e3e9f..2682a42ee 100644 --- a/src/box/field_def.c +++ b/src/box/field_def.c @@ -67,7 +67,7 @@ const uint32_t field_mp_type[] =3D { /* [FIELD_TYPE_VARBINARY] =3D */ 1U << MP_BIN, /* [FIELD_TYPE_SCALAR] =3D */ (1U << MP_UINT) | (1U << = MP_INT) | (1U << MP_FLOAT) | (1U << MP_DOUBLE) | (1U << MP_STR) | - (1U << MP_BIN) | (1U << MP_BOOL) | (1U << MP_DATETIME), + (1U << MP_BIN) | (1U << MP_BOOL), /* [FIELD_TYPE_DECIMAL] =3D */ 0, /* only MP_DECIMAL is = supported */ /* [FIELD_TYPE_UUID] =3D */ 0, /* only MP_UUID is supported = */ /* [FIELD_TYPE_ARRAY] =3D */ 1U << MP_ARRAY, @@ -84,7 +84,8 @@ const uint32_t field_ext_type[] =3D { /* [FIELD_TYPE_INTEGER] =3D */ 0, /* [FIELD_TYPE_BOOLEAN] =3D */ 0, /* [FIELD_TYPE_VARBINARY] =3D */ 0, - /* [FIELD_TYPE_SCALAR] =3D */ (1U << MP_DECIMAL) | (1U << = MP_UUID), + /* [FIELD_TYPE_SCALAR] =3D */ (1U << MP_DECIMAL) | (1U << = MP_UUID) | + (1U << MP_DATETIME), /* [FIELD_TYPE_DECIMAL] =3D */ 1U << MP_DECIMAL, /* [FIELD_TYPE_UUID] =3D */ 1U << MP_UUID, /* [FIELD_TYPE_ARRAY] =3D */ 0, @@ -145,7 +146,7 @@ static const bool field_type_compatibility[] =3D { /* UUID */ true, false, false, false, false, false, = false, false, false, false, true, false, false, false, /* ARRAY */ true, false, false, false, false, false, = false, false, false, false, false, true, false, false, /* MAP */ true, false, false, false, false, false, = false, false, false, false, false, false, true, false, -/* DATETIME */ true, false, false, false, false, false, = false, false, false, false, false, false, false, true, +/* DATETIME */ true, false, false, false, false, false, = false, false, true, false, false, false, false, true, }; Bool ------------------------------------------ Will update patch to push it very soon. Regards, Timur