public void shouldReturnNullWhenElementIsEmpty()
        {
            XmlElement element = _document.CreateElement("QueryFilter");

            FilterParser parser = new FilterParser(_metaModel.GetAssetType("Test"));
            IFilterTerm term = parser.parse(element);
            Assert.IsNull(term);
        }
        public void shouldThrowConfigurationExceptionWhenElementIsInvalid()
        {
            XmlDocument document = new XmlDocument();
            XmlElement element = document.CreateElement("NotWhatWeExpect");

            FilterParser parser = new FilterParser(_metaModel.GetAssetType("Test"));

            try
            {
                parser.parse(element);
                Assert.Fail("Expected Configuration Exception");
            }
            catch (ConfigurationException){}
        }
        public void shouldReturnValidFilterTermWhenOnlyOneTermIsPresent()
        {
            XmlDocument document = new XmlDocument();

            XmlElement termElement = document.CreateElement("FilterTerm");
            termElement.SetAttribute("attribute", "Name");
            termElement.SetAttribute("operator", "=");
            termElement.SetAttribute("value", "Fred");

            XmlElement filterElement = document.CreateElement("QueryFilter");
            filterElement.AppendChild(termElement);

            FilterParser parser = new FilterParser(_metaModel.GetAssetType("Test"));
            IFilterTerm term = parser.parse(filterElement);
            Assert.IsNotNull(term);
            Assert.AreEqual("Name='Fred'", term.Token);
        }
Example #4
0
        public static IList<IFilterDescriptor> Create(string input)
        {
            IList<IFilterDescriptor> result = new List<IFilterDescriptor>();

            FilterParser parser = new FilterParser(input);

            IFilterNode filterNode = parser.Parse();

            if (filterNode == null)
            {
                return result;
            }

            FilterNodeVisitor visitor = new FilterNodeVisitor();

            filterNode.Accept(visitor);

            result.Add(visitor.Result);

            return result;
        }
Example #5
0
        Func <EventRecordProxy, bool> GetViewFilter(TxReader reader)
        {
            Func <EventRecordProxy, bool> where = null;

            if (reader.ShouldFilterByWhere)
            {
                where = FilterParser.ParseWhere <EventRecordProxy>(reader.WhereFilter);
            }

            Func <EventRecordProxy, bool> func = (e) =>
            {
                if (reader.ShouldFilterTimeWindow && !reader.TimeFilter(e.TimeStamp.Ticks))
                {
                    return(false);
                }

                if (reader.ShouldFilterKeywords && !reader.KeywordFilter(e.Keywords))
                {
                    return(false);
                }

                if (reader.ShouldFilterProviders && !reader.ProviderFilter(e.ProviderId))
                {
                    return(false);
                }

                if (reader.ShouldFilterByWhere && !where (e))
                {
                    return(false);
                }

                return(true);
            };

            return(func);
        }
Example #6
0
        public void Parser()
        {
            FilterParser parser;
            IFilter      result;
            FilterAndSet filters;

            parser = new FilterParser("FirstField=Value, SecondField=OtherValue | OrSecond = SomethingElse | OrThird ~= Field, Last!=Condition");
            result = parser.Parse();

            Assert.True(result is FilterAndSet);
            filters = (FilterAndSet)result;
            Assert.Equal(3, ((FilterAndSet)filters).Count);

            Assert.IsType <Filter>(filters[0]);
            Assert.Equal("FirstField", (filters[0] as Filter).Field);
            Assert.Equal("=", (filters[0] as Filter).Operator);
            Assert.Equal("Value", (filters[0] as Filter).Value);

            Assert.IsType <FilterOrSet>(filters[1]);
            Assert.Equal(3, (filters[1] as FilterOrSet).Count);
            (filters[1] as FilterOrSet).ForEach(x => Assert.IsType <Filter>(x));
            Assert.Equal("SecondField", ((filters[1] as FilterOrSet)[0] as Filter).Field);
            Assert.Equal("=", ((filters[1] as FilterOrSet)[0] as Filter).Operator);
            Assert.Equal("OtherValue", ((filters[1] as FilterOrSet)[0] as Filter).Value);
            Assert.Equal("OrSecond", ((filters[1] as FilterOrSet)[1] as Filter).Field);
            Assert.Equal("=", ((filters[1] as FilterOrSet)[1] as Filter).Operator);
            Assert.Equal("SomethingElse", ((filters[1] as FilterOrSet)[1] as Filter).Value);
            Assert.Equal("OrThird", ((filters[1] as FilterOrSet)[2] as Filter).Field);
            Assert.Equal("~=", ((filters[1] as FilterOrSet)[2] as Filter).Operator);
            Assert.Equal("Field", ((filters[1] as FilterOrSet)[2] as Filter).Value);

            Assert.IsType <Filter>(filters[2]);
            Assert.Equal("Last", (filters[2] as Filter).Field);
            Assert.Equal("!=", (filters[2] as Filter).Operator);
            Assert.Equal("Condition", (filters[2] as Filter).Value);
        }
        public void Single_Filter_Should_Parse_Global_And_Local_Custom_Operator_Successfully()
        {
            // Arrange
            var filter        = "(Email[SimilarTo]@gmail.com)[or](Email[EndsWith]@gmail.com)";
            var localOverride = new Dictionary <OperatorType, string>()
            {
                { OperatorType.Like, "SimilarTo" }
            };
            var globalOverride = new Dictionary <OperatorType, string>()
            {
                { OperatorType.EndsWith, "EndsWith" }
            };

            // Act
            var parseResults = new FilterParser(globalOverride).Parse(filter, localOverride);

            // Assert
            Assert.NotNull(parseResults);
            Assert.NotEmpty(parseResults);
            Assert.Equal(typeof(Criterion), parseResults.ElementAt(0).GetType());
            Assert.Equal(ConditionOperatorType.Like, ((Criterion)parseResults.ElementAt(0)).Operator);
            Assert.Equal(typeof(Criterion), parseResults.ElementAt(1).GetType());
            Assert.Equal(ConditionOperatorType.EndsWith, ((Criterion)parseResults.ElementAt(1)).Operator);
        }
