/// <summary>Ctor. </summary>
 /// <param name="descriptor">property descriptor</param>
 /// <param name="getter">getter for values</param>
 /// <param name="fragmentArray">true if array fragment</param>
 /// <param name="optionalFragmentTypeName">null if not a fragment, else fragment type name</param>
 public ExplicitPropertyDescriptor(EventPropertyDescriptor descriptor, EventPropertyGetter getter, bool fragmentArray, String optionalFragmentTypeName)
 {
     Descriptor               = descriptor;
     Getter                   = getter;
     IsFragmentArray          = fragmentArray;
     OptionalFragmentTypeName = optionalFragmentTypeName;
 }
Esempio n. 2
0
        /// <summary>
        /// Sets explicit properties using a map of event property name and getter instance
        /// for each property.
        /// </summary>
        /// <param name="explicitProperties">property descriptors for explicit properties</param>
        protected void Initialize(ICollection <ExplicitPropertyDescriptor> explicitProperties)
        {
            PropertyGetters        = new Dictionary <String, EventPropertyGetterSPI>();
            _propertyDescriptors   = new EventPropertyDescriptor[explicitProperties.Count];
            _propertyNames         = new String[explicitProperties.Count];
            PropertyDescriptorMap  = new Dictionary <String, EventPropertyDescriptor>();
            _propertyFragmentTypes = new Dictionary <String, Pair <ExplicitPropertyDescriptor, FragmentEventType> >();

            int count = 0;

            foreach (ExplicitPropertyDescriptor propertyDescriptor in explicitProperties)
            {
                _propertyNames[count] = propertyDescriptor.Descriptor.PropertyName;
                PropertyGetters.Put(propertyDescriptor.Descriptor.PropertyName, propertyDescriptor.Getter);
                EventPropertyDescriptor desc = propertyDescriptor.Descriptor;
                _propertyDescriptors[count] = desc;
                PropertyDescriptorMap.Put(desc.PropertyName, desc);

                if (propertyDescriptor.OptionalFragmentTypeName != null)
                {
                    _propertyFragmentTypes.Put(propertyDescriptor.Descriptor.PropertyName,
                                               new Pair <ExplicitPropertyDescriptor, FragmentEventType>(
                                                   propertyDescriptor, null));
                }

                if (!desc.IsFragment)
                {
                    _propertyFragmentTypes.Put(propertyDescriptor.Descriptor.PropertyName, null);
                }

                count++;
            }
        }
Esempio n. 3
0
        private void RunAssertion(EPStatement stmt)
        {
            FragmentEventType fragmentType = stmt.EventType.GetFragmentType("subrow");

            Assert.IsFalse(fragmentType.IsIndexed);
            Assert.IsFalse(fragmentType.IsNative);
            Object[][] rows = new Object[][] {
                new Object[] { "v1", typeof(string) },
                new Object[] { "v2", typeof(int) },
            };
            for (int i = 0; i < rows.Length; i++)
            {
                String message = "Failed assertion for " + rows[i][0];
                EventPropertyDescriptor prop = fragmentType.FragmentType.PropertyDescriptors[i];
                Assert.AreEqual(rows[i][0], prop.PropertyName, message);
                Assert.AreEqual(rows[i][1], prop.PropertyType, message);
            }

            String[] fields = "subrow.v1,subrow.v2".Split(',');

            _epService.EPRuntime.SendEvent(new SupportBean_S0(1));
            EventBean theEvent = _listener.AssertOneGetNewAndReset();

            EPAssertionUtil.AssertProps(theEvent, fields, new Object[] { null, null });

            _epService.EPRuntime.SendEvent(new SupportBean("E1", 10));
            _epService.EPRuntime.SendEvent(new SupportBean_S0(2));
            EPAssertionUtil.AssertProps(_listener.AssertOneGetNewAndReset(), fields, new Object[] { "E1", 10 });

            _epService.EPRuntime.SendEvent(new SupportBean("E2", 20));
            _epService.EPRuntime.SendEvent(new SupportBean_S0(3));
            EPAssertionUtil.AssertProps(_listener.AssertOneGetNewAndReset(), fields, new Object[] { "E2", 20 });
        }
Esempio n. 4
0
        private void InitializeWriters()
        {
            var writables = PropertyHelper.GetWritableProperties(Stem.Clazz);
            var desc = new EventPropertyDescriptor[writables.Count];
            IDictionary<string, Pair<EventPropertyDescriptor, BeanEventPropertyWriter>> writers =
                new Dictionary<string, Pair<EventPropertyDescriptor, BeanEventPropertyWriter>>();

            var count = 0;
            foreach (var writable in writables) {
                var propertyDesc = new EventPropertyDescriptor(
                    writable.PropertyName,
                    writable.PropertyType,
                    null,
                    false,
                    false,
                    false,
                    false,
                    false);
                desc[count++] = propertyDesc;
                writers.Put(
                    writable.PropertyName,
                    new Pair<EventPropertyDescriptor, BeanEventPropertyWriter>(
                        propertyDesc,
                        new BeanEventPropertyWriter(
                            Stem.Clazz,
                            writable.WriteMember)));
            }

            _writerMap = writers;
            _writeablePropertyDescriptors = desc;
        }
