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

Remove redundant virtual Protocol::store()

Details

    Description

      The Protocol class has two similar virtual methods to send string data:

      class Protocol
      {
        ...
        virtual bool store(const char *from, size_t length, CHARSET_INFO *cs);
        virtual bool store(const char *from, size_t length,
                          CHARSET_INFO *fromcs, CHARSET_INFO *tocs);
        ...
      };
      

      Both call store_string_aux() internally.

      The first method does not need to be virtual. Let's define it to be non-virtual, as follows:

      class Protocol
      {
        ...
        bool store(const char *from, size_t length, CHARSET_INFO *cs)
        {
          CHARSET_INFO *tocs= thd->variables.character_set_results;
          return store(from, length, fromcs, tocs);
        }
        virtual bool store(const char *from, size_t length,
                          CHARSET_INFO *fromcs, CHARSET_INFO *tocs);
        ..
      };
      

      Attachments

        Activity

          bar Alexander Barkov created issue -
          bar Alexander Barkov made changes -
          Field Original Value New Value
          Description The Protocol class has two similar virtual methods to send string data:

          {code:cpp}
          class Protocol
          {
            ...
            virtual bool store(const char *from, size_t length, CHARSET_INFO *cs);
            virtual bool store(const char *from, size_t length,
                              CHARSET_INFO *fromcs, CHARSET_INFO *tocs);
            ...
          };
          {code}

          Both call store_string_aux() internally.

          The first method does not need to be virtual. Let's define it to be non-virtual, as follows:

          {code:cpp}
          class Protocol
          {
            ...
            bool store(const char *from, size_t length, CHARSET_INFO *cs)
            {
              CHARSET_INFO *tocs= thd->variables.character_set_results;
              return store(from, length, fromcs, tocs);
            }
            virtual bool store(const char *from, size_t length,
                              CHARSET_INFO *fromcs, CHARSET_INFO *tocs);
            ..
          };
          The Protocol class has two similar virtual methods to send string data:

          {code:cpp}
          class Protocol
          {
            ...
            virtual bool store(const char *from, size_t length, CHARSET_INFO *cs);
            virtual bool store(const char *from, size_t length,
                              CHARSET_INFO *fromcs, CHARSET_INFO *tocs);
            ...
          };
          {code}

          Both call store_string_aux() internally.

          The first method does not need to be virtual. Let's define it to be non-virtual, as follows:

          {code:cpp}
          class Protocol
          {
            ...
            bool store(const char *from, size_t length, CHARSET_INFO *cs)
            {
              CHARSET_INFO *tocs= thd->variables.character_set_results;
              return store(from, length, fromcs, tocs);
            }
            virtual bool store(const char *from, size_t length,
                              CHARSET_INFO *fromcs, CHARSET_INFO *tocs);
            ..
          };
          {code}
          bar Alexander Barkov made changes -
          issue.field.resolutiondate 2020-07-14 04:00:56.0 2020-07-14 04:00:56.095
          bar Alexander Barkov made changes -
          Fix Version/s 10.5.5 [ 24423 ]
          Fix Version/s 10.5 [ 23123 ]
          Resolution Fixed [ 1 ]
          Status Open [ 1 ] Closed [ 6 ]
          serg Sergei Golubchik made changes -
          Workflow MariaDB v3 [ 111169 ] MariaDB v4 [ 134309 ]

          People

            bar Alexander Barkov
            bar Alexander Barkov
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.