Example #8
0
        /// <summary>
        /// 查询单条记录
        /// </summary>
        /// <param name="table">数据表名称</param>
        /// <param name="filter">过滤条件</param>
        /// <returns>返回数据列表</returns>
        public T SelectSingle <T>(string table, object filter)
        {
            var filterEntities = JsonParser.ConvertEntities(filter);

            if (filterEntities.Count <= 0)
            {
                throw new Exception("未传入筛选条件,未防止错误,该执行已停止.");
            }
            var filterSql = new FilterParser().Parse(table, filterEntities[0]);

            if (string.IsNullOrEmpty(filterSql))
            {
                throw new Exception("未能解析出需要筛选sql语句,未防止错误,该执行已停止.");
            }
            var sql = new SelectParser().Parse(table);

            if (string.IsNullOrEmpty(sql))
            {
                throw new Exception("未能解析出需要执行的sql语句.");
            }
            var entity = this.QuerySingle <T>(sql + " WHERE " + filterSql);

            return(entity);
        }
 private void InitializeFakeObjects()
 {
     _parser = new FilterParser();
 }
        public void Nested_Filter_Should_Convert_Second_Tier_Successfully()
        {
            // Arrange
            var filter = "(LastName[eq]Doe)[and]((FirstName[eq]John)[or](FirstName[eq]Jane))";

            // Act
            var stringResults = new FilterParser().Parse(filter);
            var typeResults   = new FilterParser().ParseAs(filter, new TypeSearchConverter <object>());

            // Assert
            Assert.NotNull(stringResults);
            Assert.NotNull(typeResults);

            Assert.NotEmpty(stringResults);
            Assert.NotEmpty(typeResults.Criteria);

            // StringSearch
            Assert.Equal(typeof(NestedCriterion), stringResults.ElementAt(1).GetType());
            var stringNestedCriterion = (NestedCriterion)stringResults.ElementAt(1);

            Assert.Equal(typeof(Criterion), stringNestedCriterion.Criteria.ElementAt(0).GetType());
            var stringFirstCriterion = (Criterion)stringNestedCriterion.Criteria.ElementAt(0);

            Assert.Equal(LogicOperatorType.And, stringFirstCriterion.LogicOperator);
            Assert.Equal("FirstName", stringFirstCriterion.Name);
            Assert.Equal(ConditionOperatorType.Equals, stringFirstCriterion.Operator);
            Assert.Equal("John", stringFirstCriterion.Value);

            Assert.Equal(typeof(Criterion), stringNestedCriterion.Criteria.ElementAt(1).GetType());
            var stringSecondCriterion = (Criterion)stringNestedCriterion.Criteria.ElementAt(1);

            Assert.Equal(LogicOperatorType.Or, stringSecondCriterion.LogicOperator);
            Assert.Equal("FirstName", stringSecondCriterion.Name);
            Assert.Equal(ConditionOperatorType.Equals, stringSecondCriterion.Operator);
            Assert.Equal("Jane", stringSecondCriterion.Value);

            // TypeSearch
            Assert.Equal(typeof(CriteriaContainer <object>), typeResults.Criteria.ElementAt(1).GetType());
            var typeCriterion = typeResults.Criteria.ElementAt(1);

            Assert.NotNull(typeCriterion.NestedFilter);
            var nestedCriteria = typeCriterion.NestedFilter;

            Assert.Equal(typeof(CriteriaContainer <object>), nestedCriteria.Criteria.ElementAt(0).GetType());
            var typeNestedCriterion1 = nestedCriteria.Criteria.ElementAt(0);

            Assert.NotNull(typeNestedCriterion1.SingleCriterion);
            var typeFirstCriterion = typeNestedCriterion1.SingleCriterion;

            Assert.Equal(LogicalOperator.And, typeNestedCriterion1.Operator);
            Assert.Equal("FirstName", typeFirstCriterion.Name);
            Assert.Equal(SingleOperator.Equals, typeFirstCriterion.Operator);
            Assert.Equal("John", typeFirstCriterion.Value);

            Assert.Equal(typeof(CriteriaContainer <object>), nestedCriteria.Criteria.ElementAt(1).GetType());
            var typeNestedCriterion2 = nestedCriteria.Criteria.ElementAt(1);

            Assert.NotNull(typeNestedCriterion2.SingleCriterion);
            var typeSecondCriterion = typeNestedCriterion2.SingleCriterion;

            Assert.Equal(LogicalOperator.Or, typeNestedCriterion2.Operator);
            Assert.Equal("FirstName", typeSecondCriterion.Name);
            Assert.Equal(SingleOperator.Equals, typeSecondCriterion.Operator);
            Assert.Equal("Jane", typeSecondCriterion.Value);
        }