Esempio n. 5
0
        /// <summary>
        /// Adds additional properties that do not yet exist on the given type. Ignores properties already present. Allows nesting.
        /// </summary>
        /// <param name="typeMap">properties to add</param>
        /// <param name="eventAdapterService">for resolving further map event types that are property types</param>
        public void AddAdditionalProperties(IDictionary <String, Object> typeMap, EventAdapterService eventAdapterService)
        {
            // merge type graphs
            NestableTypes = GraphUtil.MergeNestableMap(NestableTypes, typeMap);

            PostUpdateNestableTypes();

            // construct getters and types for each property (new or old)
            var propertySet = EventTypeUtility.GetNestableProperties(
                typeMap, eventAdapterService, GetterFactory, _optionalSuperTypes);

            // add each new descriptor
            var newPropertyDescriptors = new List <EventPropertyDescriptor>();

            foreach (var propertyDesc in propertySet.PropertyDescriptors)
            {
                if (_propertyItems.ContainsKey(propertyDesc.PropertyName)) // not a new property
                {
                    continue;
                }
                newPropertyDescriptors.Add(propertyDesc);
            }

            // add each that is not already present
            var newPropertyNames = new List <String>();

            foreach (var propertyName in propertySet.PropertyNameList)
            {
                if (_propertyItems.ContainsKey(propertyName)) // not a new property
                {
                    continue;
                }
                newPropertyNames.Add(propertyName);
                _propertyItems.Put(propertyName, propertySet.PropertyItems.Get(propertyName));
            }

            // expand property name array
            var allPropertyNames = new String[_propertyNames.Length + newPropertyNames.Count];

            Array.Copy(_propertyNames, 0, allPropertyNames, 0, _propertyNames.Length);
            var count = _propertyNames.Length;

            foreach (var newProperty in newPropertyNames)
            {
                allPropertyNames[count++] = newProperty;
            }
            _propertyNames = allPropertyNames;

            // expand descriptor array
            var allPropertyDescriptors =
                new EventPropertyDescriptor[_propertyDescriptors.Length + newPropertyNames.Count];

            Array.Copy(_propertyDescriptors, 0, allPropertyDescriptors, 0, _propertyDescriptors.Length);
            count = _propertyDescriptors.Length;
            foreach (var desc in newPropertyDescriptors)
            {
                allPropertyDescriptors[count++] = desc;
            }
            _propertyDescriptors = allPropertyDescriptors;
        }
Esempio n. 6
0
        ///     Converts a set of events to a set of properties.
        PropertyDescriptorCollection IEventBindingService.GetEventProperties(EventDescriptorCollection events)
        {
            if (events == null)
            {
                throw new ArgumentNullException("events");
            }

            PropertyDescriptor[] props = new PropertyDescriptor[events.Count];

            // We cache the property descriptors here for speed.  Create those for
            // events that we don't have yet.
            //
            if (_eventProperties == null)
            {
                _eventProperties = new Hashtable();
            }

            for (int i = 0; i < events.Count; i++)
            {
                object eventHashCode = GetEventDescriptorHashCode(events[i]);

                props[i] = (PropertyDescriptor)_eventProperties[eventHashCode];

                if (props[i] == null)
                {
                    props[i] = new EventPropertyDescriptor(events[i], this);
                    _eventProperties[eventHashCode] = props[i];
                }
            }

            return(new PropertyDescriptorCollection(props));
        }
        /// <summary>
        ///     Sets explicit properties using a map of event property name and getter instance for each property.
        /// </summary>
        /// <param name="explicitProperties">property descriptors for explicit properties</param>
        protected void Initialize(IList<ExplicitPropertyDescriptor> explicitProperties)
        {
            propertyGetters = new Dictionary<string, EventPropertyGetterSPI>();
            PropertyDescriptors = new EventPropertyDescriptor[explicitProperties.Count];
            PropertyNames = new string[explicitProperties.Count];
            propertyDescriptorMap = new Dictionary<string, EventPropertyDescriptor>();
            propertyFragmentTypes = new Dictionary<string, Pair<ExplicitPropertyDescriptor, FragmentEventType>>();

            var count = 0;
            foreach (var @explicit in explicitProperties) {
                PropertyNames[count] = @explicit.Descriptor.PropertyName;
                propertyGetters.Put(@explicit.Descriptor.PropertyName, @explicit.Getter);
                
                var desc = @explicit.Descriptor;
                PropertyDescriptors[count] = desc;
                propertyDescriptorMap.Put(desc.PropertyName, desc);

                if (@explicit.OptionalFragmentTypeName != null) {
                    propertyFragmentTypes.Put(
                        @explicit.Descriptor.PropertyName,
                        new Pair<ExplicitPropertyDescriptor, FragmentEventType>(@explicit, null));
                }

                if (!desc.IsFragment) {
                    propertyFragmentTypes.Put(@explicit.Descriptor.PropertyName, null);
                }

                count++;
            }
        }
        /// <summary>
        /// Converts the property descriptor to an xelement.
        /// </summary>
        /// <param name="propertyDescriptor">The property descriptor.</param>
        /// <returns></returns>
        public static XElement ToXElement(this EventPropertyDescriptor propertyDescriptor)
        {
            var propertyType          = propertyDescriptor.PropertyType;
            var propertyComponentType = propertyDescriptor.PropertyComponentType;

            var element = new XElement(
                "propertyDescriptor",
                new XAttribute("name", propertyDescriptor.PropertyName),
                new XAttribute("isFragment", propertyDescriptor.IsFragment),
                new XAttribute("isIndexed", propertyDescriptor.IsIndexed),
                new XAttribute("isMapped", propertyDescriptor.IsMapped),
                new XAttribute("requiresIndex", propertyDescriptor.RequiresIndex),
                new XAttribute("requiresMapKey", propertyDescriptor.RequiresMapKey)
                );

            if (propertyType != null)
            {
                element.Add(ToXElement(propertyType, "propertyType"));
            }

            if (propertyComponentType != null)
            {
                element.Add(ToXElement(propertyComponentType, "propertyComponentType"));
            }

            return(element);
        }
Esempio n. 9
0
        /// <summary>
        /// Ctor.
        /// </summary>
        /// <param name="propertyDesc">describes each properties type</param>
        /// <param name="eventAdapterService">for nested property handling</param>
        /// <param name="metadata">- event type metadata</param>
        /// <param name="eventTypeId">type id</param>
        public RevisionEventType(
            EventTypeMetadata metadata,
            int eventTypeId,
            IDictionary <string, RevisionPropertyTypeDesc> propertyDesc,
            EventAdapterService eventAdapterService)
        {
            _metadata            = metadata;
            _eventTypeId         = eventTypeId;
            _propertyDesc        = propertyDesc;
            _propertyNames       = propertyDesc.Keys.ToArray();
            _eventAdapterService = eventAdapterService;

            _propertyDescriptors   = new EventPropertyDescriptor[propertyDesc.Count];
            _propertyDescriptorMap = new Dictionary <string, EventPropertyDescriptor>();
            var count = 0;

            foreach (var desc in propertyDesc)
            {
                var type       = (Type)desc.Value.PropertyType;
                var descriptor = new EventPropertyDescriptor(
                    desc.Key, type, null, false, false, false, false, type.IsFragmentableType());
                _propertyDescriptors[count] = descriptor;
                _propertyDescriptorMap.Put(desc.Key, descriptor);
                count++;
            }
        }
        private void RunAssertionTypeAndColNameAndEquivalency(EPServiceProvider epService)
        {
            epService.EPAdministrator.Configuration.AddImport(typeof(SupportStaticMethodLib).FullName);

            string epl = "select " +
                         "first(sa.DoublePrimitive + sa.IntPrimitive), " +
                         "first(sa.IntPrimitive), " +
                         "window(sa.*), " +
                         "last(*) from SupportBean#length(2) as sa";
            EPStatement stmt     = epService.EPAdministrator.CreateEPL(epl);
            var         listener = new SupportUpdateListener();

            stmt.Events += listener.Update;

            var rows = new[]
            {
                new object[] { "first(sa.DoublePrimitive+sa.IntPrimitive)", typeof(double?) },
                new object[] { "first(sa.IntPrimitive)", typeof(int) },
                new object[] { "window(sa.*)", typeof(SupportBean[]) },
                new object[] { "last(*)", typeof(SupportBean) },
            };

            for (int i = 0; i < rows.Length; i++)
            {
                EventPropertyDescriptor prop = stmt.EventType.PropertyDescriptors[i];
                Assert.AreEqual(rows[i][0], prop.PropertyName);
                Assert.AreEqual(rows[i][1], prop.PropertyType);
            }

            stmt.Dispose();
            epl = "select " +
                  "first(sa.DoublePrimitive + sa.IntPrimitive) as f1, " +
                  "first(sa.IntPrimitive) as f2, " +
                  "window(sa.*) as w1, " +
                  "last(*) as l1 " +
                  "from SupportBean#length(2) as sa";
            stmt         = epService.EPAdministrator.CreateEPL(epl);
            stmt.Events += listener.Update;

            TryAssertionType(epService, listener, false);

            stmt.Dispose();

            epl = "select " +
                  "first(sa.DoublePrimitive + sa.IntPrimitive) as f1, " +
                  "first(sa.IntPrimitive) as f2, " +
                  "window(sa.*) as w1, " +
                  "last(*) as l1 " +
                  "from SupportBean#length(2) as sa " +
                  "having SupportStaticMethodLib.AlwaysTrue({first(sa.DoublePrimitive + sa.IntPrimitive), " +
                  "first(sa.IntPrimitive), window(sa.*), last(*)})";
            stmt         = epService.EPAdministrator.CreateEPL(epl);
            stmt.Events += listener.Update;

            TryAssertionType(epService, listener, true);

            stmt.Dispose();
        }
Esempio n. 11
0
 public EventPropertyGetterIndexed GetGetterIndexed(string indexedPropertyName)
 {
     EventPropertyDescriptor desc = _propertyDescriptorMap.Get(indexedPropertyName);
     if (desc == null || !desc.IsIndexed)
     {
         return null;
     }
     var indexedProperty = new IndexedProperty(indexedPropertyName);
     return (EventPropertyGetterIndexed) indexedProperty.GetGetter(this, _eventAdapterService);
 }
Esempio n. 12
0
 public EventPropertyGetterMapped GetGetterMapped(string mappedPropertyName)
 {
     EventPropertyDescriptor desc = _propertyDescriptorMap.Get(mappedPropertyName);
     if (desc == null || !desc.IsMapped)
     {
         return null;
     }
     var mappedProperty = new MappedProperty(mappedPropertyName);
     return (EventPropertyGetterMapped) mappedProperty.GetGetter(this, _eventAdapterService);
 }
