Example #1
0
 public UpdateQueryFluentBuilder1 <TModel> AddToList <TValue>(Expression <Func <TModel, IList <TValue> > > field, TValue value, UpdateAddToListFlags flags = UpdateAddToListFlags.None)
 {
     _updateStatementsBuilder.AddToList(field, value, flags);
     return(this);
 }
Example #2
0
        public UpdateStatementsBuilder <TModel> AddToList <TValue>(Expression <Func <TModel, IList <TValue> > > field, TValue value, UpdateAddToListFlags flags = UpdateAddToListFlags.None)
        {
            var pi = NodeVisitor.VisitPath(field, null);

            if (pi.Expression.Type is KDPgValueTypeArray)
            {
                if ((flags & UpdateAddToListFlags.Distinct) == UpdateAddToListFlags.None)
                {
                    AddUpdate(pi.Column, src => ExpressionBuilders.ArrayAddItem(src, value));
                }
                else
                {
                    AddUpdate(pi.Column, src => ExpressionBuilders.KDPgArrayDistinct(ExpressionBuilders.ArrayAddItem(src, value)));
                }
            }
            else if (pi.Expression.Type is KDPgValueTypeJson)
            {
                if (flags != 0)
                {
                    throw new Exception("flags not allowed on json array");
                }

                AddUpdate(pi.Column, src => ExpressionBuilders.KDPgJsonbAdd(src, pi.JsonPath, value));
            }
            else
            {
                throw new Exception("unable to add to non-list");
            }

            return(this);
        }