Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Konstantin Osipov <kostja.osipov@gmail.com>,
	Kirill Yukhin <kyukhin@tarantool.org>,
	Chris Sosnin <k.sosnin@tarantool.org>,
	tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH] box: remove unicode_ci for functions
Date: Tue, 10 Dec 2019 00:09:41 +0100	[thread overview]
Message-ID: <cc7f1523-eb71-5312-695d-6fc82b343f65@tarantool.org> (raw)
In-Reply-To: <20191209133955.GA8196@atlas>

Hi! Thanks for the discussion!

On 09/12/2019 14:39, Konstantin Osipov wrote:
> * Kirill Yukhin <kyukhin@tarantool.org> [19/12/09 16:28]:
>>> Who is "we"?
>>
>> We are team of Tarantool developers working for MailRU Group.
> 
> Actually this decision was made without any discussions - it was
> quickly hacked in back in 2018. Maybe you and Nikita had some
> discussion prompted by Peter's firm stance that we should
> uppercase, but that was it. I protested several times while I
> was still on board but had not anticipated how bad the solution
> would turn out to be when it is implemented to follow through on
> time. Now it is still not to late - bit it's getting more late
> every day.
> 
> What we learned since then is that every single newbie trips over
> it.
> 
> 

Well, you was exactly the person who voted for uppercase of
everything. Peter was for it too, but you made the decision,
and you at that time had a right to forbid it.

Now talking of the 'Newbies stumbling into the uppercase'.
Newbies, who use SQL only, will never notice the uppercasing.
Because SQL creates in uppercase and searches by uppercase
by default. It is a matter of how to organize tutorial for
newbies. In a tutorial they should study SQL and Lua box
separately, and then learn about details of how to use them
both. Where they would be explained, that SQL standard
uppercases everything. And they need to use quotes to force
lowercase.

Talking of the case insensitivity. I see several problems
serious enough to forget about this forever:

- Compatibility. As you probably know (and actually you are
  the one, from who I learned it) - if an API is public, it
  *is* used by someone. You always should assume that. As
  well as here you should assume, that for someone the case
  matters.

- Standard. This just violates the SQL standard, when you can
  find lowercase names without quotes. We fought for the
  standard too much to just drop it now because of this.

- Consistency. If you want space names case insensitive, you
  should realize, that it involves making case insensitive
  index names, user names, trigger, fk, ck names. This also
  includes tuple field names, and .... case-insensitive JSON
  paths! That is a very scary thing if you think about it.
  Consider this example:

      t = box.tuple.new({
          {
              key = 100,
              KEY = 200
          }
      })
      t["[1].key"]

  What should be returned? Take into account, that this is
  not an impossible example. 'key' and 'KEY' might be a
  consequence of necessity to support a legacy system in a
  user application, which was changed some time ago, and
  they decided to store both cases for compatibility. Your
  proposal breaks our backward compatibility, and compatibility
  of that system.

- Performance. With your proposal we would need to replace
  *all* strcmp/memcmp() not related to indexes to strcasecmp().
  The latter is ~x100 slower. That will slowdown everything -
  from field name access to lookup in internal hash tables
  using names as a key. I don't think it is worth the syntax
  sugar. Especially taking into account how hard it becomes to
  fit everything into the single tx thread.

  parent reply	other threads:[~2019-12-09 23:09 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-29 23:39 Chris Sosnin
2019-11-30 20:34 ` Konstantin Osipov
2019-12-01 14:12   ` k.sosnin
2019-12-01 14:36   ` Vladislav Shpilevoy
2019-12-02  7:07     ` Konstantin Osipov
2019-12-02 14:36       ` Nikita Pettik
2019-12-02 14:49         ` Konstantin Osipov
2019-12-06 11:42       ` Kirill Yukhin
2019-12-06 20:17         ` Konstantin Osipov
2019-12-09 11:06           ` Kirill Yukhin
2019-12-09 11:24             ` Konstantin Osipov
2019-12-09 13:25               ` Kirill Yukhin
2019-12-09 13:39                 ` Konstantin Osipov
2019-12-09 14:07                   ` Nikita Pettik
2019-12-09 23:09                   ` Vladislav Shpilevoy [this message]
2019-12-10  8:19                     ` Konstantin Osipov
2019-12-10 12:44                       ` Kirill Yukhin

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=cc7f1523-eb71-5312-695d-6fc82b343f65@tarantool.org \
    --to=v.shpilevoy@tarantool.org \
    --cc=k.sosnin@tarantool.org \
    --cc=kostja.osipov@gmail.com \
    --cc=kyukhin@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH] box: remove unicode_ci for functions' \
    /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