Esempio n. 13
0
        public static object ExtractFragmentTypeIsIndexed(EventPropertyDescriptor desc, EventType eventType)
        {
            FragmentEventType fragType = eventType.GetFragmentType(desc.PropertyName);

            if (fragType == null)
            {
                return(null);
            }
            return(fragType.IsIndexed);
        }
Esempio n. 14
0
        public Type GetPropertyType(String propertyExpression)
        {
            EventPropertyDescriptor desc = PropertyDescriptorMap.Get(propertyExpression);

            if (desc != null)
            {
                return(desc.PropertyType);
            }

            return(DoResolvePropertyType(propertyExpression));
        }
Esempio n. 15
0
 public PropertySetDescriptorItem(
     EventPropertyDescriptor propertyDescriptor,
     Type simplePropertyType,
     EventPropertyGetter propertyGetter,
     FragmentEventType fragmentEventType)
 {
     PropertyDescriptor = propertyDescriptor;
     SimplePropertyType = simplePropertyType;
     PropertyGetter     = propertyGetter;
     FragmentEventType  = fragmentEventType;
 }
Esempio n. 16
0
        private void AssertFragment(string prop, EventType eventType, string fragmentTypeName, bool indexed)
        {
            EventPropertyDescriptor desc = eventType.GetPropertyDescriptor(prop);

            Assert.AreEqual(true, desc.IsFragment);
            FragmentEventType fragment = eventType.GetFragmentType(prop);

            Assert.AreEqual(fragmentTypeName, fragment.FragmentType.Name);
            Assert.AreEqual(false, fragment.IsNative);
            Assert.AreEqual(indexed, fragment.IsIndexed);
        }
Esempio n. 17
0
        public void TestTypeAndColNameAndEquivalency()
        {
            _epService.EPAdministrator.Configuration.AddImport <SupportStaticMethodLib>();

            string epl = "select " +
                         "first(sa.DoublePrimitive + sa.IntPrimitive), " +
                         "first(sa.IntPrimitive), " +
                         "window(sa.*), " +
                         "last(*) from SupportBean.win:length(2) as sa";
            EPStatement stmt = _epService.EPAdministrator.CreateEPL(epl);

            stmt.AddListener(_listener);

            object[][] rows = new object[][] {
                new object[] { "first(sa.DoublePrimitive+sa.IntPrimitive)", typeof(double?) },
                new object[] { "first(sa.IntPrimitive)", typeof(int?) },
                new object[] { "window(sa.*)", typeof(SupportBean[]) },
                new object[] { "last(*)", typeof(SupportBean) },
            };
            for (int i = 0; i < rows.Length; i++)
            {
                EventPropertyDescriptor prop = stmt.EventType.PropertyDescriptors[i];
                Assert.AreEqual(rows[i][0], prop.PropertyName);
                Assert.AreEqual(rows[i][1], prop.PropertyType);
            }

            stmt.Dispose();
            epl = "select " +
                  "first(sa.DoublePrimitive + sa.IntPrimitive) as f1, " +
                  "first(sa.IntPrimitive) as f2, " +
                  "window(sa.*) as w1, " +
                  "last(*) as l1 " +
                  "from SupportBean.win:length(2) as sa";
            stmt = _epService.EPAdministrator.CreateEPL(epl);
            stmt.AddListener(_listener);

            RunAssertionType(false);

            stmt.Dispose();

            epl = "select " +
                  "first(sa.DoublePrimitive + sa.IntPrimitive) as f1, " +
                  "first(sa.IntPrimitive) as f2, " +
                  "window(sa.*) as w1, " +
                  "last(*) as l1 " +
                  "from SupportBean.win:length(2) as sa " +
                  "having SupportStaticMethodLib.AlwaysTrue({first(sa.DoublePrimitive + sa.IntPrimitive), " +
                  "first(sa.IntPrimitive), window(sa.*), last(*)})";
            stmt = _epService.EPAdministrator.CreateEPL(epl);
            stmt.AddListener(_listener);

            RunAssertionType(true);
        }
Esempio n. 18
0
        private void Init()
        {
            _propertyNames = new string[_avroSchema.GetFields().Count];
            _propertyDescriptors = new EventPropertyDescriptor[_propertyNames.Length];
            int fieldNum = 0;

            foreach (Field field in _avroSchema.GetFields())
            {
                _propertyNames[fieldNum] = field.Name;

                Type propertyType = AvroTypeUtil.PropertyType(field.Schema);
                Type componentType = null;
                bool indexed = false;
                bool mapped = false;
                FragmentEventType fragmentEventType = null;

                if (field.Schema.Tag == global::Avro.Schema.Type.Array)
                {
                    componentType = AvroTypeUtil.PropertyType(field.Schema.GetElementType());
                    indexed = true;
                    if (field.Schema.GetElementType().Tag == global::Avro.Schema.Type.Record)
                    {
                        fragmentEventType = AvroFragmentTypeUtil.GetFragmentEventTypeForField(field.Schema, _eventAdapterService);
                    }
                }
                else if (field.Schema.Tag == global::Avro.Schema.Type.Map)
                {
                    mapped = true;
                    componentType = AvroTypeUtil.PropertyType(field.Schema.GetValueType());
                }
                else if (field.Schema.Tag == global::Avro.Schema.Type.String)
                {
                    indexed = true;
                    componentType = typeof(char);
                    fragmentEventType = null;
                }
                else
                {
                    fragmentEventType = AvroFragmentTypeUtil.GetFragmentEventTypeForField(field.Schema, _eventAdapterService);
                }

                var getter = new AvroEventBeanGetterSimple(
                    field, fragmentEventType == null ? null : fragmentEventType.FragmentType, _eventAdapterService);

                var descriptor = new EventPropertyDescriptor(
                    field.Name, propertyType, componentType, false, false, indexed, mapped, fragmentEventType != null);
                var item = new PropertySetDescriptorItem(descriptor, propertyType, getter, fragmentEventType);
                _propertyItems.Put(field.Name, item);
                _propertyDescriptors[fieldNum] = descriptor;

                fieldNum++;
            }
        }
        public void TestDuckTyping()
        {
            Configuration config = SupportConfigFactory.GetConfiguration();

            config.EngineDefaults.ExpressionConfig.IsDuckTyping = true;

            _epService = EPServiceProviderManager.GetDefaultProvider(config);
            _epService.Initialize();
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.StartTest(_epService, GetType(), GetType().FullName);
            }

            _listener = new SupportUpdateListener();

            _epService.EPAdministrator.Configuration.AddEventType <SupportBeanDuckType>("SupportBeanDuckType");

            const string epl = "select " +
                               "(dt).MakeString() as strval, " +
                               "(dt).MakeInteger() as intval, " +
                               "(dt).MakeCommon().MakeString() as commonstrval, " +
                               "(dt).MakeCommon().MakeInteger() as commonintval, " +
                               "(dt).ReturnDouble() as commondoubleval " +
                               "from SupportBeanDuckType dt ";
            EPStatement stmt = _epService.EPAdministrator.CreateEPL(epl);

            stmt.Events += _listener.Update;

            var rows = new Object[][] {
                new Object[] { "strval", typeof(Object) },
                new Object[] { "intval", typeof(Object) },
                new Object[] { "commonstrval", typeof(Object) },
                new Object[] { "commonintval", typeof(Object) },
                new Object[] { "commondoubleval", typeof(double) }     // this one is strongly typed
            };

            for (int i = 0; i < rows.Length; i++)
            {
                EventPropertyDescriptor prop = stmt.EventType.PropertyDescriptors[i];
                Assert.AreEqual(rows[i][0], prop.PropertyName);
                Assert.AreEqual(rows[i][1], prop.PropertyType);
            }

            String[] fields = "strval,intval,commonstrval,commonintval,commondoubleval".Split(',');

            _epService.EPRuntime.SendEvent(new SupportBeanDuckTypeOne("x"));
            EPAssertionUtil.AssertProps(_listener.AssertOneGetNewAndReset(), fields, new Object[] { "x", null, null, -1, 12.9876d });

            _epService.EPRuntime.SendEvent(new SupportBeanDuckTypeTwo(-10));
            EPAssertionUtil.AssertProps(_listener.AssertOneGetNewAndReset(), fields, new Object[] { null, -10, "mytext", null, 11.1234d });
        }
Esempio n. 20
0
        private void RunAssertionMultirowSingleColumn(EPServiceProvider epService)
        {
            // test named window as well as stream
            epService.EPAdministrator.CreateEPL("create window SupportWindow#length(3) as SupportBean");
            epService.EPAdministrator.CreateEPL("insert into SupportWindow select * from SupportBean");

            string      stmtText = "select p00, (select window(IntPrimitive) from SupportBean#keepall sb) as val from S0 as s0";
            EPStatement stmt     = epService.EPAdministrator.CreateEPL(stmtText);
            var         listener = new SupportUpdateListener();

            stmt.Events += listener.Update;
            string[] fields = "p00,val".Split(',');

            var rows = new object[][] {
                new object[] { "p00", typeof(string) },
                new object[] { "val", typeof(int[]) }
            };

            for (int i = 0; i < rows.Length; i++)
            {
                string message = "Failed assertion for " + rows[i][0];
                EventPropertyDescriptor prop = stmt.EventType.PropertyDescriptors[i];
                Assert.AreEqual(rows[i][0], prop.PropertyName, message);
                Assert.AreEqual(rows[i][1], prop.PropertyType, message);
            }

            epService.EPRuntime.SendEvent(new SupportBean("T1", 5));
            epService.EPRuntime.SendEvent(new SupportBean("T2", 10));
            epService.EPRuntime.SendEvent(new SupportBean("T3", 15));
            epService.EPRuntime.SendEvent(new SupportBean("T1", 6));
            epService.EPRuntime.SendEvent(new SupportBean_S0(0));
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { null, new int[] { 5, 10, 15, 6 } });

            // test named window and late start
            stmt.Dispose();

            stmtText     = "select p00, (select window(IntPrimitive) from SupportWindow) as val from S0 as s0";
            stmt         = epService.EPAdministrator.CreateEPL(stmtText);
            stmt.Events += listener.Update;

            epService.EPRuntime.SendEvent(new SupportBean_S0(0));
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { null, new int[] { 10, 15, 6 } });   // length window 3

            epService.EPRuntime.SendEvent(new SupportBean("T1", 5));
            epService.EPRuntime.SendEvent(new SupportBean_S0(0));
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { null, new int[] { 15, 6, 5 } });   // length window 3

            stmt.Dispose();
        }
