public virtual void TestCorrectHandlerVersion()
        {
            OpenTypeHandler openTypeHandler = new OpenTypeHandler(Container());

            AssertCorrectedHandlerVersion(typeof(OpenTypeHandler0), openTypeHandler, -1);
            AssertCorrectedHandlerVersion(typeof(OpenTypeHandler0), openTypeHandler, 0);
            AssertCorrectedHandlerVersion(typeof(OpenTypeHandler2), openTypeHandler, 1);
            AssertCorrectedHandlerVersion(typeof(OpenTypeHandler2), openTypeHandler, 2);
            AssertCorrectedHandlerVersion(typeof(OpenTypeHandler), openTypeHandler, HandlerRegistry
                                          .HandlerVersion);
            AssertCorrectedHandlerVersion(typeof(OpenTypeHandler), openTypeHandler, HandlerRegistry
                                          .HandlerVersion + 1);
            StandardReferenceTypeHandler stdReferenceHandler = new StandardReferenceTypeHandler
                                                                   (ItemClassMetadata());

            AssertCorrectedHandlerVersion(typeof(StandardReferenceTypeHandler0), stdReferenceHandler
                                          , 0);
            AssertCorrectedHandlerVersion(typeof(StandardReferenceTypeHandler), stdReferenceHandler
                                          , 2);
            PrimitiveTypeMetadata primitiveMetadata = new PrimitiveTypeMetadata(Container(),
                                                                                openTypeHandler, 0, null);

            AssertPrimitiveHandlerDelegate(typeof(OpenTypeHandler0), primitiveMetadata, 0);
            AssertPrimitiveHandlerDelegate(typeof(OpenTypeHandler2), primitiveMetadata, 1);
            AssertPrimitiveHandlerDelegate(typeof(OpenTypeHandler2), primitiveMetadata, 2);
            AssertPrimitiveHandlerDelegate(typeof(OpenTypeHandler), primitiveMetadata, HandlerRegistry
                                           .HandlerVersion);
            ArrayHandler arrayHandler = new ArrayHandler(openTypeHandler, false);

            AssertCorrectedHandlerVersion(typeof(ArrayHandler0), arrayHandler, 0);
            AssertCorrectedHandlerVersion(typeof(ArrayHandler1), arrayHandler, 1);
            AssertCorrectedHandlerVersion(typeof(ArrayHandler3), arrayHandler, 2);
            AssertCorrectedHandlerVersion(typeof(ArrayHandler3), arrayHandler, 3);
            AssertCorrectedHandlerVersion(typeof(ArrayHandler), arrayHandler, HandlerRegistry
                                          .HandlerVersion);
            ArrayHandler multidimensionalArrayHandler = new MultidimensionalArrayHandler(openTypeHandler
                                                                                         , false);

            AssertCorrectedHandlerVersion(typeof(MultidimensionalArrayHandler0), multidimensionalArrayHandler
                                          , 0);
            AssertCorrectedHandlerVersion(typeof(MultidimensionalArrayHandler3), multidimensionalArrayHandler
                                          , 1);
            AssertCorrectedHandlerVersion(typeof(MultidimensionalArrayHandler3), multidimensionalArrayHandler
                                          , 2);
            AssertCorrectedHandlerVersion(typeof(MultidimensionalArrayHandler3), multidimensionalArrayHandler
                                          , 3);
            AssertCorrectedHandlerVersion(typeof(MultidimensionalArrayHandler), multidimensionalArrayHandler
                                          , HandlerRegistry.HandlerVersion);
        }
예제 #2
0
        internal virtual IPreparedComparison PrepareComparison(ObjectContainerBase container
                                                               , object constraint)
        {
            IContext context = container.Transaction.Context();

            if (_fieldMetadata != null)
            {
                return(_fieldMetadata.PrepareComparison(context, constraint));
            }
            if (_classMetadata != null)
            {
                return(_classMetadata.PrepareComparison(context, constraint));
            }
            IReflector reflector = container.Reflector();

            Db4objects.Db4o.Internal.ClassMetadata classMetadata = null;
            if (_bytes != null)
            {
                classMetadata = container.ProduceClassMetadata(reflector.ForObject(constraint));
            }
            else
            {
                if (_member != null)
                {
                    classMetadata = container.ClassMetadataForReflectClass(reflector.ForObject(_member
                                                                                               ));
                }
            }
            if (classMetadata != null)
            {
                if (_member != null && _member.GetType().IsArray)
                {
                    ITypeHandler4 arrayElementTypehandler = classMetadata.TypeHandler();
                    if (reflector.Array().IsNDimensional(MemberClass()))
                    {
                        MultidimensionalArrayHandler mah = new MultidimensionalArrayHandler(arrayElementTypehandler
                                                                                            , false);
                        return(mah.PrepareComparison(context, _member));
                    }
                    ArrayHandler ya = new ArrayHandler(arrayElementTypehandler, false);
                    return(ya.PrepareComparison(context, _member));
                }
                return(classMetadata.PrepareComparison(context, constraint));
            }
            return(null);
        }
예제 #3
0
        private void RegisterCompositeHandlerVersions()
        {
            RegisterHandlerVersion(new StandardReferenceTypeHandler(), 0, new StandardReferenceTypeHandler0
                                       ());
            ArrayHandler arrayHandler = new ArrayHandler();

            RegisterHandlerVersion(arrayHandler, 0, new ArrayHandler0());
            RegisterHandlerVersion(arrayHandler, 1, new ArrayHandler1());
            RegisterHandlerVersion(arrayHandler, 3, new ArrayHandler3());
            RegisterHandlerVersion(arrayHandler, 5, new ArrayHandler5());
            MultidimensionalArrayHandler multidimensionalArrayHandler = new MultidimensionalArrayHandler
                                                                            ();

            RegisterHandlerVersion(multidimensionalArrayHandler, 0, new MultidimensionalArrayHandler0
                                       ());
            RegisterHandlerVersion(multidimensionalArrayHandler, 3, new MultidimensionalArrayHandler3
                                       ());
        }