示例#1
0
        public void DeleteWhere(TableName table, IWhereFragment @where)
        {
            if (table == null) throw new ArgumentNullException(nameof(table));
            if (@where == null) throw new ArgumentNullException(nameof(@where));

            Current().DeleteWhere(table, @where);
        }
示例#2
0
        public void Delete <T>(IWhereFragment where)
        {
            var delete = new Delete(typeof(T), where);
            var list   = _deletes.GetOrAdd(typeof(T), _ => new List <Delete>());

            list.Add(delete);
        }
示例#3
0
 public PatchExpression(IWhereFragment fragment, ITenant tenant, UnitOfWork unitOfWork, ISerializer serializer)
 {
     _fragment   = fragment;
     _tenant     = tenant;
     _unitOfWork = unitOfWork;
     _serializer = serializer;
 }
示例#4
0
        public DocumentStorage(DocumentMapping document)
        {
            _mapping = document;

            _document = document;
            Fields    = document;
            TableName = document.Table;

            _defaultWhere = document.DefaultWhereFragment();

            _selectClause = $"select {_document.SelectFields().Select(x => $"d.{x}").Join(", ")} from {document.Table.QualifiedName} as d";

            _loaderSql =
                $"select {document.SelectFields().Join(", ")} from {document.Table.QualifiedName} as d where id = :id";

            _loadArraySql =
                $"select {document.SelectFields().Join(", ")} from {document.Table.QualifiedName} as d where id = ANY(:ids)";

            if (document.TenancyStyle == TenancyStyle.Conjoined)
            {
                _loaderSql    += $" and {TenantWhereFragment.Filter}";
                _loadArraySql += $" and {TenantWhereFragment.Filter}";
            }

            QueryableDocument = document;

            UseOptimisticConcurrency = document.UseOptimisticConcurrency;


            _setter = LambdaBuilder.Setter <T, TId>(document.IdMember);
        }
示例#5
0
 public DeleteWhere(Type documentType, string sql, IWhereFragment @where, TenancyStyle tenancyStyle)
 {
     _where        = @where;
     _tenancyStyle = tenancyStyle;
     DocumentType  = documentType;
     Sql           = sql;
 }
示例#6
0
 public PatchOperation(TransformFunction transform, IQueryableDocument document, IWhereFragment fragment,
                       IDictionary <string, object> patch)
 {
     _transform = transform;
     _document  = document;
     _fragment  = fragment;
     _patch     = patch;
 }
示例#7
0
 public PatchOperation(TransformFunction transform, IQueryableDocument document, IWhereFragment fragment,
     IDictionary<string, object> patch)
 {
     _transform = transform;
     _document = document;
     _fragment = fragment;
     _patch = patch;
 }
示例#8
0
        public IWhereFragment FilterDocuments(QueryModel model, IWhereFragment query)
        {
            var extras = extraFilters(query).ToArray();

            var extraCoumpound = new CompoundWhereFragment("and", extras);

            return(new CompoundWhereFragment("and", query, extraCoumpound));
        }
示例#9
0
 protected override Expression VisitConstant(ConstantExpression node)
 {
     if (node.Type == typeof(bool) && (bool)node.Value)
     {
         _top = new WhereFragment("true");
     }
     return(base.VisitConstant(node));
 }
示例#10
0
        public SubClassDocumentStorage(IDocumentStorage <TRoot, TId> parent, SubClassMapping mapping)
        {
            _parent  = parent;
            _mapping = mapping;

            FromObject = _mapping.Table.QualifiedName;

            _defaultWhere = _mapping.DefaultWhereFragment();
        }
示例#11
0
        public void DeleteWhere(TableName table, IWhereFragment @where)
        {
            if (table == null) throw new ArgumentNullException(nameof(table));
            if (@where == null) throw new ArgumentNullException(nameof(@where));

            var whereClause = @where.ToSql(_command);
            var call = new DeleteWhereCall(table, whereClause);
            _calls.Add(call);
        }
示例#12
0
        public static string AppendWhere(this string sql, IWhereFragment where, NpgsqlCommand command)
        {
            if (where == null)
            {
                return(sql);
            }

            return(sql + " where " + where.ToSql(command));
        }
示例#13
0
        private IEnumerable <IWhereFragment> extraFilters(IWhereFragment query)
        {
            if (DeleteStyle == DeleteStyle.SoftDelete && !query.Contains(DeletedColumn))
            {
                yield return(ExcludeSoftDeletedDocuments());
            }

            if (_storeOptions.Tenancy.Style == TenancyStyle.Conjoined)
            {
                yield return(new TenantWhereFragment());
            }
        }
