MySQL 8.0.39
Source Code Documentation
Mysqlx::Resultset::ColumnMetaData Struct Reference

Meta data of a column. More...

Public Types

enum  FieldType {
  SINT = 1 , UINT = 2 , DOUBLE = 5 , FLOAT = 6 ,
  BYTES = 7 , TIME = 10 , DATETIME = 12 , SET = 15 ,
  ENUM = 16 , BIT = 17 , DECIMAL = 18
}
 

Public Attributes

required FieldType type = 1
 datatype of the field in a row More...
 
optional bytes name = 2
 name of the column More...
 
optional bytes original_name = 3
 name of the column before an alias was applied More...
 
optional bytes table = 4
 name of the table the column originates from More...
 
optional bytes original_table = 5
 name of the table the column originates from before an alias was applied More...
 
optional bytes schema = 6
 schema the column originates from More...
 
optional bytes catalog = 7
 catalog the schema originates from More...
 
optional uint64 collation = 8
 
optional uint32 fractional_digits = 9
 displayed factional decimal digits for floating point and fixed point numbers More...
 
optional uint32 length = 10
 maximum count of displayable characters of .type More...
 
optional uint32 flags = 11
 .type specific flags More...
 
optional uint32 content_type = 12
 a hint about the higher-level encoding of a BYTES field More...
 
ServerMessages::Type server_message_id = RESULTSET_COLUMN_META_DATA
 

Detailed Description

Meta data of a column.

Note
The encoding used for the different bytes fields in the meta data is externally controlled. See also: https://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
Note
The server may not set the original_{table|name} fields if they are equal to the plain {table|name} field.
Note
A client has to reconstruct it like:
if .original_name is empty and .name is not empty:
.original_name = .name
if .original_table is empty and .table is not empty:
.original_table = .table
Note
Compact metadata format can be requested by the client. In that case, only .type is set and all other fields are empty.

Expected data type of Mysqlx::Resultset::Row per SQL Type for non-NULL values:

