[Tarantool-patches] [PATCH v5 5/8] box, datetime: datetime comparison for indices

Vladimir Davydov vdavydov at tarantool.org
Tue Aug 17 22:05:15 MSK 2021


On Mon, Aug 16, 2021 at 02:59:39AM +0300, Timur Safin via Tarantool-patches wrote:
> diff --git a/test/engine/datetime.test.lua b/test/engine/datetime.test.lua
> new file mode 100644
> index 000000000..3685e4d4b
> --- /dev/null
> +++ b/test/engine/datetime.test.lua
> @@ -0,0 +1,35 @@
> +env = require('test_run')
> +test_run = env.new()
> +engine = test_run:get_cfg('engine')
> +
> +date = require('datetime')
> +
> +_ = box.schema.space.create('T', {engine = engine})
> +_ = box.space.T:create_index('pk', {parts={1,'datetime'}})
> +
> +box.space.T:insert{date('1970-01-01')}\
> +box.space.T:insert{date('1970-01-02')}\
> +box.space.T:insert{date('1970-01-03')}\
> +box.space.T:insert{date('2000-01-01')}

We need more tests. Off the top of my head:
 - unique constraint
 - multi-part indexes
 - index:get(key) / index:select(key)
 - index:replace
 - index:update / index:upsert
 - dates before unix epoch and very big dates
 - hint corner cases (when two different dates have the same hint)
 - snapshot and recovery

> +
> +o = box.space.T:select{}
> +assert(tostring(o[1][1]) == '1970-01-01T00:00Z')
> +assert(tostring(o[2][1]) == '1970-01-02T00:00Z')
> +assert(tostring(o[3][1]) == '1970-01-03T00:00Z')
> +assert(tostring(o[4][1]) == '2000-01-01T00:00Z')
> +
> +for i = 1,16 do\
> +    box.space.T:insert{date.now()}\
> +end

Please don't use now(), because it'd make it difficult to reproduce
a failure.

> +
> +a = box.space.T:select{}
> +err = {}
> +for i = 1, #a - 1 do\
> +    if a[i][1] >= a[i+1][1] then\
> +        table.insert(err, {a[i][1], a[i+1][1]})\
> +        break\
> +    end\
> +end
> +
> +err
> +box.space.T:drop()


More information about the Tarantool-patches mailing list