Details

    • Type: Task
    • Status: Open (View Workflow)
    • Priority: Major
    • Resolution: Unresolved
    • Fix Version/s: None
    • Component/s: None
    • Labels:

      Description

      Create_field is a big class and some of its parts are not really used in many contexts.
      Before adding pluggable data types under terms of MDEV-4912, it would be nice to clean-up use of Create_field.

      Under terms of this task we will:

      1. Move members of Create_field that are needed only at ALTER time into a separate class Alter_column_specification:

      class Alter_column_specification
      {
      public:
        const char *change;                   // If done with alter table
        const char *after;                    // Put column after this one
        Field *field;                         // For alter table
        TYPELIB *save_interval;               // Temporary copy for the above
                                              // Used only for UCS2 intervals
        uint offset;
        uint8 interval_id;                    // For rea_create_table
        bool create_if_not_exists;            // Used in ALTER TABLE IF NOT EXISTS
      };

      2. Move the rest of Create_field members (except field_name) into a separate class Column_specification.

      class Column_specification
      {
      public:
        LEX_STRING comment;
        Item *def, *on_update;
        enum  enum_field_types sql_type;
        ulonglong length;
        uint32 char_length;
        uint  decimals, flags, pack_length, key_length;
        Field::utype unireg_check;
        TYPELIB *interval;
        List<String> interval_list;
        CHARSET_INFO *charset;
        uint32 srid;
        Field::geometry_type geom_type;
        engine_option_value *option_list;
        ha_field_option_struct *option_struct;
        uint  pack_flag;
        Virtual_column_info *vcol_info;
        bool stored_in_db;
      };

      3. Derive Create_field from Column_specification and Alter_column_specification:

      class Create_field: public Column_specification,
                          public Alter_column_specification,
                          public Sql_alloc
      {
      public:
        LEX_CSTRING field_name;
      };

      Note, Create_field::field_name will be changed from "const char *" to LEX_CSTRING
      under terms of MDEV-8092.

      4. Change data type of sp_variable::field_def and sp_head::m_return_field_def
      from Create_field to Column_specification. These classes need neither the
      Alter_column_specification nor the "field_name" parts of Create_field.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                bar Alexander Barkov
                Reporter:
                bar Alexander Barkov
              • Votes:
                1 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated: