/// <summary>
 /// Creates an instance of context, prepared for a signle entity segmentation.
 /// </summary>
 /// <param name="template">An instance of <see cref="DCTemplate"/>. Reference for groups and blocks.</param>
 /// <param name="userConnection">Current instance of <see cref="UserConnection"/>.</param>
 /// <param name="entityId">Identifier of a sigle entity, that have to be segmented.</param>
 public DCSegmentationContext(DCTemplateModel template, UserConnection userConnection, Guid entityId)
 {
     Template       = template;
     UserConnection = userConnection;
     SourceEntityId = entityId;
     SourceAudience = null;
 }
Пример #2
0
        private IEnumerable <DCReplicaModel> GetReplicasByMasks(DCTemplateModel template,
                                                                IEnumerable <int> replicaMasks = null)
        {
            var replicas = template.Replicas;

            if (replicaMasks?.Any() == true)
            {
                replicas = replicas.Where(x => replicaMasks.Contains(x.Mask));
            }
            return(replicas);
        }
 /// <summary>
 /// Creates an instance of context, prepared for an audience segmentation.
 /// </summary>
 /// <param name="template">An instance of <see cref="DCTemplate"/>. Reference for groups and blocks.</param>
 /// <param name="sourceAudience">Query with a list of identifiers, that have to be segmented.</param>
 /// <param name="sourceAlias">An alias of a source table/view.</param>
 /// <param name="sourceColumn">The name of an ID source column.</param>
 /// <param name="sourceColumnForFilter">The name of a source column to apply filter by.</param>
 /// <param name="targetTable">The name of a target table to store a result of segmentation.</param>
 /// <param name="entityIdTargetColumn">The name of a target column for entity ID.</param>
 /// <param name="replicaIdTargetColumn">The name of a target column for replica ID.</param>
 /// <param name="recordIdTargetColumn">The name of a target column for the related record ID.</param>
 public DCSegmentationContext(DCTemplateModel template, Select sourceAudience, string sourceAlias,
                              string sourceColumn, string sourceColumnForFilter, string targetTable, string entityIdTargetColumn,
                              string replicaIdTargetColumn, string recordIdTargetColumn)
 {
     Template              = template;
     SourceAudience        = sourceAudience;
     SourceAlias           = sourceAlias;
     UserConnection        = sourceAudience.UserConnection;
     EntityIdSourceColumn  = sourceColumn;
     SourceColumnForFilter = sourceColumnForFilter;
     TargetTable           = targetTable;
     EntityIdTargetColumn  = entityIdTargetColumn;
     ReplicaIdTargetColumn = replicaIdTargetColumn;
     RecordIdTargetColumn  = recordIdTargetColumn;
 }
Пример #4
0
        private void ValidateSqlFilters(DCTemplateModel template, UserConnection userConnection)
        {
            var selects = GetFilters(template, userConnection);

            if (!selects.Any())
            {
                return;
            }
            if (selects.Select(x => x.SourceExpression.Alias).Distinct().Count() > 1)
            {
                var message = new LocalizableString(userConnection.Workspace.ResourceStorage,
                                                    "DCResolverTemplateValidator", "LocalizableStrings.HasDifferentAliasesExceptionText.Value").Value;
                throw new InvalidQueryStructureException(message);
            }
        }
Пример #5
0
 /// <summary>
 /// Validates <paramref name="template"/> for dynamic content processing.
 /// </summary>
 /// <param name="template">Template for validate.</param>
 /// <param name="userConnection">An instance of the <see cref="Core.UserConnection"/>.</param>
 /// <exception cref="InvalidQueryStructureException">Throws when at least two selects
 /// have different source alias.</exception>
 public void Validate(DCTemplateModel template, UserConnection userConnection)
 {
     ValidateSqlFilters(template, userConnection);
 }
Пример #6
0
 private List <Select> GetFilters(DCTemplateModel template, UserConnection userConnection) =>
 template?.Attributes?.Where(x => x.IsFilter())
 .Select(x => x.ToFilter(userConnection)).ToList();