Details

    • Task
    • Status: Closed (View Workflow)
    • Critical
    • Resolution: Fixed
    • 10.0.1
    • None
    • None

    Description

      Dynamic columns should be referred by names (now only numeric references supported).

      Numeric (current) format of dynamic columns string is:

      fixed part
      1 byte flags (now stores <offset size> - 1 in first 2 bits)
      2 bytes column counter
      fixed size column headers sorted by column number, each entry contains of:
      2 bytes column number
      1-4 bytes combined offset from beginning of the data segment + 3 bit type
      data of above columns size of data and length depend on type

      For columns with names proposed following format. I think in this format numeric references could be written as strings.

      fixed part
      1 byte flags (now stores <offset size> - 1 in first 2 bits, and 1 bit to set this new format)
      2 bytes column counter
      2 bytes size of stored names pool
      fixed size column headers sorted by names, each consists of
      1 byte length of the name
      2 bytes offset of name
      1-4 bytes combined offset from beginning of the data segment + 3 bit type
      names stored one after another
      data of above columns size of data and length depend on type

      there was other ideas which I think is not so good:

      1. store names just in header part (then it looses its array properties and binary search)
      2. store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name↔number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

      Limitations:

      • each name not more then 255 symbols
      • sum of all names length cant be more then 65535

      New format used if

      • at least one of dynamic column references has non integer type.
        or
      • dynamic column string on which operation performed has new format

      New low level interface functions:

      Parameters of creating/changing functions:

      DYNAMIC_COLUMN *str the dynamic column.
      uchar *column_keys array of uint or LEX_STRING keys depends on names
      DYNAMIC_COLUMN_VALUE *values array of values
      uint column_count number of above arrays
      my_bool names TRUE if names are character strings

      enum enum_dyncol_func_result
      dynamic_column_create_many_fmt(DYNAMIC_COLUMN *str,
                                     uint column_count,
                                     uchar *column_keys,
                                     DYNAMIC_COLUMN_VALUE *values,
                                     my_bool names);
      enum enum_dyncol_func_result
      dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
                                     uint add_column_count,
                                     void *column_keys,
                                     DYNAMIC_COLUMN_VALUE *values,
                                     my_bool string_keys);

      Check existence of column (not null) (2 functions, one is addition to old
      function, other is universal)

      enum enum_dyncol_func_result
      dynamic_column_exists_str(DYNAMIC_COLUMN *str, LEX_STRING *name);
      enum enum_dyncol_func_result
      dynamic_column_exists_fmt(DYNAMIC_COLUMN *str, void *key, my_bool string_keys);

      Get list of of columns (works for both formats):

      enum enum_dyncol_func_result
      dynamic_column_list_str(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_lexstr);

      Get column value (2 functions, one is addition to old
      function, other is universal)

      enum enum_dyncol_func_result
      dynamic_column_get_str(DYNAMIC_COLUMN *str, LEX_STRING *name,
                                 DYNAMIC_COLUMN_VALUE *store_it_here);
      enum enum_dyncol_func_result
      dynamic_column_get_fmt(DYNAMIC_COLUMN *str, void *key,
                                 DYNAMIC_COLUMN_VALUE *store_it_here,
                                 my_bool names)

      Check the string format:

      my_bool dynamic_column_has_names(DYNAMIC_COLUMN *str);

      Attachments

        Issue Links

          Activity

            sanja Oleksandr Byelkin created issue -
            sanja Oleksandr Byelkin made changes -
            Field Original Value New Value
            Assignee Oleksandr Byelkin [ sanja ]
            sanja Oleksandr Byelkin made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            sanja Oleksandr Byelkin made changes -
            Status In Progress [ 3 ] Open [ 1 ]
            sanja Oleksandr Byelkin made changes -
            Description Dynamic columns should be referred by names (now only numeric referrences supported). Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              2 bytes - column number
              1 byte length of the name
              2 bytes offset of name
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously).
            psergei Sergei Petrunia made changes -
            Description Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              2 bytes - column number
              1 byte length of the name
              2 bytes offset of name
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously).
            Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              2 bytes - column number
              1 byte length of the name
              2 bytes offset of name
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name<->number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).
            psergei Sergei Petrunia made changes -
            sanja Oleksandr Byelkin made changes -
            Description Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              2 bytes - column number
              1 byte length of the name
              2 bytes offset of name
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name<->number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).
            Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              1 byte length of the name
              2 bytes offset of name
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name<->number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).
            sanja Oleksandr Byelkin made changes -
            Description Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              1 byte length of the name
              2 bytes offset of name
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name<->number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).
            Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              1 byte length of the name
              2 bytes offset of name
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name<->number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format
            sanja Oleksandr Byelkin made changes -
            Description Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              1 byte length of the name
              2 bytes offset of name
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name<->number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format
            Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              1 byte length of the name
              2 bytes offset of name
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name<->number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format

            New low level interface functions:

            Parameters of creaing/changimg functions:
              DYNAMIC_COLUMN *str - the dynamic column.
              uchar *column_keys - array of uint or LEX_STRING keys depends on 'names'
              DYNAMIC_COLUMN_VALUE *values - array of volues
              uint column_count - number of above arrays
              names - TRUE if names are character strings

            enum enum_dyncol_func_result
            dynamic_column_create_many_fmt(DYNAMIC_COLUMN *str,
                                           uint column_count,
                                           uchar *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool names);
            enum enum_dyncol_func_result
            dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
                                           uint add_column_count,
                                           void *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool string_keys);
            enum enum_dyncol_func_result

            Check existance of column (not null) (2 functions, one is addition to old
            function, other is universal)

            dynamic_column_exists_str(DYNAMIC_COLUMN *str, LEX_STRING *name);
            enum enum_dyncol_func_result
            dynamic_column_exists_fmt(DYNAMIC_COLUMN *str, void *key, my_bool string_keys);
            enum enum_dyncol_func_result

            Get list of of columns (works for both formats):

            dynamic_column_list_str(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_lexstr);
            enum enum_dyncol_func_result

            Get column value (2 functions, one is addition to old
            function, other is universal)

            dynamic_column_get_str(DYNAMIC_COLUMN *str, LEX_STRING *name,
                                       DYNAMIC_COLUMN_VALUE *store_it_here);
            enum enum_dyncol_func_result
            dynamic_column_get_fmt(DYNAMIC_COLUMN *str, void *key,
                                       DYNAMIC_COLUMN_VALUE *store_it_here,
                                       my_bool string_key)

            Check the string format:

            my_bool dynamic_column_has_names(DYNAMIC_COLUMN *str);
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            sanja Oleksandr Byelkin made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            sanja Oleksandr Byelkin made changes -
            Status In Progress [ 3 ] Open [ 1 ]
            sanja Oleksandr Byelkin made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            sanja Oleksandr Byelkin made changes -
            Status In Progress [ 3 ] Open [ 1 ]
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            serg Sergei Golubchik made changes -
            Fix Version/s 10.0.1 [ 11400 ]
            Fix Version/s 10.0.0 [ 10000 ]
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            elenst Elena Stepanova made changes -
            serg Sergei Golubchik made changes -
            serg Sergei Golubchik made changes -
            serg Sergei Golubchik made changes -
            Assignee Oleksandr Byelkin [ sanja ] Sergei Golubchik [ serg ]
            serg Sergei Golubchik made changes -
            Priority Major [ 3 ] Critical [ 2 ]
            serg Sergei Golubchik made changes -
            Description Dynamic columns should be referred by names (now only numeric referrences supported).

            Numeric (current) format of dynamic columns string is:

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits)
            2 bytes column counter
            -- fixed size column headers sorted by column number, each entry contains of:
              2 bytes - column number
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            -- fixed part
            1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set
            this new format)
            2 bytes column counter
            2 bytes size of stored names pool
            -- fixed size column headers sorted by names, each consists of
              1 byte length of the name
              2 bytes offset of name
              1-4 bytes combined offset from begning of the data segnebt + 3 bit type
            -- names stored one after another
            -- data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            1) store names just in header part (then it looses its array properties and binary search)
            2) store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name<->number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format

            New low level interface functions:

            Parameters of creaing/changimg functions:
              DYNAMIC_COLUMN *str - the dynamic column.
              uchar *column_keys - array of uint or LEX_STRING keys depends on 'names'
              DYNAMIC_COLUMN_VALUE *values - array of volues
              uint column_count - number of above arrays
              names - TRUE if names are character strings

            enum enum_dyncol_func_result
            dynamic_column_create_many_fmt(DYNAMIC_COLUMN *str,
                                           uint column_count,
                                           uchar *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool names);
            enum enum_dyncol_func_result
            dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
                                           uint add_column_count,
                                           void *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool string_keys);
            enum enum_dyncol_func_result

            Check existance of column (not null) (2 functions, one is addition to old
            function, other is universal)

            dynamic_column_exists_str(DYNAMIC_COLUMN *str, LEX_STRING *name);
            enum enum_dyncol_func_result
            dynamic_column_exists_fmt(DYNAMIC_COLUMN *str, void *key, my_bool string_keys);
            enum enum_dyncol_func_result

            Get list of of columns (works for both formats):

            dynamic_column_list_str(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_lexstr);
            enum enum_dyncol_func_result

            Get column value (2 functions, one is addition to old
            function, other is universal)

            dynamic_column_get_str(DYNAMIC_COLUMN *str, LEX_STRING *name,
                                       DYNAMIC_COLUMN_VALUE *store_it_here);
            enum enum_dyncol_func_result
            dynamic_column_get_fmt(DYNAMIC_COLUMN *str, void *key,
                                       DYNAMIC_COLUMN_VALUE *store_it_here,
                                       my_bool string_key)

            Check the string format:

            my_bool dynamic_column_has_names(DYNAMIC_COLUMN *str);
            Dynamic columns should be referred by names (now only numeric references supported).

            Numeric (current) format of dynamic columns string is:

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 3 bits)
            | 2 bytes column counter
            || fixed size column headers sorted by column number, each entry contains of:
            | 2 bytes column number
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set this new format)
            | 2 bytes column counter
            | 2 bytes size of stored names pool
            || fixed size column headers sorted by names, each consists of
            | 1 byte length of the name
            | 2 bytes offset of name
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || names stored one after another
            || data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            # store names just in header part (then it looses its array properties and binary search)
            # store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name↔number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format

            New low level interface functions:

            Parameters of creating/changing functions:
            | {{DYNAMIC_COLUMN *str}} | the dynamic column.
            | {{uchar *column_keys}} | array of {{uint}} or {{LEX_STRING}} keys depends on {{names}}
            | {{DYNAMIC_COLUMN_VALUE *values}} | array of values
            | {{uint column_count}} | number of above arrays
            | {{my_bool names}} | TRUE if names are character strings

            {code}
            enum enum_dyncol_func_result
            dynamic_column_create_many_fmt(DYNAMIC_COLUMN *str,
                                           uint column_count,
                                           uchar *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool names);
            enum enum_dyncol_func_result
            dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
                                           uint add_column_count,
                                           void *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool string_keys);
            {code}

            Check existence of column (not null) (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_exists_str(DYNAMIC_COLUMN *str, LEX_STRING *name);
            enum enum_dyncol_func_result
            dynamic_column_exists_fmt(DYNAMIC_COLUMN *str, void *key, my_bool string_keys);
            {code}

            Get list of of columns (works for both formats):

            {code}
            enum enum_dyncol_func_result
            dynamic_column_list_str(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_lexstr);
            {code}

            Get column value (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_get_str(DYNAMIC_COLUMN *str, LEX_STRING *name,
                                       DYNAMIC_COLUMN_VALUE *store_it_here);
            enum enum_dyncol_func_result
            dynamic_column_get_fmt(DYNAMIC_COLUMN *str, void *key,
                                       DYNAMIC_COLUMN_VALUE *store_it_here,
                                       my_bool string_key)
            {code}

            Check the string format:
            {code}
            my_bool dynamic_column_has_names(DYNAMIC_COLUMN *str);
            {code}
            serg Sergei Golubchik made changes -
            Description Dynamic columns should be referred by names (now only numeric references supported).

            Numeric (current) format of dynamic columns string is:

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 3 bits)
            | 2 bytes column counter
            || fixed size column headers sorted by column number, each entry contains of:
            | 2 bytes column number
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 3 bits, and 1 bit to set this new format)
            | 2 bytes column counter
            | 2 bytes size of stored names pool
            || fixed size column headers sorted by names, each consists of
            | 1 byte length of the name
            | 2 bytes offset of name
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || names stored one after another
            || data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            # store names just in header part (then it looses its array properties and binary search)
            # store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name↔number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format

            New low level interface functions:

            Parameters of creating/changing functions:
            | {{DYNAMIC_COLUMN *str}} | the dynamic column.
            | {{uchar *column_keys}} | array of {{uint}} or {{LEX_STRING}} keys depends on {{names}}
            | {{DYNAMIC_COLUMN_VALUE *values}} | array of values
            | {{uint column_count}} | number of above arrays
            | {{my_bool names}} | TRUE if names are character strings

            {code}
            enum enum_dyncol_func_result
            dynamic_column_create_many_fmt(DYNAMIC_COLUMN *str,
                                           uint column_count,
                                           uchar *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool names);
            enum enum_dyncol_func_result
            dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
                                           uint add_column_count,
                                           void *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool string_keys);
            {code}

            Check existence of column (not null) (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_exists_str(DYNAMIC_COLUMN *str, LEX_STRING *name);
            enum enum_dyncol_func_result
            dynamic_column_exists_fmt(DYNAMIC_COLUMN *str, void *key, my_bool string_keys);
            {code}

            Get list of of columns (works for both formats):

            {code}
            enum enum_dyncol_func_result
            dynamic_column_list_str(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_lexstr);
            {code}

            Get column value (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_get_str(DYNAMIC_COLUMN *str, LEX_STRING *name,
                                       DYNAMIC_COLUMN_VALUE *store_it_here);
            enum enum_dyncol_func_result
            dynamic_column_get_fmt(DYNAMIC_COLUMN *str, void *key,
                                       DYNAMIC_COLUMN_VALUE *store_it_here,
                                       my_bool string_key)
            {code}

            Check the string format:
            {code}
            my_bool dynamic_column_has_names(DYNAMIC_COLUMN *str);
            {code}
            Dynamic columns should be referred by names (now only numeric references supported).

            Numeric (current) format of dynamic columns string is:

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 2 bits)
            | 2 bytes column counter
            || fixed size column headers sorted by column number, each entry contains of:
            | 2 bytes column number
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 2 bits, and 1 bit to set this new format)
            | 2 bytes column counter
            | 2 bytes size of stored names pool
            || fixed size column headers sorted by names, each consists of
            | 1 byte length of the name
            | 2 bytes offset of name
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || names stored one after another
            || data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            # store names just in header part (then it looses its array properties and binary search)
            # store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name↔number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format

            New low level interface functions:

            Parameters of creating/changing functions:
            | {{DYNAMIC_COLUMN *str}} | the dynamic column.
            | {{uchar *column_keys}} | array of {{uint}} or {{LEX_STRING}} keys depends on {{names}}
            | {{DYNAMIC_COLUMN_VALUE *values}} | array of values
            | {{uint column_count}} | number of above arrays
            | {{my_bool names}} | TRUE if names are character strings

            {code}
            enum enum_dyncol_func_result
            dynamic_column_create_many_fmt(DYNAMIC_COLUMN *str,
                                           uint column_count,
                                           uchar *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool names);
            enum enum_dyncol_func_result
            dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
                                           uint add_column_count,
                                           void *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool string_keys);
            {code}

            Check existence of column (not null) (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_exists_str(DYNAMIC_COLUMN *str, LEX_STRING *name);
            enum enum_dyncol_func_result
            dynamic_column_exists_fmt(DYNAMIC_COLUMN *str, void *key, my_bool string_keys);
            {code}

            Get list of of columns (works for both formats):

            {code}
            enum enum_dyncol_func_result
            dynamic_column_list_str(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_lexstr);
            {code}

            Get column value (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_get_str(DYNAMIC_COLUMN *str, LEX_STRING *name,
                                       DYNAMIC_COLUMN_VALUE *store_it_here);
            enum enum_dyncol_func_result
            dynamic_column_get_fmt(DYNAMIC_COLUMN *str, void *key,
                                       DYNAMIC_COLUMN_VALUE *store_it_here,
                                       my_bool string_key)
            {code}

            Check the string format:
            {code}
            my_bool dynamic_column_has_names(DYNAMIC_COLUMN *str);
            {code}
            serg Sergei Golubchik made changes -
            Description Dynamic columns should be referred by names (now only numeric references supported).

            Numeric (current) format of dynamic columns string is:

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 2 bits)
            | 2 bytes column counter
            || fixed size column headers sorted by column number, each entry contains of:
            | 2 bytes column number
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 2 bits, and 1 bit to set this new format)
            | 2 bytes column counter
            | 2 bytes size of stored names pool
            || fixed size column headers sorted by names, each consists of
            | 1 byte length of the name
            | 2 bytes offset of name
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || names stored one after another
            || data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            # store names just in header part (then it looses its array properties and binary search)
            # store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name↔number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format

            New low level interface functions:

            Parameters of creating/changing functions:
            | {{DYNAMIC_COLUMN *str}} | the dynamic column.
            | {{uchar *column_keys}} | array of {{uint}} or {{LEX_STRING}} keys depends on {{names}}
            | {{DYNAMIC_COLUMN_VALUE *values}} | array of values
            | {{uint column_count}} | number of above arrays
            | {{my_bool names}} | TRUE if names are character strings

            {code}
            enum enum_dyncol_func_result
            dynamic_column_create_many_fmt(DYNAMIC_COLUMN *str,
                                           uint column_count,
                                           uchar *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool names);
            enum enum_dyncol_func_result
            dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
                                           uint add_column_count,
                                           void *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool string_keys);
            {code}

            Check existence of column (not null) (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_exists_str(DYNAMIC_COLUMN *str, LEX_STRING *name);
            enum enum_dyncol_func_result
            dynamic_column_exists_fmt(DYNAMIC_COLUMN *str, void *key, my_bool string_keys);
            {code}

            Get list of of columns (works for both formats):

            {code}
            enum enum_dyncol_func_result
            dynamic_column_list_str(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_lexstr);
            {code}

            Get column value (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_get_str(DYNAMIC_COLUMN *str, LEX_STRING *name,
                                       DYNAMIC_COLUMN_VALUE *store_it_here);
            enum enum_dyncol_func_result
            dynamic_column_get_fmt(DYNAMIC_COLUMN *str, void *key,
                                       DYNAMIC_COLUMN_VALUE *store_it_here,
                                       my_bool string_key)
            {code}

            Check the string format:
            {code}
            my_bool dynamic_column_has_names(DYNAMIC_COLUMN *str);
            {code}
            Dynamic columns should be referred by names (now only numeric references supported).

            Numeric (current) format of dynamic columns string is:

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 2 bits)
            | 2 bytes column counter
            || fixed size column headers sorted by column number, each entry contains of:
            | 2 bytes column number
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || data of above columns size of data and length depend on type

            For columns with names proposed following format. I think in this format numeric references could be written as strings.

            || fixed part
            | 1 byte flags (now stores <offset size> - 1 in first 2 bits, and 1 bit to set this new format)
            | 2 bytes column counter
            | 2 bytes size of stored names pool
            || fixed size column headers sorted by names, each consists of
            | 1 byte length of the name
            | 2 bytes offset of name
            | 1-4 bytes combined offset from beginning of the data segment + 3 bit type
            || names stored one after another
            || data of above columns size of data and length depend on type

            there was other ideas which I think is not so good:
            # store names just in header part (then it looses its array properties and binary search)
            # store both headers numbers and names (I doubts that both way of references could be used simultaneously). (We have agreed this is not possible, because name↔number mapping must be the same for every record in the table, and there is no way we could efficiently maintain this mapping. For example, HBase does not provide any fast way to get a full list of column names).

            Limitations:
             * each name not more then 255 symbols
             * sum of all names length cant be more then 65535

            New format used if
             * at least one of dynamic column references has non integer type.
             or
             * dynamic column string on which operation performed has new format

            New low level interface functions:

            Parameters of creating/changing functions:
            | {{DYNAMIC_COLUMN *str}} | the dynamic column.
            | {{uchar *column_keys}} | array of {{uint}} or {{LEX_STRING}} keys depends on {{names}}
            | {{DYNAMIC_COLUMN_VALUE *values}} | array of values
            | {{uint column_count}} | number of above arrays
            | {{my_bool names}} | TRUE if names are character strings

            {code}
            enum enum_dyncol_func_result
            dynamic_column_create_many_fmt(DYNAMIC_COLUMN *str,
                                           uint column_count,
                                           uchar *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool names);
            enum enum_dyncol_func_result
            dynamic_column_update_many_fmt(DYNAMIC_COLUMN *str,
                                           uint add_column_count,
                                           void *column_keys,
                                           DYNAMIC_COLUMN_VALUE *values,
                                           my_bool string_keys);
            {code}

            Check existence of column (not null) (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_exists_str(DYNAMIC_COLUMN *str, LEX_STRING *name);
            enum enum_dyncol_func_result
            dynamic_column_exists_fmt(DYNAMIC_COLUMN *str, void *key, my_bool string_keys);
            {code}

            Get list of of columns (works for both formats):

            {code}
            enum enum_dyncol_func_result
            dynamic_column_list_str(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_lexstr);
            {code}

            Get column value (2 functions, one is addition to old
            function, other is universal)

            {code}
            enum enum_dyncol_func_result
            dynamic_column_get_str(DYNAMIC_COLUMN *str, LEX_STRING *name,
                                       DYNAMIC_COLUMN_VALUE *store_it_here);
            enum enum_dyncol_func_result
            dynamic_column_get_fmt(DYNAMIC_COLUMN *str, void *key,
                                       DYNAMIC_COLUMN_VALUE *store_it_here,
                                       my_bool names)
            {code}

            Check the string format:
            {code}
            my_bool dynamic_column_has_names(DYNAMIC_COLUMN *str);
            {code}
            serg Sergei Golubchik made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            serg Sergei Golubchik made changes -
            Status In Progress [ 3 ] Open [ 1 ]
            serg Sergei Golubchik made changes -
            Assignee Sergei Golubchik [ serg ] Oleksandr Byelkin [ sanja ]
            sanja Oleksandr Byelkin made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            sanja Oleksandr Byelkin made changes -
            Status In Progress [ 3 ] Open [ 1 ]
            sanja Oleksandr Byelkin made changes -
            Resolution Fixed [ 1 ]
            Status Open [ 1 ] Closed [ 6 ]
            serg Sergei Golubchik made changes -
            Workflow defaullt [ 12501 ] MariaDB v2 [ 46289 ]
            ratzpo Rasmus Johansson (Inactive) made changes -
            Workflow MariaDB v2 [ 46289 ] MariaDB v3 [ 64336 ]
            serg Sergei Golubchik made changes -
            Workflow MariaDB v3 [ 64336 ] MariaDB v4 [ 131947 ]

            People

              sanja Oleksandr Byelkin
              sanja Oleksandr Byelkin
              Votes:
              0 Vote for this issue
              Watchers:
              3 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.