Ejemplo n.º 1
0
        private static string CreatePartitionKeyFilter(TraceRecord oneRecord, TraceRecordFilter userFilterForRecord)
        {
            var partitionKeyFilter = string.Empty;

            var mapping = Mapping.TraceRecordAzureDataMap.Single(item => item.Type == oneRecord.GetType());

            // Calculate partition filter (if data type is static)
            if (mapping.PartitionDataType == PartitionDataType.StaticData)
            {
                var queryFilter = TableQuery.GenerateFilterCondition(WellKnownFields.PartitionKey, QueryComparisons.Equal, mapping.PartitionKeyDetail);
                partitionKeyFilter = string.IsNullOrEmpty(partitionKeyFilter) ? queryFilter : TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, queryFilter);
            }

            if (userFilterForRecord == null || !userFilterForRecord.Filters.Any())
            {
                return(partitionKeyFilter);
            }

            // If Partition Filter data is dynamic, try to create partition filter.
            if (mapping.PartitionDataType == PartitionDataType.PropertyName)
            {
                var userFilterForPartitionProperty = userFilterForRecord.Filters.SingleOrDefault(item => item.Name == mapping.PartitionKeyDetail);
                if (userFilterForPartitionProperty != null)
                {
                    var queryFilter = CreateAzureTableQueryPropertyFilter(WellKnownFields.PartitionKey, userFilterForPartitionProperty.Value, QueryComparisons.Equal);
                    partitionKeyFilter = string.IsNullOrEmpty(partitionKeyFilter) ? queryFilter : TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, queryFilter);
                }
            }

            return(partitionKeyFilter);
        }
Ejemplo n.º 2
0
        // Create filter at Record level.
        public static string CreateQueryFilterForSingleRecord(TraceRecord oneRecord, TraceRecordFilter userFilterForRecord)
        {
            var mapping = Mapping.TraceRecordAzureDataMap.Single(item => item.Type == oneRecord.GetType());

            var azureFilterForCurrentRecord = string.Empty;

            // Calculate partition filter (if data type is static)
            if (mapping.PartitionDataType == PartitionDataType.StaticData)
            {
                var queryFilter = TableQuery.GenerateFilterCondition(WellKnownFields.PartitionKey, QueryComparisons.Equal, mapping.PartitionKeyDetail);
                azureFilterForCurrentRecord = string.IsNullOrEmpty(azureFilterForCurrentRecord) ? queryFilter : TableQuery.CombineFilters(azureFilterForCurrentRecord, TableOperators.And, queryFilter);
            }

            if (userFilterForRecord == null || !userFilterForRecord.Filters.Any())
            {
                return(azureFilterForCurrentRecord);
            }

            // If Partition Filter data is dynamic, try to create partition filter.
            var userSpecifiedPropertyFilterForCurrentRecord = new List <PropertyFilter>(userFilterForRecord.Filters);

            if (mapping.PartitionDataType == PartitionDataType.PropertyName)
            {
                var userFilterForPartitionProperty = userSpecifiedPropertyFilterForCurrentRecord.SingleOrDefault(item => item.Name == mapping.PartitionKeyDetail);
                if (userFilterForPartitionProperty != null)
                {
                    var queryFilter = CreateAzureTableQueryPropertyFilter(WellKnownFields.PartitionKey, userFilterForPartitionProperty.Value, QueryComparisons.Equal);
                    azureFilterForCurrentRecord = string.IsNullOrEmpty(azureFilterForCurrentRecord) ? queryFilter : TableQuery.CombineFilters(azureFilterForCurrentRecord, TableOperators.And, queryFilter);
                    userSpecifiedPropertyFilterForCurrentRecord.Remove(userFilterForPartitionProperty);
                }
            }

            // Now Create partition for rest of the property user may have specified.
            var azurePropertyFilterForCurrentRecord = string.Empty;

            foreach (var onePropertyFilter in userSpecifiedPropertyFilterForCurrentRecord)
            {
                var queryFilter = CreateAzureTableQueryPropertyFilter(onePropertyFilter);

                azurePropertyFilterForCurrentRecord = string.IsNullOrEmpty(azurePropertyFilterForCurrentRecord)
                    ? queryFilter
                    : TableQuery.CombineFilters(azurePropertyFilterForCurrentRecord, TableOperators.And, queryFilter);
            }

            // Add property filter.
            if (azurePropertyFilterForCurrentRecord != string.Empty)
            {
                azureFilterForCurrentRecord = azureFilterForCurrentRecord == string.Empty ? azurePropertyFilterForCurrentRecord : TableQuery.CombineFilters(azureFilterForCurrentRecord, TableOperators.And, azurePropertyFilterForCurrentRecord);
            }

            return(azureFilterForCurrentRecord);
        }
Ejemplo n.º 3
0
 private ReadFilter(TraceRecordFilter filter)
 {
     this.TraceRecordFilters = new List <TraceRecordFilter> {
         filter
     };
 }