Esempio n. 21
0
        private void RunAssertionMultirowUnderlyingCorrelated(EPServiceProvider epService)
        {
            string stmtText = "select p00, " +
                              "(select window(sb.*) from SupportBean#keepall sb where TheString = s0.p00) as val " +
                              "from S0 as s0";
            EPStatement stmt     = epService.EPAdministrator.CreateEPL(stmtText);
            var         listener = new SupportUpdateListener();

            stmt.Events += listener.Update;

            var rows = new object[][] {
                new object[] { "p00", typeof(string) },
                new object[] { "val", typeof(SupportBean[]) }
            };

            for (int i = 0; i < rows.Length; i++)
            {
                string message = "Failed assertion for " + rows[i][0];
                EventPropertyDescriptor prop = stmt.EventType.PropertyDescriptors[i];
                Assert.AreEqual(rows[i][0], prop.PropertyName, message);
                Assert.AreEqual(rows[i][1], prop.PropertyType, message);
            }

            epService.EPRuntime.SendEvent(new SupportBean_S0(1, "T1"));
            Assert.IsNull(listener.AssertOneGetNewAndReset().Get("val"));

            var sb1 = new SupportBean("T1", 10);

            epService.EPRuntime.SendEvent(sb1);
            epService.EPRuntime.SendEvent(new SupportBean_S0(2, "T1"));

            EventBean received = listener.AssertOneGetNewAndReset();

            Assert.AreEqual(typeof(SupportBean[]), received.Get("val").GetType());
            EPAssertionUtil.AssertEqualsAnyOrder((object[])received.Get("val"), new object[] { sb1 });

            var sb2 = new SupportBean("T2", 20);

            epService.EPRuntime.SendEvent(sb2);
            var sb3 = new SupportBean("T2", 30);

            epService.EPRuntime.SendEvent(sb3);
            epService.EPRuntime.SendEvent(new SupportBean_S0(3, "T2"));

            received = listener.AssertOneGetNewAndReset();
            EPAssertionUtil.AssertEqualsAnyOrder((object[])received.Get("val"), new object[] { sb2, sb3 });

            stmt.Dispose();
        }
Esempio n. 22
0
        /// <summary>
        /// Ctor.
        /// </summary>
        /// <param name="eventAdapterService">The event adapter service.</param>
        /// <param name="metadata">event type metadata</param>
        /// <param name="eventTypeId">The event type id.</param>
        /// <param name="variantSpec">the variant specification</param>
        /// <param name="propertyResStrategy">stragegy for resolving properties</param>
        /// <param name="config">The config.</param>
        public VariantEventType(
            EventAdapterService eventAdapterService,
            EventTypeMetadata metadata,
            int eventTypeId,
            VariantSpec variantSpec,
            VariantPropResolutionStrategy propertyResStrategy,
            ConfigurationVariantStream config)
        {
            _eventAdapterService = eventAdapterService;
            _metadata            = metadata;
            _eventTypeId         = eventTypeId;
            _variants            = variantSpec.EventTypes;
            _propertyResStrategy = propertyResStrategy;
            _config = config;

            _propertyDesc = new Dictionary <String, VariantPropertyDesc>();

            foreach (EventType type in _variants)
            {
                IList <string> properties = type.PropertyNames;
                properties = PropertyUtility.CopyAndSort(properties);
                foreach (String property in properties)
                {
                    if (!_propertyDesc.ContainsKey(property))
                    {
                        FindProperty(property);
                    }
                }
            }

            ICollection <String> propertyNameKeySet = _propertyDesc.Keys;

            _propertyNames = propertyNameKeySet.ToArray();

            // for each of the properties in each type, attempt to load the property to build a property list
            _propertyDescriptors   = new EventPropertyDescriptor[_propertyDesc.Count];
            _propertyDescriptorMap = new Dictionary <String, EventPropertyDescriptor>();
            int count = 0;

            foreach (var desc in _propertyDesc)
            {
                var type       = desc.Value.PropertyType;
                var indexType  = type.GetIndexType();
                var isIndexed  = indexType != null;
                var descriptor = new EventPropertyDescriptor(desc.Key, type, indexType, false, false, isIndexed, false, desc.Value.PropertyType.IsFragmentableType());
                _propertyDescriptors[count++] = descriptor;
                _propertyDescriptorMap.Put(desc.Key, descriptor);
            }
        }
