public bool ValidateQuery(IntermediateQuery query, out string message) { if (query.ExactForm == null && query.Tokens.Count() == 0) { message = "empty query"; return(false); } if (query.ExactForm != null && query.Tokens.Count() > 0) { message = "message can't contain exact form and parameter tokens at the same time"; return(false); } if (query.ExactForm != null) { message = ""; return(true); } if (!IsValidTokenCount(query.Tokens)) { message = "parameter token count must be in range 1..2"; return(false); } if (!IsValidParameterTypes(query.Tokens)) { message = "parameters should be all grammar or all semantic"; return(false); } if (!IsValidRangeParameters(query.Tokens)) { message = "invalid range parameters"; return(false); } message = ""; return(true); }
private Query TranslateExactQuery(IntermediateQuery intQuery) { return(new ExactQuery { ExactForm = intQuery.ExactForm, }); }
public IntermediateQuery ParseParameterQuery(string query) { var queryObj = new IntermediateQuery(); queryObj.Tokens = ParseParameterTokens(query); return(queryObj); }
public List <QueryResult> ExecuteQuery(IntermediateQuery intQuery) { if (!validator.ValidateQuery(intQuery, out string message)) { throw new Exception($"Unsupported query: {message}"); } Query query = translator.TranslateQuery(intQuery); return(client.SendQuery(query)); }
public Query TranslateQuery(IntermediateQuery intQuery) { if (IsExactSearchQuery(intQuery)) { return(TranslateExactQuery(intQuery)); } else { return(TranslatePairQuery(intQuery)); } }
private bool TryParseExactQuery(string query, out IntermediateQuery queryObj) { Regex exactRegex = new Regex(exactFormPattern); queryObj = new IntermediateQuery(); if (!exactRegex.IsMatch(query)) { return(false); } var match = exactRegex.Match(query); string exactForm = match.Groups[1].Value; queryObj.ExactForm = exactForm; return(true); }
public List <QueryResult> ExecuteQuery(IntermediateQuery query, string driverName) { var driver = ResolveDriver(driverName); if (driver == null) { throw new UnknownDriverException(driverName, "Unknown driver"); } List <QueryResult> results; try { results = driver.ExecuteQuery(query); } catch (Exception e) { throw new Exception($"Driver failed to execute query: {e.Message}", e); } return(results); }
private Query TranslatePairQuery(IntermediateQuery intQuery) { var pairQuery = new PairQuery(); if (IsLemmaQuery(intQuery)) { pairQuery.Type = PairQueryType.LemmaPair; pairQuery.First = intQuery.Tokens[0].SemanticParameters[0]; pairQuery.Second = intQuery.Tokens[1].SemanticParameters[0]; pairQuery.MinRange = intQuery.Tokens[1].MinRange; pairQuery.MaxRange = intQuery.Tokens[1].MaxRange; } else { pairQuery.Type = PairQueryType.TagPair; pairQuery.First = intQuery.Tokens[0].GrammarParameters[0]; pairQuery.Second = intQuery.Tokens[1].GrammarParameters[0]; pairQuery.MinRange = intQuery.Tokens[1].MinRange; pairQuery.MaxRange = intQuery.Tokens[1].MaxRange; } return(pairQuery); }
private bool IsLemmaQuery(IntermediateQuery intQuery) { return(intQuery.Tokens[0].SemanticParameters.Count() > 0); }
private bool IsExactSearchQuery(IntermediateQuery query) { return(query.ExactForm != "" && query.ExactForm != null); }