Exemplo n.º 1
0
        public ProjectionResult Generate()
        {
            var queryPlanBuilder = new QueryPlanBuilder(_projectionAtom, _allAtoms);

            var queryPlan = queryPlanBuilder.Build();
            var viewName  = $"view_{_projectionAtom.Name}";

            GenerateSql(viewName, queryPlan);

            return(new ProjectionResult
            {
                References = queryPlan.References,
                Meta = new SqlAccessorMetadata
                {
                    Name = viewName,
                    BaseAtom = new ProjectedAtomRoot
                    {
                        Name = _projectionAtom.Name,
                        Members = queryPlan.QueryMembers.ToList()
                    },
                    QueryType = QueryType.View
                },
                Sql = GenerateSql(viewName, queryPlan),
                Name = Constants.DefaultSchema + "." + viewName
            });
        }
        internal ProjectionResult Generate()
        {
            var result = new ProjectionResult
            {
            };

            QueryPlanBuilder builder = new QueryPlanBuilder(Projection, _allAtoms);
            var plan = builder.Build();
            QuerySqlGenerator query = new QuerySqlGenerator(plan);

            query.Generate();
        }
        internal ProjectionResult Generate()
        {
            var result = new ProjectionResult
            {

            };

            QueryPlanBuilder builder = new QueryPlanBuilder(Projection, _allAtoms);
            var plan = builder.Build();
            QuerySqlGenerator query = new QuerySqlGenerator(plan);
            query.Generate();
        }
Exemplo n.º 4
0
        public override StoredProcedureResult Generate()
        {
            var fields = new Dictionary<string, List<string>>
                         {
                             {
                                 Atom.Name, Atom.Members.Select(i => i.Name)
                                                .ToList()
                             },
                             {
                                 _searchBy.Name, _searchBy.TargetMember.Atom.Members.Select(i => i.Name)
                                                          .ToList()
                             }
                         };

            var projectionAtom = new ProjectionAtom(fields);

            var builder = new QueryPlanBuilder(projectionAtom, _allAtoms.ToDictionary(i => i.Name));

            var plan = builder.Build();

            plan.QueryMembers = plan.QueryMembers.Where(i => i.Member.Atom.Name != _searchBy.Name && !i.Member.HasFlag(MemberFlags.Generated))
                                    .ToList();

            var queryPlan = new QuerySqlGenerator(plan, 2).Generate()
                                                          .IndentAllLines(2, true);

            var sprocSuffix = $"ListBy{_searchBy.Member}";

            string
                Params = GetTypedSprocParam(_searchBy.TargetMember),
                schema = Atom.AdditionalInfo.Schema,
                Key = _searchBy.Member,
                ExternalTable = _searchBy.Name,
                ExternalKey = _searchBy.Member,
                TableName = Atom.Name,
                SprocSuffix = sprocSuffix;

            var template = SprocHeader(schema, TableName, SprocSuffix, Params) + $@"

            {queryPlan}
            WHERE
            [{schema}].[{ExternalTable}].{Key} = @{Key}
            END
            GO
            ";

            var name = $"{schema}.{TableName}_ListBy{ExternalKey}";

            var result = new StoredProcedureResult
                         {
                             Name = name,
                             Sql = template,
                             AccessorMetadata = new SqlAccessorMetadata
                                    {
                                        BaseAtom = ProjectedAtomRoot.FromAtom(Atom),
                                        QueryKey = _searchBy.TargetMember,
                                        QueryType = QueryType.GetOne,
                                        Name = name
                                    }
                         };

            return result;
        }