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 01CBC6EC55; Sat, 31 Jul 2021 01:30:34 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 01CBC6EC55 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1627684234; bh=imh1f4eV7E1/MVYwgIQq1tJI3o2F4o3Cci5h2znweYI=; h=To:Cc:References:In-Reply-To:Date:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=p8XjQZ1Gce2xiqmlyGZpf+smSwKvkf/mUIzKRCZ3O3FMSwPJz1Uhb1QJkXeFjJrPZ FKQzScEj2PivBROxDF+LeOASzbDDKfwagTk2TYwISqsEFccC9CoXpfbWhCYT9h5OFf rX5evKIQnV22r8aGhobqtQvVvtUssRUldLRBAQjM= Received: from smtp52.i.mail.ru (smtp52.i.mail.ru [94.100.177.112]) (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 30F2B6EC55 for ; Sat, 31 Jul 2021 01:30:32 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 30F2B6EC55 Received: by smtp52.i.mail.ru with esmtpa (envelope-from ) id 1m9b1T-0003op-6f; Sat, 31 Jul 2021 01:30:31 +0300 To: "'Oleg Babin'" , Cc: References: <1c56006b-159a-f68e-bde0-b718b92974ce@tarantool.org> In-Reply-To: <1c56006b-159a-f68e-bde0-b718b92974ce@tarantool.org> Date: Sat, 31 Jul 2021 01:30:31 +0300 Message-ID: <045501d78592$8167c560$84375020$@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQNJI0ot4YBfKbZyj2tYNprdOv6c+gKiak2oA1rPIf2oR/EfcA== Content-Language: ru X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD941C43E597735A9C33D83595CA30D6DC5179D1C9A908C47E5182A05F5380850400B9A77F8D898807797758864C78AF6C0B086CAA6AADA830176ABE9DB9F0D0FF4 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE72F22E6DC541F75D9EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637A431CDDF496E6E598638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8614C96FE65AC232B2AC919FE3A7CAD22117882F4460429724CE54428C33FAD305F5C1EE8F4F765FCAA867293B0326636D2E47CDBA5A96583BD4B6F7A4D31EC0BC014FD901B82EE079FA2833FD35BB23D27C277FBC8AE2E8BAA867293B0326636D2E47CDBA5A96583BA9C0B312567BB2376E601842F6C81A19E625A9149C048EE91ADC097FE2C3A08EA93887B71B66F2BD8FC6C240DEA7642DBF02ECDB25306B2B78CF848AE20165D0A6AB1C7CE11FEE3251EFD5447B32ED6C0837EA9F3D19764C4224003CC836476EA7A3FFF5B025636E2021AF6380DFAD1A18204E546F3947CB11811A4A51E3B096D1867E19FE1407959CC434672EE6371089D37D7C0E48F6C8AA50765F7900637B8F435DEDE9E76EBEFF80C71ABB335746BA297DBC24807EABDAD6C7F3747799A X-B7AD71C0: AC4F5C86D027EB782CDD5689AFBDA7A213B5FB47DCBC3458F0AFF96BAACF4158235E5A14AD4A4A4625E192CAD1D9E79DB53CE84373687089E6CA8DCED79B4C91 X-C1DE0DAB: 0D63561A33F958A54861258D248EE5BA55A41D19E9E309878A6B1F96B3B72B62D59269BC5F550898D99A6476B3ADF6B47008B74DF8BB9EF7333BD3B22AA88B938A852937E12ACA751B940EDA0DFB0535410CA545F18667F91A7EA1CDA0B5A7A0 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D34D8C933888226C841810A21679201983B3CED38EDDF9BCD69C8EC356E334978A5FFA9DAC3720E0E4C1D7E09C32AA3244C47DC21DA28A702D4986B1349BE4940B21DD47778AE04E04DFACE5A9C96DEB163 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojWBddABnKmoIYfSdiMcc0eQ== X-Mailru-Sender: B5B6A6EBBD94DAD8DF9DB9650A8885C867BC0A5397841DD8000E381AC27ADDA58E9A60FF46E457A01EC9E4A2C82A33BC8C24925A86E657CE0C70AEE3C9A96FBAB3D7EE8ED63280BE112434F685709FCF0DA7A0AF5A3A8387 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH resend v2 08/11] lua, datetime: calculated attributes for datetimes 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 Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Hello Oleg again! : From: Oleg Babin : Subject: Re: [Tarantool-patches] [PATCH resend v2 08/11] lua, datetime: : calculated attributes for datetimes : : Thanks for your patch. See one comment below. : : Also this change should be squashed into the first patch. Agreed as well. : : : On 28.07.2021 13:34, Timur Safin via Tarantool-patches wrote: : > * introduced a set of calculated attributes to data object, e.g.: : > - timestamp, seconds, microseconds, minute, or hours : > : > Part of #5941 : > --- : > src/lua/datetime.lua | 51 ++++++++++++++++++++++------------ : > test/app-tap/datetime.test.lua | 17 +++++++++++- : > 2 files changed, 50 insertions(+), 18 deletions(-) : > : > diff --git a/src/lua/datetime.lua b/src/lua/datetime.lua : > index 9ec06d8d8..7a208cef9 100644 : > --- a/src/lua/datetime.lua : > +++ b/src/lua/datetime.lua : > @@ -224,6 +224,36 @@ local function interval_serialize(self) : > return { secs = self.secs, nsec = self.nsec } : > end : > : > +local datetime_index = function(self, key) : > + local attributes = { : : This change looks like pessimization because currently we need to : recreate "attributes" table : : for each function call. I suggest to use `attributes` as `__index` but : not such function. What would you say if I simply precache this attributes table in local, and then proceed this way? ----------------------------------------- -local datetime_index = function(self, key) - local attributes = { +local datetime_index_handlers = { unixtime = function(self) return self.secs end, + timestamp = function(self) return tonumber(self.secs) + self.nsec / 1e9 end, + nanoseconds = function(self) return self.secs * 1e9 + self.nsec end, + microseconds = function(self) return self.secs * 1e6 + self.nsec / 1e3 end, + milliseconds = function(self) return self.secs * 1e3 + self.nsec / 1e6 end, + seconds = function(self) return tonumber(self.secs) + self.nsec / 1e9 end, + minutes = function(self) return (tonumber(self.secs) + self.nsec / 1e9) / 60 end, + hours = function(self) return (tonumber(self.secs) + self.nsec / 1e9) / (60 * 60) end, + days = function(self) return (tonumber(self.secs) + self.nsec / 1e9) / (60 * 60) / 24 end, + add = function(self) return function(self, o) return interval_increment(self, o, 1) end end, + sub = function(self) return function(self, o) return interval_increment(self, o, -1) end end, } - return attributes[key] ~= nil and attributes[key](self) or nil + +local datetime_index = function(self, key) + return datetime_index_handlers[key] ~= nil and + datetime_index_handlers[key](self) or nil end ----------------------------------------- I mean we still carefully check existence of an asked key, and return nil if there is no such key at all. Is it much different than what you've meant? : : : > + timestamp = function(self) : > + return tonumber(self.secs) + self.nsec / 1e9 : > + end, : > + nanoseconds = function(self) : > + return tonumber(self.secs * 1e9 + self.nsec) : > + end, : > + microseconds = function(self) : > + return tonumber(self.secs * 1e6 + self.nsec / 1e3) : > + end, : > + milliseconds = function(self) : > + return tonumber(self.secs * 1e3 + self.nsec / 1e6) : > + end, : > + seconds = function(self) : > + return tonumber(self.secs) + self.nsec / 1e9 : > + end, : > + minutes = function(self) : > + return (tonumber(self.secs) + self.nsec / 1e9) / 60 : > + end, : > + hours = function(self) : > + return (tonumber(self.secs) + self.nsec / 1e9) / (60 * 60) : > + end, : > + days = function(self) : > + return (tonumber(self.secs) + self.nsec / 1e9) / (60 * 60) / : 24 : > + end, : > + } : > + return attributes[key] ~= nil and attributes[key](self) or nil : > +end : > + : > local datetime_mt = { : > -- __tostring = datetime_tostring, : > __serialize = datetime_serialize, Thanks, Timur