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 921DE6EC55; Thu, 29 Jul 2021 21:55:31 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 921DE6EC55 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1627584931; bh=5jfdD4KzhtDFDGp0xAIQzaCfbxNki6uA/JxpA0CJEiw=; h=To:Cc:References:Date:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=rCxV8PyGokbO8ioxB7Tk0QzeJQ8vm7Ns5MYEiUTNGAAJkDMnl7FX+vwxwqheZULS/ o2PU/rv662LJpmOCf3mXB3qZFWTxlsJX+SCKAz4GUGHMhHyGH1kIjpK4Ch1uJsb1hl 3fICI1knSQrHxr3S4rqrq682nXtqCOspNxDS9KJU= Received: from smtp63.i.mail.ru (smtp63.i.mail.ru [217.69.128.43]) (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 06D836EC55 for ; Thu, 29 Jul 2021 21:55:29 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 06D836EC55 Received: by smtp63.i.mail.ru with esmtpa (envelope-from ) id 1m9BBo-0000Tf-PP; Thu, 29 Jul 2021 21:55:29 +0300 To: Timur Safin , v.shpilevoy@tarantool.org Cc: tarantool-patches@dev.tarantool.org References: Message-ID: <15808762-a1f9-e32e-86d1-8262839e888d@tarantool.org> Date: Thu, 29 Jul 2021 21:55:28 +0300 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-GB X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD941C43E597735A9C3104FC76DFAAAAF7DA068FE323FAC4379182A05F53808504073B401C2147F3A4004018DCA296F0CA29EE623BB066D1ACC4763EFC544C57280 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE712EB008F780777E9EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637160171C9EBC7AFE48638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8EDD07BFD8516D3504E7B2AD79A8B2B33117882F4460429724CE54428C33FAD305F5C1EE8F4F765FCF80095D1E57F4578A471835C12D1D9774AD6D5ED66289B52BA9C0B312567BB23117882F44604297287769387670735201E561CDFBCA1751FF04B652EEC242312D2E47CDBA5A96583BA9C0B312567BB2376E601842F6C81A19E625A9149C048EE4B6963042765DA4B7C6FCE95544A9834D8FC6C240DEA7642DBF02ECDB25306B2B78CF848AE20165D0A6AB1C7CE11FEE3A7DFDF579AB090EF6136E347CC761E07C4224003CC836476EA7A3FFF5B025636E2021AF6380DFAD1A18204E546F3947CB11811A4A51E3B096D1867E19FE1407959CC434672EE6371089D37D7C0E48F6C8AA50765F7900637B8F435DEDE9E76EBEFF80C71ABB335746BA297DBC24807EABDAD6C7F3747799A X-B7AD71C0: AC4F5C86D027EB782CDD5689AFBDA7A213B5FB47DCBC3458F0AFF96BAACF4158235E5A14AD4A4A4625E192CAD1D9E79DB53CE84373687089F4D8D364C1EB92EF X-C1DE0DAB: 0D63561A33F958A5FF062B0BB7F286023F8103E0F1CD9AEFB87535432FCD63EAD59269BC5F550898D99A6476B3ADF6B47008B74DF8BB9EF7333BD3B22AA88B938A852937E12ACA753530422897FB34C3410CA545F18667F91A7EA1CDA0B5A7A0 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D34A9A0A0BF1A2CAC62C173E4AD90D5B4DFDA99342D0CB85F2DE8299192E4E52DDC158E1687BDB4BD891D7E09C32AA3244C52175271A75D41A773295C23B3503F9E51E887DA02A9F7BFFACE5A9C96DEB163 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojPp/mPgZxawGS7L66LA9mog== X-Mailru-Sender: 583F1D7ACE8F49BD1042885CEC987B6B7C4E07D69E919A7504018DCA296F0CA2BE4EBEF89FC7D6FA7019711D9D5B048E1458020726E2BC9FD5ECBA0B92C0A936CDC7563AA7CEBD287402F9BA4338D657ED14614B50AE0675 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH resend v2 00/11] Initial datetime support 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: Oleg Babin via Tarantool-patches Reply-To: Oleg Babin Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Thanks for your patch. I can't say that it will be complete review but it's brief feedback. I left comments for some patches. Currently it is not complete series, in fact it looks like as one-two commits with portion of fixups on the top of them. I believe this module should be implemented in pure C. I don't think that arithmetic will work fast enough in C. Probably datetime and interval should be logically splitted into 2 parts. ``` tarantool> require('datetime') --- - weeks: 'function: 0x010ca0aa48'   minutes: 'function: 0x010ca694d8'   new: 'function: 0x010ca5e098'   strftime: 'function: 0x010caa8fb0'   tostring: 'function: 0x010ca2f700'   hours: 'function: 0x010ca671c0'   parse_date: 'function: 0x010ca96f80'   seconds: 'function: 0x010ca63b78'   parse_time: 'function: 0x010ca22208'   is_interval: 'function: 0x010caa6d20'   months: 'function: 0x010ca61130'   is_datetime: 'function: 0x010ca5d3a0'   asctime: 'function: 0x010caa8e28'   ctime: 'function: 0x010ca88260'   parse_zone: 'function: 0x010ca02eb0'   now: 'function: 0x010ca86e70'   days: 'function: 0x010ca81980'   years: 'function: 0x010ca61438'   parse: 'function: 0x010ca9ad38'   interval: 'function: 0x010c9feb60' ... ``` It's not clear that part is about intervals and datetime. ``` -- Currently datetime.now() + datetime.week(1) -- Possible version datetime.now() + interval.week(1) ``` Interface is better than in previous time. Thanks for working on this series. On 28.07.2021 13:34, Timur Safin via Tarantool-patches wrote: > * Version #2: > > - fixed problem with overloaded '-' and '+' operations for datetime > arguments; > - fixed messagepack serialization problems; > - heavily documented MessagePack serialization schema in the code; > - introduced working implementation of datetime hints for storage engines; > - made interval related names be more consistent, renamed durations and period > to intervals, i.e. t_datetime_duration to datetime_interval_t, > duration_* to interval_*, period to interval; > - properly implemented all reasonable cases of datetime+interval > arithmetic; > - moved all initialization code to utils.c; > - renamed core/mp_datetime.c to core/datetime.c because it makes more > sense now; > > * Version #1 - initial RFC series > > In brief > -------- > This patchset implements datetime lua support in box, with serialization > to messagepack, yaml, json and lua mode. Also it contains storage > engines' indices implementation for datetime type introduced. > > * Current implementation is heavily influenced by Sci-Lua lua-time module > https://github.com/stepelu/lua-time > e.g. you could find very similar approach for handling of operations > with year or month long intervals (which should be handled differently than > usual intervals of seconds, or days). > > * But internally we actually use Christian Hanson' c-dt module > https://github.com/chansen/c-dt > (though it has been modified slightly for cleaner integration > into cmake build process) > > > Datetime Module API > ------------------- > > We used to have here draft documentation of datetime module api, but > for a convenience it has been extracted to the discussion topic there - > https://github.com/tarantool/tarantool/discussions/6244#discussioncomment-1043988 > > Messagepack serialization schema > -------------------------------- > > In short it looks like: > - now we introduce new MP_EXT extension type #4; > - we may save 1 required and 2 optional fields for datetime field; > > In details it's explained in MessagePack serialization schema depicted here: > https://github.com/tarantool/tarantool/discussions/6244#discussioncomment-1043990 > > > https://github.com/tarantool/tarantool/issues/5941 > https://github.com/tarantool/tarantool/issues/5946 > > https://github.com/tarantool/tarantool/tree/tsafin/gh-5941-datetime-v3 > > Timur Safin (11): > build: add Christian Hansen c-dt to the build > lua: built-in module datetime > lua, datetime: datetime tests > lua, datetime: display datetime > box, datetime: add messagepack support for datetime > box, datetime: datetime comparison for indices > lua, datetime: proper datetime encoding > lua, datetime: calculated attributes for datetimes > lua, datetime: time intervals support > lua, datetime: unixtime, timestamp setters in datetime.lua > datetime: changelog for datetime module > > .gitmodules | 3 + > CMakeLists.txt | 8 + > .../gh-5941-datetime-type-support.md | 4 + > cmake/BuildCDT.cmake | 6 + > src/CMakeLists.txt | 3 + > src/box/field_def.c | 52 +- > src/box/field_def.h | 4 + > src/box/lua/serialize_lua.c | 7 +- > src/box/memtx_space.c | 3 +- > src/box/msgpack.c | 7 +- > src/box/tuple_compare.cc | 50 + > src/box/vinyl.c | 3 +- > src/exports.h | 29 + > src/lib/core/CMakeLists.txt | 4 +- > src/lib/core/datetime.c | 251 ++++ > src/lib/core/datetime.h | 114 ++ > src/lib/core/mp_extension_types.h | 1 + > src/lib/mpstream/mpstream.c | 11 + > src/lib/mpstream/mpstream.h | 4 + > src/lua/datetime.lua | 1016 +++++++++++++++++ > src/lua/init.c | 4 +- > src/lua/msgpack.c | 12 + > src/lua/msgpackffi.lua | 18 + > src/lua/serializer.c | 4 + > src/lua/serializer.h | 2 + > src/lua/utils.c | 28 +- > src/lua/utils.h | 12 + > test/app-tap/datetime.test.lua | 367 ++++++ > test/engine/datetime.result | 77 ++ > test/engine/datetime.test.lua | 35 + > test/unit/CMakeLists.txt | 2 + > test/unit/datetime.c | 220 ++++ > test/unit/datetime.result | 358 ++++++ > third_party/c-dt | 1 + > third_party/lua-cjson/lua_cjson.c | 8 + > third_party/lua-yaml/lyaml.cc | 6 +- > 36 files changed, 2709 insertions(+), 25 deletions(-) > create mode 100644 changelogs/unreleased/gh-5941-datetime-type-support.md > create mode 100644 cmake/BuildCDT.cmake > create mode 100755 src/lib/core/datetime.c > create mode 100644 src/lib/core/datetime.h > create mode 100644 src/lua/datetime.lua > create mode 100755 test/app-tap/datetime.test.lua > create mode 100644 test/engine/datetime.result > create mode 100644 test/engine/datetime.test.lua > create mode 100644 test/unit/datetime.c > create mode 100644 test/unit/datetime.result > create mode 160000 third_party/c-dt >