public TermCollector(QueryGroup group) { itsRequiredTerms = new Hashtable(); itsOptionalTerms = new Hashtable(); itsOptionalNestingDepth = 0; group.Accept(this); }
private string GenerateSelect(QueryGroup group) { group.Accept(this); if (itsJoins.Count == 0 && itsWhereTerms.Count == 0) { itsIsFeasible = false; itsIsMappable = false; return(string.Empty); } foreach (Variable variable in itsQuery.Variables) { if (itsVariableFirstMentions.Contains(variable.Name)) { if (!itsSelectedVariables.Contains(variable.Name)) { itsVariableList.Add(variable); itsSelectedVariables[variable.Name] = variable; itsSelectTerms.Add("rn_" + variable.Name + ".resourceHash rh_" + variable.Name); itsSelectTerms.Add("rn_" + variable.Name + ".nodeHash nh_" + variable.Name); itsSelectTerms.Add("rn_" + variable.Name + ".nodeType nt_" + variable.Name); itsJoins.Add("JOIN ResourceNodes rn_" + variable.Name + " ON rn_" + variable.Name + ".resourceHash=" + itsVariableFirstMentions[variable.Name] + " AND rn_" + variable.Name + ".graphId=" + itsVariableTables[variable.Name] + ".graphId"); itsJoins.Add("LEFT OUTER JOIN UriRefs u_" + variable.Name + " ON rn_" + variable.Name + ".nodeHash=u_" + variable.Name + ".hash AND rn_" + variable.Name + ".nodeType='u'"); if (!itsNonLiteralVariables.Contains(variable.Name)) { itsSelectTerms.Add("COALESCE(u_" + variable.Name + ".uri, pl_" + variable.Name + ".value, l_" + variable.Name + ".value) val_" + variable.Name); itsSelectTerms.Add("COALESCE(tl_" + variable.Name + ".value, t_" + variable.Name + ".value) sub_" + variable.Name); itsJoins.Add("LEFT OUTER JOIN PlainLiterals pl_" + variable.Name + " ON rn_" + variable.Name + ".nodeHash=pl_" + variable.Name + ".hash AND rn_" + variable.Name + ".nodeType='p'"); itsJoins.Add("LEFT OUTER JOIN Languages l_" + variable.Name + " ON pl_" + variable.Name + ".languageHash=l_" + variable.Name + ".hash"); itsJoins.Add("LEFT OUTER JOIN TypedLiterals tl_" + variable.Name + " ON rn_" + variable.Name + ".nodehash=tl_" + variable.Name + ".hash AND rn_" + variable.Name + ".nodeType='t'"); itsJoins.Add("LEFT OUTER JOIN DataTypes t_" + variable.Name + " ON tl_" + variable.Name + ".datatypeHash=t_" + variable.Name + ".hash"); } else { itsSelectTerms.Add("u_" + variable.Name + ".uri val_" + variable.Name); itsSelectTerms.Add("NULL sub_" + variable.Name); } } } else { itsSelectTerms.Add("NULL rh_" + variable.Name); itsSelectTerms.Add("NULL nh_" + variable.Name); itsSelectTerms.Add("NULL nt_" + variable.Name); itsSelectTerms.Add("NULL val_" + variable.Name); itsSelectTerms.Add("NULL sub_" + variable.Name); } } return(BuildSql()); }