public static MultiPartTableName?ReadMultiPartTableName(this TdsPackageReader reader) { // Find out how many parts in the TDS stream var nParts = reader.ReadByte(); if (nParts == 0) { return(null); } var mpt = new MultiPartTableName(); if (nParts == 4) { mpt.ServerName = reader.ReadString(reader.ReadUInt16()); } if (nParts >= 3) { mpt.CatalogName = reader.ReadString(reader.ReadUInt16()); } if (nParts >= 2) { mpt.SchemaName = reader.ReadString(reader.ReadUInt16()); } mpt.TableName = reader.ReadString(reader.ReadUInt16()); return(mpt); }
internal static Udt ReadUdtMetadata(this TdsPackageReader reader) => new Udt { DatabaseName = reader.ReadString(reader.ReadByte()), SchemaName = reader.ReadString(reader.ReadByte()), TypeName = reader.ReadString(reader.ReadByte()), AssemblyQualifiedName = reader.ReadString(reader.ReadUInt16()) };
public static XmlSchema?ReadXmlSchema(this TdsPackageReader reader) { var schemaPresent = reader.ReadByte(); if ((schemaPresent & 1) != 0) { return new XmlSchema { CollectionDatabase = reader.ReadString(reader.ReadByte()), CollectionOwningSchema = reader.ReadString(reader.ReadByte()), CollectionName = reader.ReadString(reader.ReadUInt16()) } } ; return(null); }
private static void ReadMetadata(TdsPackageReader reader, ColumnMetadata col) { // read user type - 4 bytes Yukon, 2 backwards reader.ReadUInt32(); // read the 2 flags and set appropriate flags in structure col.Flag1 = reader.ReadByte(); col.Flag2 = reader.ReadByte(); var tdsType = col.TdsType = reader.ReadByte(); var tmp = col.MetaType = TdsMetaType.TdsTypes[tdsType]; col.IsPlp = tmp.IsPlp; col.IsTextOrImage = tmp.IsTextOrImage; var length = ReadTdsTypeLen(reader, tmp.LenBytes); if (length == TdsEnums.SQL_USHORTVARMAXLEN && tmp.LenBytes == 2) { col.IsPlp = true; } if (tdsType == TdsEnums.SQLUDT) { reader.ReadUdtMetadata(); } if (tdsType == TdsEnums.SQLXMLTYPE) { ReadXmlSchema(reader); } if (tmp.HasPrecision) { reader.ReadByte(); } if (tmp.HasScale) { col.Scale = reader.ReadByte(); } if (tmp.HasCollation) { col.Encoding = GetEncodingFromCollation(reader); } if (col.TdsType == TdsEnums.SQLTEXT || col.TdsType == TdsEnums.SQLNTEXT || col.TdsType == TdsEnums.SQLIMAGE) { ReadMultiPartTableName(reader); } col.Column = reader.ReadString(reader.ReadByte()); }
internal static void EnvCharset(this TdsPackageReader reader) { var newValue = reader.ReadString(reader.ReadByte()); var oldValue = reader.ReadString(reader.ReadByte()); // we copied this behavior directly from luxor - see charset envchange // section from sqlctokn.c if (newValue == TdsEnums.DEFAULT_ENGLISH_CODE_PAGE_STRING) { reader.CurrentSession.DefaultCodePage = TdsEnums.DEFAULT_ENGLISH_CODE_PAGE_VALUE; reader.CurrentSession.DefaultEncoding = Encoding.GetEncoding(reader.CurrentSession.DefaultCodePage); return; } var stringCodePage = newValue.Substring(TdsEnums.CHARSET_CODE_PAGE_OFFSET); reader.CurrentSession.DefaultCodePage = int.Parse(stringCodePage, NumberStyles.Integer, CultureInfo.InvariantCulture); reader.CurrentSession.DefaultEncoding = Encoding.GetEncoding(reader.CurrentSession.DefaultCodePage); }
public static void SqlErrorAndInfo(this TdsPackageReader reader, byte token, int tokenLength) { var start = reader.GetReadPos(); var error = new SqlInfoAndError { Number = reader.ReadInt32(), State = reader.ReadByte(), Class = reader.ReadByte(), Message = reader.ReadString(reader.ReadUInt16()), Server = reader.ReadString(reader.ReadByte()), Procedure = reader.ReadString(reader.ReadByte()) }; var current = reader.GetReadPos(); error.LineNumber = tokenLength - (current - start) > 2 ? reader.ReadInt32() : reader.ReadInt16(); if (error.Class >= TdsEnums.MIN_ERROR_CLASS) { throw new Exception(error.Message); } reader.CurrentSession.Errors.Add(error); }
public static void EnvPackageSize(this TdsPackageReader tdsPackageReader) { var newValue = tdsPackageReader.ReadString(tdsPackageReader.ReadByte()); var oldValue = tdsPackageReader.ReadString(tdsPackageReader.ReadByte()); var packetSize = int.Parse(newValue, NumberStyles.Integer, CultureInfo.InvariantCulture); }
private static MetadataBulkCopy ReadMetadata(TdsPackageReader reader) { var col = new MetadataBulkCopy(); // read user type - 4 bytes Yukon, 2 backwards reader.ReadUInt32(); // read the 2 flags and set appropriate flags in structure col.Flag1 = reader.ReadByte(); col.Flag2 = reader.ReadByte(); var tdsType = reader.ReadByte(); col.TdsType = tdsType; var tmp = col.MetaType = TdsMetaType.TdsTypes[tdsType]; col.IsPlp = tmp.IsPlp; col.IsTextOrImage = tmp.IsTextOrImage; var length = col.Length = reader.ReadTdsTypeLen(tmp.LenBytes); if (length == TdsEnums.SQL_USHORTVARMAXLEN && tmp.LenBytes == 2) { col.IsPlp = true; } if (tdsType == TdsEnums.SQLUDT) { reader.ReadUdtMetadata(); } if (tdsType == TdsEnums.SQLXMLTYPE) { reader.ReadXmlSchema(); } if (tmp.HasPrecision) { col.Precision = reader.ReadByte(); } if (tmp.HasScale) { col.Scale = reader.ReadByte(); } if (tmp.HasCollation) { col.Collation = reader.ReadCollation(); col.Encoding = reader.CurrentSession.GetEncodingFromCache(col.Collation.GetCodePage()); } if (col.IsTextOrImage) { col.PartTableName = reader.ReadMultiPartTableName(); } //bulkcopy typeCorrection if (tdsType == TdsEnums.SQLXMLTYPE) { col.TdsType = TdsEnums.SQLNVARCHAR; col.Length = TdsEnums.SQL_USHORTVARMAXLEN; col.Collation = new SqlCollations(); } if (tdsType == TdsEnums.SQLUDT) { col.TdsType = TdsEnums.SQLBIGVARBINARY; col.Length = TdsEnums.SQL_USHORTVARMAXLEN; } col.Column = reader.ReadString(reader.ReadByte()); return(col); }
internal static void EnvLanguage(this TdsPackageReader tdsPackageReader) { var newValue = tdsPackageReader.ReadString(tdsPackageReader.ReadByte()); var oldValue = tdsPackageReader.ReadString(tdsPackageReader.ReadByte()); }