From: Mergen Imeev via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: Timur Safin <tsafin@tarantool.org> Cc: tarantool-patches@dev.tarantool.org, alexander.turenko@tarantool.org Subject: Re: [Tarantool-patches] [PATCH v2 0/3] sql: modify explicit and implicit conversion tables Date: Sun, 20 Jun 2021 21:52:49 +0300 [thread overview] Message-ID: <3d3690b6-8f40-ffd4-568b-c0acbc2d5f92@tarantool.org> (raw) In-Reply-To: <cover.1623396615.git.tsafin@tarantool.org> Hi! Thank you for the patch-set. See 7 comments below. 0. Please include you answers to my previous comments right here. Same about all other letters. On Fri, Jun 11, 2021 at 10:48:10AM +0300, Timur Safin wrote: > Issues: > https://github.com/tarantool/tarantool/issues/4470 > https://github.com/tarantool/tarantool/issues/6010 > Branch: https://github.com/tarantool/tarantool/tree/tsafin/gh-4470-explicit-implicit-conversions-V2 > > This patchset containes of 2 major part and 1 bonus. Major parts > are changes in explicit and implicit conversion tables, with all > accompanying tests we have so far (and 1 extensive test introduced). > The bonus part is for improvements in the testing system tap.lua > which became apparent during debugging of this patches. 1. Please divide this patch-set in two or three parts. I think the best way will be to divide it to three parts: i. Patch about tap.lua. ii. Patch-set about explicit casts. iii. Patch-set about implicit casts. Combining ii and iii is also acceptable, but I think the approaches to ii and iii should be completely different. I don't see any connection between the tap.lua patch and all the other patches in this patchset. I think it is strange, that only part of the patch-set is reviewed by me. Is it even possible for me to give LGTM to such patch-set? > > Relates to #5910, #6009 > Part of #4470 > Fixes #6010 > > Explicit table > ============== > > As we discovered harder way, there is no need to introduce so much changes > to the current explicit conversion table, because it's mostly compliant > already: > - most of changes we had to do was about `BOOLEAN` conversions, which are > stricter now than before; > - there are addition of to `ANY` conversion, which we have decided to make > behaving similar to `SCALAR` conversions; 2. As I previously said, I see no reason to include cast to field type ANY in this patch-set. Also, if we follow your logic, why you didn't added casts to array and map? > > Those changes could be visualized via this table: > > > | 0 | 1 | 2 | 4 | 5 | 6 | 7 | 3 | 9 |10 |11 |12 | 8 | > +---+---+---+---+---+---+---+---+---+---+---+---+---+ > 0. any | | | | | | | | | | | | | | > 1. unsigned | | . | . | . | . | - | | . | | | | | Y | > 2. string | | . | . | . | . | S | . | . | | | | | Y | > 4. double | | . | . | . | . | - | | . | | | | | Y | > 5. integer | | . | . | . | . | - | | . | | | | | Y | > 6. boolean | | - | Y | - | - | Y | | | | | | | Y | > 7. varbinary | | | . | | | - | . | | | | | | Y | > 3. number | | . | . | . | . | - | | . | | | | | Y | > 9. decimal | | | | | | | | | | | | | | > 10. uuid | | | | | | | | | | | | | | > 11. array | | | | | | | | | | | | | | > 12. map | | | | | | | | | | | | | | > 8. scalar | | . | . | . | . | S | . | . | | | | | Y | > +---+---+---+---+---+---+---+---+---+---+---+---+---+ 3. Since you do not want to change numbers here, I suggest to arrange field types according to their number. Also, why you described BOOLEAN, but didn't describe ANY and UUID? > > This table above represent all possible combinations of explicit cast > from type (row) to another type (column). Numbering of types might look > confusing (it's not sequential) but the order is what we see in the > consistency specification RFC, and we should live with that. Values are > actual enum values from the code. Unfortunately, changing of order is > almost impossible because of massive rework for the spec it would require. > > How to interpret this table, e.g.: > - for the explicit cast from `BOOLEAN` (6) to `BOOLEAN` (6) we should > always allow cast (and make it noop), thus intersection is `Y` (yes); > > - `STRING` (2) to `BOOLEAN` (6) may work sometimes (if string represents > TRUE or FALSE literals), but may fail otherwise, thus there is `S` (sometimes); > 4. "Sometimes" still sounds quite not right here. > - We have prohibited majority of ther directions for `BOOLEAN` thus there are > `-` (minus) in such cells, i.e. `BOOLEAN` (6) to `INTEGER` (5); > > - Untouched entries in the table marked with '.'. Assumption is - > we already have correct conversion rule here activated well before; > > - Worth to mention that empty cell means that this conversion > direction is prohibited. > 5. Does it mean that cast from UUID to UUID is prohibited? Also, I see no need of '.' since you sometimes use 'Y' or '-' or ' ' instead of it. I believe you should describe table for all explicit cast conversions here and not only for BOOLEAN. > For obvious reasons those chnaged conversion rules made us modify > expected results for many tests - they are fixed. > > But to cover all possible conversion combinations (minus those, not yet > implemented in SQL types like DECIMAL, ARRAY and MAP) we have created > special test which check _all combinations of CASTs()_ and verifies > results against table rules defined in the RFC. > > There is e_casts.test.lua created for that purpose. 6. I still does not understand where this name came from. I believe you said something about renaming it. > > Implicit table > ============== > > Similarly to explicit conversion rules we have update implicit conversion > rules, and this is 2nd part of patchset. > > We will not draw changed values of implicit conversion table (please see > it's final state in the consistemcy types RFC), but verbally we have > modified following directions of conversions: > - string to/from double > - double to/from integer > - varbinary to/from string > > In addition to modifciation of all relevant test results, we have also > extended e_casts.test.lua introduced above for checking of all possible > directions of implicit conversions. > > Approach to check it though is different than for explicit cast, we do > not use simple expression with implicit cast activated (like we might be > using `CAST()` for explicit casts), but rather we insert value of original > type into columns of expected target type. 7. Implicit casts includes a lot more than just an insert, I believe. > > Relates to #5910, #6009 > Closes #4470 > > > Bonus - better error reporting in tap tests > =========================================== > > Also, during debugging of explicit/implicitit conversions test it was > discovered the harder way, that TAP infrastructure does not report correctly > origin source line of and error, but rather report :0 line as location. > This has been fixed. > > Closes #6134 > > > Timur Safin (3): > test: corrected reported error lines > sql: updated explicit conversion table > sql: updated implicit conversion table > > extra/mkkeywordhash.c | 3 +- > src/box/sql/mem.c | 188 +++-------- > src/box/sql/mem.h | 6 - > src/box/sql/parse.y | 9 +- > src/box/sql/util.c | 3 +- > src/box/sql/vdbe.c | 8 +- > src/box/sql/vdbeaux.c | 2 +- > src/lua/tap.lua | 2 +- > test/sql-tap/cse.test.lua | 12 +- > test/sql-tap/e_casts.test.lua | 474 +++++++++++++++++++++++++++ > test/sql-tap/e_select1.test.lua | 2 +- > test/sql-tap/in1.test.lua | 8 +- > test/sql-tap/in4.test.lua | 19 +- > test/sql-tap/misc3.test.lua | 2 +- > test/sql-tap/numcast.test.lua | 2 +- > test/sql-tap/tkt-9a8b09f8e6.test.lua | 40 +-- > test/sql/boolean.result | 38 +-- > test/sql/types.result | 132 ++++---- > 18 files changed, 654 insertions(+), 296 deletions(-) > create mode 100755 test/sql-tap/e_casts.test.lua > > -- > 2.29.2 >
next prev parent reply other threads:[~2021-06-20 18:52 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-06-11 7:48 Timur Safin via Tarantool-patches 2021-06-11 7:48 ` [Tarantool-patches] [PATCH v2 1/3] test: corrected reported error lines Timur Safin via Tarantool-patches 2021-06-20 18:57 ` Igor Munkin via Tarantool-patches 2021-06-23 21:01 ` Alexander Turenko via Tarantool-patches 2021-06-27 23:16 ` Timur Safin via Tarantool-patches 2021-06-29 16:21 ` Igor Munkin via Tarantool-patches 2021-06-30 6:49 ` Timur Safin via Tarantool-patches 2021-07-21 7:24 ` Igor Munkin via Tarantool-patches 2021-06-11 7:48 ` [Tarantool-patches] [PATCH v2 2/3] sql: updated explicit conversion table Timur Safin via Tarantool-patches 2021-06-20 18:52 ` Mergen Imeev via Tarantool-patches 2021-06-25 21:26 ` Timur Safin via Tarantool-patches 2021-06-25 21:26 ` [Tarantool-patches] Отзыв: " Timur Safin via Tarantool-patches 2021-06-27 23:46 ` [Tarantool-patches] " Timur Safin via Tarantool-patches 2021-06-11 7:48 ` [Tarantool-patches] [PATCH v2 3/3] sql: updated implicit " Timur Safin via Tarantool-patches 2021-06-20 18:52 ` Mergen Imeev via Tarantool-patches 2021-06-28 0:06 ` Timur Safin via Tarantool-patches 2021-06-20 18:52 ` Mergen Imeev via Tarantool-patches [this message] 2021-06-27 23:29 ` [Tarantool-patches] [PATCH v2 0/3] sql: modify explicit and implicit conversion tables Timur Safin 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=3d3690b6-8f40-ffd4-568b-c0acbc2d5f92@tarantool.org \ --to=tarantool-patches@dev.tarantool.org \ --cc=alexander.turenko@tarantool.org \ --cc=imeevma@tarantool.org \ --cc=tsafin@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v2 0/3] sql: modify explicit and implicit conversion tables' \ /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