Example #1
0
        public override StoredProcedureResult Generate()
        {
            var delim = "," + Environment.NewLine;
            string Schema = Atom.AdditionalInfo.Schema,
                   Params = string.Empty,
                   SprocSuffix = "GetAll",
                   TableName = Atom.Name;

            var plan = new QueryPlan
            {
                QueryMembers = Atom.Members.Where(IsQueryableColumn).Select(AliasedAtomMemberInfo.FromAtomMemberInfo),
                References = { new SimpleReference(Atom) }
            };

            var template = GenerateQuerySproc(Schema, TableName, SprocSuffix, Params, plan);

            var name = $"{Schema}.{TableName}_GetAll";

            return new StoredProcedureResult
            {
                Name = name,
                Sql = template,
                AccessorMetadata = new SqlAccessorMetadata
                {
                    BaseAtom = ProjectedAtomRoot.FromAtom(Atom),
                    QueryType = QueryType.GetAll,
                    QueryKey = null,
                    Name = name
                }
            };
        }
Example #2
0
        public override StoredProcedureResult Generate()
        {
            var delim = "," + Environment.NewLine;
            var queryKey = GetReturnKey();

            string Schema = Atom.AdditionalInfo.Schema,
                   Params = GetTypedSprocParam(queryKey),
                   SprocSuffix = "GetOne",
                   TableName = Atom.Name,
                   Key = queryKey.Name;

            var plan = new QueryPlan
            {
                QueryMembers = Atom.Members.Where(IsQueryableColumn).Select(AliasedAtomMemberInfo.FromAtomMemberInfo),
                References = { new SimpleReference(Atom) },
                Filters = { new AtomFilter { FilterValue = "@" + Key, Member = queryKey } }
            };

            var template = GenerateQuerySproc(Schema, TableName, SprocSuffix, Params, plan);

            var name = $"{Schema}.{TableName}_GetOne";

            return new StoredProcedureResult
            {
                Name = name,
                Sql = template,
                AccessorMetadata = new SqlAccessorMetadata
                {
                    BaseAtom = ProjectedAtomRoot.FromAtom(Atom),
                    QueryType = QueryType.GetOne,
                    QueryKey = queryKey,
                    Name = name
                }
            };
        }
Example #3
0
        public override StoredProcedureResult Generate()
        {
            var delim = "," + Environment.NewLine;

            var queryKey = _byKey;

            if (_byKey.HasReference && _byKey.Reference.IsReferenceToHiddenPrimaryKey)
            {
                queryKey = queryKey.Reference.TargetAtomAlternateKey;
            }

            string sprocSuffix = _isUnique ? $"GetOneBy{queryKey.Name}" : $"GetBy{queryKey.Name}" ;

            string
                Schema = Atom.AdditionalInfo.Schema,
                Params = GetTypedSprocParam(queryKey),
                TableName = Atom.Name,
                Key = queryKey.Name;

            var plan = new QueryPlan
            {
                QueryMembers = Atom.Members.Where(IsQueryableColumn).Select(AliasedAtomMemberInfo.FromAtomMemberInfo),
                References = { new SimpleReference(Atom) },
                Filters = { new AtomFilter { FilterValue = "@" + Key, Member = queryKey } }
            };

            if (queryKey != _byKey)
            {
                var simpleRef = new SimpleReference(queryKey.Atom);
                plan.References = new List<Reference>
                {
                    simpleRef,
                    new ResolvedReference(Atom, new List<Reference>
                    {
                        simpleRef
                    })
                };
            }

            var template = GenerateQuerySproc(Schema, TableName, sprocSuffix, Params, plan);

            var name = $"{Schema}.{TableName}_{sprocSuffix}";

            return new StoredProcedureResult
                   {
                       Name = name,
                       Sql = template,
                       AccessorMetadata = new SqlAccessorMetadata
                              {
                                  BaseAtom = ProjectedAtomRoot.FromAtom(Atom),
                                  QueryType = _isUnique ? QueryType.GetOne : QueryType.GetBy,
                                  QueryKey = queryKey,
                                  Name = name
                              }
                   };
        }
Example #4
0
        public QuerySqlGenerator([NotNull] QueryPlan queryPlan, int indentLevel = 0)
        {
            if (queryPlan == null)
            {
                throw new ArgumentNullException("queryPlan");
            }

            _queryPlan   = queryPlan;
            _indentLevel = indentLevel;
        }
Example #5
0
        private void AddDeletedItemFiltering(QueryPlan plan)
        {
            var deletionMember = Atom.Members.FirstOrDefault(m => m.HasFlag(MemberFlags.SoftDeleteTracking));

            if (Atom.AdditionalInfo.FilterDeleted.GetValueOrDefault() && deletionMember != null)
            {
                plan.Filters.Add(
                    new AtomFilter
                    {
                        FilterValue = "0",
                        Member = deletionMember
                    });
            }
        }
Example #6
0
        private string GetProjectionFilter(QueryPlan queryPlan)
        {
            if (queryPlan.Filters.Any())
            {
                var result = "WHERE" + Environment.NewLine.AppendTab(_indentLevel + 1);
                return(result +
                       string.Join(
                           (" AND " + Environment.NewLine).AppendTab(_indentLevel + 1),
                           queryPlan.Filters
                           .Select(
                               m => $"([{m.Member.Atom.Name}].{m.Member.Name} = {m.FilterValue})")));
            }

            return(string.Empty);
        }
Example #7
0
        private string GenerateSql(string viewName, QueryPlan queryPlan)
        {
            string query = new QuerySqlGenerator(queryPlan, 1).Generate();

            return($@"
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE VIEW [dbo].[{viewName}]
AS
	{query}

GO
");
        }
Example #8
0
        public string GenerateQuerySproc(
            string schemaName,
            string tableName, 
            string sprocSuffix, 
            string sprocParameters,
            QueryPlan plan)
        {
            AddDeletedItemFiltering(plan);

            QuerySqlGenerator query = new QuerySqlGenerator(plan, indentLevel: 1);
            return SprocHeader(schemaName, tableName, sprocSuffix, sprocParameters) + $@"

            {query.Generate()}

            END
            GO
            ";
        }
Example #9
0
        public QueryPlan Build()
        {
            var references = GetReferences();

            var columns = GetProjectionColumns()
                .ToList();

            if (Projection.IgnoreConflicts)
            {
                columns = columns.DistinctBy(i => i.Name)
                                 .ToList();
            }
            QueryPlan plan = new QueryPlan
            {
                References = references,
                QueryMembers = columns,
                Filters = GetProjectionFilters(references).ToList()
            };

            return plan;
        }
Example #10
0
        public QueryPlan Build()
        {
            var references = GetReferences();

            var columns = GetProjectionColumns()
                          .ToList();

            if (Projection.IgnoreConflicts)
            {
                columns = columns.DistinctBy(i => i.Name)
                          .ToList();
            }
            QueryPlan plan = new QueryPlan
            {
                References   = references,
                QueryMembers = columns,
                Filters      = GetProjectionFilters(references).ToList()
            };

            return(plan);
        }
Example #11
0
 private IEnumerable <string> GetProjectionColumns(QueryPlan queryPlan)
 {
     return(queryPlan.QueryMembers.Select(GetProjectionColumn));
 }