/// <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; }
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; }
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); } }
/// <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); }
private List <Select> GetFilters(DCTemplateModel template, UserConnection userConnection) => template?.Attributes?.Where(x => x.IsFilter()) .Select(x => x.ToFilter(userConnection)).ToList();