SQL Type .type .length .frac_dig .flags .charset
TINY SINT x
TINY UNSIGNED UINT x x
SHORT SINT x
SHORT UNSIGNED UINT x x
INT24 SINT x
INT24 UNSIGNED UINT x x
INT SINT x
INT UNSIGNED UINT x x
LONGLONG SINT x
LONGLONG UNSIGNED UINT x x
DOUBLE DOUBLE x x x
FLOAT FLOAT x x x
DECIMAL DECIMAL x x x
VARCHAR,CHAR,... BYTES x x x
GEOMETRY BYTES
TIME TIME x
DATE DATETIME x
DATETIME DATETIME x
YEAR UINT x x
TIMESTAMP DATETIME x
SET SET x
ENUM ENUM x
NULL BYTES
BIT BIT x
Note
The SQL "NULL" value is sent as an empty field value in Mysqlx::Resultset::Row.
Tip
The protobuf encoding of primitive data types is described in https://developers.google.com/protocol-buffers/docs/encoding
  • SINT
    • .length
      Maximum number of displayable decimal digits (including minus sign) of the type.

      Note
      The valid range is 0-255, but usually you'll see 1-20.
      SQL Type Maximum Digits per Type
      TINY SIGNED 4
      SHORT SIGNED 6
      INT24 SIGNED 8
      INT SIGNED 11
      LONGLONG SIGNED 20
      Tip
      Definition of M are in https://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html.
    • value
      Variable length encoded signed 64 integer.
  • UINT
    • .flags & 1 (zerofill)
      The client has to left pad with 0's up to .length.
    • .length
      Maximum number of displayable decimal digits of the type.

      Note
      The valid range is 0-255, but usually you'll see 1-20.
      SQL Type max digits per type
      TINY UNSIGNED 3
      SHORT UNSIGNED 5
      INT24 UNSIGNED 8
      INT UNSIGNED 10
      LONGLONG UNSIGNED 20
      Tip
      Definition of M are in https://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html.
    • value
      Variable length encoded unsigned 64 integer.
  • BIT
  • DOUBLE
    • .length
      Maximum number of displayable decimal digits (including the decimal point and .fractional_digits).
    • .fractional_digits
      Maximum number of displayable decimal digits following the decimal point.
    • value
      Encoded as protobuf's 'double'.
  • FLOAT
    • .length
      Maximum number of displayable decimal digits (including the decimal point and .fractional_digits).
    • .fractional_digits
      Maximum number of displayable decimal digits following the decimal point.
    • value
      Encoded as protobuf's 'float'.
  • BYTES, ENUM
    Note
    BYTES is used for all opaque byte strings that may have a charset:
    • TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB
    • TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT
    • VARCHAR, VARBINARY
    • CHAR, BINARY
    • ENUM
    • .length
      Maximum length of characters of the underlying type.
    • .flags & 1 (rightpad)
      If the length of the field is less than .length, the receiver is supposed to add padding characters to the right end of the string. If the .charset is "binary", the padding character is 0x00, otherwise it is a space character as defined by that character set.
      SQL Type .length .charset .flags
      TINYBLOB 256 binary
      BLOB 65535 binary
      VARCHAR(32) 32 utf8
      VARBINARY(32) 32 utf8_bin
      BINARY(32) 32 binary rightpad
      CHAR(32) 32 utf8 rightpad
    • value Sequence of bytes with added one extra 0x00 byte at the end. To obtain the original string, the extra 0x00 should be removed. The length of the string can be acquired with protobuf's field length() method:

      length of sequence-of-bytes = length-of-field - 1

      Note
      The extra byte allows to distinguish between a NULL and empty byte sequence.
  • TIME

    A time value.

    • value
      The following bytes sequence:

      negate [ hour [ minutes [ seconds [ useconds ]]]]

      • negate - one byte, should be one of: 0x00 for "+", 0x01 for "-"
      • hour - optional variable length encoded unsigned64 value for the hour
      • minutes - optional variable length encoded unsigned64 value for the minutes
      • seconds - optional variable length encoded unsigned64 value for the seconds
      • useconds - optional variable length encoded unsigned64 value for the microseconds

        Tip
        The protobuf encoding in https://developers.google.com/protocol-buffers/docs/encoding.
        Note
        Hour, minutes, seconds, and useconds are optional if all the values to the right are 0.

        Example: 0x00 -> +00:00:00.000000

  • DATETIME

    A date or date and time value.

    • value
      A sequence of variants, arranged as follows:

      | year | month | day | [ | hour | [ | minutes | [ | seconds | [ | useconds | ]]]]

      • year - variable length encoded unsigned64 value for the year
      • month - variable length encoded unsigned64 value for the month
      • day - variable length encoded unsigned64 value for the day
      • hour - optional variable length encoded unsigned64 value for the hour
      • minutes - optional variable length encoded unsigned64 value for the minutes
      • seconds - optional variable length encoded unsigned64 value for the seconds
      • useconds - optional variable length encoded unsigned64 value for the microseconds
        Note
        Hour, minutes, seconds, useconds are optional if all the values to the right are 0.
    • .flags
      Name Position
      is_timestamp 1
  • DECIMAL

    An arbitrary length number. The number is encoded as a single byte indicating the position of the decimal point followed by the Packed BCD encoded number. Packed BCD is used to simplify conversion to and from strings and other native arbitrary precision math data types. See also: packed BCD in https://en.wikipedia.org/wiki/Binary-coded_decimal

    • .length Maximum number of displayable decimal digits (excluding the decimal point and sign, but including .fractional_digits).
      Note
      Should be in the range of 1 - 65.
    • .fractional_digits The decimal digits to display out of length.

      Note
      Should be in the range of 0 - 30.

      value The following bytes sequence:

      scale | BCD+ sign [0x00]?

      • scale - 8bit scale value (number of decimal digit after the '.')
      • BCD - BCD encoded digits (4 bits for each digit)
      • sign - sign encoded on 4 bits (0xc = "+", 0xd = "-")
      • 0x0 - last 4bits if length(digits) % 2 == 0

      Example: x04 0x12 0x34 0x01 0xd0 -> -12.3401

  • SET

    A list of strings representing a SET of values.

    • value
      A sequence of 0 or more of protobuf's bytes (length prepended octets) or one of the special sequences with a predefined meaning listed below.

      Example (length of the bytes array shown in brackets):

      • [0] - the NULL value
      • [1] 0x00 - a set containing a blank string ''
      • [1] 0x01 - this would be an invalid value, but is to be treated as the empty set
      • [2] 0x01 0x00 - a set with a single item, which is the '0' character
      • [8] 0x03 F O O 0x03 B A R - a set with 2 items: FOO,BAR

Member Enumeration Documentation

◆ FieldType

Enumerator
SINT 
UINT 
DOUBLE 
FLOAT 
BYTES 
TIME 
DATETIME 
SET 
ENUM 
BIT 
DECIMAL 

Member Data Documentation

◆ catalog

optional bytes Mysqlx::Resultset::ColumnMetaData::catalog = 7

catalog the schema originates from

Note
As there is currently no support for catalogs in MySQL, don't expect this field to be set. In the MySQL C/S protocol the field had the value def all the time

◆ collation

optional uint64 Mysqlx::Resultset::ColumnMetaData::collation = 8

◆ content_type

optional uint32 Mysqlx::Resultset::ColumnMetaData::content_type = 12

a hint about the higher-level encoding of a BYTES field

Type Value Description
BYTES 0x0001 GEOMETRY (WKB encoding)
BYTES 0x0002 JSON (text encoding)
BYTES 0x0003 XML (text encoding)
Note
This list isn't comprehensive. As a guideline: the field's value is expected to pass a validator check on client and server if this field is set. If the server adds more internal data types that rely on BLOB storage like image manipulation, seeking into complex types in BLOBs, and more types will be added

◆ flags

optional uint32 Mysqlx::Resultset::ColumnMetaData::flags = 11

.type specific flags

Type Value Description
UINT 0x0001 zerofill
DOUBLE 0x0001 unsigned
FLOAT 0x0001 unsigned
DECIMAL 0x0001 unsigned
BYTES 0x0001 rightpad
Value Description
0x0010 NOT_NULL
0x0020 PRIMARY_KEY
0x0040 UNIQUE_KEY
0x0080 MULTIPLE_KEY
0x0100 AUTO_INCREMENT

default: 0

◆ fractional_digits

optional uint32 Mysqlx::Resultset::ColumnMetaData::fractional_digits = 9

displayed factional decimal digits for floating point and fixed point numbers

◆ length

optional uint32 Mysqlx::Resultset::ColumnMetaData::length = 10

maximum count of displayable characters of .type

◆ name

optional bytes Mysqlx::Resultset::ColumnMetaData::name = 2

name of the column

◆ original_name

optional bytes Mysqlx::Resultset::ColumnMetaData::original_name = 3

name of the column before an alias was applied

◆ original_table

optional bytes Mysqlx::Resultset::ColumnMetaData::original_table = 5

name of the table the column originates from before an alias was applied

◆ schema

optional bytes Mysqlx::Resultset::ColumnMetaData::schema = 6

schema the column originates from

◆ server_message_id

ServerMessages::Type Mysqlx::Resultset::ColumnMetaData::server_message_id = RESULTSET_COLUMN_META_DATA

◆ table

optional bytes Mysqlx::Resultset::ColumnMetaData::table = 4

name of the table the column originates from

◆ type

required FieldType Mysqlx::Resultset::ColumnMetaData::type = 1

datatype of the field in a row


The documentation for this struct was generated from the following file: