public CommAreaGroupDescriptor( DrdaStreamReader reader) { if (reader.ReadUInt8() == 0xFF) { return; } SqlCode = reader.ReadUInt32(); SqlState = reader.ReadString(5); var sqlErrProc = reader.ReadString(8); if (reader.ReadUInt8() != 0xFF) { RowsFetched = reader.ReadUInt64(); RowsUpdated = reader.ReadUInt32(); var sqlErrs = reader.ReadBytes(12); // 3 * sizeof(UInt32) var sqlWarn = reader.ReadBytes(11); // 11 * sizeof(Byte) var rdbName = reader.ReadUInt16(); SqlMessage = reader.ReadVcmVcs(); } if (reader.ReadUInt8() != 0xFF) { // WORKWORK } }
public static Decimal ReadDecimal( this DrdaStreamReader reader, Int32 precision, Int32 scale) { var value = 0M; var bytes = precision / 2; for (var index = 0; index < bytes; ++index) { var nybbles = reader.ReadUInt8(); var hiNybble = (nybbles >> 4) & 0xF; var lowNybble = nybbles & 0xF; value = value * 10 + hiNybble; value = value * 10 + lowNybble; } var lastNybbles = reader.ReadUInt8(); if (precision % 2 == 1) { var hiNybble = (lastNybbles >> 4) & 0xF; value = value * 10 + hiNybble; } if ((lastNybbles & 0x0F) == 0x0D) { value = Decimal.Negate(value); } return(value * Scales[scale]); }
public ResponseMessage( DrdaStreamReader reader) { Size = reader.ReadUInt16(); reader.ReadUInt8(); // DDMID Format = (MessageFormat)reader.ReadUInt8(); RequestCorrelationId = reader.ReadUInt16(); Command = (ICommand)CodePointMapper.Deserialize(reader); }
internal void Process( QueryContext context) { using var stream = new MemoryStream(_messageBytes, false); var reader = new DrdaStreamReader(stream); while (stream.Position < stream.Length) { var length = reader.ReadUInt8(); var type = reader.ReadUInt8(); var id = reader.ReadUInt8(); // TODO: olegra - store full parsing tree here later if (id != 0xD0) { reader.ReadBytes((UInt32)length - 3); continue; } var triples = new Triple[length / 3 - 1]; for (var index = 0; index < triples.Length; ++index) { switch (type) { case 117: // GDA case 118: // NGDA triples[index] = new Triple( reader.ReadUInt8(), reader.ReadUInt16()); break; case 113: // RLO // TODO: olegra - skip for now reader.ReadUInt8(); reader.ReadUInt16(); break; } } for (var index = 0; index < triples.Length; ++index) { context.Columns[index].TripletType = triples[index].Type; context.Columns[index].TripletDataSize = triples[index].Size; } } }
public UInt8Parameter( DrdaStreamReader reader, CodePoint codePoint) : this( codePoint, reader.ReadUInt8()) { }
private static String ReadVarString( this DrdaStreamReader reader, Byte hiByte) { var size = (hiByte << 8) | reader.ReadUInt8(); var bytes = reader.ReadBytes((UInt32)size); return(Encoding.UTF8.GetString(bytes)); }
public DrdaColumn( DrdaStreamReader reader) { Precision = reader.ReadUInt16(); Scale = reader.ReadUInt16(); Length = reader.ReadUInt64(); Db2Type = (Db2Type)reader.ReadUInt16(); CcsId = reader.ReadUInt16(); ArrayExt = reader.ReadUInt8(); Unnamed = reader.ReadUInt16(); Name = reader.ReadVcmVcs(); Label = reader.ReadVcmVcs(); Comment = reader.ReadVcmVcs(); var hiByte = reader.ReadUInt8(); if (hiByte != 0xFF) { TypeName = reader.ReadVcmVcs(hiByte); ClassName = reader.ReadVcmVcs(); } // ReSharper disable once RedundantAssignment reader.ReadUInt8(); KeyMem = reader.ReadUInt16(); Updateable = reader.ReadUInt16(); Generated = reader.ReadUInt16(); ParameterMode = reader.ReadUInt16(); RdbName = reader.ReadVarString(); CoreName = reader.ReadVcmVcs(); BaseName = reader.ReadVcmVcs(); Scheme = reader.ReadVcmVcs(); DxName = reader.ReadVcmVcs(); }
public static String ReadString( this DrdaStreamReader reader, Int32 maxLength) { var buffer = new StringBuilder(maxLength); do { var character = (Char)reader.ReadUInt8(); if (character == 0x00) { break; } buffer.Append(character); } while (--maxLength != 0); return(buffer.ToString()); }
private Boolean ProcessSingleRow( DrdaStreamReader reader, QueryContext context) { var groupDescriptor = new CommAreaGroupDescriptor(reader); reader.ReadUInt8(); // Parent nullable triplet if (groupDescriptor.SqlCode == 100 && String.Equals(groupDescriptor.SqlState, "02000")) { context.HasMoreData = false; return(false); } context.Rows.Enqueue(context.Columns .Select(reader.ReadColumnValue).ToList()); return(true); }