• Vicențiu Ciorbaru's avatar
    MDEV-14448: Ctrl-C should not exit the client · 3cd88751
    Vicențiu Ciorbaru authored
    This patch introduces the following behaviour for Linux while
    maintaining old behaviour for Windows:
    
    Ctrl + C (sigint) clears the current buffer and redraws the prompt.
    Ctrl-C no longer exits the client if no query is running.
    Ctrl-C kills the current running query if there is one. If there is an
    error communicating with the server while trying to issue a KILL QUERY,
    the client exits. This is in line with the past behaviour of Ctrl-C.
    On Linux Ctrl-D can be used to close the client.
    On Windows Ctrl-C and Ctrl-BREAK still exits the client if no query is running.
    Windows can also exit the client via \q<enter> or exit<enter>.
    
    == Implementation details ==
    The Linux implementation has two corner cases, based on which library is
    used: libreadline or libedit, both are handled in code to achieve the
    same user experience.
    
    Additional code is taken from MySQL, ensuring there is identical
    behaviour on Windows, to MySQL's mysql client implementation for other
    CTRL- related signals.
    
    * The CTRL_CLOSE, CTRL_LOGOFF, CTRL_SHUTDOWN will issue the equivalent
      of CTRL-C and "end" the program. This ensures that the query is killed
      when the client is closed by closing the terminal, logging off the
      user or shutting down the system. The latter two signals are not sent
      for interactive applications, but it handles the case when a user has
      defined a service to use mysql client to issue a command. See
      https://learn.microsoft.com/en-us/windows/console/handlerroutine
    
    This patch is built on top of the initial work done by Anel Husakovic
    <anel@mariadb.org>.
    Closes #2815
    3cd88751
mysql.cc 155 KB