Esempio n. 1
0
            public string GetJoinTableAlias(string path, MultiCrossReferenceFieldMetadata field)
            {
                var fullName = path + QueryGeneratorUtils.GetJoinTableName(field);

                return GetTableAlias(fullName);
            }
Esempio n. 2
0
 private static IEnumerable<IParameterBuilder> GetParameterBuilders(MultiCrossReferenceFieldMetadata field)
 {
     yield return new MultiCrossReferenceParameterBuilder(field.Name, string.Format("@{0}Ids", field.Name));
 }
Esempio n. 3
0
        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));
            }
        }
Esempio n. 4
0
 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);
 }
Esempio n. 5
0
        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);
        }