[MDEV-16280] Add class Bit_addr Created: 2018-05-24  Updated: 2018-05-24  Resolved: 2018-05-24

Status: Closed
Project: MariaDB Server
Component/s: Data types
Fix Version/s: 10.4.0

Type: Task Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Blocks
blocks MDEV-4912 Data type plugin API version 1 Closed
blocks MDEV-9216 Split field.cc:make_field() into virt... Closed

 Description   

To reduce the number of parameters in Type_handler methods (such as make_table_field_from_def(), see MDEV-9216), we'll introduce a new class representing the position and the offset of a bit.
It will be reused for:

  • NULL bits (for NULL-able columns)
  • Data bits (for the BIT(N) data type, and similar)

The tentative prototype:

class Bit_addr
{
  /**
    Byte where the bit is stored inside a record.
    If the corresponding Field is a NOT NULL field, this member is NULL.
  */
  uchar *m_ptr;
  /**
    Offset of the bit inside m_ptr[0], in the range 0..7.
  */
  uchar m_offs;
public:
  Bit_addr(uchar *ptr, uchar offs)
   :m_ptr(ptr), m_offs(offs)
  {
    DBUG_ASSERT(ptr || offs == 0);
    DBUG_ASSERT(offs < 8);
  }
  uchar *ptr() const { return m_ptr; }
  uchar offs() const { return m_offs; }
  uchar bit() const { return m_ptr ? ((uchar) 1) << m_offs : 0; }
};

Encapsulation is needed for better consistency control, to make sure that m_ptr and m_offs always represent valid combinations.

To further reuse the code, we'll replace Record_addr members null_ptr and null_bit to an instance of Bit_addr.


Generated at Thu Feb 08 08:27:43 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.