Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-7777

Missing readline features when building with external libedit library

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 10.0.17
    • Fix Version/s: N/A
    • Component/s: Scripts & Clients
    • Labels:
      None
    • Environment:
      Fedora

      Description

      There are two issues related to external libedit reported for Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=1187469 that non-ASCII characters don't work in interactive mode and https://bugzilla.redhat.com/show_bug.cgi?id=1180403 that backward search doesn't work.

      The problem is that mysql binary uses just readline() function from libedit library and this function only offers basic functionality. So generally, the possible fix is either to use el_wgets() function from libedit and configure the backward search feature in mysql binary or fix libedit's readline function to offer this by default (of as another function).

      Steps to Reproduce:
      1. run mysql client that uses external libedit
      2. copy & paste the following clauses in mysql client:
      SELECT 'Chinese characters <汉字> are stripped';
      3. '汉字' are stripped out in mysql client
      4. press ctrl+R to activate background search in history

      Actual results:

      MariaDB [(none)]> SELECT 'Chinese characters <> are stripped';
      +------------------------------------+
      | Chinese characters <> are stripped |
      +------------------------------------+
      | Chinese characters <> are stripped |
      +------------------------------------+
      

      background search in history doesn't work

      Expected results:

      MariaDB [(none)]> SELECT 'Chinese characters <汉字> are stripped';
      +------------------------------------------+
      | Chinese characters <汉字> are stripped   |
      +------------------------------------------+
      | Chinese characters <汉字> are stripped   |
      +------------------------------------------+
      

      background search in history works

      Reproducible for example with mariadb-10.0.17-1.fc21.

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            hhorak Honza Horak added a comment -

            Just FYI, examples/wtc1.c example from libedit-3.x tarball (http://sourceforge.net/projects/libedit/) shows how proper widechar support should be done (since libedit's readline() function includes just basics). I suppose something similar could be implemented into the mysql binary, so it is flexible in supporting advanced libedit features (non-ascii, backward history searchning, etc... either from external or bundled libedit).

            Show
            hhorak Honza Horak added a comment - Just FYI, examples/wtc1.c example from libedit-3.x tarball ( http://sourceforge.net/projects/libedit/ ) shows how proper widechar support should be done (since libedit's readline() function includes just basics). I suppose something similar could be implemented into the mysql binary, so it is flexible in supporting advanced libedit features (non-ascii, backward history searchning, etc... either from external or bundled libedit).
            Hide
            elenst Elena Stepanova added a comment -

            See also MDEV-6912, seems relevant.

            Show
            elenst Elena Stepanova added a comment - See also MDEV-6912 , seems relevant.
            Hide
            hhorak Honza Horak added a comment -

            The more I'm thinking about this, the more I believe this should be fixed in system libedit in the first place, some more info at https://bugzilla.redhat.com/show_bug.cgi?id=1202022#c2

            However, my previous comment about flexibility is still valid – if mariadb wants to be flexible about readline() configuration, it needs to re-implement this function itself..

            Show
            hhorak Honza Horak added a comment - The more I'm thinking about this, the more I believe this should be fixed in system libedit in the first place, some more info at https://bugzilla.redhat.com/show_bug.cgi?id=1202022#c2 However, my previous comment about flexibility is still valid – if mariadb wants to be flexible about readline() configuration, it needs to re-implement this function itself..
            Hide
            serg Sergei Golubchik added a comment -

            Fixed upstream (in libedit). With recent libedit versions (I've tested libedit-20150325-3.1) multi-byte characters can be inserted just fine and backward search works too.

            Show
            serg Sergei Golubchik added a comment - Fixed upstream (in libedit). With recent libedit versions (I've tested libedit-20150325-3.1) multi-byte characters can be inserted just fine and backward search works too.

              People

              • Assignee:
                serg Sergei Golubchik
                Reporter:
                hhorak Honza Horak
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: