private MySqlField GetFieldMetaData41() { MySqlField field = new MySqlField(connection); stream.OpenPacket(); field.Encoding = encoding; field.CatalogName = stream.ReadLenString(); field.DatabaseName = stream.ReadLenString(); field.TableName = stream.ReadLenString(); field.RealTableName = stream.ReadLenString(); field.ColumnName = stream.ReadLenString(); field.OriginalColumnName = stream.ReadLenString(); stream.ReadByte(); field.CharacterSetIndex = stream.ReadInteger(2); field.ColumnLength = stream.ReadInteger(4); MySqlDbType type = (MySqlDbType)stream.ReadByte(); ColumnFlags colFlags; if ((Flags & ClientFlags.LONG_FLAG) != 0) { colFlags = (ColumnFlags)stream.ReadInteger(2); } else { colFlags = (ColumnFlags)stream.ReadByte(); } field.SetTypeAndFlags(type, colFlags); field.Scale = (byte)stream.ReadByte(); if (stream.HasMoreData) { stream.ReadInteger(2); // reserved } if (charSets != null && field.CharacterSetIndex != -1) { CharacterSet cs = CharSetMap.GetChararcterSet(Version, (string)charSets[field.CharacterSetIndex]); field.MaxLength = cs.byteCount; field.Encoding = CharSetMap.GetEncoding(version, (string)charSets[field.CharacterSetIndex]); } return(field); }
private void GetColumnData(MySqlField field) { stream.Encoding = Encoding; packet = stream.ReadPacket(); field.Encoding = Encoding; field.CatalogName = packet.ReadLenString(); field.DatabaseName = packet.ReadLenString(); field.TableName = packet.ReadLenString(); field.RealTableName = packet.ReadLenString(); field.ColumnName = packet.ReadLenString(); field.OriginalColumnName = packet.ReadLenString(); packet.ReadByte(); field.CharacterSetIndex = packet.ReadInteger(2); field.ColumnLength = packet.ReadInteger(4); MySqlDbType type = (MySqlDbType)packet.ReadByte(); ColumnFlags colFlags; if ((connectionFlags & ClientFlags.LONG_FLAG) != 0) { colFlags = (ColumnFlags)packet.ReadInteger(2); } else { colFlags = (ColumnFlags)packet.ReadByte(); } field.Scale = (byte)packet.ReadByte(); if (packet.HasMoreData) { packet.ReadInteger(2); // reserved } if (type == MySqlDbType.Decimal || type == MySqlDbType.NewDecimal) { field.Precision = ((colFlags & ColumnFlags.UNSIGNED) != 0) ? (byte)(field.ColumnLength) : (byte)(field.ColumnLength - 1); if (field.Scale != 0) { field.Precision--; } } field.SetTypeAndFlags(type, colFlags); }
private MySqlField GetFieldMetaData() { MySqlField field; if (version.isAtLeast(4, 1, 0)) { field = GetFieldMetaData41(); } else { stream.OpenPacket(); field = new MySqlField(connection); field.Encoding = encoding; field.TableName = stream.ReadLenString(); field.ColumnName = stream.ReadLenString(); field.ColumnLength = stream.ReadNBytes(); MySqlDbType type = (MySqlDbType)stream.ReadNBytes(); stream.ReadByte(); ColumnFlags colFlags; if ((Flags & ClientFlags.LONG_FLAG) != 0) { colFlags = (ColumnFlags)stream.ReadInteger(2); } else { colFlags = (ColumnFlags)stream.ReadByte(); } field.SetTypeAndFlags(type, colFlags); field.Scale = (byte)stream.ReadByte(); if (!version.isAtLeast(3, 23, 15) && version.isAtLeast(3, 23, 0)) { field.Scale++; } } return(field); }