示例#1
0
        public override EventBean[] ProcessUpdate(FAFQueryMethodIUDUpdate update)
        {
            TableEvalLockUtil.ObtainLockUnless(
                instance.TableLevelRWLock.WriteLock,
                instance.AgentInstanceContext.TableExprEvaluatorContext);
            var events = SnapshotAndApplyFilter(
                update.QueryGraph,
                update.Annotations,
                update.OptionalWhereClause,
                instance.AgentInstanceContext);

            if (events != null && events.IsEmpty()) {
                return CollectionUtil.EVENTBEANARRAY_EMPTY;
            }

            var eventsPerStream = new EventBean[3];
            if (events == null) {
                update.TableUpdateStrategy.UpdateTable(
                    instance.EventCollection,
                    instance,
                    eventsPerStream,
                    instance.AgentInstanceContext);
            }
            else {
                update.TableUpdateStrategy.UpdateTable(
                    events,
                    instance,
                    eventsPerStream,
                    instance.AgentInstanceContext);
            }

            return CollectionUtil.EVENTBEANARRAY_EMPTY;
        }
示例#2
0
 public void ApplyLeave(
     EventBean[] eventsPerStream,
     object groupByKey,
     ExprEvaluatorContext exprEvaluatorContext)
 {
     // acquire tableInstance-level write lock
     TableEvalLockUtil.ObtainLockUnless(tableInstance.TableLevelRWLock.WriteLock, exprEvaluatorContext);
     ApplyLeaveInternal(eventsPerStream, groupByKey, exprEvaluatorContext);
 }
示例#3
0
 public override EventBean[] ProcessInsert(FAFQueryMethodIUDInsertInto insert)
 {
     TableEvalLockUtil.ObtainLockUnless(
         instance.TableLevelRWLock.WriteLock,
         instance.AgentInstanceContext.TableExprEvaluatorContext);
     var theEvent = insert.InsertHelper.Process(new EventBean[0], true, true, instance.AgentInstanceContext);
     var aggs = instance.Table.AggregationRowFactory.Make();
     ((object[]) theEvent.Underlying)[0] = aggs;
     instance.AddEvent(theEvent);
     return CollectionUtil.EVENTBEANARRAY_EMPTY;
 }
示例#4
0
        public override ICollection<EventBean> SnapshotBestEffort(
            QueryGraph queryGraph,
            Attribute[] annotations)
        {
            TableEvalLockUtil.ObtainLockUnless(instance.TableLevelRWLock.ReadLock, instance.AgentInstanceContext);
            var events = SnapshotNullWhenNoIndex(queryGraph, annotations, null, null);
            if (events != null) {
                return events;
            }

            return instance.EventCollection;
        }
示例#5
0
        private ICollection<EventBean> LookupInternal(
            EventBean[] events,
            ExprEvaluatorContext context)
        {
            TableEvalLockUtil.ObtainLockUnless(_lock, context);

            var result = _inner.Lookup(events, context);
            if (result == null) {
                return Collections.GetEmptyList<EventBean>();
            }

            return result;
        }
        protected ObjectArrayBackedEventBean GetRow(
            EventBean[] eventsPerStream,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            var groupKey = _factory.GroupKeyEval.Evaluate(eventsPerStream, isNewData, context);
            var tableAndLockGrouped = _provider.Get();
            TableEvalLockUtil.ObtainLockUnless(tableAndLockGrouped.Lock, context);
            if (groupKey is object[]) {
                groupKey = tableAndLockGrouped.Grouped.Table.PrimaryKeyObjectArrayTransform.From((object[]) groupKey);
            }

            return tableAndLockGrouped.Grouped.GetRowForGroupKey(groupKey);
        }
        public EventBean GetEventBean(
            int column,
            EventBean[] eventsPerStream,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            // acquire table-level write lock
            TableEvalLockUtil.ObtainLockUnless(tableInstance.TableLevelRWLock.WriteLock, context);

            var @event = tableInstance.EventUngrouped;
            if (@event == null) {
                return null;
            }

            var row = ExprTableEvalStrategyUtil.GetRow(@event);
            return row.GetEventBean(column, eventsPerStream, isNewData, context);
        }
        private ICollection<EventBean> LookupInternal(ExprEvaluatorContext context)
        {
            TableEvalLockUtil.ObtainLockUnless(_tableLevelLock, context);

            IEnumerator<EventBean> enumerator = _contents.GetEnumerator();
            if (!enumerator.MoveNext()) {
                return null;
            }

            var result = new ArrayDeque<EventBean>();
            do {
                EventBean eventBean = enumerator.Current;
                result.Add(eventBean);
            } while (enumerator.MoveNext());

            return result;
        }
示例#9
0
        private void Route(
            EventBean[] events,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            foreach (var routed in events) {
                if (routed is NaturalEventBean) {
                    var natural = (NaturalEventBean) routed;
                    if (_audit) {
                        _agentInstanceContext.AuditProvider.Insert(natural.OptionalSynthetic, _agentInstanceContext);
                    }

                    if (_tableInstance != null) {
                        TableEvalLockUtil.ObtainLockUnless(
                            _tableInstance.TableLevelRWLock.WriteLock,
                            exprEvaluatorContext);
                        _tableInstance.AddEventUnadorned(natural.OptionalSynthetic);
                    }
                    else {
                        _agentInstanceContext.InternalEventRouter.Route(
                            natural.OptionalSynthetic,
                            _agentInstanceContext,
                            _parent.IsAddToFront);
                    }
                }
                else {
                    if (_audit) {
                        _agentInstanceContext.AuditProvider.Insert(routed, _agentInstanceContext);
                    }

                    if (_tableInstance != null) {
                        TableEvalLockUtil.ObtainLockUnless(
                            _tableInstance.TableLevelRWLock.WriteLock,
                            exprEvaluatorContext);
                        _tableInstance.AddEventUnadorned(routed);
                    }
                    else {
                        _agentInstanceContext.InternalEventRouter.Route(
                            routed,
                            _agentInstanceContext,
                            _parent.IsAddToFront);
                    }
                }
            }
        }
示例#10
0
        public override EventBean[] ProcessDelete(FAFQueryMethodIUDDelete delete)
        {
            TableEvalLockUtil.ObtainLockUnless(
                instance.TableLevelRWLock.WriteLock,
                instance.AgentInstanceContext.TableExprEvaluatorContext);

            if (delete.OptionalWhereClause == null) {
                instance.ClearInstance();
                return CollectionUtil.EVENTBEANARRAY_EMPTY;
            }

            var found = SnapshotAndApplyFilter(
                delete.QueryGraph,
                delete.Annotations,
                delete.OptionalWhereClause,
                instance.AgentInstanceContext);
            foreach (var @event in found) {
                instance.DeleteEvent(@event);
            }

            return CollectionUtil.EVENTBEANARRAY_EMPTY;
        }
示例#11
0
        public void ApplyLeave(
            EventBean[] eventsPerStream,
            object optionalGroupKeyPerRow,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            // acquire table-level write lock
            TableEvalLockUtil.ObtainLockUnless(tableInstance.TableLevelRWLock.WriteLock, exprEvaluatorContext);

            var @event = tableInstance.GetCreateRowIntoTable(exprEvaluatorContext);
            var row = ExprTableEvalStrategyUtil.GetRow(@event);

            for (var i = 0; i < methodPairs.Length; i++) {
                var methodPair = methodPairs[i];
                var columnResult = methodPair.Evaluator.Evaluate(eventsPerStream, false, exprEvaluatorContext);
                row.LeaveAgg(methodPair.Column, columnResult);
            }

            for (var i = 0; i < accessAgents.Length; i++) {
                accessAgents[i].ApplyLeave(eventsPerStream, exprEvaluatorContext, row, accessColumnsZeroOffset[i]);
            }

            tableInstance.HandleRowUpdated(@event);
        }
示例#12
0
 protected ObjectArrayBackedEventBean LockTableReadAndGet(ExprEvaluatorContext context)
 {
     var pair = _provider.Get();
     TableEvalLockUtil.ObtainLockUnless(pair.Lock, context);
     return pair.Ungrouped.EventUngrouped;
 }
 protected TableInstanceGrouped LockTableRead(ExprEvaluatorContext context) {
     var tableAndLockGrouped = _provider.Get();
     TableEvalLockUtil.ObtainLockUnless(tableAndLockGrouped.Lock, context);
     return tableAndLockGrouped.Grouped;
 }