Example #11
0
        public void StringTests()
        {
            // Setup parser
            var parser = new FilterParser(new List <FieldDefinition>
            {
                new FieldDefinition(STRING_FIELD, StringSetup())
            });

            // Correct string array test with separator contained.
            parser.Parse($@"{STRING_FIELD}:in:[""ABCD""]");
            Assert.That(parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.In);
            Assert.That(parser.Conditions[0].ArrayOfStringValues.Count == 1 && parser.Conditions[0].ArrayOfStringValues.First() == "ABCD");

            // Correct string array test with two items. Includes single quote inside a double-quote string.
            parser.Parse($@"{STRING_FIELD}:in:[""AB'CD"",""BCDE""]");
            Assert.That(parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.In);
            Assert.That(parser.Conditions[0].ArrayOfStringValues.Count == 2 && parser.Conditions[0].ArrayOfStringValues[0] == @"AB'CD" && parser.Conditions[0].ArrayOfStringValues[1] == "BCDE");

            // Incorrect string array test.
            parser.Parse($@"{STRING_FIELD}:in:1234");
            Assert.That(!parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.In);
            Assert.That(parser.Conditions[0].Errors[0].ErrorType == ErrorType.InvalidValue);

            // Incorrect string array test.
            parser.Parse($@"{STRING_FIELD}:in:""234""");
            Assert.That(!parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.In);
            Assert.That(parser.Conditions[0].Errors[0].ErrorType == ErrorType.InvalidValue);

            // Correct string array test with separator contained.
            parser.Parse($@"{STRING_FIELD}:in:[""AB:CD"",""BCDE""]");
            Assert.That(parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.In);
            Assert.That(parser.Conditions[0].ArrayOfStringValues.Count == 2 && parser.Conditions[0].ArrayOfStringValues[0] == "AB:CD" && parser.Conditions[0].ArrayOfStringValues[1] == "BCDE");

            // Correct string array test with separator contained.
            parser.Parse($@"{STRING_FIELD}:in:[""AB:CD"",""BC;DE""]");
            Assert.That(parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.In);
            Assert.That(parser.Conditions[0].ArrayOfStringValues.Count == 2 && parser.Conditions[0].ArrayOfStringValues[0] == "AB:CD" && parser.Conditions[0].ArrayOfStringValues[1] == "BC;DE");
            Assert.That(parser.Conditions[0].ParameterDataType == DataType.ArrayOfStringType);

            // Duplicate test.
            parser.Parse($@"{STRING_FIELD}:in:[""AB:CD"",""AB:CD""]");
            Assert.That(!parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.In);
            Assert.That(parser.Conditions[0].ArrayOfStringValues.Count == 2 && parser.Conditions[0].ArrayOfStringValues[0] == "AB:CD" && parser.Conditions[0].ArrayOfStringValues[1] == "AB:CD");
            Assert.That(parser.Conditions[0].ParameterDataType == DataType.ArrayOfStringType);
            Assert.That(parser.Conditions[0].Errors[0].ErrorType == ErrorType.DuplicatesInList);

            // Empty list test.
            parser.Parse($@"{STRING_FIELD}:in:[]");
            Assert.That(!parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.In);
            Assert.That(parser.Conditions[0].ArrayOfStringValues.Count == 0);
            Assert.That(parser.Conditions[0].ParameterDataType == DataType.ArrayOfStringType);
            Assert.That(parser.Conditions[0].Errors[0].ErrorType == ErrorType.EmptyList);

            // All-operator test.
            parser.Parse($@"{STRING_FIELD}:all:[""AB:CD"",""CD:EF""]");
            Assert.That(parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.All);
            Assert.That(parser.Conditions[0].ArrayOfStringValues.Count == 2 && parser.Conditions[0].ArrayOfStringValues[0] == "AB:CD" && parser.Conditions[0].ArrayOfStringValues[1] == "CD:EF");
            Assert.That(parser.Conditions[0].ParameterDataType == DataType.ArrayOfStringType);


            // All-operator test. Duplicates in list.
            parser.Parse($@"{STRING_FIELD}:all:[""AB:CD"",""AB:CD""]");
            Assert.That(!parser.IsValid);
            Assert.That(parser.Conditions.Count == 1);
            Assert.That(parser.Conditions.Any());
            Assert.That(parser.Conditions[0].Comparers == Comparer.All);
            Assert.That(parser.Conditions[0].ArrayOfStringValues.Count == 2 && parser.Conditions[0].ArrayOfStringValues[0] == "AB:CD" && parser.Conditions[0].ArrayOfStringValues[1] == "AB:CD");
            Assert.That(parser.Conditions[0].ParameterDataType == DataType.ArrayOfStringType);
            Assert.That(parser.Conditions[0].Errors[0].ErrorType == ErrorType.DuplicatesInList);
        }
