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 } }; }
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 } }; }
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 } }; }
public QuerySqlGenerator([NotNull] QueryPlan queryPlan, int indentLevel = 0) { if (queryPlan == null) { throw new ArgumentNullException("queryPlan"); } _queryPlan = queryPlan; _indentLevel = indentLevel; }
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 }); } }
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); }
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 "); }
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 "; }
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; }
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); }
private IEnumerable <string> GetProjectionColumns(QueryPlan queryPlan) { return(queryPlan.QueryMembers.Select(GetProjectionColumn)); }