public void TestGuidIdChecker()
        {
            var idChecker = BsonSerializer.LookupIdGenerator(typeof(Guid));

            Assert.IsTrue(idChecker.IsEmpty(Guid.Empty));
            Assert.IsFalse(idChecker.IsEmpty(Guid.NewGuid()));
        }
        public void TestObjectIdChecker()
        {
            var idChecker = BsonSerializer.LookupIdGenerator(typeof(ObjectId));

            Assert.IsTrue(idChecker.IsEmpty(ObjectId.Empty));
            Assert.IsFalse(idChecker.IsEmpty(ObjectId.GenerateNewId()));
        }
        public void TestNullIdChecker()
        {
            var idChecker = BsonSerializer.LookupIdGenerator(typeof(object));

            Assert.IsTrue(idChecker.IsEmpty(null));
            Assert.IsFalse(idChecker.IsEmpty(new object()));
        }
        /// <summary>
        /// Gets the document Id.
        /// </summary>
        /// <param name="document">The document.</param>
        /// <param name="id">The Id.</param>
        /// <param name="idNominalType">The nominal type of the Id.</param>
        /// <param name="idGenerator">The IdGenerator for the Id type.</param>
        /// <returns>True if the document has an Id.</returns>
        public bool GetDocumentId(
            object document,
            out object id,
            out Type idNominalType,
            out IIdGenerator idGenerator)
        {
            var bsonDocument = (BsonDocument)document;

            BsonValue idBsonValue;

            if (bsonDocument.TryGetValue("_id", out idBsonValue))
            {
                id          = idBsonValue;
                idGenerator = BsonSerializer.LookupIdGenerator(id.GetType());

                if (idGenerator == null)
                {
                    var idBinaryData = id as BsonBinaryData;
                    if (idBinaryData != null && (idBinaryData.SubType == BsonBinarySubType.UuidLegacy || idBinaryData.SubType == BsonBinarySubType.UuidStandard))
                    {
                        idGenerator = BsonBinaryDataGuidGenerator.GetInstance(idBinaryData.GuidRepresentation);
                    }
                }
            }
            else
            {
                id          = null;
                idGenerator = BsonObjectIdGenerator.Instance;
            }

            idNominalType = typeof(BsonValue);
            return(true);
        }
        public void TestIntZeroIdChecker()
        {
            var idChecker = BsonSerializer.LookupIdGenerator(typeof(int));

            Assert.IsTrue(idChecker.IsEmpty(0));
            Assert.IsFalse(idChecker.IsEmpty(1));
        }
Beispiel #6
0
        /// <summary>
        /// Gets the Id of the document.
        /// </summary>
        /// <param name="id">The Id of the document (the RawValue if it has one, otherwise the element Value).</param>
        /// <param name="idNominalType">The nominal type of the Id.</param>
        /// <param name="idGenerator">The IdGenerator for the Id (or null).</param>
        /// <returns>True (a BsonDocument either has an Id member or one can be added).</returns>
        public bool GetDocumentId(
            out object id,
            out Type idNominalType,
            out IIdGenerator idGenerator
            )
        {
            BsonElement idElement;

            if (TryGetElement("_id", out idElement))
            {
                id = idElement.Value.RawValue;
                if (id == null)
                {
                    id = idElement.Value;
                }

                idGenerator = BsonSerializer.LookupIdGenerator(id.GetType());
            }
            else
            {
                id          = null;
                idGenerator = ObjectIdGenerator.Instance;
            }

            idNominalType = typeof(BsonValue);
            return(true);
        }
        public void TestStructZeroIdChecker()
        {
            var idChecker = BsonSerializer.LookupIdGenerator(typeof(S));

            Assert.IsTrue(idChecker.IsEmpty(default(S)));
            Assert.IsTrue(idChecker.IsEmpty(new S()));
            Assert.IsTrue(idChecker.IsEmpty(new S {
                I = 0
            }));
            Assert.IsFalse(idChecker.IsEmpty(new S {
                I = 1
            }));
        }
 // public methods
 /// <summary>
 /// Applies a post processing modification to the class map.
 /// </summary>
 /// <param name="classMap">The class map.</param>
 public void PostProcess(BsonClassMap classMap)
 {
     var idMemberMap = classMap.IdMemberMap;
     if (idMemberMap != null)
     {
         if (idMemberMap.IdGenerator == null)
         {
             var idGenerator = BsonSerializer.LookupIdGenerator(idMemberMap.MemberType);
             if (idGenerator != null)
             {
                 idMemberMap.SetIdGenerator(idGenerator);
             }
         }
     }
 }
Beispiel #9
0
        public void TestIdMember()
        {
            var u = new User {
                Id = ObjectId.Empty, FriendId = ObjectId.Empty
            };

            var classMap    = BsonClassMap.LookupClassMap(typeof(User));
            var idMemberMap = classMap.IdMemberMap;

            Assert.Equal("Id", idMemberMap.MemberName);

            var idProvider  = BsonSerializer.LookupSerializer(typeof(User)) as IBsonIdProvider;
            var idGenerator = BsonSerializer.LookupIdGenerator(typeof(ObjectId));

            idProvider.SetDocumentId(u, idGenerator.GenerateId(null, u));
            Assert.False(idGenerator.IsEmpty(u.Id));
            Assert.True(idGenerator.IsEmpty(u.FriendId));
        }
        public void TestIdMember()
        {
            var u = new User {
                Id = ObjectId.Empty, FriendId = ObjectId.Empty
            };

            var classMap    = BsonClassMap.LookupClassMap(typeof(User));
            var idMemberMap = classMap.IdMemberMap;

            Assert.AreEqual("Id", idMemberMap.MemberName);

            var serializer  = BsonSerializer.LookupSerializer(typeof(User));
            var idGenerator = BsonSerializer.LookupIdGenerator(typeof(ObjectId));

            serializer.SetDocumentId(u, idGenerator.GenerateId());
            Assert.IsFalse(idGenerator.IsEmpty(u.Id));
            Assert.IsTrue(idGenerator.IsEmpty(u.FriendId));

            var json = u.ToJson();
        }
Beispiel #11
0
 public IIdGenerator GetIdGenerator(MemberInfo memberInfo)
 {
     return(BsonSerializer.LookupIdGenerator(BsonClassMap.GetMemberInfoType(memberInfo)));
 }