Example #12
0
 internal FilterExpression(FilterToken token)
 {
     Expression = FilterParser.Parse(FilterExpressionTokenizer.Tokenize(token.StringValue));
 }
        public void PropertyFilterSubExpression_RecursionOnArray_ReturnsCorrectValue()
        {
            string json = @"
                                {
                    `x`: {
                        `y`: {
                            `a`: 1,
                            `b`: 2,
                            `c`: 3,
                            `d`: [ true, true ]
                        }
                    },
                    `z`: 123
                }
                ".Replace("`", "\"");

            FilterSubExpression exp = FilterParser.Parse(FilterExpressionTokenizer.Tokenize("@.. == @.b"));

            exp = (exp as ComparisonFilterSubExpression)?.LeftSide as PropertyFilterSubExpression;
            Assert.NotNull(exp);

            string expectedJson = @"
                [
                  {
                    `x`: {
                      `y`: {
                        `a`: 1,
                        `b`: 2,
                        `c`: 3,
                        `d`: [
                          true,
                          true
                        ]
                      }
                    },
                    `z`: 123
                  },
                  {
                    `y`: {
                      `a`: 1,
                      `b`: 2,
                      `c`: 3,
                      `d`: [
                        true,
                        true
                      ]
                    }
                  },
                  {
                    `a`: 1,
                    `b`: 2,
                    `c`: 3,
                    `d`: [
                      true,
                      true
                    ]
                  },
                  [
                    true,
                    true
                  ]
                ]".Replace("`", "\"").RemoveWhiteSpace();

            JsonElement result     = exp.Execute(JsonDocument.Parse(json).RootElement);
            string      resultJson = JsonSerializer.Serialize(result);

            Assert.Equal(expectedJson, resultJson);
        }
