private void ProcessSelectable(bool isSubQuery, ISelectableQueryComponent expression, Func <string, string> createVariableName, StrongEntityAccessor mainEntityAccessor) { System.Reflection.MethodInfo processSelectable = typeof(GenericSparqlQueryVisitor).GetTypeInfo().GetMethod("ProcessSelectable" + expression.GetType().Name, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); if (processSelectable != null) { processSelectable.Invoke(this, new object[] { expression, isSubQuery, createVariableName, mainEntityAccessor }); } foreach (IExpression selectableExpression in expression.Expressions) { VisitComponent(selectableExpression); _commandText.Append(" "); } }
private void ProcessSelectable(bool isSubQuery, ISelectableQueryComponent expression, Func<string, string> createVariableName) { if (!isSubQuery) { if (expression is UnspecifiedEntityAccessor) { if ((_metaGraphVariableName == null) && (_entityVariableName == null)) { _metaGraphVariableName = "graph"; _entityVariableName = ((StrongEntityAccessor)expression).About.Name; } _commandText.AppendFormat( "IF(BOUND(?G{0}),?G{0},?G{1}) AS ?{2} ", ((UnspecifiedEntityAccessor)expression).About.Name, ((UnspecifiedEntityAccessor)expression).EntityAccessor.About.Name, _metaGraphVariableName); } else if (expression is IdentifierEntityAccessor) { if ((_metaGraphVariableName == null) && (_entityVariableName == null)) { _metaGraphVariableName = String.Format("G{0}", ((StrongEntityAccessor)expression).About.Name); _entityVariableName = ((StrongEntityAccessor)expression).About.Name + "_Distinct"; } _subjectVariableName = ((StrongEntityAccessor)expression).About.Name; _predicateVariableName = ((StrongEntityAccessor)expression).About.Name + "_Predicate"; _objectVariableName = ((StrongEntityAccessor)expression).About.Name + "_Object"; _commandText.AppendFormat( "DISTINCT(?{2}) AS ?{1} ?{0} ?{3} ?{4} ", _metaGraphVariableName, _entityVariableName, ((StrongEntityAccessor)expression).About.Name, _predicateVariableName, _objectVariableName); } else if (expression is StrongEntityAccessor) { if ((_metaGraphVariableName == null) && (_entityVariableName == null)) { _metaGraphVariableName = String.Format("G{0}", _entityVariableName = ((StrongEntityAccessor)expression).About.Name); } _commandText.AppendFormat("?{0} ", _metaGraphVariableName); } else if (expression is UnboundConstrain) { UnboundConstrain unboundConstrain = (UnboundConstrain)expression; if ((unboundConstrain.Subject is Identifier) && (unboundConstrain.Predicate is Identifier) && (unboundConstrain.Value is Identifier)) { _subjectVariableName = ((Identifier)unboundConstrain.Subject).Name; _predicateVariableName = ((Identifier)unboundConstrain.Predicate).Name; _objectVariableName = ((Identifier)unboundConstrain.Value).Name; } } else if (expression is Call) { if (_scalarVariableName == null) { _scalarVariableName = createVariableName(((Call)expression).Member.ToString()); } } else if (expression is Alias) { Alias alias = (Alias)expression; if ((_scalarVariableName == null) && (alias.Name != null)) { _scalarVariableName = alias.Name.Name; } } } foreach (IExpression selectableExpression in expression.Expressions) { VisitComponent(selectableExpression); _commandText.Append(" "); } }