Canonical text for the MySQL zero-date sentinel (β0000-00-00 00:00:00β).
In binlog MYSQL_TYPE_DATETIME/MYSQL_TYPE_DATETIME2 encodings, sec=0 cannot represent unix
epoch 0. The TIMESTAMP typeβs supported range starts at β1970-01-01 00:00:01β UTC
(https://dev.mysql.com/doc/refman/8.0/en/datetime.html), so any sec=0 is
unambiguously this sentinel.
Build a ValueDecodeError, logging the schema, table, column, source
gtid_set (if any), and a shape description of row at the same time.
The shape string is only built here β pack_mysql_rowβs happy path does no
per-row allocation beyond what decoding requires.
Describes the structural shape of a row without revealing any data values.
Iterates every wire column. For each, emits the wire name, the binlog
wire type, the character-set id (or binary), a classification relative
to table_desc (expected=<scalar> for active columns, ignored for
columns excluded from the source, extra for upstream columns with no
descriptor entry), and a value disposition (null or bytes(len=N) /
primitive kind). Intended for diagnostic logging on decode errors: MySQL
serializes CHAR, VARCHAR, TEXT, JSON, BLOB, etc. all as Value::Bytes,
so the wire type tag and the expected scalar type are what distinguish
them.
Format MySQL DATETIME/TIMESTAMP components as YYYY-MM-DD HH:MM:SS[.ffff].
micros is the raw microseconds (0..1_000_000); only the leading
precision digits are kept, matching MySQLβs DATETIME(p)/TIMESTAMP(p)
display.