public void TestFromDocument() { const string colname = "tests"; const string id = "32312312"; var doc = new Document().Add(DBRef.RefName, colname).Add(DBRef.IdName, id); var expected = new DBRef(colname, id); Assert.AreEqual(expected, DBRef.FromDocument(doc)); }
/// <summary> /// Ends the object. /// </summary> /// <param name = "instance">The instance.</param> /// <returns></returns> public object EndObject(object instance) { var document = (Document)instance; if (DBRef.IsDocumentDBRef(document)) { return(DBRef.FromDocument(document)); } return(document); }
public void TestFromIncompleteDocumentThrowsArguementException() { DBRef.FromDocument(new Document(DBRef.RefName, "tests")); }
public Object ReadElementType(sbyte typeNum) { switch ((BsonDataType)typeNum) { case BsonDataType.Null: case BsonDataType.Undefined: return(MongoDBNull.Value); case BsonDataType.MinKey: return(MongoMinKey.Value); case BsonDataType.MaxKey: return(MongoMaxKey.Value); case BsonDataType.Boolean: position++; return(reader.ReadBoolean()); case BsonDataType.Integer: position += 4; return(reader.ReadInt32()); case BsonDataType.Long: position += 8; return(reader.ReadInt64()); case BsonDataType.Date: position += 8; long millis = reader.ReadInt64(); return(epoch.AddMilliseconds(millis)); case BsonDataType.Oid: position += 12; return(new Oid(reader.ReadBytes(12))); case BsonDataType.Number: position += 8; return(reader.ReadDouble()); case BsonDataType.String: { return(ReadLenString()); } case BsonDataType.Obj: { Document doc = this.ReadDocument(); if (DBRef.IsDocumentDBRef(doc)) { return(DBRef.FromDocument(doc)); } return(doc); } case BsonDataType.Array: { Document doc = this.ReadDocument(); return(ConvertToArray(doc)); } case BsonDataType.Regex: { MongoRegex r = new MongoRegex(); r.Expression = this.ReadString(); r.Options = this.ReadString(); return(r); } case BsonDataType.Code: { Code c = new Code(); c.Value = ReadLenString(); return(c); } case BsonDataType.CodeWScope: { int startpos = position; int size = reader.ReadInt32(); position += 4; String val = this.ReadLenString(); Document scope = this.ReadDocument(); if (size != position - startpos) { throw new System.IO.InvalidDataException(string.Format("Should have read {0} bytes from stream but read {1} in CodeWScope", size, position - startpos)); } return(new CodeWScope(val, scope)); } case BsonDataType.Binary: { int size = reader.ReadInt32(); position += 4; byte subtype = reader.ReadByte(); position++; if (subtype == (byte)Binary.TypeCode.General) { size = reader.ReadInt32(); position += 4; } byte[] bytes = reader.ReadBytes(size); position += size; // From http://en.wikipedia.org/wiki/Universally_Unique_Identifier // The most widespread use of this standard is in Microsoft's Globally Unique Identifiers (GUIDs). if (subtype == 3 && 16 == size) { return(new Guid(bytes)); } Binary b = new Binary(); b.Bytes = bytes; b.Subtype = (Binary.TypeCode)subtype; return(b); } default: throw new ArgumentOutOfRangeException(String.Format("Type Number: {0} not recognized", typeNum)); } }