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 275206EC55; Thu, 29 Jul 2021 21:58:32 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 275206EC55 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1627585112; bh=vP9WvS34Z+fxB+5Z8hp2UgELwU2RiatN0ZfVvTC95n4=; 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=EkY0cTwvsNQ2HbV8m80y0FWcjyXvEljnoiRtpOsRNwl8U1xteYyc+nXQqhaZ+CVix Pa6FsFnpCBdsX9o3J0W828AQ+7PlB9+zjqH0c6t6NIGyyPrW5/Of3enUzIgcdKLDxL CbByfOjFBQvYfrlFIcAQrcXCj69f3K65usCNmTHk= Received: from smtp38.i.mail.ru (smtp38.i.mail.ru [94.100.177.98]) (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 4FBA06EC57 for ; Thu, 29 Jul 2021 21:57:15 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 4FBA06EC57 Received: by smtp38.i.mail.ru with esmtpa (envelope-from ) id 1m9BDW-0003On-G3; Thu, 29 Jul 2021 21:57:14 +0300 To: Timur Safin , v.shpilevoy@tarantool.org Cc: tarantool-patches@dev.tarantool.org References: Message-ID: <1c56006b-159a-f68e-bde0-b718b92974ce@tarantool.org> Date: Thu, 29 Jul 2021 21:57:14 +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: 7bit Content-Language: en-GB X-7564579A: 78E4E2B564C1792B X-77F55803: 4F1203BC0FB41BD941C43E597735A9C34755E0A9F196FCB739C645213AB7C8E0182A05F53808504067E141E581446E1231DCD9CD1C47B1437D02E3AA54BAE79DB57618D1559BDE4C X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7922E451CE6E839B1EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006376F127A835590024F8F08D7030A58E5AD1A62830130A00468AEEEE3FBA3A834EE7353EFBB5533756682A4B7DEF7839881A6B3C9A99A3022E8E60EE3AE2E128DECA471835C12D1D9774AD6D5ED66289B5259CC434672EE6371117882F4460429724CE54428C33FAD30A8DF7F3B2552694AC26CFBAC0749D213D2E47CDBA5A9658359CC434672EE6371117882F4460429728AD0CFFFB425014E868A13BD56FB6657D81D268191BDAD3DC09775C1D3CA48CF02F17A02D1C51F88BA3038C0950A5D36C8A9BA7A39EFB766EC990983EF5C0329BA3038C0950A5D36D5E8D9A59859A8B66CA36251E56197FE76E601842F6C81A1F004C906525384307823802FF610243DF43C7A68FF6260569E8FC8737B5C2249EC8D19AE6D49635B68655334FD4449CB9ECD01F8117BC8BEAAAE862A0553A39223F8577A6DFFEA7C741622C43FECC0DC43847C11F186F3C59DAA53EE0834AAEE X-B7AD71C0: AC4F5C86D027EB782CDD5689AFBDA7A213B5FB47DCBC3458F0AFF96BAACF4158235E5A14AD4A4A4625E192CAD1D9E79DB53CE843736870896353FB69EF176D1D X-C1DE0DAB: 0D63561A33F958A57915A713B64586F43DF082782E888A8B1BF9D9372C307443D59269BC5F550898D99A6476B3ADF6B47008B74DF8BB9EF7333BD3B22AA88B938A852937E12ACA7536C62C4FBC402878410CA545F18667F91A7EA1CDA0B5A7A0 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D3454548929AF40B4283974740509645BDC0507F489A4523088B94E3D7480974B25B5296BB91F6C1A771D7E09C32AA3244C3D2BA35FD462B06EDFCEDC3749DAF89C6C24832127668422FACE5A9C96DEB163 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojPp/mPgZxawGHBV+vWZQZ9Q== X-Mailru-Sender: 583F1D7ACE8F49BD1042885CEC987B6B97A15C1B93BD192231DCD9CD1C47B143F7F5837242FA16B27019711D9D5B048E1458020726E2BC9FD5ECBA0B92C0A936CDC7563AA7CEBD287402F9BA4338D657ED14614B50AE0675 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: Oleg Babin via Tarantool-patches Reply-To: Oleg Babin Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Thanks for your patch. See one comment below. Also this change should be squashed into the first patch. 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. > + 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, > @@ -232,23 +262,7 @@ local datetime_mt = { > __le = datetime_le, > __sub = datetime_sub, > __add = datetime_add, > - > - nanoseconds = function(self) > - return tonumber(self.secs*NANOS_PER_SEC + self.nsec) > - end, > - microseconds = function(self) > - return tonumber(self.secs*1e6 + self.nsec*1e3) > - end, > - seconds = function(self) > - return tonumber(self.secs + self.nsec*1e3) > - end, > - minutes = function(self) > - return tonumber((self._ticks/(1e6*60))%60) > - end, > - hours = function(self) > - return tonumber(self._ticks/(1e6*60*60)) > - end, > - > + __index = datetime_index, > } > > local interval_mt = { > @@ -257,6 +271,9 @@ local interval_mt = { > __eq = datetime_eq, > __lt = datetime_lt, > __le = datetime_le, > + __sub = datetime_sub, > + __add = datetime_add, > + __index = datetime_index, > } > > local function datetime_new_raw(secs, nsec, offset) > diff --git a/test/app-tap/datetime.test.lua b/test/app-tap/datetime.test.lua > index 09c968858..407d89556 100755 > --- a/test/app-tap/datetime.test.lua > +++ b/test/app-tap/datetime.test.lua > @@ -4,7 +4,7 @@ local tap = require('tap') > local test = tap.test("errno") > local date = require('datetime') > > -test:plan(5) > +test:plan(6) > > test:test("Simple tests for parser", function(test) > test:plan(2) > @@ -188,4 +188,19 @@ test:test("Parse iso date - invalid strings", function(test) > end > end) > > +test:test("Parse tiny date into seconds and other parts", function(test) > + test:plan(9) > + local str = '19700101 00:00:30.528' > + local tiny = date(str) > + test:ok(tiny.secs == 30, ("secs of '%s'"):format(str)) > + test:ok(tiny.nsec == 528000000, ("nsec of '%s'"):format(str)) > + test:ok(tiny.nanoseconds == 30528000000, "nanoseconds") > + test:ok(tiny.microseconds == 30528000, "microseconds") > + test:ok(tiny.milliseconds == 30528, "milliseconds") > + test:ok(tiny.seconds == 30.528, "seconds") > + test:ok(tiny.timestamp == 30.528, "timestamp") > + test:ok(tiny.minutes == 0.5088, "minuts") > + test:ok(tiny.hours == 0.00848, "hours") > +end) > + > os.exit(test:check() and 0 or 1)