• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tarantool / tarantool / 13209158455
88%

Build:
DEFAULT BRANCH: master
Ran 07 Feb 2025 10:52PM UTC
Jobs 1
Files 518
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

07 Feb 2025 10:33PM UTC coverage: 87.398% (+0.01%) from 87.386%
13209158455

push

github

Gerold103
box: make 'double' an alias for 'number'

When 'double' field type was introduced, it would only allow
MP_DOUBLE MessagePack values. This would work fine. The numbers
were compared correctly, could be promoted to 'number' and
'scalar' types.

Then the users were complaining that it is too hard to insert
integer values into a 'double' column because, at least when come
from the Lua land, the numbers with 0 fractional part are saved as
MP_INT/MP_UINT.

The commit 51af059c1 ("box: compare
and hash msgpack value of double key field as double") allowed
the users to insert MP_INT and MP_UINT into the 'double' field,
but it kept the C-double comparison logic. Meaning that all the
numbers would be cast to C-language doubles and compared like
that, regardless of their MessagePack type. It would behave like
if the numbers are all actually stored as MP_DOUBLE.

This eventually led to problems, because the assumption of
'double' being included into 'scalar' and 'number' broke. The same
values stored in a 'double' index and in a 'number' index would be
sorted differently, because large integers, when cast to C-double,
loose precision. In double-world UINT64_MAX == UINT64_MAX + 1,
while it is obviously not so in number- and scalar-world.

The index simply broke when it was altered to 'number' or
'scalar', because it doesn't get rebuilt, and with the new sorting
rules it became sorted incorrectly. This led to all sorts of data
inconsistencies, assertions and crashes.

With vinyl it was particularly bad, because it can't even be fixed
automatically. If a user ever had a vinyl 'double' index with
large integers and then converted it to 'number' or 'scalar', then
the index is broken. And it is undetectable from just looking at
the field types. The unlucky users of vinyl with 'double'-type
indexes are going to have to pay attention to the next release and
rebuild their indexes manually.

Closes #9965
Follow-up for #7483

@TarantoolBot docu... (continued)

69777 of 123347 branches covered (56.57%)

3 of 3 new or added lines in 1 file covered. (100.0%)

376 existing lines in 16 files now uncovered.

102778 of 117598 relevant lines covered (87.4%)

2479586.34 hits per line

Uncovered Existing Lines

Lines Coverage ∆ File
1
89.05
-0.08% src/box/vy_log.c
1
90.51
-0.63% src/box/engine.c
1
94.74
-1.75% src/box/engine.h
1
74.81
-0.25% src/main.cc
1
92.92
-0.1% src/lib/core/fiber.c
1
91.68
0.0% src/lib/swim/swim.c
3
97.95
-0.22% src/box/memtx_tx.c
3
93.71
-0.47% src/box/memtx_space.c
3
94.2
0.0% src/box/iproto_constants.h
4
93.31
-1.27% src/lib/swim/swim_io.c
4
96.75
-0.87% src/box/tuple_hash.cc
10
96.42
1.02% src/box/tuple_compare.cc
26
97.26
1.57% src/lib/msgpuck/msgpuck.h
42
81.07
1.93% src/box/tuple_bloom.c
124
92.22
-0.11% src/box/vinyl.c
151
87.3
-0.32% src/box/vy_run.c
Jobs
ID Job ID Ran Files Coverage
1 13209158455.1 07 Feb 2025 10:52PM UTC 518
87.4
GitHub Action Run
Source Files on build 13209158455
  • Tree
  • List 518
  • Changed 442
  • Source Changed 0
  • Coverage Changed 29
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 60272e82 on github
  • Prev Build on master (#13199325571)
  • Next Build on master (#13236606267)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc