public SimpleQueryBuilder() { itsQuery = new Query(); itsQuery.QueryGroup = new QueryGroupAnd(); itsGroupRequired = new QueryGroupPatterns(); itsGroupOptional = new QueryGroupPatterns(); itsGroupConstraints = new QueryGroupConstraints(); ((QueryGroupAnd)itsQuery.QueryGroup).Add(itsGroupRequired); ((QueryGroupAnd)itsQuery.QueryGroup).Add(new QueryGroupOptional(itsGroupOptional)); ((QueryGroupAnd)itsQuery.QueryGroup).Add(itsGroupConstraints); }
public void EqualsComparesGroups() { QueryGroupPatterns group1 = new QueryGroupPatterns(); QueryGroupPatterns group2 = new QueryGroupPatterns(); QueryGroupPatterns group3 = new QueryGroupPatterns(); group1.Add(new Pattern(new UriRef("foo"), new UriRef("foo"), new UriRef("foo"))); group2.Add(new Pattern(new UriRef("foo"), new UriRef("foo"), new UriRef("foo"))); group3.Add(new Pattern(new UriRef("bar"), new UriRef("bar"), new UriRef("bar"))); Assert.IsTrue(group1.Equals(group2), "group1 should equal group2"); Assert.IsTrue(!group1.Equals(group3), "group1 should not equal query3"); }
public void GetHashCodeUsesGroups() { QueryGroupPatterns group1 = new QueryGroupPatterns(); QueryGroupPatterns group2 = new QueryGroupPatterns(); QueryGroupPatterns group3 = new QueryGroupPatterns(); group1.Add(new Pattern(new UriRef("foo"), new UriRef("foo"), new UriRef("foo"))); group2.Add(new Pattern(new UriRef("foo"), new UriRef("foo"), new UriRef("foo"))); group3.Add(new Pattern(new UriRef("bar"), new UriRef("bar"), new UriRef("bar"))); Assert.IsTrue(group1.GetHashCode() == group2.GetHashCode(), "group1 should have same hash code as group2"); Assert.IsTrue(group1.GetHashCode() != group3.GetHashCode(), "group1 should not have same hash code as query2"); }
public void visit(QueryGroupPatterns group) { foreach (Pattern pattern in group.Patterns) { if (!(pattern.GetSubject() is Variable)) { if (itsOptionalNestingDepth == 0) { itsRequiredTerms[pattern.GetSubject()] = "y"; } else { itsOptionalTerms[pattern.GetSubject()] = "y"; } } if (!(pattern.GetPredicate() is Variable)) { if (itsOptionalNestingDepth == 0) { itsRequiredTerms[pattern.GetPredicate()] = "y"; } else { itsOptionalTerms[pattern.GetPredicate()] = "y"; } } if (!(pattern.GetObject() is Variable)) { if (itsOptionalNestingDepth == 0) { itsRequiredTerms[pattern.GetObject()] = "y"; } else { itsOptionalTerms[pattern.GetObject()] = "y"; } } } }
public void visit(QueryGroupPatterns group) { ArrayList groupJoins = new ArrayList(); Hashtable variableMentionsWithinThisGroup = new Hashtable(); bool allPatternsAreMatchable = true; foreach (Pattern pattern in group.Patterns) { if (!(pattern.GetSubject() is Variable) && !itsResourcesIndexedByNode.Contains(pattern.GetSubject())) { allPatternsAreMatchable = false; } else if (!(pattern.GetPredicate() is Variable) && !itsResourcesIndexedByNode.Contains(pattern.GetPredicate())) { allPatternsAreMatchable = false; } else if (!(pattern.GetObject() is Variable) && !itsResourcesIndexedByNode.Contains(pattern.GetObject())) { allPatternsAreMatchable = false; } } if (allPatternsAreMatchable) { foreach (Pattern pattern in group.Patterns) { ++itsStatementTableCount; string tableName = "s" + itsStatementTableCount; ArrayList constraints = new ArrayList(); bool referencesExternalVariables = false; if (ProcessPatternTerm(pattern.GetSubject(), tableName, "subjectHash", constraints, variableMentionsWithinThisGroup)) { referencesExternalVariables = true; } if (ProcessPatternTerm(pattern.GetPredicate(), tableName, "predicateHash", constraints, variableMentionsWithinThisGroup)) { referencesExternalVariables = true; } if (ProcessPatternTerm(pattern.GetObject(), tableName, "objectHash", constraints, variableMentionsWithinThisGroup)) { referencesExternalVariables = true; } constraints.Add(tableName + ".graphId=" + itsResourceMap.GetHashCode()); if (itsStatementTableCount > 1) { StringBuilder join = new StringBuilder(); if (referencesExternalVariables && itsOptionalNestingDepth > 0) { join.Append("LEFT OUTER "); } join.Append("JOIN Statements " + tableName + " ON "); bool doneFirst = false; foreach (string constraint in constraints) { if (constraint != null && constraint.Length > 0) { if (doneFirst) { join.Append(" AND "); } join.Append(constraint); doneFirst = true; } } groupJoins.Add(join.ToString()); } else { foreach (string constraint in constraints) { if (constraint != null && constraint.Length > 0) { itsWhereTerms.Add(constraint); } } } } itsJoins.AddRange(groupJoins); } else { if (itsOptionalNestingDepth == 0) { NoSolutionIsPossible(); } } }