[Tarantool-patches] [PATCH v2 0/4] Don't truncate float in update

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Wed Feb 5 01:53:43 MSK 2020


The patchset fixes float value truncation in
tuple/space:update/upsert. First commit fixes the actual issue,
but introduces another bug that a float value can be stored into a
field having double type in its format.

The rest 3 commits fix this new bug.

However, there is an alternative how these 3 could be done. My
solution is that I calculate the result types in
xrow_update_*_store() functions. Because of that I don't know the
types during xrow_update_*_sizeof(), and it needs to return the
maximal possible size instead of exact size. The alternative is to
calculate types during sizeof. It would allow to return the exact
size. But it also would complicate the code. I can implement this
option if it looks better.

Branch: http://github.com/tarantool/tarantool/tree/gerold103/gh-4701-update-float-truncate
Issue: https://github.com/tarantool/tarantool/issues/4701

Changes in V2:
- Taken into account, that a field may have double type in its
  tuple format, and can't store floats at all.

Vladislav Shpilevoy (4):
  tuple: don't truncate float in :update()
  tuple: pass tuple format to xrow_update_*_store()
  tuple: allow xrow_update sizeof reserve more memory
  tuple: use field type in update of a float/double

 src/box/lua/tuple.c         |   2 +-
 src/box/memtx_space.c       |   7 ++-
 src/box/session_settings.c  |   2 +-
 src/box/space.c             |   6 +--
 src/box/tuple.c             |   4 +-
 src/box/vinyl.c             |   9 ++--
 src/box/vy_upsert.c         |   4 +-
 src/box/xrow_update.c       |  43 +++++++++------
 src/box/xrow_update.h       |  10 ++--
 src/box/xrow_update_array.c |  50 ++++++++++++-----
 src/box/xrow_update_bar.c   |  13 +++--
 src/box/xrow_update_field.c | 102 ++++++++++++++++++++++++-----------
 src/box/xrow_update_field.h |  22 +++++---
 src/box/xrow_update_map.c   |  34 ++++++++++--
 src/box/xrow_update_route.c |  13 +++--
 test/box/update.result      | 103 ++++++++++++++++++++++++++++++++++++
 test/box/update.test.lua    |  62 ++++++++++++++++++++++
 test/unit/column_mask.c     |   4 +-
 18 files changed, 388 insertions(+), 102 deletions(-)

-- 
2.21.1 (Apple Git-122.3)



More information about the Tarantool-patches mailing list