示例#14
0
        public void DeleteWhere(TableName table, IWhereFragment @where)
        {
            if (table == null)
            {
                throw new ArgumentNullException(nameof(table));
            }
            if (@where == null)
            {
                throw new ArgumentNullException(nameof(@where));
            }

            Current().DeleteWhere(table, @where);
        }
示例#15
0
        public IWhereFragment FilterDocuments(QueryModel model, IWhereFragment query)
        {
            if (Parent.DeleteStyle == DeleteStyle.Remove)
            {
                return(new CompoundWhereFragment("and", DefaultWhereFragment(), query));
            }

            if (query.Contains(DocumentMapping.DeletedColumn))
            {
                return(new CompoundWhereFragment("and", toBasicWhere(), query));
            }

            return(new CompoundWhereFragment("and", DefaultWhereFragment(), query));
        }
示例#16
0
        private IEnumerable <IWhereFragment> extraFilters(IWhereFragment query)
        {
            yield return(toBasicWhere());

            if (DeleteStyle == DeleteStyle.SoftDelete && !query.Contains(DocumentMapping.DeletedColumn))
            {
                yield return(DocumentMapping.ExcludeSoftDeletedDocuments());
            }

            if (Parent.TenancyStyle == TenancyStyle.Conjoined && !query.SpecifiesTenant())
            {
                yield return(new TenantWhereFragment());
            }
        }
示例#17
0
        public static string ToSql(this IWhereFragment fragment)
        {
            if (fragment == null)
            {
                return(null);
            }

            var cmd     = new NpgsqlCommand();
            var builder = new CommandBuilder(cmd);

            fragment.Apply(builder);

            return(builder.ToString().Trim());
        }
示例#18
0
        public static IWhereFragment[] Flatten(this IWhereFragment fragment)
        {
            if (fragment == null)
            {
                return(new IWhereFragment[0]);
            }

            if (fragment is CompoundWhereFragment c)
            {
                return(c.Children.ToArray());
            }

            return(new [] { fragment });
        }
示例#19
0
        public static IWhereFragment Append(this IWhereFragment fragment, IWhereFragment[] others)
        {
            if (!others.Any())
            {
                return(fragment);
            }

            foreach (var other in others)
            {
                fragment = fragment.Append(other);
            }

            return(fragment);
        }
示例#20
0
        public static IWhereFragment Append(this IWhereFragment fragment, IWhereFragment other)
        {
            if (fragment is CompoundWhereFragment)
            {
                fragment.As <CompoundWhereFragment>().Add(other);
                return(fragment);
            }
            else if (other is CompoundWhereFragment)
            {
                other.As <CompoundWhereFragment>().Add(fragment);
                return(other);
            }

            return(new CompoundWhereFragment("and", fragment, other));
        }
示例#21
0
        public void DeleteWhere(TableName table, IWhereFragment @where)
        {
            if (table == null)
            {
                throw new ArgumentNullException(nameof(table));
            }
            if (@where == null)
            {
                throw new ArgumentNullException(nameof(@where));
            }

            var whereClause = @where.ToSql(Command);
            var call        = new DeleteWhereCall(table, whereClause);

            AddCall(call);
        }
示例#22
0
        public static IWhereFragment Append(this IWhereFragment fragment, IWhereFragment[] others)
        {
            if (others?.Any() == false)
            {
                return(fragment);
            }

            if (fragment == null)
            {
                return(Append(others.First(), others.Skip(1).ToArray()));
            }

            foreach (var other in others)
            {
                fragment = fragment.Append(other);
            }

            return(fragment);
        }
示例#23
0
        public DocumentStorage(DocumentMapping document)
        {
            _document = document;
            Fields    = document;
            TableName = document.Table;

            _defaultWhere = document.DefaultWhereFragment();

            _selectClause = $"select {_document.SelectFields().Join(", ")} from {document.Table.QualifiedName} as d";

            _loaderSql =
                $"select {document.SelectFields().Join(", ")} from {document.Table.QualifiedName} as d where id = :id";

            _loadArraySql =
                $"select {document.SelectFields().Join(", ")} from {document.Table.QualifiedName} as d where id = ANY(:ids)";

            if (document.TenancyStyle == TenancyStyle.Conjoined)
            {
                _loaderSql    += $" and {TenantWhereFragment.Filter}";
                _loadArraySql += $" and {TenantWhereFragment.Filter}";
            }
        }
示例#24
0
        private void applyUpdates(CommandBuilder builder, IWhereFragment where)
        {
            var fields = _document.DuplicatedFields;

            if (!fields.Any())
            {
                return;
            }

            builder.Append(";update ");
            builder.Append(_document.Table.QualifiedName);
            builder.Append(" as d set ");

            builder.Append(fields[0].UpdateSqlFragment());
            for (var i = 1; i < fields.Length; i++)
            {
                builder.Append(", ");
                builder.Append(fields[i].UpdateSqlFragment());
            }

            builder.Append(" where ");
            where.Apply(builder);
        }
示例#25
0
        public void DeleteWhere <T>(Expression <Func <T, bool> > expression)
        {
            assertNotDisposed();

            var parser = new MartenExpressionParser(Options.Serializer(), Options);

            var model = MartenQueryParser.Flyweight.GetParsedQuery(Query <T>().Where(expression).As <MartenLinqQueryable <T> >().Expression);

            var storage = StorageFor <T>();

            var whereClauses = model.BodyClauses.OfType <WhereClause>().ToArray();

            // This is duplicated logic
            IWhereFragment where = null;

            switch (whereClauses.Length)
            {
            case 0:
                where = storage.DefaultWhereFragment();
                break;

            case 1:
                where = parser.ParseWhereFragment(storage.Fields, whereClauses.Single().Predicate);
                break;

            default:
                where = new CompoundWhereFragment(parser, storage.Fields, "and", whereClauses);
                break;
            }

            where = storage.FilterDocuments(null, where);

            var deletion = storage.DeleteForWhere(@where);

            _unitOfWork.Add(deletion);
        }
示例#26
0
 public IWhereFragment FilterDocuments(QueryModel model, IWhereFragment query)
 {
     return(query);
 }
示例#27
0
文件: Delete.cs 项目: Xamarui/marten
 public Delete(Type documentType, IWhereFragment @where)
 {
     DocumentType = documentType;
     Where = @where;
 }
示例#28
0
 public IStorageOperation DeletionForWhere(IWhereFragment @where)
 {
     throw new NotImplementedException();
 }
示例#29
0
 public WhereClauseVisitor(MartenExpressionParser parent, IQueryableDocument mapping)
 {
     _parent  = parent;
     _mapping = mapping;
     _register.Push(x => _top = x);
 }
示例#30
0
 public IWhereFragment FilterDocuments(IWhereFragment query)
 {
     return new CompoundWhereFragment("and", DefaultWhereFragment(), query);
 }
示例#31
0
 public IWhereFragment FilterDocuments(IWhereFragment query)
 {
     throw new NotSupportedException();
 }
示例#32
0
 public void DeleteWhere(string tableName, IWhereFragment @where)
 {
     Current().DeleteWhere(tableName, @where);
 }
示例#33
0
 public DeleteWhere(Type documentType, string sql, IWhereFragment @where)
 {
     _where = @where;
     DocumentType = documentType;
     Sql = sql;
 }
示例#34
0
 public void Add(IWhereFragment child)
 {
     _children.Add(child);
 }
示例#35
0
 public abstract IStorageOperation DeleteForWhere(IWhereFragment where);
示例#36
0
        public IWhereFragment FilterDocuments(QueryModel model, IWhereFragment query)
        {
            var extras = extraFilters(query).ToArray();

            return(query.Append(extras));
        }
示例#37
0
 protected override Expression VisitConstant(ConstantExpression node)
 {
     if ((node.Type == typeof(bool)) && (bool) node.Value) _top = new WhereFragment("true");
     return base.VisitConstant(node);
 }
示例#38
0
 public WhereClauseVisitor(MartenExpressionParser parent, IQueryableDocument mapping)
 {
     _parent = parent;
     _mapping = mapping;
     _register.Push(x => _top = x);
 }
示例#39
0
 public IWhereFragment FilterDocuments(QueryModel model, IWhereFragment query)
 {
     return(_document.FilterDocuments(model, query));
 }
示例#40
0
 public void DeleteWhere(string tableName, IWhereFragment @where)
 {
     var whereClause = @where.ToSql(_command);
     var call = new DeleteWhereCall(tableName, whereClause);
     _calls.Add(call);
 }
示例#41
0
 public IWhereFragment FilterDocuments(IWhereFragment query)
 {
     return(new CompoundWhereFragment("and", DefaultWhereFragment(), query));
 }
示例#42
0
 public NotWhereFragment(IWhereFragment inner)
 {
     _inner = inner;
     
 }