private Type FindLiteralType(IQueryComponent component) { Type result = null; if (component != null) { if (component is BinaryOperator) { BinaryOperator binaryOperator = (BinaryOperator)component; result = FindLiteralType(binaryOperator.LeftOperand); if (result == null) { result = FindLiteralType(binaryOperator.RightOperand); } } else if (component is Identifier) { result = ((Identifier)component).NativeType; } else if (component is Alias) { result = FindLiteralType(((Alias)component).Component); } } return(result); }
public void ParseTest_WithEverything() { //Arrange string query = "str*berry kiwi + banana \"ice smoothie\" party + [lemon NEAR/2 orange]"; // Expected structure: OR( AND(Wildcard,Term), AND(Term,Phrase,Term), NEAR ) //Act IQueryComponent actual = parser.ParseQuery(query); //Assert //check level1 or-query actual.Should().BeOfType(typeof(OrQuery)); ((OrQuery)actual).Components.Should().HaveCount(3); //check level2 ((OrQuery)actual).Components[0].Should().BeOfType(typeof(AndQuery)); ((AndQuery)((OrQuery)actual).Components[0]).Components.Should().HaveCount(2); ((OrQuery)actual).Components[1].Should().BeOfType(typeof(AndQuery)); ((AndQuery)((OrQuery)actual).Components[1]).Components.Should().HaveCount(3); ((OrQuery)actual).Components[2].Should().BeOfType(typeof(NearLiteral)); //check level3 ((AndQuery)((OrQuery)actual).Components[0]).Components[0].Should().BeOfType(typeof(WildcardLiteral)); ((AndQuery)((OrQuery)actual).Components[0]).Components[1].Should().BeOfType(typeof(TermLiteral)); ((AndQuery)((OrQuery)actual).Components[1]).Components[0].Should().BeOfType(typeof(TermLiteral)); ((AndQuery)((OrQuery)actual).Components[1]).Components[1].Should().BeOfType(typeof(PhraseLiteral)); ((AndQuery)((OrQuery)actual).Components[1]).Components[2].Should().BeOfType(typeof(TermLiteral)); }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is IExpression) { NavigatedComponent.Values.Add((IExpression)component); } }
/// <summary>Visit a query component.</summary> /// <param name="component">Component to be visited.</param> public override void VisitComponent(IQueryComponent component) { if (!_supressedComponents.Contains(component)) { base.VisitComponent(component); } }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is EntityConstrain) { NavigatedComponent.Patterns.Add((EntityConstrain)component); } }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if ((component is IExpression) && (NavigatedComponent.Operand == null)) { NavigatedComponent.Operand = (IExpression)component; } }
/// <summary>Determines if the given component contains another component as a child.</summary> /// <param name="component">Component to be checked.</param> /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns> public override bool ContainsComponent(IQueryComponent component) { return(component is QueryElement ? NavigatedComponent.Elements.Contains((QueryElement)component) : (component is Prefix ? NavigatedComponent.Prefixes.Contains((Prefix)component) : (component is ISelectableQueryComponent ? NavigatedComponent.Select.Contains((ISelectableQueryComponent)component) : (component is Identifier ? NavigatedComponent.Subject == component : false)))); }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is IExpression) { NavigatedComponent.Arguments.Add((IExpression)component); } }
/// <summary>Determines if the given component contains another component as a child.</summary> /// <param name="component">Component to be checked.</param> /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns> public override bool ContainsComponent(IQueryComponent component) { return (component is QueryElement ? NavigatedComponent.Elements.Contains((QueryElement)component) : (component is Prefix ? NavigatedComponent.Prefixes.Contains((Prefix)component) : (component is ISelectableQueryComponent ? NavigatedComponent.Select.Contains((ISelectableQueryComponent)component) : (component is Identifier ? NavigatedComponent.Subject == component : false)))); }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if ((component is Literal) && (((Literal)component).Value is Uri) && (NavigatedComponent.Value == null)) { NavigatedComponent.Value = (Literal)component; } }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is IExpression) && (replacement is IExpression)) { if (NavigatedComponent.Operand == (IExpression)component) { NavigatedComponent.Operand = (IExpression)replacement; } } }
public QueryItem(QueryType queryType, IQueryComponent queryComponent) { if (queryComponent == null) { throw new ArgumentNullException("queryComponent"); } QueryComponent = queryComponent; QueryType = queryType; }
protected void AddComponent(IQueryComponent queryComponent) { // ensure the component does not exist yet if (_components.Any(c => c.Type == queryComponent.Type)) { throw new InvalidOperationException($"The QueryContext already containes a component with the Type {queryComponent.Type}"); } _components.Add(queryComponent); }
public void ParseTest_WildcardQuery_ReturnsWildcardLiteral() { //Arrange string query = "colo*r"; //Act IQueryComponent actual = parser.ParseQuery(query); //Assert actual.Should().BeOfType(typeof(WildcardLiteral)); }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is Literal) && (replacement is Literal) && (((Literal)component).Value is Uri) && (((Literal)replacement).Value is Uri)) { if (NavigatedComponent.Value == (Literal)component) { NavigatedComponent.Value = (Literal)component; } } }
public void ParsingSingleQueryTest_ReturnsTermLiteral() { //Arrange string query = "smoothie"; TermLiteral expected = new TermLiteral(query); //Act IQueryComponent actual = parser.ParseQuery(query); //Assert actual.Should().BeOfType(typeof(TermLiteral)); ((TermLiteral)actual).Term.Should().BeSameAs(expected.Term); }
public void ParsingNearQueryTest_ReturnsNearLiteral() { //Arrange string query = "[lemon NEAR/2 orange]"; NearLiteral expected = new NearLiteral("lemon", 2, "orange"); //Act IQueryComponent actual = parser.ParseQuery(query); //Assert actual.Should().BeOfType(typeof(NearLiteral)); ((NearLiteral)actual).ToString().Should().BeEquivalentTo(expected.ToString()); }
/// <summary>Converts a query component into its navigator.</summary> /// <param name="queryComponent">Query component to be converted.</param> /// <returns>Query component navigator or null.</returns> internal static IQueryComponentNavigator GetQueryComponentNavigator(this IQueryComponent queryComponent) { IQueryComponentNavigator result = null; QueryComponentNavigatorAttribute queryComponentNavigatorAttribute = queryComponent.GetQueryComponentNavigatorAttribute(); if (queryComponentNavigatorAttribute != null) { result = (IQueryComponentNavigator)queryComponentNavigatorAttribute.Constructor.Invoke(new object[] { queryComponent }); } return(result); }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is EntityConstrain) && (replacement is EntityConstrain)) { int indexOf = NavigatedComponent.Patterns.IndexOf((EntityConstrain)component); if (indexOf != -1) { NavigatedComponent.Patterns.RemoveAt(indexOf); NavigatedComponent.Patterns.Insert(indexOf, (EntityConstrain)replacement); } } }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is QueryElement) && (replacement is QueryElement)) { int indexOf = NavigatedComponent.Elements.IndexOf((QueryElement)component); if (indexOf != -1) { NavigatedComponent.Elements.RemoveAt(indexOf); NavigatedComponent.Elements.Insert(indexOf, (QueryElement)replacement); } } }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is IExpression) && (replacement is IExpression)) { int indexOf = NavigatedComponent.Arguments.IndexOf((IExpression)component); if (indexOf != -1) { NavigatedComponent.Arguments.RemoveAt(indexOf); NavigatedComponent.Arguments.Insert(indexOf, (IExpression)replacement); } } }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is IExpression) && (replacement is IExpression)) { int indexOf = NavigatedComponent.Values.IndexOf((IExpression)component); if (indexOf != -1) { NavigatedComponent.Values.RemoveAt(indexOf); NavigatedComponent.Values.Insert(indexOf, (IExpression)replacement); } } }
public void ParsingTest_Exception_ReturnsNull() //TODO: other cases to be handled? { //with empty string string query = ""; IQueryComponent actual = parser.ParseQuery(query); actual.Should().BeNull(); // query = " "; query = null; actual = parser.ParseQuery(query); actual.Should().BeNull(); }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is IExpression) && (replacement is IExpression)) { if (NavigatedComponent.Predicate == (IExpression)component) { NavigatedComponent.Predicate = (IExpression)replacement; } else if (NavigatedComponent.Value == (IExpression)component) { NavigatedComponent.Value = (IExpression)component; } } }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is IExpression) { if (NavigatedComponent.Predicate == null) { NavigatedComponent.Predicate = (IExpression)component; } else if (NavigatedComponent.Value == null) { NavigatedComponent.Value = (IExpression)component; } } }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is IExpression) { if (NavigatedComponent.LeftOperand == null) { NavigatedComponent.LeftOperand = (IExpression)component; } else if (NavigatedComponent.RightOperand == null) { NavigatedComponent.RightOperand = (IExpression)component; } } }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is IExpression) && (replacement is IExpression)) { if (NavigatedComponent.Subject == (IExpression)component) { NavigatedComponent.Subject = (IExpression)replacement; } else { base.ReplaceComponent(component, replacement); } } }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is IExpression) { if (NavigatedComponent.Subject == null) { NavigatedComponent.Subject = (IExpression)component; } else { base.AddComponent(component); } } }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is Identifier) { if (NavigatedComponent.Name == null) { NavigatedComponent.Name = (Identifier)component; } } else if (NavigatedComponent.Component == null) { NavigatedComponent.Component = component; } }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is Identifier) && (replacement is Identifier)) { if (NavigatedComponent.Name == (Identifier)component) { NavigatedComponent.Name = (Identifier)replacement; } } else if (NavigatedComponent.Component == component) { NavigatedComponent.Component = replacement; } }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is QueryElement) { NavigatedComponent.Elements.Add((QueryElement)component); } else if (component is Identifier) { Identifier identifier = (Identifier)component; if (NavigatedComponent.About == null) { NavigatedComponent.About = identifier; } } }
/// <summary>Visit a query component.</summary> /// <param name="component">Component to be visited.</param> public virtual void VisitComponent(IQueryComponent component) { Type componentType = GetType(); MethodInfo componentMethodInfo = null; while ((componentType != typeof(object)) && (componentMethodInfo == null)) { componentMethodInfo = componentType.GetMethod("Visit" + component.GetType().Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); componentType = componentType.BaseType; } if (componentMethodInfo != null) { componentMethodInfo.Invoke(this, new object[] { component }); } }
public void ParsingOrQueryTest_ReturnsOrQuery() { //Arrange string query = "kiwi + banana"; OrQuery expected = new OrQuery( new List <IQueryComponent> { new TermLiteral("kiwi"), new TermLiteral("banana") } ); //Act IQueryComponent actual = parser.ParseQuery(query); //Assert actual.Should().BeOfType(typeof(OrQuery)); ((OrQuery)actual).Components.Should().HaveSameCount(expected.Components); }
/// <summary>Visit a query component.</summary> /// <param name="component">Component to be visited.</param> public virtual void VisitComponent(IQueryComponent component) { Type componentType = GetType(); MethodInfo componentMethodInfo = null; while ((componentType != typeof(object)) && (componentMethodInfo == null)) { componentMethodInfo = componentType.GetMethod("Visit" + component.GetType().Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); componentType = componentType.GetTypeInfo().BaseType; } if (componentMethodInfo != null) { componentMethodInfo.Invoke(this, new object[] { component }); } }
internal void Remove(IQueryComponent key) { int totalChange = 0; foreach (Index<IQueryComponent> index in _list) { if (!Object.Equals(index.Key, key)) { index.StartAt -= totalChange; } else { _stringBuilder = _stringBuilder.Remove(index.StartAt, index.Length); totalChange += index.Length; } } }
/// <summary>Adds component as a child of another component.</summary> /// <param name="component">Component to be added.</param> public override void AddComponent(IQueryComponent component) { if (component is QueryElement) { NavigatedComponent.Elements.Add((QueryElement)component); } else if (component is Prefix) { NavigatedComponent.Prefixes.Add((Prefix)component); } else if (component is ISelectableQueryComponent) { NavigatedComponent.Select.Add((ISelectableQueryComponent)component); } else if ((component is Identifier) && (NavigatedComponent.Subject == null)) { NavigatedComponent.Subject = (Identifier)component; } }
/// <summary>Replaces given component with another component.</summary> /// <param name="component">Component to be replaced.</param> /// <param name="replacement">Component to be put instead.</param> public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement) { if ((component is QueryElement) && (replacement is QueryElement)) { int indexOf = NavigatedComponent.Elements.IndexOf((QueryElement)component); if (indexOf != -1) { NavigatedComponent.Elements.RemoveAt(indexOf); NavigatedComponent.Elements.Insert(indexOf, (QueryElement)replacement); } } else if ((component is Prefix) && (replacement is Prefix)) { int indexOf = NavigatedComponent.Prefixes.IndexOf((Prefix)component); if (indexOf != -1) { NavigatedComponent.Prefixes.RemoveAt(indexOf); NavigatedComponent.Prefixes.Insert(indexOf, (Prefix)replacement); } } else if ((component is ISelectableQueryComponent) && (replacement is ISelectableQueryComponent)) { int indexOf = NavigatedComponent.Select.IndexOf((ISelectableQueryComponent)component); if (indexOf != -1) { NavigatedComponent.Select.RemoveAt(indexOf); NavigatedComponent.Select.Insert(indexOf, (ISelectableQueryComponent)replacement); } } else if ((component is Identifier) && (replacement is Identifier)) { if (NavigatedComponent.Subject == (Identifier)component) { NavigatedComponent.Subject = (Identifier)replacement; } } }
/// <summary>Determines if the given component contains another component as a child.</summary> /// <param name="component">Component to be checked.</param> /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns> public override bool ContainsComponent(IQueryComponent component) { return (component is IExpression ? NavigatedComponent.Values.Contains((IExpression)component) : false); }
/// <summary>Determines if the given component can accept another component as a child.</summary> /// <param name="component">Component to be added.</param> /// <returns><b>true</b> if given component can be added, otherwise <b>false</b>.</returns> public override bool CanAddComponent(IQueryComponent component) { return (component is IExpression); }
/// <summary>Determines if the given component contains another component as a child.</summary> /// <param name="component">Component to be checked.</param> /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns> public override bool ContainsComponent(IQueryComponent component) { return (NavigatedComponent.Operand == component); }
/// <summary>Determines if the given component can accept another component as a child.</summary> /// <param name="component">Component to be added.</param> /// <returns><b>true</b> if given component can be added, otherwise <b>false</b>.</returns> public override bool CanAddComponent(IQueryComponent component) { return (component is IExpression) && (NavigatedComponent.Operand == null); }
/// <summary>Determines if the given component can accept another component as a child.</summary> /// <param name="component">Component to be added.</param> /// <returns><b>true</b> if given component can be added, otherwise <b>false</b>.</returns> public override bool CanAddComponent(IQueryComponent component) { return (component is IExpression) && ((NavigatedComponent.Predicate == null) || (NavigatedComponent.Value == null)); }
/// <summary>Determines if the given component can accept another component as a child.</summary> /// <param name="component">Component to be added.</param> /// <returns><b>true</b> if given component can be added, otherwise <b>false</b>.</returns> public override bool CanAddComponent(IQueryComponent component) { return (component is Literal) && (((Literal)component).Value is Uri) && (NavigatedComponent.Value == null); }
/// <summary>Determines if the given component contains another component as a child.</summary> /// <param name="component">Component to be checked.</param> /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns> public override bool ContainsComponent(IQueryComponent component) { return (NavigatedComponent.Predicate == component) || (NavigatedComponent.Value == component); }