> On 7 Dec 2018, at 14:27, Vladislav Shpilevoy wrote: > On 07/12/2018 14:20, n.pettik wrote: >>> On 5 Dec 2018, at 23:35, Vladislav Shpilevoy wrote: >>> >>> Vova, please, ignore. It was accidentally sent to you. >>> >>> Nikita, please, review. >> I didn’t receive mail since there were issues with our mailing list, >> so I looked at patch-set on GitHub. >>> >>> On 05/12/2018 02:47, Roman Khabibov wrote: >>>> Branch: https://github.com/tarantool/tarantool/tree/romanhabibov/gh-3580-err-msg-pathjoin >>>> Issue: https://github.com/tarantool/tarantool/issues/3580 >>>> Roman Khabibov (2): >>>> sql: add CHAR description without length >>> Fix an ability to describe CHAR without specifying the >> Not ‘fix’ but rather ‘add’. Otherwise, it sounds wierd. >>> length as it is allowed by standard. It was >>> accidentally broken by this commit: >>> 7752cdfd31f9956a4d6bb0f306c561a0ac73e7ab >>> Needed for #3616 >> It is not needed for #3616 - this commit and issue are not connected. >> Issue disappeared after static types were introduced. It is ok that >> you added test case on this issue, but these two problems are not related. >> Consider refactoring: >> diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y >> index f5e86fba1..d56fce451 100644 >> --- a/src/box/sql/parse.y >> +++ b/src/box/sql/parse.y >> @@ -1485,26 +1485,22 @@ typedef(A) ::= DATE . { A.type = AFFINITY_REAL; } >> typedef(A) ::= TIME . { A.type = AFFINITY_REAL; } >> typedef(A) ::= DATETIME . { A.type = AFFINITY_REAL; } >> -%type char_len {int} >> -typedef(A) ::= CHAR char_len(B) . { >> +typedef(A) ::= CHAR . { >> A.type = AFFINITY_TEXT; >> - (void) B; >> } >> -%type vchar_len {int} >> -typedef(A) ::= VARCHAR vchar_len(B) . { >> - A.type = AFFINITY_TEXT; >> +char_len(A) ::= LP INTEGER(B) RP . { >> + (void) A; >> (void) B; >> } >> -char_len(A) ::= . { >> - (void) A; >> +typedef(A) ::= CHAR char_len(B) . { >> + A.type = AFFINITY_TEXT; >> + (void) B; >> } >> -char_len(A) ::= vchar_len(A) . >> - >> -vchar_len(A) ::= LP INTEGER(B) RP . { >> - (void) A; >> +typedef(A) ::= VARCHAR char_len(B) . { >> + A.type = AFFINITY_TEXT; >> (void) B; >> } >> In this case code looks a bit more straightforward IMHO. > > I've tried this refactoring too but faced with > grammar 'features'. You can not define two rules > starting with the same prefix. Did you test it? Maybe > I was wrong? Yep, I tested - it works.