Esempio n. 23
0
        /// <summary>
        ///     Ctor.
        /// </summary>
        /// <param name="variantSpec">the variant specification</param>
        /// <param name="metadata">event type metadata</param>
        public VariantEventType(
            EventTypeMetadata metadata,
            VariantSpec variantSpec)
        {
            Metadata = metadata;
            Variants = variantSpec.EventTypes;
            IsVariantAny = variantSpec.TypeVariance == TypeVariance.ANY;
            VariantPropertyGetterCache = new VariantPropertyGetterCache(variantSpec.EventTypes);
            if (IsVariantAny) {
                propertyResStrategy = new VariantPropResolutionStrategyAny(this);
            }
            else {
                propertyResStrategy = new VariantPropResolutionStrategyDefault(this);
            }

            propertyDesc = new Dictionary<string, VariantPropertyDesc>();

            foreach (var type in Variants) {
                foreach (var property in CollectionUtil.CopyAndSort(type.PropertyNames)) {
                    if (!propertyDesc.ContainsKey(property)) {
                        FindProperty(property);
                    }
                }
            }

            var propertyNameKeySet = propertyDesc.Keys;
            PropertyNames = propertyNameKeySet.ToArray();

            // for each of the properties in each type, attempt to load the property to build a property list
            PropertyDescriptors = new EventPropertyDescriptor[propertyDesc.Count];
            propertyDescriptorMap = new Dictionary<string, EventPropertyDescriptor>();
            var count = 0;
            foreach (var desc in propertyDesc) {
                var type = desc.Value.PropertyType;
                var descriptor = new EventPropertyDescriptor(
                    desc.Key,
                    type,
                    type.GetIndexType(),
                    false,
                    false,
                    type.IsIndexed(),
                    false,
                    desc.Value.PropertyType.IsFragmentableType());
                PropertyDescriptors[count++] = descriptor;
                propertyDescriptorMap.Put(desc.Key, descriptor);
            }
        }
Esempio n. 24
0
        public void TestMultirowUnderlyingCorrelated()
        {
            String stmtText = "select p00, " +
                              "(select Window(sb.*) from SupportBean.win:keepall() sb where TheString = s0.P00) as val " +
                              "from S0 as s0";
            EPStatement stmt = _epService.EPAdministrator.CreateEPL(stmtText);

            stmt.Events += _listener.Update;

            Object[][] rows = new Object[][] {
                new Object[] { "p00", typeof(string) },
                new Object[] { "val", typeof(SupportBean[]) }
            };
            for (int i = 0; i < rows.Length; i++)
            {
                String message = "Failed assertion for " + rows[i][0];
                EventPropertyDescriptor prop = stmt.EventType.PropertyDescriptors[i];
                Assert.AreEqual(rows[i][0], prop.PropertyName, message);
                Assert.AreEqual(rows[i][1], prop.PropertyType, message);
            }

            _epService.EPRuntime.SendEvent(new SupportBean_S0(1, "T1"));
            Assert.IsNull(_listener.AssertOneGetNewAndReset().Get("val"));

            SupportBean sb1 = new SupportBean("T1", 10);

            _epService.EPRuntime.SendEvent(sb1);
            _epService.EPRuntime.SendEvent(new SupportBean_S0(2, "T1"));

            EventBean received = _listener.AssertOneGetNewAndReset();

            Assert.AreEqual(typeof(SupportBean[]), received.Get("val").GetType());
            EPAssertionUtil.AssertEqualsAnyOrder((Object[])received.Get("val"), new Object[] { sb1 });

            SupportBean sb2 = new SupportBean("T2", 20);

            _epService.EPRuntime.SendEvent(sb2);
            SupportBean sb3 = new SupportBean("T2", 30);

            _epService.EPRuntime.SendEvent(sb3);
            _epService.EPRuntime.SendEvent(new SupportBean_S0(3, "T2"));

            received = _listener.AssertOneGetNewAndReset();
            EPAssertionUtil.AssertEqualsAnyOrder((Object[])received.Get("val"), new Object[] { sb2, sb3 });
        }
Esempio n. 25
0
        private void TryAssertionChainedParam(EPServiceProvider epService, SupportUpdateListener listener, EPStatement stmt, string subexpr)
        {
            var rows = new object[][] {
                new object[] { subexpr, typeof(SupportChainChildTwo) }
            };

            for (int i = 0; i < rows.Length; i++)
            {
                EventPropertyDescriptor prop = stmt.EventType.PropertyDescriptors[i];
                Assert.AreEqual(rows[i][0], prop.PropertyName);
                Assert.AreEqual(rows[i][1], prop.PropertyType);
            }

            epService.EPRuntime.SendEvent(new SupportChainTop());
            Object result = listener.AssertOneGetNewAndReset().Get(subexpr);

            Assert.AreEqual("abcappend", ((SupportChainChildTwo)result).GetText());
        }
        public static void AssertEventTypeProperties(
            Object[][] expectedArr,
            EventType eventType,
            params SupportEventTypeAssertionEnum[] assertions)
        {
            for (int propNum = 0; propNum < expectedArr.Length; propNum++)
            {
                string message = "Failed assertion for property " + propNum;
                EventPropertyDescriptor prop = eventType.PropertyDescriptors[propNum];

                for (int i = 0; i < assertions.Length; i++)
                {
                    SupportEventTypeAssertionEnum assertion = assertions[i];
                    object expected = expectedArr[propNum][i];
                    object value = assertion.GetExtractor().Invoke(prop, eventType);
                    ScopeTestHelper.AssertEquals(message + " at assertion " + assertion, expected, value);
                }
            }
        }
