Exemplo n.º 1
0
        public void NewSessionAndUpdatePhase()
        {
            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var sessionOfExperts = new SessionOfExperts("BaseNotion");
                GetRepository <SessionOfExperts>().AddOrUpdate(sessionOfExperts);

                unitOfWork.Commit();
            }

            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var session = LinqProvider.Query <SessionOfExperts>().Single();
                session.NextPhaseOrFinish();
                GetRepository <SessionOfExperts>().AddOrUpdate(session);

                unitOfWork.Commit();
            }

            using (UnitOfWorkFactory.Create()) {
                var session = LinqProvider.Query <SessionOfExperts>().Single();

                session.CurrentPhase.Should().Be(SessionPhase.SpecifyingAssociationsTypes);
                session.StartTime.Should().BeNow();
                session.BaseNotion.Should().Be("BaseNotion");
            }
        }
        public void Aggregate_Group_with_expressions_should_work(
            [Values(LinqProvider.V2, LinqProvider.V3)] LinqProvider linqProvider)
        {
            var collection = GetCollection <BsonDocument>(linqProvider);

            var aggregate = collection.Aggregate()
                            .Group(x => 1, x => new { Count = x.Count() });

            var stages         = Linq3TestHelpers.Translate(collection, aggregate);
            var expectedStages = linqProvider switch
            {
                LinqProvider.V2 =>
                new[]
                {
                    "{ $group : { _id : 1, Count : { $sum : 1 } } }"
                },
                LinqProvider.V3 =>
                new[]
                {
                    "{ $group : { _id : 1, __agg0 : { $sum : 1 } } }",
                    "{ $project : { Count : '$__agg0', _id : 0 } }"
                },
                _ => throw new ArgumentException()
            };

            Linq3TestHelpers.AssertStages(stages, expectedStages);
        }
        private BsonValue Render <TDocument>(UpdateDefinition <TDocument> update, LinqProvider linqProvider)
        {
            var documentSerializer = BsonSerializer.LookupSerializer <TDocument>();
            var serializerRegistry = BsonSerializer.SerializerRegistry;

            return(update.Render(documentSerializer, serializerRegistry, linqProvider));
        }
        private IMongoCollection <TDocument> GetCollection <TDocument>(LinqProvider linqProvider)
        {
            var client   = linqProvider == LinqProvider.V2 ? DriverTestConfiguration.Client : DriverTestConfiguration.Linq3Client;
            var database = client.GetDatabase("test");

            return(database.GetCollection <TDocument>("test"));
        }
