private void ReadAssociatedResult(BinaryReader reader) { var zero = reader.ReadInt16EndianAware(); if (zero != 0) { throw new InvalidOperationException("Unsupported record format"); } ORecordType recordType = (ORecordType)reader.ReadByte(); if (recordType != ORecordType.Document) { throw new InvalidOperationException("Unsupported record type"); } short clusterId = reader.ReadInt16EndianAware(); long clusterPosition = reader.ReadInt64EndianAware(); int recordVersion = reader.ReadInt32EndianAware(); var recordLength = reader.ReadInt32EndianAware(); var record = reader.ReadBytes(recordLength); //var document = RecordCSVSerializer.Deserialize(new ORID(clusterId, clusterPosition), recordVersion, ORecordType.Document, 0, record); var document = Serializer .Deserialize(record, new ODocument { ORID = new ORID(clusterId, clusterPosition), OVersion = recordVersion, OType = ORecordType.Document }); _database.ClientCache[document.ORID] = document; }
internal static ODocument Deserialize(ORID orid, int version, ORecordType type, short classId, byte[] rawRecord) { ODocument document = new ODocument(); document.ORID = orid; document.OVersion = version; document.OType = type; document.OClassId = classId; string recordString = BinarySerializer.ToString(rawRecord).Trim(); int atIndex = recordString.IndexOf('@'); int colonIndex = recordString.IndexOf(':'); int index = 0; // parse class name if ((atIndex != -1) && (atIndex < colonIndex)) { document.OClassName = recordString.Substring(0, atIndex); index = atIndex + 1; } // start document parsing with first field name do { index = ParseFieldName(index, recordString, document); }while (index < recordString.Length); return(document); }
internal static ODocument Deserialize(ORID orid, int version, ORecordType type, short classId, byte[] rawRecord) { ODocument document = new ODocument(); document.ORID = orid; document.OVersion = version; document.OType = type; document.OClassId = classId; string recordString = BinarySerializer.ToString(rawRecord).Trim(); int atIndex = recordString.IndexOf('@'); int colonIndex = recordString.IndexOf(':'); int index = 0; // parse class name if ((atIndex != -1) && (atIndex < colonIndex)) { document.OClassName = recordString.Substring(0, atIndex); index = atIndex + 1; } // start document parsing with first field name do { index = ParseFieldName(index, recordString, document); } while (index < recordString.Length); return document; }
private ODocument ParseDocument(BinaryReader reader) { ODocument document = null; short classId = reader.ReadInt16EndianAware(); if (classId == -2) // NULL { } else if (classId == -3) // record id { ORID orid = new ORID(); orid.ClusterId = reader.ReadInt16EndianAware(); orid.ClusterPosition = reader.ReadInt64EndianAware(); document = new ODocument(); document.ORID = orid; document.OClassId = classId; } else { ORecordType type = (ORecordType)reader.ReadByte(); ORID orid = new ORID(); orid.ClusterId = reader.ReadInt16EndianAware(); orid.ClusterPosition = reader.ReadInt64EndianAware(); int version = reader.ReadInt32EndianAware(); int recordLength = reader.ReadInt32EndianAware(); byte[] rawRecord = reader.ReadBytes(recordLength); document = RecordSerializer.Deserialize(orid, version, type, classId, rawRecord); } return(document); }
internal static ORecord ToRecord(ORID orid, int version, ORecordType type, short classId, byte[] rawRecord) { ORecord record = new ORecord(orid, version, type, classId); string recordString = BinarySerializer.ToString(rawRecord).Trim(); int atIndex = recordString.IndexOf('@'); int colonIndex = recordString.IndexOf(':'); int index = 0; // parse class name if ((atIndex != -1) && (atIndex < colonIndex)) { record.ClassName = recordString.Substring(0, atIndex); index = atIndex + 1; } // start document parsing with first field name do { index = ParseFieldName(index, recordString, record.Document); } while (index < recordString.Length); return record; }
internal static ODocument Deserialize(ORID orid, int version, ORecordType type, short classId, byte[] rawRecord) { ODocument document = new ODocument(); document.ORID = orid; document.OVersion = version; document.OType = type; document.OClassId = classId; string recordString = BinarySerializer.ToString(rawRecord).Trim(); return Deserialize(recordString, document); }
internal ODocument Deserialize(ORID orid, int version, ORecordType type, short classId, byte[] rawRecord) { ODocument document = new ODocument(); document.ORID = orid; document.OVersion = version; document.OType = type; document.OClassId = classId; string recordString = BinarySerializer.ToString(rawRecord).Trim(); return(Deserialize(recordString, document)); }
private ODocument ParseDocument(ref int offset, byte[] data) { ODocument document = null; short classId = BinarySerializer.ToShort(data.Skip(offset).Take(2).ToArray()); offset += 2; if (classId == -2) // NULL { } else if (classId == -3) // record id { ORID orid = new ORID(); orid.ClusterId = BinarySerializer.ToShort(data.Skip(offset).Take(2).ToArray()); offset += 2; orid.ClusterPosition = BinarySerializer.ToLong(data.Skip(offset).Take(8).ToArray()); offset += 8; document = new ODocument(); document.ORID = orid; document.OClassId = classId; } else { ORecordType type = (ORecordType)BinarySerializer.ToByte(data.Skip(offset).Take(1).ToArray()); offset += 1; ORID orid = new ORID(); orid.ClusterId = BinarySerializer.ToShort(data.Skip(offset).Take(2).ToArray()); offset += 2; orid.ClusterPosition = BinarySerializer.ToLong(data.Skip(offset).Take(8).ToArray()); offset += 8; int version = BinarySerializer.ToInt(data.Skip(offset).Take(4).ToArray()); offset += 4; int recordLength = BinarySerializer.ToInt(data.Skip(offset).Take(4).ToArray()); offset += 4; byte[] rawRecord = data.Skip(offset).Take(recordLength).ToArray(); offset += recordLength; document = RecordSerializer.Deserialize(orid, version, type, classId, rawRecord); } return(document); }
private T ParseDocument(BinaryReader reader) { if (reader == null) { throw new ArgumentNullException($"{nameof(reader)} cannot be null."); } T document; short classId = reader.ReadInt16EndianAware(); if (classId == -2) // NULL { document = null; } else if (classId == -3) // record id { ORID orid = new ORID(); orid.ClusterId = reader.ReadInt16EndianAware(); orid.ClusterPosition = reader.ReadInt64EndianAware(); document = Activator.CreateInstance <T>(); document.ORID = orid; document.OClassId = classId; } else { ORecordType type = (ORecordType)reader.ReadByte(); ORID orid = new ORID(); orid.ClusterId = reader.ReadInt16EndianAware(); orid.ClusterPosition = reader.ReadInt64EndianAware(); int version = reader.ReadInt32EndianAware(); int recordLength = reader.ReadInt32EndianAware(); byte[] rawRecord = reader.ReadBytes(recordLength); document = _serializer.Deserialize <T>(rawRecord); document.ORID = orid; document.OVersion = version; document.OClassId = classId; } return(document); }