Beispiel #1
0
        public BinaryX20(FieldPredicate isSerializableField, PropertyPredicate isSerializableProperty)
        {
            _Logic = new X20Logic(isSerializableField, isSerializableProperty);

            _Serializers = new List <BaseSerializer>()
            {
                PrimitiveSerializer.Instance,
                new V2Serializer(),
                new V3Serializer(),
                new V4Serializer(),
                new BoundsSerializer(),
                new LayerMaskSerializer(),
                new RectSerializer(),
                new ArraySerializer(),
                new DictionarySerializer(),
                new EnumSerializer(),
                new CollectionSerializer(),
                new TypeSerializer(),
                new ReflectiveSerializer(),
            };

            _Ctx               = new SerializationContext(this);
            _Marker            = new ReferenceMarker();
            _CachedSerializers = new Dictionary <Type, BaseSerializer>();

            SetMode(1);
        }
Beispiel #2
0
        public X20Logic(FieldPredicate isSerializableField, PropertyPredicate isSerializableProperty)
        {
            _IsSerializableField = isSerializableField;
            _IsSerializableProperty = isSerializableProperty;

            CachedGetSerializableMembers = new Func<Type, MemberInfo[]>(type =>
            {
                var members = X20Reflection.CachedGetMembers(type);
                var serializableMembers = members.Where(IsSerializableMember).ToArray();
                return serializableMembers;
            }).Memoize();
        }
Beispiel #3
0
        public X20Logic(FieldPredicate isSerializableField, PropertyPredicate isSerializableProperty)
        {
            _IsSerializableField    = isSerializableField;
            _IsSerializableProperty = isSerializableProperty;

            CachedGetSerializableMembers = new Func <Type, MemberInfo[]>(type =>
            {
                var members             = X20Reflection.CachedGetMembers(type);
                var serializableMembers = members.Where(IsSerializableMember).ToArray();
                return(serializableMembers);
            }).Memoize();
        }
        public void GetSql()
        {
            var predicate = new PropertyPredicate <TestEntity, TestEntity>()
            {
                PropertyName  = "Id",
                PropertyName2 = "Name",
                Operator      = Operator.Eq
            };
            var dictionary = new Dictionary <string, object>();
            var sql        = predicate.GetSql(SqlHelper.GetSqlGenerator(), dictionary);

            Assert.Equal("(Id = Name)", sql);
        }
Beispiel #5
0
        /// <summary>
        /// Creates a predicate which represents a standard comparison clause,
        /// of the form [FieldName1] [Operator] [FieldName2].
        /// </summary>
        /// <typeparam name="TModel">The type of the entity for the left operand.</typeparam>
        /// <typeparam name="TModel2">The type of the entity for the right operand.</typeparam>
        /// <typeparam name="TFieldType">The data type of the property.</typeparam>
        /// <param name="left">An expression that returns the [FieldName1] operand.</param>
        /// <param name="op">One of the <see cref="Operator"/> values.</param>
        /// <param name="right">An expression that returns the [FieldName2] operand.</param>
        /// <param name="not"><see langword="true"/> to invert the comparison operator.</param>
        /// <returns>An <see cref="IPredicate"/> instance representing the predicate.</returns>
        public static IPredicate PropertyComparison <TModel, TModel2, TFieldType>(Expression <Func <TModel, TFieldType> > left, Operator op, Expression <Func <TModel2, TFieldType> > right, bool not = false)
            where TModel : class
            where TModel2 : class
        {
            var predicate = new PropertyPredicate <TModel, TModel2>
            {
                PropertyName  = left.GetProperty().Name,
                Operator      = op,
                PropertyName2 = right.GetProperty().Name
            };

            return(predicate);
        }
Beispiel #6
0
        /// <summary>
        /// Creates a predicate which represents a standard comparison clause,
        /// of the form [FieldName1] [Operator] [FieldName2].
        /// </summary>
        /// <typeparam name="TModel">The type of the entity for the left operand.</typeparam>
        /// <typeparam name="TModel2">The type of the entity for the right operand.</typeparam>
        /// <typeparam name="TFieldType">The data type of the property.</typeparam>
        /// <param name="left">The [FieldName1] operand.</param>
        /// <param name="op">One of the <see cref="Operator"/> values.</param>
        /// <param name="right">The [FieldName2] operand.</param>
        /// <param name="not"><see langword="true"/> to invert the comparison operator.</param>
        /// <returns>An <see cref="IPredicate"/> instance representing the predicate.</returns>
        public static IPredicate PropertyComparison <TModel, TModel2, TFieldType>(string left, Operator op, string right, bool not = false)
            where TModel : class
            where TModel2 : class
        {
            var predicate = new PropertyPredicate <TModel, TModel2>
            {
                Not           = not,
                PropertyName  = left,
                Operator      = op,
                PropertyName2 = right
            };

            return(predicate);
        }
Beispiel #7
0
            public void LeWithNot_ReturnsProperSql()
            {
                var pred = new PropertyPredicate <PredicateTestEntity, PredicateTestEntity2>
                {
                    PropertyName  = "Id",
                    PropertyName2 = "Key",
                    Not           = true,
                    Operator      = Operator.Le
                };

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                string result = pred.GetSql(parameters);

                Assert.AreEqual("([PredicateTestEntity].[Id] > [PredicateTestEntity2].[Key])", result);
                Assert.AreEqual(0, parameters.Count);
            }
Beispiel #8
0
        public override ISqlFragment Visit(PropertyPredicate e)
        {
            Check.NotNull(e, "e");
            SqlBuilder result;
            var        instanceSql = e.Instance.Accept(this);

            var VariableReferenceExpression = e.Instance as VariableReferencePredicate;

            if (VariableReferenceExpression != null)
            {
                isVarRefSingle = false;
            }

            var joinSymbol = instanceSql as JoinSymbol;

            if (joinSymbol != null)
            {
                if (joinSymbol.IsNestedJoin)
                {
                    return(new SymbolPair(joinSymbol, joinSymbol.NameToExtent[e.Property.Name]));
                }
                else
                {
                    return(joinSymbol.NameToExtent[e.Property.Name]);
                }
            }

            var symbolPair = instanceSql as SymbolPair;

            if (symbolPair != null)
            {
                var columnJoinSymbol = symbolPair.Column as JoinSymbol;
                if (columnJoinSymbol != null)
                {
                    symbolPair.Column = columnJoinSymbol.NameToExtent[e.Property.Name];
                    return(symbolPair);
                }
                else
                {
                    if (symbolPair.Column.Columns.ContainsKey(e.Property.Name))
                    {
                        result = new SqlBuilder();
                        result.Append(symbolPair.Source);
                        result.Append(".");
                        var columnSymbol = symbolPair.Column.Columns[e.Property.Name];
                        optionalColumnUsageManager.MarkAsUsed(columnSymbol);
                        result.Append(columnSymbol);
                        return(result);
                    }
                }
            }
            result = new SqlBuilder();
            result.Append(instanceSql);
            result.Append(".");

            var    symbol = instanceSql as Symbol;
            Symbol colSymbol;

            if (symbol != null && symbol.OutputColumns.TryGetValue(e.Property.Name, out colSymbol))
            {
                optionalColumnUsageManager.MarkAsUsed(colSymbol);
                if (symbol.OutputColumnsRenamed)
                {
                    result.Append(colSymbol);
                }
                else
                {
                    result.Append(QuoteIdentifier(e.Property.Name));
                }
            }
            else
            {
                result.Append(QuoteIdentifier(e.Property.Name));
            }
            return(result);
        }
            public void Lt_ReturnsProperSql()
            {
                var pred = new PropertyPredicate<PredicateTestEntity, PredicateTestEntity2>
                               {
                                   PropertyName = "Id",
                                   PropertyName2 = "Key",
                                   Not = false,
                                   Operator = Operator.Lt
                               };

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                string result = pred.GetSql(parameters);
                Assert.AreEqual("([PredicateTestEntity].[Id] < [PredicateTestEntity2].[Key])", result);
                Assert.AreEqual(0, parameters.Count);
            }