From: Timur Safin via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: <imeevma@tarantool.org> Cc: <tarantool-patches@dev.tarantool.org> Subject: Re: [Tarantool-patches] [PATCH v1 1/1] sql: fix comparison between DECIMAL and big DOUBLE Date: Tue, 31 Aug 2021 22:46:40 +0300 [thread overview] Message-ID: <017301d79ea0$eba3de60$c2eb9b20$@tarantool.org> (raw) In-Reply-To: <6229320676324201d74e78ac1f2832b79fd159cb.1630303937.git.imeevma@gmail.com> > From: imeevma@tarantool.org <imeevma@tarantool.org> > Subject: [PATCH v1 1/1] sql: fix comparison between DECIMAL and big > DOUBLE > > This patch fixes comparison between DECIMAL value and DOUBLE values > greater or equal to 1e38 or less or equal to -1e38. Now any DOUBLE > value > greater or equal to 1e38 is more than any DECIMAL value and DOUBLE > value less or equal to -1e38 is less than any DECIMAL value. > > Closes #6376 ... > diff --git a/changelogs/unreleased/gh-6376-fix-incorrect-dec-inf- > cmp.md b/changelogs/unreleased/gh-6376-fix-incorrect-dec-inf-cmp.md > new file mode 100644 > index 000000000..70de655f1 > --- /dev/null > +++ b/changelogs/unreleased/gh-6376-fix-incorrect-dec-inf-cmp.md > @@ -0,0 +1,3 @@ > +## bugfix/sql > + > +* Fixed wrong comparison between DECIMAL and large DOUBLE values > (gh-6376). > diff --git a/src/box/sql/mem.c b/src/box/sql/mem.c > index 4c40f15dc..a3ab31af5 100644 > --- a/src/box/sql/mem.c > +++ b/src/box/sql/mem.c > @@ -2451,9 +2451,9 @@ mem_cmp_num(const struct Mem *a, const struct > Mem *b) > } > case MEM_TYPE_DOUBLE: { > if (b->u.r >= 1e38) > - return 1; > - if (b->u.r <= -1e38) > return -1; > + if (b->u.r <= -1e38) > + return 1; Well, while we are here. I do understand that these kind of constants already spreading all corners of mem.c when you deal with decimals, but it's not entirely clear that this all about DECIMAL_MAX_DIGITS limitation in our decimal implementation. And beyond all of that - hardcoded constant are evil. Could you please introduce any symbolic constant defines for such DECIMAL_MAX_DIGITS- derivative values? And use them wherever possible. (I'm not insisting on fixing whole mem.c, that might be done separately, but at least this tricky case worth it) > decimal_t dec; > decimal_t *d = decimal_from_double(&dec, b->u.r); > assert(d != NULL && d == &dec); Thanks, Timur
next prev parent reply other threads:[~2021-08-31 19:47 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-08-30 6:13 Mergen Imeev via Tarantool-patches 2021-08-31 19:46 ` Timur Safin via Tarantool-patches [this message] 2021-09-01 8:52 ` Mergen Imeev via Tarantool-patches 2021-09-07 9:28 ` Safin Timur via Tarantool-patches 2021-09-07 11:26 ` Igor Munkin via Tarantool-patches 2021-09-07 11:40 ` Igor Munkin via Tarantool-patches 2021-09-09 7:39 ` Mergen Imeev via Tarantool-patches 2021-09-09 10:24 ` Kirill Yukhin via Tarantool-patches
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='017301d79ea0$eba3de60$c2eb9b20$@tarantool.org' \ --to=tarantool-patches@dev.tarantool.org \ --cc=imeevma@tarantool.org \ --cc=tsafin@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v1 1/1] sql: fix comparison between DECIMAL and big DOUBLE' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox