コード例 #1
0
        public HeadOffice Handle(TransferCashToAtmCommand request)
        {
            var headOfficeRepository = serviceProvider.GetService <IHeadOfficeRepository>();
            var headOffice           = headOfficeRepository.GetById(request.HeadOfficeId);

            using (var scope = new DatabaseScope(serviceProvider))
            {
                scope.Execute(() => {
                    try
                    {
                        var atmRepository = serviceProvider.GetService <IAtmRepository>();
                        var atm           = atmRepository.GetById(request.AtmId);

                        atmRepository        = scope.GetService <IAtmRepository>();
                        headOfficeRepository = scope.GetService <IHeadOfficeRepository>();

                        headOffice.TransferCashToAtm(atm);
                        atmRepository.Save(atm);
                        headOfficeRepository.Save(headOffice);
                    }
                    catch (Exception exc)
                    {
                        exc.ToString();

                        //TODO: do sth with exc
                    }
                });
            }

            return(headOffice);
        }
コード例 #2
0
 private void Timer_Job(object obj)
 {
     try
     {
         var databases = databasesRepository.GetAll();
         foreach (var d in databases)
         {
             try
             {
                 using (var scope = new DatabaseScope(d.Name))
                 {
                     var data = builder.Build();
                     data.StoredProcedures.IntersectWith(data.StoredProcedures.Where(x => ContainsView(x)));
                     data.Views.IntersectWith(data.Views.Where(x => ContainsView(x)));
                     dependencyHierarchyFilteredForViewPerDatabase.AddOrUpdate(d.ID, data, (k, v) => data);
                 }
             }
             catch (Exception ex)
             {
                 log.Write(ex);
             }
         }
     }
     catch (Exception ex)
     {
         log.Write(ex);
     }
 }
コード例 #3
0
 public bool TryGetPrimaryKey(uint relationId, out PrimaryKeyData primaryKey)
 {
     if (!primaryKeyPerRelation.ContainsKey(relationId))
     {
         using (var scope = new DatabaseScope(databaseName))
         {
             var            relation        = relationsRepository.Get(relationId);
             PrimaryKeyData primaryKeyToAdd = null;
             if (relation != null)
             {
                 List <AttributeData> primaryKeyAttributes = new List <AttributeData>();
                 if (relation.PrimaryKeyAttributeNames != null)
                 {
                     foreach (var attributeName in relation.PrimaryKeyAttributeNames)
                     {
                         primaryKeyAttributes.Add(new AttributeData(GetRelation(relationId), attributesRepository.Get(relationId, attributeName)));
                     }
                 }
                 if (primaryKeyAttributes.Count > 0)
                 {
                     primaryKeyToAdd = new PrimaryKeyData(primaryKeyAttributes);
                 }
             }
             primaryKeyPerRelation.Add(relationId, primaryKeyToAdd);
         }
     }
     primaryKey = primaryKeyPerRelation[relationId];
     return(primaryKey != null);
 }
コード例 #4
0
        public Task Handle(BalanceChangedEvent domainEvent)
        {
            Guard.Against.Null(domainEvent, nameof(domainEvent));

            using (var scope = new DatabaseScope(serviceProvider))
            {
                scope.Execute(() => {
                    try
                    {
                        var repository = serviceProvider.GetService <IHeadOfficeRepository>();
                        var headOffice = repository.GetById(domainEvent.TargetId);

                        repository = scope.GetService <IHeadOfficeRepository>();
                        headOffice.ChangeBalance(domainEvent.Delta);
                        repository.Save(headOffice);
                    }
                    catch (Exception exc)
                    {
                        exc.ToString();

                        //TODO: do sth with exc
                    }
                });
            }

            return(Task.CompletedTask);
        }
コード例 #5
0
        public void ReadBooksWithImages()
        {
            _booksWithImagesDatabaseDump = BooksWithImagesDatabaseDump();

            LocalDbRepository <Book>  books;
            LocalDbRepository <Image> images;

            using (var scope = new DatabaseScope())
            {
                var config = new DbConfig(true);
                books            = new LocalDbRepository <Book>(config);
                images           = new LocalDbRepository <Image>(config);
                scope.SetupDone += Scope_SetupDone;
            }

            Assert.That(books.Count, Is.EqualTo(3));
            Assert.That(images.Count, Is.EqualTo(3));
            CollectionAssert.AllItemsAreInstancesOfType(books, typeof(Book));
            CollectionAssert.AllItemsAreNotNull(books);
            CollectionAssert.AllItemsAreUnique(books);

            CollectionAssert.AllItemsAreInstancesOfType(images, typeof(Image));
            CollectionAssert.AllItemsAreNotNull(images);
            CollectionAssert.AllItemsAreUnique(images);
            Assert.That(books, Is.All.Property("BookId").Not.EqualTo(0).And.All.Property("BookName").Null);
            Assert.That(images, Is.All.Property("ImageId").Not.EqualTo(0)
                        .And.All.Property("Text").Null
                        .And.All.Property("IdBook").Not.EqualTo(0));
        }
コード例 #6
0
        public SnackMachine Handle(BuySnackCommand request)
        {
            if (request.SnackMachine.CanBuySnack(request.Position))
            {
                request.SnackMachine.BuySnack(request.Position);

                using (var scope = new DatabaseScope(serviceProvider))
                {
                    scope.Execute(() => {
                        try
                        {
                            var repository = scope.GetService <ISnackMachineRepository>();
                            repository.Save(request.SnackMachine);
                        }
                        catch (Exception exc)
                        {
                            exc.ToString();

                            //TODO: do sth with exc
                        }
                    });
                }
            }

            return(request.SnackMachine);
        }
コード例 #7
0
 protected override void OnExecute()
 {
     using (var scope = new DatabaseScope(context.Database.Name))
     {
         repository.InitializeEnvironment();
     }
 }
コード例 #8
0
ファイル: SmartcardReader.cs プロジェクト: xxjeng/nuxleus
 public SmartcardReader(string readerName, DatabaseScope scope) {
     if (readerName == null)
         throw new ArgumentNullException("readerName", ResourceController.GetString("Error_ParamNull"));
     int ret = NativeMethods.SCardEstablishContext((int)scope, IntPtr.Zero, IntPtr.Zero, out m_Context);
     if (ret != NativeMethods.SCARD_S_SUCCESS)
         throw new SmartcardException(ResourceController.GetString("Error_SmartcardEstablishContext"), ret);
     m_ReaderName = readerName;
 }
 protected override void OnExecute()
 {
     using (var scope = new DatabaseScope(context.Database.Name))
     {
         foreach (var kv in context.StatementsData.All)
         {
             ExtractDataFromStatement(kv.Value);
         }
     }
 }
コード例 #10
0
        private LocalDbRepository <Users> MockRepro()
        {
            LocalDbRepository <Users> users;

            using (var db = new DatabaseScope())
            {
                users = new LocalDbRepository <Users>(new DbConfig(true));
            }
            return(users);
        }
コード例 #11
0
 public void TestInvalidReplicationScope_WithoutTransaction()
 {
     Assert.That(() =>
     {
         using (var scope = new DatabaseScope())
         {
             using (var replicationScope = new ReplicationScope())
             {
             }
         }
     }, Throws.Exception.TypeOf <InvalidOperationException>());
 }
コード例 #12
0
        public SmartcardReader(string readerName, DatabaseScope scope)
        {
            if (readerName == null)
            {
                throw new ArgumentNullException("readerName", ResourceController.GetString("Error_ParamNull"));
            }
            int ret = NativeMethods.SCardEstablishContext((int)scope, IntPtr.Zero, IntPtr.Zero, out m_Context);

            if (ret != NativeMethods.SCARD_S_SUCCESS)
            {
                throw new SmartcardException(ResourceController.GetString("Error_SmartcardEstablishContext"), ret);
            }
            m_ReaderName = readerName;
        }
 protected override void OnExecute()
 {
     foreach (var database in context.Databases)
     {
         using (DatabaseScope scope = new DatabaseScope(database.Name))
         {
             try
             {
                 context.TotalDatabaseStatistics.Add(database.ID, repository.GetLatest());
             }
             catch (Exception ex)
             {
                 log.Write(ex);
             }
         }
     }
 }
コード例 #14
0
 private RelationData GetRelation(uint relationId)
 {
     if (!allRelations.ContainsKey(relationId))
     {
         using (var scope = new DatabaseScope(databaseName))
         {
             var          loadedRelation = relationsRepository.Get(relationId);
             RelationData relationData   = null;
             if (loadedRelation != null)
             {
                 relationData = new RelationData(loadedRelation);
             }
             allRelations.Add(relationId, relationData);
         }
     }
     return(allRelations[relationId]);
 }
コード例 #15
0
        public void ReadUsers()
        {
            _usersDatabaseDump = UsersDatabaseDump();
            LocalDbRepository <Users> users;

            using (var scope = new DatabaseScope())
            {
                users = new LocalDbRepository <Users>(new DbConfig(true));

                scope.SetupDone += Scope_SetupDone1;
            }

            Assert.That(users.Count, Is.EqualTo(3));
            Assert.That(users.ElementAt(0), Is.Not.Null.And.Property("UserID").EqualTo(1));
            Assert.That(users.ElementAt(1), Is.Not.Null.And.Property("UserID").EqualTo(2));
            Assert.That(users.ElementAt(2), Is.Not.Null.And.Property("UserID").EqualTo(3));
        }
コード例 #16
0
        private void UpdateAtm(Atm atm)
        {
            using (var scope = new DatabaseScope(serviceProvider))
            {
                scope.Execute(() => {
                    try
                    {
                        var atmRepository = scope.GetService <IAtmRepository>();
                        atmRepository.Save(atm);
                    }
                    catch (Exception exc)
                    {
                        exc.ToString();

                        //TODO: do sth with exc
                    }
                });
            }
        }
 protected override void OnExecute()
 {
     using (var scope = new DatabaseScope(context.Database.Name))
     {
         var existingIndices = indicesRepository.GetAll();
         foreach (var i in existingIndices)
         {
             var relation           = relationsRepository.Get(i.RelationID);
             var relationData       = new RelationData(relation);
             var attributes         = new List <AttributeData>();
             var includedAttributes = new List <AttributeData>();
             foreach (var atrributeName in i.AttributesNames)
             {
                 var attribute = attributesRepository.Get(relation.ID, atrributeName);
                 var toAdd     = new AttributeData(relationData, attribute);
                 if (IsIncludedAttribute(i.CreateDefinition, attribute.Name))
                 {
                     includedAttributes.Add(toAdd);
                 }
                 else
                 {
                     attributes.Add(toAdd);
                 }
             }
             var existingIndexToAdd = new IndexDefinition(Convert(i.AccessMethod), relationData, attributes, includedAttributes);
             if (context.StatementsData.AllQueriesByRelation.TryGetValue(relation.ID, out var possibleQueriesForIndex))
             {
                 foreach (var statementQueryPair in possibleQueriesForIndex)
                 {
                     var normalizedStatementID = statementQueryPair.NormalizedStatementID;
                     var normalizedStatement   = context.StatementsData.All[normalizedStatementID].NormalizedStatement;
                     var query         = statementQueryPair.Query;
                     var extractedData = context.StatementsExtractedData.DataPerQuery[statementQueryPair];
                     if (IndexApplicability.IsIndexApplicableForQuery(extractedData, existingIndexToAdd))
                     {
                         context.IndicesDesignData.ExistingIndices.TryAddPossibleIndices(new[] { existingIndexToAdd }, normalizedStatement, query);
                     }
                 }
             }
         }
     }
 }
コード例 #18
0
        protected override void OnExecute()
        {
            var dictionary = getDictionaryFunc();

            dictionary.Clear();
            using (var scope = new DatabaseScope(context.Database.Name))
            {
                foreach (var s in context.StatementsData.All)
                {
                    IExplainResult explainResult = null;
                    try
                    {
                        explainResult = explainRepository.Eplain(s.Value.RepresentativeStatistics.RepresentativeStatement);
                    }
                    catch (Exception ex)
                    {
                        log.Write(ex);
                    }
                    dictionary.Add(s.Key, explainResult ?? new EmptyExplainResult());
                }
            }
        }
        public HeadOffice Handle(TransferInCashFromSnackMachineCommand request)
        {
            var snackMachineRepository = serviceProvider.GetService <ISnackMachineRepository>();
            var snackMachine           = snackMachineRepository.GetById(request.SnackMachineId);

            if (snackMachine == null)
            {
                return(null);
            }

            var headOfficeRepository = serviceProvider.GetService <IHeadOfficeRepository>();
            var headOffice           = headOfficeRepository.GetById(request.HeadOfficeId);

            using (var scope = new DatabaseScope(serviceProvider))
            {
                scope.Execute(() => {
                    try
                    {
                        snackMachineRepository = scope.GetService <ISnackMachineRepository>();
                        headOfficeRepository   = scope.GetService <IHeadOfficeRepository>();

                        headOffice.TransferInCashFromSnackMachine(snackMachine);
                        snackMachineRepository.Save(snackMachine);
                        headOfficeRepository.Save(headOffice);
                    }
                    catch (Exception exc)
                    {
                        exc.ToString();

                        //TODO: do sth with exc
                    }
                });
            }

            return(headOffice);
        }
コード例 #20
0
 public DbScope()
 {
     database = new DatabaseScope();
     users    = new LocalDbRepository <Users>(new DbConfig(true));
 }
        protected override void OnExecute()
        {
            context.IndicesDesignData.PossibleIndexSizes.Clear();
#if DEBUG
            int counter = 0;
#endif
            using (var scope = new DatabaseScope(context.Database.Name))
            {
                foreach (var env in context.IndicesDesignData.Environments)
                {
#if DEBUG
                    if (System.Diagnostics.Debugger.IsAttached)
                    {
                        ++counter;
                        if (counter % 10 == 0)
                        {
                            Console.WriteLine(((counter / (double)context.IndicesDesignData.Environments.Count) * 100).ToString("F2") + "%");
                        }
                    }
#endif
                    try
                    {
                        virtualIndicesRepository.DestroyAll();
                        var  virtualIndicesMapping = new Dictionary <IndexDefinition, IVirtualIndex>();
                        bool indicesCreated        = false;
                        try
                        {
                            foreach (var index in env.PossibleIndices.All)
                            {
                                var targetRelationData = context.RelationsData.GetReplacementOrOriginal(index.Relation.ID);
                                var virtualIndex       = virtualIndicesRepository.Create(dbObjectDefinitionGenerator.Generate(index.WithReplacedRelation(targetRelationData)));
                                if (virtualIndex != null)
                                {
                                    virtualIndicesMapping.Add(index, virtualIndex);
                                }
                                if (!context.IndicesDesignData.PossibleIndexSizes.ContainsKey(index))
                                {
                                    context.IndicesDesignData.PossibleIndexSizes.Add(index, virtualIndicesRepository.GetVirtualIndexSize(virtualIndex.ID));
                                }
                            }
                            indicesCreated = true;
                        }
                        catch (Exception ex)
                        {
                            log.Write(ex);
                        }
                        if (indicesCreated)
                        {
                            foreach (var kv in env.PossibleIndices.AllPerStatement)
                            {
                                var statementID             = kv.Key;
                                var indices                 = kv.Value;
                                var workloadStatement       = context.StatementsData.All[statementID];
                                var normalizedStatement     = workloadStatement.NormalizedStatement;
                                var representativeStatement = workloadStatement.RepresentativeStatistics.RepresentativeStatement;
                                var statementToUse          = RepresentativeStatementReplacementUtility.Provide(normalizedStatement, representativeStatement, context.RelationsData);
                                var explainResult           = explainRepository.Eplain(statementToUse);
                                var latestPlan              = explainResult.Plan;
                                var realPlan                = context.RealExecutionPlansForStatements[statementID].Plan;
                                HashSet <IndexDefinition>             improvingVirtualIndices = new HashSet <IndexDefinition>();
                                VirtualEnvironmentStatementEvaluation statementEvaluation     = new VirtualEnvironmentStatementEvaluation();
                                statementEvaluation.ExecutionPlan = explainResult;
                                decimal fromPrice = realPlan.TotalCost;
                                decimal toPrice   = latestPlan.TotalCost;
                                decimal divisor   = Math.Abs(Math.Max(fromPrice, toPrice));
                                if (divisor > 0)
                                {
                                    statementEvaluation.LocalImprovementRatio = ((toPrice - fromPrice) / divisor) * -1m;
                                }
                                decimal statementPortion = context.StatementsData.AllExecutionsCount > 0 ? workloadStatement.TotalExecutionsCount / (decimal)context.StatementsData.AllExecutionsCount : 0m;
                                statementEvaluation.GlobalImprovementRatio = statementEvaluation.LocalImprovementRatio * statementPortion;
                                env.StatementsEvaluation.Add(statementID, statementEvaluation);


                                foreach (var i in indices)
                                {
                                    var virtualIndex = virtualIndicesMapping[i];
                                    if (!env.IndicesEvaluation.ContainsKey(i))
                                    {
                                        env.IndicesEvaluation.Add(i, new VirtualIndicesEnvironmentIndexEvaluation());
                                    }
                                    if (explainResult.UsedIndexScanIndices.Contains(virtualIndex.Name))
                                    {
                                        statementEvaluation.UsedIndices.Add(i);
                                        statementEvaluation.AffectingIndices.Add(i);
                                        if (latestPlan.TotalCost < realPlan.TotalCost)
                                        {
                                            improvingVirtualIndices.Add(i);
                                        }
                                        env.IndicesEvaluation[i].ImprovementRatio += statementEvaluation.GlobalImprovementRatio;
                                    }
                                    else
                                    {
                                        if (normalizedStatement.CommandType == DAL.Contracts.StatementQueryCommandType.Insert ||
                                            normalizedStatement.CommandType == DAL.Contracts.StatementQueryCommandType.Update ||
                                            normalizedStatement.CommandType == DAL.Contracts.StatementQueryCommandType.Delete)
                                        {
                                            statementEvaluation.AffectingIndices.Add(i);
                                        }
                                    }
                                }
                                foreach (var query in normalizedStatement.StatementDefinition.IndependentQueries)
                                {
                                    var queryKey = new NormalizedStatementQueryPair(statementID, query);
                                    env.ImprovingPossibleIndices.TryAddPossibleIndices(improvingVirtualIndices, normalizedStatement, query);
                                    if (env.PossibleIndices.AllCoveringPerQuery.ContainsKey(queryKey))
                                    {
                                        env.ImprovingPossibleIndices.TryAddPossibleCoveringIndices(env.PossibleIndices.AllCoveringPerQuery[queryKey].Intersect(improvingVirtualIndices), normalizedStatement, query);
                                    }
                                }
                            }
                        }
                    }
                    finally
                    {
                        virtualIndicesRepository.DestroyAll();
                    }
                }
            }
        }
コード例 #22
0
        protected override void OnExecute()
        {
            using (var scope = new DatabaseScope(context.Database.Name))
            {
                foreach (var env in context.HPartitioningDesignData.Environments)
                {
                    try
                    {
                        virtualHPartitioningsRepository.DestroyAll();
                        bool hPartitioningCreated = false;
                        try
                        {
                            var targetRelationData = context.RelationsData.GetReplacementOrOriginal(env.Partitioning.Relation.ID);
                            virtualHPartitioningsRepository.Create(dbObjectDefinitionGenerator.Generate(env.Partitioning.WithReplacedRelation(targetRelationData)));
                            hPartitioningCreated = true;
                        }
                        catch (Exception ex)
                        {
                            log.Write(ex);
                        }
                        if (hPartitioningCreated)
                        {
                            foreach (var queryPair in context.StatementsData.AllQueriesByRelation[env.Partitioning.Relation.ID])
                            {
                                var statementID = queryPair.NormalizedStatementID;
                                if (!env.StatementsEvaluation.ContainsKey(statementID))
                                {
                                    var            workloadStatement       = context.StatementsData.All[statementID];
                                    var            normalizedStatement     = workloadStatement.NormalizedStatement;
                                    var            representativeStatement = workloadStatement.RepresentativeStatistics.RepresentativeStatement;
                                    var            statementToUse          = RepresentativeStatementReplacementUtility.Provide(normalizedStatement, representativeStatement, context.RelationsData);
                                    var            realPlan      = context.RealExecutionPlansForStatements[statementID].Plan;
                                    IExplainResult explainResult = context.RealExecutionPlansForStatements[statementID];
                                    var            latestPlan    = realPlan;
                                    if (normalizedStatement.CommandType == DAL.Contracts.StatementQueryCommandType.Select ||
                                        normalizedStatement.CommandType == DAL.Contracts.StatementQueryCommandType.Insert)    // hypo pg currently does not support explain for delete/update for h partitioning
                                    {
                                        try
                                        {
                                            explainResult = explainRepository.Eplain(statementToUse);
                                            latestPlan    = explainResult.Plan;
                                        }
                                        catch (Exception ex)
                                        {
                                            log.Write(ex);
                                        }
                                    }

                                    VirtualEnvironmentStatementEvaluation statementEvaluation = new VirtualEnvironmentStatementEvaluation();
                                    statementEvaluation.ExecutionPlan = explainResult;
                                    decimal fromPrice = realPlan.TotalCost;
                                    decimal toPrice   = latestPlan.TotalCost;
                                    decimal divisor   = Math.Abs(Math.Max(fromPrice, toPrice));
                                    if (divisor > 0)
                                    {
                                        statementEvaluation.LocalImprovementRatio = ((toPrice - fromPrice) / divisor) * -1m;
                                    }
                                    decimal statementPortion = context.StatementsData.AllExecutionsCount > 0 ? workloadStatement.TotalExecutionsCount / (decimal)context.StatementsData.AllExecutionsCount : 0m;
                                    statementEvaluation.GlobalImprovementRatio = statementEvaluation.LocalImprovementRatio * statementPortion;
                                    env.StatementsEvaluation.Add(statementID, statementEvaluation);

                                    env.Evaluation.ImprovementRatio += statementEvaluation.GlobalImprovementRatio;
                                }
                            }
                            env.IsImproving = env.Evaluation.ImprovementRatio >= settings.HPartitioningMinTotalImprovementRatio;
                        }
                    }
                    finally
                    {
                        virtualHPartitioningsRepository.DestroyAll();
                    }
                }
            }
        }
コード例 #23
0
        protected override void OnExecute()
        {
            using (var scope = new DatabaseScope(context.Database.Name))
            {
                virtualIndicesRepository.DestroyAll();
                foreach (var index in context.IndicesDesignData.PossibleIndices.All)
                {
                    Dictionary <AttributeData, List <string> > possibleFilteredAttributeValues = new Dictionary <AttributeData, List <string> >();
                    foreach (var a in index.Attributes)
                    {
                        List <string> mostSignificantValues  = new List <string>();
                        List <string> leastSignificantValues = new List <string>();
                        if (a.MostCommonValuesFrequencies != null && a.MostCommonValuesFrequencies.Length >= 2)// we need at least two values
                        {
                            decimal frequenciesSum = 0;
                            for (int i = 0; i < Math.Min(a.MostCommonValuesFrequencies.Length - 1, MOST_COMMON_VALUES_MAX_COUNT); i++)
                            {
                                if (a.MostCommonValuesFrequencies[i] >= MOST_COMMON_VALUE_MIN_FREQUENCY)
                                {
                                    var sqlStringValue = toSqlValueStringConverter.ConvertStringRepresentation(a.DbType, a.MostCommonValues[i]);
                                    if (sqlStringValue != null)
                                    {
                                        mostSignificantValues.Add(sqlStringValue);
                                        frequenciesSum += a.MostCommonValuesFrequencies[i];
                                    }
                                }
                            }
                            if (frequenciesSum < MOST_COMMON_VALUES_MIN_FREQUENCIES_SUM || frequenciesSum > MOST_COMMON_VALUES_MAX_FREQUENCIES_SUM)
                            {
                                mostSignificantValues.Clear();
                            }

                            frequenciesSum = 0;
                            for (int i = a.MostCommonValuesFrequencies.Length - 1; i >= Math.Max(1, a.MostCommonValuesFrequencies.Length - MOST_COMMON_VALUES_MAX_COUNT + 1); i--)
                            {
                                var sqlStringValue = toSqlValueStringConverter.ConvertStringRepresentation(a.DbType, a.MostCommonValues[i]);
                                if (sqlStringValue != null)
                                {
                                    leastSignificantValues.Add(sqlStringValue);
                                    frequenciesSum += a.MostCommonValuesFrequencies[i];
                                }
                            }
                            if (frequenciesSum > MOST_COMMON_VALUES_MIN_FREQUENCIES_SUM)
                            {
                                leastSignificantValues.Clear();
                            }
                        }
                        if (mostSignificantValues.Count > 0)
                        {
                            possibleFilteredAttributeValues.Add(a, mostSignificantValues);
                        }
                        else if (leastSignificantValues.Count > 0)
                        {
                            possibleFilteredAttributeValues.Add(a, leastSignificantValues);
                        }
                    }
                    if (possibleFilteredAttributeValues.Count > 0)
                    {
                        string filter             = CreateFilterString(possibleFilteredAttributeValues);
                        var    targetRelationData = context.RelationsData.GetReplacementOrOriginal(index.Relation.ID);
                        var    virtualIndex       = virtualIndicesRepository.Create(dbObjectDefinitionGenerator.Generate(index.WithReplacedRelation(targetRelationData), filter));
                        var    size    = virtualIndicesRepository.GetVirtualIndexSize(virtualIndex.ID);
                        var    filters = new Dictionary <string, long>();
                        filters.Add(filter, size);
                        context.IndicesDesignData.PossibleIndexFilters.Add(index, filters);
                    }
                }
            }
        }