Example #14
0
        /// <summary>
        /// Builds the sorter.
        /// </summary>
        /// <returns>a <see cref="Sorter{T}"/></returns>
        private Sorter <byte[]> BuildSorter()
        {
            Logger.Debug("Building sorter");
            var sorter = new Sorter <byte[]>();

            var formatterParser = new FormatterParser {
                Encoding = Encoding
            };

            sorter.InputFiles = Input.Select(r => r.GetFileInfo()).ToList();
            if (Output.Count == 1)
            {
                var outputFiles = new List <IOutputFile <byte[]> >();
                var outputFile  = new LegacyOutputFile {
                    Output = Output[0].GetFileInfo()
                };
                if (!string.IsNullOrWhiteSpace(Outrec))
                {
                    outputFile.Formatter = formatterParser.GetFormatter(Outrec);
                }
                outputFiles.Add(outputFile);
                sorter.OutputFiles = outputFiles;
            }
            if (Output.Count > 1)
            {
                var outfilParser = new OutfilParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                var outputFiles = outfilParser.GetOutputFiles(Outfils);
                if (Output.Count != outputFiles.Count)
                {
                    throw new SortException("The number of output files must match the number of outfil configurations.");
                }
                for (var i = 0; i < Output.Count; i++)
                {
                    outputFiles[i].Output = Output[i].GetFileInfo();
                }
                sorter.OutputFiles = outputFiles;
            }

            if (RecordLength > 0 || Separator == null)
            {
                sorter.RecordAccessorFactory = new BlockAccessorFactory {
                    RecordLength = RecordLength
                };
            }
            else
            {
                sorter.RecordAccessorFactory = new SeparatorAccessorFactory {
                    Separator = Encoding.GetBytes(Separator)
                };
            }

            if (!string.IsNullOrWhiteSpace(SortCard))
            {
                var comparerParser = new ComparerParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                sorter.Comparer = comparerParser.GetComparer(SortCard);
            }
            if (!string.IsNullOrWhiteSpace(Include) || !string.IsNullOrWhiteSpace(Omit))
            {
                var filterParser = new FilterParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                sorter.Filter = filterParser.GetFilter(Include, Omit);
            }
            if (SkipDuplicates)
            {
                sorter.Sum = new SkipSum <byte[]>();
            }
            if (!string.IsNullOrWhiteSpace(Sum))
            {
                var sumParser = new SumParser {
                    Encoding = Encoding
                };
                sorter.Sum = sumParser.GetSum(Sum);
            }
            if (!string.IsNullOrWhiteSpace(Inrec))
            {
                sorter.InputFormatter = formatterParser.GetFormatter(Inrec);
            }

            if (MaxInMemorySize > 0)
            {
                sorter.MaxInMemorySize = MaxInMemorySize;
            }

            sorter.HeaderSize = HeaderSize;

            return(sorter);
        }
Example #15
0
 public void Naive() => FilterParser.BuildFromText(Text);
Example #16
0
        private void saveEntity()
        {
            string id = context.Request["Id"];

            string where = context.Request["filter"];
            string entityName = context.Request["entityName"];
            int    mid        = 0;

            if (!Int32.TryParse(id, out mid))
            {
                context.Response.Write("{success:false, errorMessage:'ID geçersiz!'}");
                return;
            }

            // bu istisnai durum, sadece konfigürasyon veritabanına kaydedilmiyor
            if (entityName == "Configuration")
            {
                Provider.Configuration.SetFieldsByPostData(context.Request.Form);
                Provider.Configuration.Save();
                context.Response.Write("{success:true}");
                return;
            }

            // entitiyi kaydedelim
            BaseEntity entity = null;

            if (mid > 0)
            {
                entity = (BaseEntity)Provider.Database.Read(Provider.GetEntityType(entityName), mid);
            }
            else
            {
                entity = Provider.CreateEntity(entityName);
            }
            entity.SetFieldsByPostData(context.Request.Form);
            if (!string.IsNullOrEmpty(where))
            {
                FilterParser filterParser = new FilterParser(where, entityName);
                where = filterParser.GetWhere();
                foreach (var item in filterParser.GetNameValuePairs())
                {
                    if (string.IsNullOrEmpty(context.Request.Form[item.Key]))
                    {
                        entity.SetMemberValue(item.Key, item.Value);
                    }
                }
            }
            entity.Save();

            // entitiye ait Lang kayıtlarını kaydedelim
            Type langEntityType = Provider.GetEntityType(entityName + "Lang");

            if (langEntityType != null)
            {
                Dictionary <int, NameValueCollection> langEntities = new Dictionary <int, NameValueCollection>();
                Dictionary <int, string> langEntityFieldSum        = new Dictionary <int, string>();
                for (int i = 0; i < context.Request.Form.Count; i++)
                {
                    string key = context.Request.Form.GetKey(i);
                    if (key.Contains("_lang_"))
                    {
                        string[] parts     = key.Split(new string[] { "_lang_" }, StringSplitOptions.None);
                        int      langId    = int.Parse(parts[1]);
                        string   fieldName = parts[0];
                        string   fieldVal  = context.Request.Form[key];

                        if (!langEntities.ContainsKey(langId))
                        {
                            langEntities.Add(langId, new NameValueCollection());
                        }
                        langEntities[langId].Add(fieldName, fieldVal);

                        if (!langEntityFieldSum.ContainsKey(langId))
                        {
                            langEntityFieldSum.Add(langId, "");
                        }
                        langEntityFieldSum[langId] += fieldVal;
                    }
                }
                // içi boş olan langEntitileri kaldıralım
                foreach (var item in langEntityFieldSum)
                {
                    if (item.Value.Trim() == "")
                    {
                        langEntities.Remove(item.Key);
                    }
                }

                foreach (var item in langEntities)
                {
                    BaseEntity langEntity = (BaseEntity)Provider.Database.Read(langEntityType, entityName + "Id = {0} AND LangId={1}", entity.Id, item.Key);
                    if (langEntity == null)
                    {
                        langEntity = Provider.CreateEntity(langEntityType);
                    }
                    langEntity.SetFieldsByPostData(item.Value);
                    langEntity.SetMemberValue(entityName + "Id", entity.Id);
                    langEntity.SetMemberValue("LangId", item.Key);
                    langEntity.Save();
                }
            }

            context.Response.Write("{success:true}");
        }
Example #17
0
        /// <summary>
        /// Builds the sorter.
        /// </summary>
        /// <returns>a <see cref="Sorter{T}"/></returns>
        private Sorter <byte[]> BuildSorter()
        {
            Logger.Debug("Building sorter");
            var sorter = new Sorter <byte[]>();

            if (RecordLength > 0 || Separator == null)
            {
                sorter.RecordAccessorFactory = new BlockAccessorFactory {
                    RecordLength = RecordLength
                };
            }
            else
            {
                sorter.RecordAccessorFactory = new SeparatorAccessorFactory {
                    Separator = Encoding.GetBytes(Separator)
                };
            }

            if (!string.IsNullOrWhiteSpace(SortCard))
            {
                var comparerParser = new ComparerParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                sorter.Comparer = comparerParser.GetComparer(SortCard);
            }
            if (!string.IsNullOrWhiteSpace(Include) || !string.IsNullOrWhiteSpace(Omit))
            {
                var filterParser = new FilterParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                sorter.Filter = filterParser.GetFilter(Include, Omit);
            }
            if (SkipDuplicates)
            {
                sorter.Sum = new SkipSum <byte[]>();
            }
            if (!string.IsNullOrWhiteSpace(Sum))
            {
                var sumParser = new SumParser {
                    Encoding = Encoding
                };
                sorter.Sum = sumParser.GetSum(Sum);
            }
            var formatterParser = new FormatterParser {
                Encoding = Encoding
            };

            if (!string.IsNullOrWhiteSpace(Inrec))
            {
                sorter.InputFormatter = formatterParser.GetFormatter(Inrec);
            }
            if (!string.IsNullOrWhiteSpace(Outrec))
            {
                sorter.OutputFormatter = formatterParser.GetFormatter(Outrec);
            }

            if (MaxInMemorySize > 0)
            {
                sorter.MaxInMemorySize = MaxInMemorySize;
            }

            sorter.HeaderSize = HeaderSize;

            return(sorter);
        }
Example #18
0
        /// <summary>
        /// Parses a test filter.
        /// </summary>
        /// <param name="filterExpr">The filter expression.</param>
        /// <returns>The parsed filter.</returns>
        public static Filter <ITestDescriptor> ParseTestFilter(string filterExpr)
        {
            FilterParser <ITestDescriptor> parser = new FilterParser <ITestDescriptor>(new TestDescriptorFilterFactory <ITestDescriptor>());

            return(parser.ParseFilter(filterExpr));
        }
 public ExtractableValuesVisitor(FilterParser parser) => _parser = parser;
        private IFilterNode Parse(string input)
        {
            FilterParser parser = new FilterParser(input);

            return(parser.Parse());
        }
 private IFilterNode Parse(string input)
 {
     FilterParser parser = new FilterParser(input);
     return parser.Parse();
 }
        public void shouldTreatMultipleTermsAsANDFilter()
        {
            XmlDocument document = new XmlDocument();

            XmlElement term1Element = document.CreateElement("FilterTerm");
            term1Element.SetAttribute("attribute", "Name");
            term1Element.SetAttribute("operator", "=");
            term1Element.SetAttribute("value", "Fred");

            XmlElement term2Element = document.CreateElement("FilterTerm");
            term2Element.SetAttribute("attribute", "Reference");
            term2Element.SetAttribute("operator", "=");
            term2Element.SetAttribute("value", "Some Text Here");

            XmlElement filterElement = document.CreateElement("QueryFilter");
            filterElement.AppendChild(term1Element);
            filterElement.AppendChild(term2Element);

            FilterParser parser = new FilterParser(_metaModel.GetAssetType("Test"));
            IFilterTerm term = parser.parse(filterElement);
            Assert.IsNotNull(term);
            Assert.AreEqual("(Name='Fred';Reference='Some Text Here')", term.Token);
        }
Example #23
0
        private void getGridList()
        {
            string entityName = context.Request["entityName"];

            string where = context.Request["extraFilter"] ?? "";
            string orderBy = context.Request["orderBy"] ?? "";
            string page    = String.IsNullOrEmpty(context.Request["page"]) ? "0" : context.Request["page"];
            string limit   = String.IsNullOrEmpty(context.Request["limit"]) ? "20" : context.Request["limit"];
            int    fieldNo = 0;

            Type       entityType   = Provider.GetEntityType(entityName);
            BaseEntity sampleEntity = Provider.CreateEntity(entityType);

            while (context.Request.Form["f_" + fieldNo] != null)
            {
                string op    = context.Request.Form["o_" + fieldNo];
                string field = context.Request.Form["f_" + fieldNo];
                string val   = context.Request.Form["c_" + fieldNo];
                where += (where == "" ? "" : " AND ") + field + op + val;
                fieldNo++;
            }
            if (!string.IsNullOrWhiteSpace(context.Request.Form["search"]))
            {
                string search = context.Request.Form["search"];
                if (!search.Contains("%"))
                {
                    search = "%" + search + "%";
                }
                where += " AND " + sampleEntity.GetNameColumn() + "like" + search;
            }

            FilterParser filterParser = new FilterParser(where, entityName);

            where = filterParser.GetWhere();

            DataTable dt = Provider.ReadList(entityType, Int32.Parse(page), Int32.Parse(limit), orderBy, where, filterParser.GetParams());

            context.Response.Write("<table class=\"bk-grid\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n");
            if (dt != null)
            {
                context.Response.Write("\t<tr>\n");
                foreach (DataColumn dc in dt.Columns)
                {
                    if (dc.ColumnName == "_CinarRowNumber")
                    {
                        continue;                                     //***
                    }
                    string columnName  = dc.ColumnName;
                    string columnTitle = Provider.TranslateColumnName(entityName, columnName);
                    context.Response.Write("\t\t<th id=\"h_" + dc.ColumnName + "\">" + columnTitle + "</th>\n");
                }
                context.Response.Write("\t</tr>\n");
            }
            if (dt != null)
            {
                if (dt.Rows.Count == 0)
                {
                    context.Response.Write("\t<tr><td style=\"padding:30px;text-align:center\" colspan=\"50\">" + Provider.GetResource("No record") + "</td></tr>\n");
                }
                else
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        DataRow dr = dt.Rows[i];
                        context.Response.Write("\t<tr id=\"r_" + dr[0] + "\">\n");
                        foreach (DataColumn dc in dt.Columns)
                        {
                            if (dc.ColumnName == "_CinarRowNumber")
                            {
                                continue;                                     //***
                            }
                            object valObj  = dr[dc.ColumnName];
                            string dispVal = "";
                            if (dr.IsNull(dc))
                            {
                                dispVal = "";
                            }
                            else if (dc.DataType == typeof(Boolean))
                            {
                                dispVal = ((bool)valObj) ? Provider.GetResource("Yes") : Provider.GetResource("No");
                            }
                            else if (dc.DataType == typeof(String))
                            {
                                string str = Regex.Replace(valObj.ToString(), "<.*?>", string.Empty);
                                if (str.Length > 50)
                                {
                                    dispVal = CMSUtility.HtmlEncode(str.StrCrop(50)); // str.Substring(0, 50) + "..."
                                }
                                else
                                {
                                    dispVal = str;
                                }
                            }
                            else if (dc.DataType == typeof(DateTime))
                            {
                                dispVal = ((DateTime)valObj).ToString(Provider.Configuration.DefaultDateFormat);
                            }
                            else
                            {
                                dispVal = valObj.ToString();
                            }
                            context.Response.Write("\t\t<td value=\"" + CMSUtility.HtmlEncode(valObj) + "\">" + dispVal + "</td>\n");
                        }
                        context.Response.Write("\t</tr>\n");
                    }
                }
            }
            context.Response.Write("</table>");
        }
Example #24
0
 /// <summary>
 /// Parses a test filter set.
 /// </summary>
 /// <param name="filterExpr">The filter expression.</param>
 /// <returns>The parsed filter set.</returns>
 public static FilterSet<ITestDescriptor> ParseTestFilterSet(string filterExpr)
 {
     FilterParser<ITestDescriptor> parser = new FilterParser<ITestDescriptor>(new TestDescriptorFilterFactory<ITestDescriptor>());
     return parser.ParseFilterSet(filterExpr);
 }