Esempio n. 27
0
        private void InitializeWriters()
        {
            var writables = PropertyHelper.GetWritableProperties(FastClass.TargetType);
            var desc      = new EventPropertyDescriptor[writables.Count];
            var writers   = new Dictionary <String, Pair <EventPropertyDescriptor, BeanEventPropertyWriter> >();

            int count = 0;

            foreach (WriteablePropertyDescriptor writable in writables)
            {
                var propertyDesc = new EventPropertyDescriptor(writable.PropertyName, writable.PropertyType, null, false, false, false, false, false);
                desc[count++] = propertyDesc;

                FastMethod fastMethod = FastClass.GetMethod(writable.WriteMethod);
                writers.Put(writable.PropertyName, new Pair <EventPropertyDescriptor, BeanEventPropertyWriter>(propertyDesc, new BeanEventPropertyWriter(UnderlyingType, fastMethod)));
            }

            _writerMap = writers;
            _writeablePropertyDescriptors = desc;
        }
Esempio n. 28
0
        PropertyDescriptor IEventBindingService.GetEventProperty(EventDescriptor e)
        {
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }
            if (this._eventProperties == null)
            {
                this._eventProperties = new Hashtable();
            }
            object             eventHashCode = this.GetEventDescriptorHashCode(e);
            PropertyDescriptor prop          = (PropertyDescriptor)this._eventProperties[eventHashCode];

            if (prop == null)
            {
                prop = new EventPropertyDescriptor(e, this);
                this._eventProperties[eventHashCode] = prop;
            }
            return(prop);
        }
Esempio n. 29
0
        private Type DoResolvePropertyType(String propertyExpression, bool allowSimpleProperties)
        {
            // see if this is an indexed property
            int index = ASTUtil.UnescapedIndexOfDot(propertyExpression);

            if ((!allowSimpleProperties) && (index == -1))
            {
                // parse, can be an indexed property
                Property property = PropertyParser.ParseAndWalkLaxToSimple(propertyExpression);
                if (!property.IsDynamic)
                {
                    if (!(property is IndexedProperty))
                    {
                        return(null);
                    }
                    var indexedProp = (IndexedProperty)property;
                    EventPropertyDescriptor descriptor = PropertyDescriptorMap.Get(indexedProp.PropertyNameAtomic);
                    if (descriptor == null)
                    {
                        return(null);
                    }
                    return(descriptor.PropertyType);
                }
            }

            Property prop = PropertyParser.ParseAndWalkLaxToSimple(propertyExpression);

            if (prop.IsDynamic)
            {
                return(typeof(XmlNode));
            }

            SchemaItem item = prop.GetPropertyTypeSchema(_schemaModelRoot, EventAdapterService);

            if (item == null)
            {
                return(null);
            }

            return(SchemaUtil.ToReturnType(item));
        }
Esempio n. 30
0
        private ExprEvaluator GetPropertyPairEvaluator(ExprEvaluator parameterEval, Pair <PropertyResolutionDescriptor, string> propertyInfoPair, ExprValidationContext validationContext)

        {
            string propertyName = propertyInfoPair.First.PropertyName;
            EventPropertyDescriptor propertyDesc = EventTypeUtility.GetNestablePropertyDescriptor(propertyInfoPair.First.StreamEventType, propertyName);

            if (propertyDesc == null || (!propertyDesc.IsMapped && !propertyDesc.IsIndexed))
            {
                throw new ExprValidationException("Unknown single-row function, aggregation function or mapped or indexed property named '" + propertyName + "' could not be resolved");
            }

            int streamNum = propertyInfoPair.First.StreamNum;

            if (propertyDesc.IsMapped)
            {
                if (parameterEval.ReturnType != typeof(string))
                {
                    throw new ExprValidationException("Parameter expression to mapped property '" + propertyDesc.PropertyName + "' is expected to return a string-type value but returns " + parameterEval.ReturnType.GetTypeNameFullyQualPretty());
                }
                EventPropertyGetterMapped mappedGetter = propertyInfoPair.First.StreamEventType.GetGetterMapped(propertyInfoPair.First.PropertyName);
                if (mappedGetter == null)
                {
                    throw new ExprValidationException("Mapped property named '" + propertyName + "' failed to obtain getter-object");
                }
                return(new ExprDotEvalPropertyExprMapped(validationContext.StatementName, propertyDesc.PropertyName, streamNum, parameterEval, propertyDesc.PropertyComponentType, mappedGetter));
            }
            else
            {
                if (parameterEval.ReturnType.GetBoxedType() != typeof(int?))
                {
                    throw new ExprValidationException("Parameter expression to indexed property '" + propertyDesc.PropertyName + "' is expected to return a Integer-type value but returns " + parameterEval.ReturnType.GetTypeNameFullyQualPretty());
                }
                EventPropertyGetterIndexed indexedGetter = propertyInfoPair.First.StreamEventType.GetGetterIndexed(propertyInfoPair.First.PropertyName);
                if (indexedGetter == null)
                {
                    throw new ExprValidationException("Indexed property named '" + propertyName + "' failed to obtain getter-object");
                }
                return(new ExprDotEvalPropertyExprIndexed(validationContext.StatementName, propertyDesc.PropertyName, streamNum, parameterEval, propertyDesc.PropertyComponentType, indexedGetter));
            }
        }
Esempio n. 31
0
 PropertyDescriptor IEventBindingService.GetEventProperty(EventDescriptor e)
 {
     PropertyDescriptor descriptor = (PropertyDescriptor) this.EventProperties[this.GetEventDescriptorHashCode(e)];
     if (descriptor == null)
     {
         descriptor = new EventPropertyDescriptor(e);
         this.EventProperties[this.GetEventDescriptorHashCode(e)] = descriptor;
     }
     return descriptor;
 }