Exemplo n.º 5
0
            public override RenderedPipelineStageDefinition <IGrouping <TKey, TInput> > Render(
                IBsonSerializer <TInput> inputSerializer,
                IBsonSerializerRegistry serializerRegistry,
                LinqProvider linqProvider)
            {
                if (linqProvider != LinqProvider.V3)
                {
                    throw new InvalidOperationException("GroupExpressionStageDefinitions can only be used with LINQ3.");
                }

                var expression = CreateExpression(inputSerializer);

                expression = PartialEvaluator.EvaluatePartially(expression);
                var context             = TranslationContext.Create(expression, inputSerializer);
                var unoptimizedPipeline = ExpressionToPipelineTranslator.Translate(context, expression);
                var pipeline            = AstPipelineOptimizer.Optimize(unoptimizedPipeline);

                var groupStageDocument = pipeline.Stages[0].Render().AsBsonDocument;
                var renderedGroupStage = new RenderedPipelineStageDefinition <IGrouping <TKey, TInput> >("$group", groupStageDocument, new DummyIGroupingSerializer());

                var projectStageDocument = pipeline.Stages[1].Render().AsBsonDocument;

                _renderedProjectStage = new RenderedPipelineStageDefinition <TOutput>("$project", projectStageDocument, (IBsonSerializer <TOutput>)pipeline.OutputSerializer);

                return(renderedGroupStage);
            }
        public static ChangeStreamOperation <TResult> CreateChangeStreamOperation <TResult, TDocument>(
            IMongoCollection <TDocument> collection,
            PipelineDefinition <ChangeStreamDocument <TDocument>, TResult> pipeline,
            IBsonSerializer <TDocument> documentSerializer,
            LinqProvider linqProvider,
            ChangeStreamOptions options,
            ReadConcern readConcern,
            MessageEncoderSettings messageEncoderSettings,
            bool retryRequested)
        {
            var renderedPipeline = RenderPipeline(pipeline, documentSerializer, linqProvider);

            var operation = new ChangeStreamOperation <TResult>(
                collection.CollectionNamespace,
                renderedPipeline.Documents,
                renderedPipeline.OutputSerializer,
                messageEncoderSettings)
            {
                RetryRequested = retryRequested
            };

            SetOperationOptions(operation, options, readConcern);

            return(operation);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Returns a <see cref="System.String" /> that represents this instance.
        /// </summary>
        /// <param name="linqProvider">The LINQ provider.</param>
        /// <returns>
        /// A <see cref="System.String" /> that represents this instance.
        /// </returns>
        public string ToString(LinqProvider linqProvider)
        {
            var serializerRegistry = BsonSerializer.SerializerRegistry;
            var inputSerializer    = serializerRegistry.GetSerializer <TInput>();

            return(ToString(inputSerializer, serializerRegistry, linqProvider));
        }
Exemplo n.º 8
0
        public void TestAddSession()
        {
            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var notionType = new NotionType("type");
                GetRepository <NotionType>().AddOrUpdate(notionType);

                var node = new Node("notion", notionType);
                GetRepository <Node>().AddOrUpdate(node);

                unitOfWork.Commit();
            }

            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var session = new SessionOfExperts("baseNotion");
                GetRepository <SessionOfExperts>().AddOrUpdate(session);

                var node = LinqProvider.Query <Node>().Single();
                node.AddSessionOfExperts(session);

                unitOfWork.Commit();
            }

            using (UnitOfWorkFactory.Create()) {
                var node = LinqProvider.Query <Node>().Single();

                node.SessionsOfExperts.Count.Should().Be(1);
            }
        }
Exemplo n.º 9
0
        public void UpdateLastCompletedPhase()
        {
            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var sessionOfExperts = new SessionOfExperts("baseNotion");
                GetRepository <SessionOfExperts>().AddOrUpdate(sessionOfExperts);

                var expert = new Expert("expertName", sessionOfExperts);
                GetRepository <Expert>().AddOrUpdate(expert);

                unitOfWork.Commit();
            }

            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var expert = LinqProvider.Query <Expert>().Single();
                expert.LastCompletedPhase = SessionPhase.SpecifyingAssociationsTypes;

                unitOfWork.Commit();
            }

            using (UnitOfWorkFactory.Create()) {
                var expert = LinqProvider.Query <Expert>().Single();

                expert.LastCompletedPhase.Should().Be(SessionPhase.SpecifyingAssociationsTypes);
            }
        }
Exemplo n.º 10
0
 public override BsonDocument Render(
     IBsonSerializer <T> documentSerializer,
     IBsonSerializerRegistry serializerRegistry,
     LinqProvider provider)
 {
     return(Render(documentSerializer, serializerRegistry));
 }
Exemplo n.º 11
0
        public void ReplaceAssociation_NotEmptyCollection()
        {
            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var sessionOfExperts = new SessionOfExperts("baseNotion");
                GetRepository <SessionOfExperts>().AddOrUpdate(sessionOfExperts);

                var expert = new Expert("expertName", sessionOfExperts);
                expert.ReplaceAllAssociations(new[] { "notion1", "notion2" });
                GetRepository <Expert>().AddOrUpdate(expert);

                unitOfWork.Commit();
            }

            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var expert = LinqProvider.Query <Expert>().Single();
                expert.ReplaceAllAssociations(new[] { "notion3", "notion4" });
                GetRepository <Expert>().AddOrUpdate(expert);

                unitOfWork.Commit();
            }

            using (UnitOfWorkFactory.Create()) {
                var expert = LinqProvider.Query <Expert>().Single();

                expert.Associations.Should().BeEquivalentTo(
                    new[]
                {
                    new { Expert = expert, Notion = "notion3" },
                    new { Expert = expert, Notion = "notion4" }
                },
                    opt => opt.ExcludingMissingMembers());
            }
        }
Exemplo n.º 12
0
 public override RenderedPipelineStageDefinition <TOutput> Render(
     IBsonSerializer <TInput> inputSerializer,
     IBsonSerializerRegistry serializerRegistry,
     LinqProvider linqProvider)
 {
     return(renderer(inputSerializer));
 }
        // private static methods
        private static RenderedPipelineDefinition <TResult> RenderPipeline <TResult, TDocument>(
            PipelineDefinition <ChangeStreamDocument <TDocument>, TResult> pipeline,
            IBsonSerializer <TDocument> documentSerializer,
            LinqProvider linqProvider)
        {
            var changeStreamDocumentSerializer = new ChangeStreamDocumentSerializer <TDocument>(documentSerializer);
            var serializerRegistry             = BsonSerializer.SerializerRegistry;

            return(pipeline.Render(changeStreamDocumentSerializer, serializerRegistry, linqProvider));
        }
        public void PipelineStageDefinitionBuilder_Group_with_projection_to_TOutput_should_work(
            [Values(LinqProvider.V2, LinqProvider.V3)] LinqProvider linqProvider)
        {
            var stageDefinition = PipelineStageDefinitionBuilder.Group <BsonDocument, BsonDocument>("{ _id : 1, Count : { $sum : 1 } }");

            var stage          = Linq3TestHelpers.Render(stageDefinition, BsonDocumentSerializer.Instance, linqProvider);
            var expectedStages = new[]
            {
                "{ $group : { _id : 1, Count : { $sum : 1 } } }"
            };

            Linq3TestHelpers.AssertStages(new[] { stage }, expectedStages);
        }
Exemplo n.º 15
0
 /// <summary>
 /// Initializes a new instance of the MongoClient class.
 /// </summary>
 /// <param name="settings">The settings.</param>
 public MongoClient(MongoClientSettings settings)
 {
     _settings          = Ensure.IsNotNull(settings, nameof(settings)).FrozenCopy();
     _linqProvider      = _settings.LinqProvider;
     _cluster           = ClusterRegistry.Instance.GetOrCreateCluster(_settings.ToClusterKey());
     _operationExecutor = new OperationExecutor(this);
     if (settings.AutoEncryptionOptions != null)
     {
         _libMongoCryptController = AutoEncryptionLibMongoCryptController.Create(
             this,
             _cluster.CryptClient,
             settings.AutoEncryptionOptions);
     }
 }
        public void PipelineDefinitionBuilder_Group_with_projection_to_implied_BsonDocument_should_work(
            [Values(LinqProvider.V2, LinqProvider.V3)] LinqProvider linqProvider)
        {
            var emptyPipeline = (PipelineDefinition <BsonDocument, BsonDocument>) new EmptyPipelineDefinition <BsonDocument>();

            var pipeline = emptyPipeline.Group("{ _id : 1, Count : { $sum : 1 } }");

            var stages         = Linq3TestHelpers.Render(pipeline, BsonDocumentSerializer.Instance, linqProvider);
            var expectedStages = new[]
            {
                "{ $group : { _id : 1, Count : { $sum : 1 } } }"
            };

            Linq3TestHelpers.AssertStages(stages, expectedStages);
        }
        public void Aggregate_Group_with_projection_to_TNewResult_should_work(
            [Values(LinqProvider.V2, LinqProvider.V3)] LinqProvider linqProvider)
        {
            var collection = GetCollection <BsonDocument>(linqProvider);

            var aggregate = collection.Aggregate()
                            .Group <Result>("{ _id : 1, Count : { $sum : 1 } }");

            var stages         = Linq3TestHelpers.Translate(collection, aggregate);
            var expectedStages = new[]
            {
                "{ $group : { _id : 1, Count : { $sum : 1 } } }"
            };

            Linq3TestHelpers.AssertStages(stages, expectedStages);
        }
