package me.xcoding.opencdc.mysql.protocol.column; import me.xcoding.opencdc.mysql.protocol.BasicReader; /** * All of Column Value Type Parsers. * @author Teny Zh(zh.Teny.1@gmail.com) * */ public class ColumnValueParser { static final ValueParser[] parsers = new ValueParser[0x0020]; static { parsers[ColumnType.MYSQL_TYPE_NULL] = new MNull(); parsers[ColumnType.MYSQL_TYPE_BIT] = new MBit(); parsers[ColumnType.MYSQL_TYPE_BLOB] = new MBlob(); parsers[ColumnType.MYSQL_TYPE_ENUM] = new MEnum(); parsers[ColumnType.MYSQL_TYPE_TINY_BLOB] = new MTinyBlob(); parsers[ColumnType.MYSQL_TYPE_MEDIUM_BLOB] = new MMediumBlob(); parsers[ColumnType.MYSQL_TYPE_TINY] = new MTiny(); parsers[ColumnType.MYSQL_TYPE_LONG] = new MLong(); parsers[ColumnType.MYSQL_TYPE_INT24] = new MInt24(); parsers[ColumnType.MYSQL_TYPE_SHORT] = new MShort(); parsers[ColumnType.MYSQL_TYPE_LONGLONG] = new MLongLong(); parsers[ColumnType.MYSQL_TYPE_DATE] = new MDate(); parsers[ColumnType.MYSQL_TYPE_NEWDATE] = new MNewDate(); parsers[ColumnType.MYSQL_TYPE_YEAR] = new MYear(); parsers[ColumnType.MYSQL_TYPE_TIME] = new MTime(); parsers[ColumnType.MYSQL_TYPE_TIME2] = new MTime2(); parsers[ColumnType.MYSQL_TYPE_FLOAT] = new MFloat(); parsers[ColumnType.MYSQL_TYPE_DOUBLE] = new MDouble(); parsers[ColumnType.MYSQL_TYPE_DECIMAL] = new MDecimal(); parsers[ColumnType.MYSQL_TYPE_NEWDECIMAL] = new MNewDecimal(); parsers[ColumnType.MYSQL_TYPE_DATETIME] = new MDateTime(); parsers[ColumnType.MYSQL_TYPE_DATETIME2] = new MDateTime2(); parsers[ColumnType.MYSQL_TYPE_TIMESTAMP] = new MTimestamp(); parsers[ColumnType.MYSQL_TYPE_TIMESTAMP2] = new MTimestamp2(); parsers[ColumnType.MYSQL_TYPE_STRING] = new MString(); parsers[ColumnType.MYSQL_TYPE_VARCHAR] = new MVarchar(); parsers[ColumnType.MYSQL_TYPE_VAR_STRING] = new MVarString(); parsers[ColumnType.MYSQL_TYPE_GEOMETRY] = new MGeometry(); } public static Object valueOf(int type, int length, BasicReader reader) { assert type > 0x01F : "typecode must less than 32"; return parsers[type & 0x01F].valueOf(length, reader); } }