public string GetJoinTableAlias(string path, MultiCrossReferenceFieldMetadata field) { var fullName = path + QueryGeneratorUtils.GetJoinTableName(field); return GetTableAlias(fullName); }
private static IEnumerable<IParameterBuilder> GetParameterBuilders(MultiCrossReferenceFieldMetadata field) { yield return new MultiCrossReferenceParameterBuilder(field.Name, string.Format("@{0}Ids", field.Name)); }
private static IEnumerable<string> GetReferenceFieldJoins(string path, MultiCrossReferenceFieldMetadata field, TableAliasCollection aliasCollection) { if (field.LinkField == null) { yield return string.Format( CultureInfo.InvariantCulture, "INNER JOIN [dbo].[{0}] {1} ON {1}.[{2}] = {3}.[Id]", QueryGeneratorUtils.GetJoinTableName(field), aliasCollection.GetJoinTableAlias(path, field), QueryGeneratorUtils.GetJoinTableMasterKey(field), aliasCollection.GetTableAlias(path, field.DeclaringProcess)); yield return string.Format( CultureInfo.InvariantCulture, "INNER JOIN [dbo].[{1}] {2} ON {2}.[Id] = {0}.[{3}] AND {2}.[IsRemoved] = 0", aliasCollection.GetJoinTableAlias(path, field), field.ReferencedProcess.Name, aliasCollection.GetTableAlias(path + field.Name + ".", field.ReferencedProcess), QueryGeneratorUtils.GetJoinTableChildKey(field)); } else { yield return string.Format( CultureInfo.InvariantCulture, "INNER JOIN [dbo].[{0}] {1} ON {1}.[{2}] = {3}.[Id] AND {1}.[IsRemoved] = 0", field.ReferencedProcess.Name, aliasCollection.GetTableAlias(path + field.Name + ".", field.ReferencedProcess), field.LinkField.Name, aliasCollection.GetTableAlias(path, field.DeclaringProcess)); } }
private static string GetFilter(MultiCrossReferenceFieldMetadata field, TableAliasCollection aliasCollection) { return string.Format( CultureInfo.InvariantCulture, "EXISTS (SELECT 1 FROM @{1}Ids.nodes('/r') items(r) WHERE items.r.value('.', 'int') = {0}.[Id])", aliasCollection.GetTableAlias(string.Empty, field.ReferencedProcess), field.Name); }
public static string GetJoinTableName(MultiCrossReferenceFieldMetadata field) { if (field == null) throw new ArgumentNullException("field"); if (field.LinkField != null) throw new ArgumentException("The specified field doesn't use a join table."); return GetMultiCrossReferenceJoinTableName(field.DeclaringProcess.Name, field.Name, field.ReferencedProcess.Name); }