Exemplo n.º 18
0
        // constructors
        public MongoDatabaseImpl(IMongoClient client, DatabaseNamespace databaseNamespace, MongoDatabaseSettings settings, ICluster cluster, IOperationExecutor operationExecutor)
        {
            _client            = Ensure.IsNotNull(client, nameof(client));
            _databaseNamespace = Ensure.IsNotNull(databaseNamespace, nameof(databaseNamespace));
            _settings          = Ensure.IsNotNull(settings, nameof(settings)).Freeze();
            _cluster           = Ensure.IsNotNull(cluster, nameof(cluster));
            _operationExecutor = Ensure.IsNotNull(operationExecutor, nameof(operationExecutor));

            _linqProvider           = _client.Settings.LinqProvider;
            _messageEncoderSettings = new MessageEncoderSettings
            {
                { MessageEncoderSettingsName.ReadEncoding, _settings.ReadEncoding ?? Utf8Encodings.Strict },
                { MessageEncoderSettingsName.WriteEncoding, _settings.WriteEncoding ?? Utf8Encodings.Strict }
            };
#pragma warning disable 618
            if (BsonDefaults.GuidRepresentationMode == GuidRepresentationMode.V2)
            {
                _messageEncoderSettings.Add(MessageEncoderSettingsName.GuidRepresentation, _settings.GuidRepresentation);
            }
#pragma warning restore 618
        }
        public static ChangeStreamOperation <TResult> CreateChangeStreamOperation <TResult>(
            PipelineDefinition <ChangeStreamDocument <BsonDocument>, TResult> pipeline,
            LinqProvider linqProvider,
            ChangeStreamOptions options,
            ReadConcern readConcern,
            MessageEncoderSettings messageEncoderSettings,
            bool retryRequested)
        {
            var renderedPipeline = RenderPipeline(pipeline, BsonDocumentSerializer.Instance, linqProvider);

            var operation = new ChangeStreamOperation <TResult>(
                renderedPipeline.Documents,
                renderedPipeline.OutputSerializer,
                messageEncoderSettings)
            {
                RetryRequested = retryRequested
            };

            SetOperationOptions(operation, options, readConcern);

            return(operation);
        }
Exemplo n.º 20
0
        public void UpdateAssociationTypes()
        {
            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var sessionOfExperts = new SessionOfExperts("baseNotion");
                GetRepository <SessionOfExperts>().AddOrUpdate(sessionOfExperts);

                var expert = new Expert("expertName", sessionOfExperts);
                expert.ReplaceAllAssociations(new[] { "notion1", "notion2" });

                GetRepository <Expert>().AddOrUpdate(expert);

                unitOfWork.Commit();
            }

            Guid associationIdForUpdate;

            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var expert = LinqProvider.Query <Expert>().Single();
                associationIdForUpdate = LinqProvider.Query <Association>().First().Id;

                var type = new NotionType("NotionType");
                GetRepository <NotionType>().AddOrUpdate(type);

                expert.SetTypeForAssociation(associationIdForUpdate, type, "offer");
                GetRepository <Expert>().AddOrUpdate(expert);

                unitOfWork.Commit();
            }

            using (UnitOfWorkFactory.Create()) {
                var expert = LinqProvider.Query <Expert>().Single();
                var type   = LinqProvider.Query <NotionType>().Single();

                expert.Associations.Single(x => x.Id == associationIdForUpdate).Should().BeEquivalentTo(
                    new { Expert = expert, Type = type, OfferType = "offer" },
                    opt => opt.ExcludingMissingMembers());
            }
        }
Exemplo n.º 21
0
        public void TestAddSession()
        {
            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var notionType = new NotionType("type");
                GetRepository <NotionType>().AddOrUpdate(notionType);

                var node1 = new Node("notion1", notionType);
                GetRepository <Node>().AddOrUpdate(node1);

                var node2 = new Node("notion2", notionType);
                GetRepository <Node>().AddOrUpdate(node2);

                var relationType = new RelationType("type");
                GetRepository <RelationType>().AddOrUpdate(relationType);

                var verge = new Verge(node1, node2, relationType, 20);
                GetRepository <Verge>().AddOrUpdate(verge);

                unitOfWork.Commit();
            }

            using (var unitOfWork = UnitOfWorkFactory.Create()) {
                var session = new SessionOfExperts("baseNotion");
                GetRepository <SessionOfExperts>().AddOrUpdate(session);

                var verge = LinqProvider.Query <Verge>().Single();
                verge.UpdateWeightFromSession(20, session);

                unitOfWork.Commit();
            }

            using (UnitOfWorkFactory.Create()) {
                var verge = LinqProvider.Query <Verge>().Single();

                verge.SessionWeightSlices.Count.Should().Be(1);
            }
        }
Exemplo n.º 22
0
 /// <inheritdoc />
 public override RenderedPipelineStageDefinition <TOutput> Render(IBsonSerializer <TInput> inputSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
 {
     return(new RenderedPipelineStageDefinition <TOutput>(
                OperatorName,
                BsonDocument.Parse(_json),
                _outputSerializer ?? (inputSerializer as IBsonSerializer <TOutput>) ?? serializerRegistry.GetSerializer <TOutput>()));
 }
Exemplo n.º 23
0
 /// <inheritdoc />
 IRenderedPipelineStageDefinition IPipelineStageDefinition.Render(IBsonSerializer inputSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
 {
     return(Render((IBsonSerializer <TInput>)inputSerializer, serializerRegistry, linqProvider));
 }
Exemplo n.º 24
0
 string IPipelineStageDefinition.ToString(IBsonSerializer inputSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
 {
     return(ToString((IBsonSerializer <TInput>)inputSerializer, serializerRegistry, linqProvider));
 }
Exemplo n.º 25
0
        /// <summary>
        /// Returns a <see cref="System.String" /> that represents this instance.
        /// </summary>
        /// <param name="inputSerializer">The input serializer.</param>
        /// <param name="serializerRegistry">The serializer registry.</param>
        /// <param name="linqProvider">The LINQ provider.</param>
        /// <returns>
        /// A <see cref="System.String" /> that represents this instance.
        /// </returns>
        public string ToString(IBsonSerializer <TInput> inputSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
        {
            var renderedStage = Render(inputSerializer, serializerRegistry, linqProvider);

            return(renderedStage.Document.ToJson());
        }
Exemplo n.º 26
0
 /// <summary>
 /// Renders the specified document serializer.
 /// </summary>
 /// <param name="inputSerializer">The input serializer.</param>
 /// <param name="serializerRegistry">The serializer registry.</param>
 /// <param name="linqProvider">The LINQ provider.</param>
 /// <returns>A <see cref="RenderedPipelineStageDefinition{TOutput}" /></returns>
 public abstract RenderedPipelineStageDefinition <TOutput> Render(IBsonSerializer <TInput> inputSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider);
Exemplo n.º 27
0
 // public methods
 /// <summary>
 /// Renders the array filter to a <see cref="BsonDocument" />.
 /// </summary>
 /// <param name="itemSerializer">The item serializer.</param>
 /// <param name="serializerRegistry">The serializer registry.</param>
 /// <param name="linqProvider">The LINQ provider.</param>
 /// <returns>
 /// A <see cref="BsonDocument" />.
 /// </returns>
 public abstract BsonDocument Render(IBsonSerializer itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider);
Exemplo n.º 28
0
 /// <inheritdoc />
 public override BsonDocument Render(IBsonSerializer <TItem> itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
 {
     return(_document);
 }
Exemplo n.º 29
0
 /// <summary>
 /// Renders the aggregation expression.
 /// </summary>
 /// <param name="sourceSerializer">The source serializer.</param>
 /// <param name="serializerRegistry">The serializer registry.</param>
 /// <param name="linqProvider">The LINQ provider.</param>
 /// <returns>The rendered aggregation expression.</returns>
 public abstract BsonValue Render(IBsonSerializer <TSource> sourceSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider);
Exemplo n.º 30
0
        // public methods
        /// <inheritdoc/>
        public override BsonValue Render(IBsonSerializer <TSource> sourceSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
        {
            var contextData = _contextData?.With("SerializerRegistry", serializerRegistry);

            return(linqProvider.GetAdapter().TranslateExpressionToAggregateExpression(_expression, sourceSerializer, serializerRegistry, _translationOptions, contextData));
        }