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 CEF2F6EC56; Wed, 28 Jul 2021 13:37:59 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org CEF2F6EC56 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1627468679; bh=ZCp3TiAJtjH4dHVyTYqqvHNTx4nsqv/FXXo0F9zprTU=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=JB57DvjcEzFP8VBGvOVrqLOcE3H26ebOsMwrYFQVimkZ7a9VEUrVMWcRo9gJQhaOf x0CXFKy3nzJrYWaA5AFu52HceNXmKp52I78qnz70X84uaghNEe/j7rax43h7B/hnzt v9iAByL+qCCS84HrArU93u9GsKTxRd5cqVuFBgus= Received: from smtp57.i.mail.ru (smtp57.i.mail.ru [217.69.128.37]) (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 0AC366EC70 for ; Wed, 28 Jul 2021 13:34:33 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 0AC366EC70 Received: by smtp57.i.mail.ru with esmtpa (envelope-from ) id 1m8gtT-0008Bz-V1; Wed, 28 Jul 2021 13:34:32 +0300 To: v.shpilevoy@tarantool.org Date: Wed, 28 Jul 2021 13:34:09 +0300 Message-Id: <509f7a039e57914ef5a869735b1136fbd969a52b.1627468002.git.tsafin@tarantool.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-4EC0790: 10 X-7564579A: 78E4E2B564C1792B X-77F55803: 4F1203BC0FB41BD941C43E597735A9C34755E0A9F196FCB739C645213AB7C8E0182A05F538085040D30903FD1804A777DF7922F5774BCC9FF9F1372229B40340F3E9AFA13A624D44 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE705B093C0FC4B30B9EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006374F960C921106F05B8638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D83EA19E6EA5FAC7767E4DC473A9778060117882F4460429724CE54428C33FAD305F5C1EE8F4F765FC974A882099E279BDA471835C12D1D9774AD6D5ED66289B52BA9C0B312567BB23117882F446042972877693876707352033AC447995A7AD1828451B159A507268D2E47CDBA5A96583BA9C0B312567BB2376E601842F6C81A19E625A9149C048EE7532CA1512B81981E45489B29CB19804D8FC6C240DEA7642DBF02ECDB25306B2B78CF848AE20165D0A6AB1C7CE11FEE36FF1B927F95F331603F1AB874ED89028C4224003CC836476EA7A3FFF5B025636E2021AF6380DFAD1A18204E546F3947CB11811A4A51E3B096D1867E19FE1407959CC434672EE6371089D37D7C0E48F6C8AA50765F7900637B8F435DEDE9E76EBEFF80C71ABB335746BA297DBC24807EABDAD6C7F3747799A X-B7AD71C0: AC4F5C86D027EB782CDD5689AFBDA7A213B5FB47DCBC3458834459D11680B5057049CD6077D8DC1585DB72C2AB429356 X-C1DE0DAB: C20DE7B7AB408E4181F030C43753B8186998911F362727C414F749A5E30D975C7BEA09003D200E08C39CC12B25244D707548672B45ED3B629C2B6934AE262D3EE7EAB7254005DCED7532B743992DF240BDC6A1CF3F042BAD6DF99611D93F60EF824747F4BD2CC0FE699F904B3F4130E343918A1A30D5E7FCCB5012B2E24CD356 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D34AE88D5ADEBE7C9838D350CC6E32E708082BEDF183E40F47AAA69A6CDB077FB0502E784FBA9945C131D7E09C32AA3244CF4D929F69D774C26BB7B6606B5A5F22933C9DC155518937F83B48618A63566E0 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojiF1u9eOpfTTcKc3h1O0bMw== X-Mailru-Sender: B5B6A6EBBD94DAD8C47A93838048902D54E8C5C2A129CF37E0581142A3424CAAD5B96AA8844F609A1EC9E4A2C82A33BC8C24925A86E657CE0C70AEE3C9A96FBAB3D7EE8ED63280BE112434F685709FCF0DA7A0AF5A3A8387 X-Mras: Ok Subject: [Tarantool-patches] [PATCH resend v2 07/11] lua, datetime: proper datetime encoding 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" * correct incorrect encoding of MP_EXT sizes for datetime messagepack values; * export necessary symbols for datetime messagepack size calculations so they will be available for Lua consumption. Part of #5941 --- src/exports.h | 2 ++ src/lib/core/datetime.c | 15 ++++++++++----- src/lua/msgpackffi.lua | 10 ++++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/exports.h b/src/exports.h index 586444b65..3a1e8854c 100644 --- a/src/exports.h +++ b/src/exports.h @@ -437,6 +437,7 @@ EXPORT(mp_encode_decimal) EXPORT(mp_encode_double) EXPORT(mp_encode_float) EXPORT(mp_encode_uuid) +EXPORT(mp_encode_datetime) EXPORT(mp_ext_hint) EXPORT(mp_format) EXPORT(mp_fprint) @@ -446,6 +447,7 @@ EXPORT(mp_fprint_recursion) EXPORT(mp_parser_hint) EXPORT(mp_sizeof_decimal) EXPORT(mp_sizeof_uuid) +EXPORT(mp_sizeof_datetime) EXPORT(mp_snprint) EXPORT(mp_snprint_ext) EXPORT(mp_snprint_ext_default) diff --git a/src/lib/core/datetime.c b/src/lib/core/datetime.c index 26ba8a702..76b06eae5 100755 --- a/src/lib/core/datetime.c +++ b/src/lib/core/datetime.c @@ -83,8 +83,8 @@ mp_decode_Xint(const char **data) return 0; } -uint32_t -mp_sizeof_datetime(const struct datetime_t *date) +static inline uint32_t +mp_sizeof_datetime_raw(const struct datetime_t *date) { uint32_t sz = mp_sizeof_Xint(date->secs); @@ -94,10 +94,15 @@ mp_sizeof_datetime(const struct datetime_t *date) sz += mp_sizeof_Xint(date->nsec); if (date->offset) sz += mp_sizeof_Xint(date->offset); - return sz; } +uint32_t +mp_sizeof_datetime(const struct datetime_t *date) +{ + return mp_sizeof_ext(mp_sizeof_datetime_raw(date)); +} + struct datetime_t * datetime_unpack(const char **data, uint32_t len, struct datetime_t *date) { @@ -112,7 +117,7 @@ datetime_unpack(const char **data, uint32_t len, struct datetime_t *date) return date; svp = *data; - date->secs = mp_decode_Xint(data); + date->nsec = mp_decode_Xint(data); len -= *data - svp; if (len <= 0) @@ -153,7 +158,7 @@ datetime_pack(char *data, const struct datetime_t *date) char * mp_encode_datetime(char *data, const struct datetime_t *date) { - uint32_t len = mp_sizeof_datetime(date); + uint32_t len = mp_sizeof_datetime_raw(date); data = mp_encode_extl(data, MP_DATETIME, len); diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua index 271be857a..c47d77acb 100644 --- a/src/lua/msgpackffi.lua +++ b/src/lua/msgpackffi.lua @@ -26,6 +26,10 @@ char * mp_encode_uuid(char *data, const struct tt_uuid *uuid); uint32_t mp_sizeof_uuid(); +uint32_t +mp_sizeof_datetime(const struct t_datetime_tz *date); +char * +mp_encode_datetime(char *data, const struct t_datetime_tz *date); float mp_decode_float(const char **data); double @@ -144,6 +148,11 @@ local function encode_uuid(buf, uuid) builtin.mp_encode_uuid(p, uuid) end +local function encode_datetime(buf, date) + local p = buf:alloc(builtin.mp_sizeof_datetime(date)) + builtin.mp_encode_datetime(p, date) +end + local function encode_int(buf, num) if num >= 0 then if num <= 0x7f then @@ -322,6 +331,7 @@ on_encode(ffi.typeof('float'), encode_float) on_encode(ffi.typeof('double'), encode_double) on_encode(ffi.typeof('decimal_t'), encode_decimal) on_encode(ffi.typeof('struct tt_uuid'), encode_uuid) +on_encode(ffi.typeof('struct datetime_t'), encode_datetime) -------------------------------------------------------------------------------- -- Decoder -- 2.29.2