public QueryFilterBuilder(LocalizedKeywordMapping keywordMapping, KqlParser.ParseOption parseOptions, RescopedAll rescopedAll, IRecipientResolver recipientResolver, IPolicyTagProvider policyTagProvider, CultureInfo culture) { this.culture = culture; this.parseOptions = parseOptions; this.AllowedKeywords = PropertyKeywordHelper.AllPropertyKeywords; this.keywordMapping = keywordMapping; this.recipientResolver = recipientResolver; this.policyTagProvider = policyTagProvider; this.rescopedAll = rescopedAll; }
public static QueryFilter ParseAndBuildQuery(string query, KqlParser.ParseOption parseOption, CultureInfo cultureInfo, RescopedAll rescopedAll, IRecipientResolver recipientResolver, IPolicyTagProvider policyTagProvider) { KqlParser kqlParser = new KqlParser(); LocalizedKeywordMapping mapping = LocalizedKeywordMapping.GetMapping(cultureInfo); TreeNode treeNode = kqlParser.Parse(query, parseOption, cultureInfo, mapping); QueryFilterBuilder queryFilterBuilder = new QueryFilterBuilder(mapping, parseOption, rescopedAll, recipientResolver, policyTagProvider, cultureInfo); queryFilterBuilder.AllowedKeywords = KqlParser.GetSupportedProperties(parseOption); QueryFilter queryFilter = queryFilterBuilder.Build(treeNode); if (queryFilter == null) { if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None) { throw new ParserException(new ParserErrorInfo(ParserErrorCode.ParserError)); } queryFilter = queryFilterBuilder.BuildAllFilter(query); } return(queryFilter); }
internal TreeNode Parse(string query, KqlParser.ParseOption parseOption, CultureInfo cultureInfo, LocalizedKeywordMapping keywordMapping) { if (string.IsNullOrEmpty(query)) { throw new ArgumentNullException("query"); } if (cultureInfo == null) { throw new ArgumentNullException("cultureInfo"); } if ((parseOption & KqlParser.ParseOption.UseBasicKeywordsOnly) != KqlParser.ParseOption.None && (parseOption & KqlParser.ParseOption.UseCiKeywordOnly) != KqlParser.ParseOption.None) { throw new ArgumentException("GetBasicKeywordOnly can not be combined with UseCIKeywordOnly"); } List <ParserErrorInfo> list = ((parseOption & KqlParser.ParseOption.SuppressError) != KqlParser.ParseOption.None) ? null : new List <ParserErrorInfo>(); KqlParser kqlParser = new KqlParser(); ParsingContext parsingContext = new ParsingContext { CultureInfo = cultureInfo, ImplicitAndBehavior = ((parseOption & KqlParser.ParseOption.ImplicitOr) == KqlParser.ParseOption.None), PropertyLookup = new PropertyLookup(keywordMapping, KqlParser.GetSupportedProperties(parseOption), list), SpecialPropertyHandler = new SpecialPropertyHandler(keywordMapping, list) }; TreeNode treeNode = null; try { KqlParser.VerifyQuery(query); query = KqlParser.NormalizeQuery(query); treeNode = kqlParser.Parse(query, parsingContext); } catch (FormatException innerException) { if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None) { throw new ParserException(new ParserErrorInfo(ParserErrorCode.KqlParseException), innerException); } } catch (ParseException innerException2) { if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None) { throw new ParserException(new ParserErrorInfo(ParserErrorCode.KqlParseException), innerException2); } } catch (ParserException ex) { if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None) { throw ex; } } if (list != null && list.Count > 0) { throw new ParserException(list); } if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None && treeNode == null) { throw new ParserException(new ParserErrorInfo(ParserErrorCode.ParserError)); } return(treeNode); }
public PropertyLookup(LocalizedKeywordMapping keywordMapping, ICollection <PropertyKeyword> keywords, List <ParserErrorInfo> errors) { this.keywordMapping = keywordMapping; this.keywords = keywords; this.errors = errors; }
public SpecialPropertyHandler(LocalizedKeywordMapping keywordMapping, List <ParserErrorInfo> errors) { this.keywordMapping = keywordMapping; this.errors = errors; }