Example #25
0
        public void TokensWithMethodsComparisonLogicOperatorsAndTruthy_Parse_ReturnsValidExpression()
        {
            string input = "@.price.count >= 0 && (@.name.first.contains('a') || @['name'].contains(5) || @.f)";
            IReadOnlyList <FilterExpressionToken> tokens = FilterExpressionTokenizer.Tokenize(input);
            FilterSubExpression expr = FilterParser.Parse(tokens);

            Assert.IsType <LogicalFilterSubExpression>(expr);
            LogicalFilterSubExpression e1 = expr as LogicalFilterSubExpression;

            Assert.True(e1.IsAnd);
            Assert.IsType <ComparisonFilterSubExpression>(e1.LeftSide);

            // @.price.count >= 0
            ComparisonFilterSubExpression comp1 = e1.LeftSide as ComparisonFilterSubExpression;

            Assert.True(comp1.IsGreaterOrEqual);
            Assert.IsType <PropertyFilterSubExpression>(comp1.LeftSide);
            Assert.True(comp1.LeftSide is PropertyFilterSubExpression p1 &&
                        p1.PropertyChain.Length == 2 &&
                        p1.PropertyChain.First() == "price" &&
                        p1.PropertyChain.Last() == "count"
                        );
            Assert.True(comp1.RightSide is NumberConstantFilterSubExpression c1 &&
                        c1.Value == 0.0
                        );

            // @.name.first.contains('a') || @['name'].contains(5) || @.f
            LogicalFilterSubExpression comp2 = (e1.RightSide as GroupFilterSubExpression).Expression as LogicalFilterSubExpression;

            Assert.NotNull(comp2);

            // @.name.first.contains('a')
            Assert.IsType <MethodCallFilterSubExpression>(comp2.LeftSide);
            MethodCallFilterSubExpression mc1 = comp2.LeftSide as MethodCallFilterSubExpression;

            Assert.Equal("contains", mc1.MethodName);
            Assert.True(mc1.Arguments.Count == 1 && (mc1.Arguments.Single() as StringConstantFilterSubExpression).Value == "a");
            PropertyFilterSubExpression calledOn1 = mc1.CalledOnExpression as PropertyFilterSubExpression;

            Assert.True(calledOn1.PropertyChain.Length == 2 && calledOn1.PropertyChain.First() == "name" && calledOn1.PropertyChain.Last() == "first");

            // @['name'].contains(5) || @.f
            Assert.IsType <LogicalFilterSubExpression>(comp2.RightSide);
            LogicalFilterSubExpression logical3 = comp2.RightSide as LogicalFilterSubExpression;

            Assert.True(logical3.IsOr);

            // @['name'].contains(5)
            Assert.IsType <MethodCallFilterSubExpression>(logical3.LeftSide);
            MethodCallFilterSubExpression mc2 = logical3.LeftSide as MethodCallFilterSubExpression;

            Assert.Equal("contains", mc2.MethodName);
            Assert.Equal(5.0, (mc2.Arguments.Single() as NumberConstantFilterSubExpression).Value);
            Assert.Equal("name", (mc2.CalledOnExpression as PropertyFilterSubExpression).PropertyChain.Single());

            // || @.f
            Assert.IsType <TruthyFilterSubExpression>(logical3.RightSide);
            TruthyFilterSubExpression truthy = logical3.RightSide as TruthyFilterSubExpression;

            Assert.IsType <PropertyFilterSubExpression>(truthy.Expression);
            PropertyFilterSubExpression truthyProp = truthy.Expression as PropertyFilterSubExpression;

            Assert.Equal("f", truthyProp.PropertyChain.Single());
        }
        public void shouldThrowConfigurationExceptionWhenFilterTermElementIsInvalid()
        {
            XmlDocument document = new XmlDocument();
            XmlElement termElement = document.CreateElement("NotWhatWeExpectTerm");
            termElement.SetAttribute("attribute", "Name");
            termElement.SetAttribute("operator", "=");
            termElement.SetAttribute("value", "Fred");

            XmlElement filterElement = document.CreateElement("QueryFilter");
            filterElement.AppendChild(termElement);

            FilterParser parser = new FilterParser(_metaModel.GetAssetType("Test"));

            try
            {
                parser.parse(filterElement);
                Assert.Fail("Expected Configuration Exception");
            }
            catch (ConfigurationException) {}
        }
Example #27
0
 public void Sprache() => FilterParser.BuildFromText(Text);