示例#1
0
 public SelectEvalBase(
     SelectExprForgeContext context,
     EventType resultEventType)
 {
     this.context = context;
     this.resultEventType = resultEventType;
 }
 public SelectEvalNoWildcardObjectArray(
     SelectExprForgeContext context,
     EventType resultEventType)
 {
     this.context = context;
     this.resultEventType = resultEventType;
 }
示例#3
0
        protected SelectEvalBaseMap(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType)
            : base(selectExprForgeContext, resultEventType)

        {
        }
示例#4
0
 public SelectEvalStreamWUnderlying(
     SelectExprForgeContext selectExprForgeContext,
     EventType resultEventType,
     IList<SelectClauseStreamCompiledSpec> namedStreams,
     bool usingWildcard,
     IList<SelectExprStreamDesc> unnamedStreams,
     bool singleStreamWrapper,
     bool underlyingIsFragmentEvent,
     int underlyingStreamNumber,
     EventPropertyGetterSPI underlyingPropertyEventGetter,
     ExprForge underlyingExprForge,
     TableMetaData tableMetadata,
     EventType[] eventTypes)
     : base(selectExprForgeContext, resultEventType, namedStreams, usingWildcard)
 {
     wrapperEventType = (WrapperEventType) resultEventType;
     this.unnamedStreams = unnamedStreams;
     this.singleStreamWrapper = singleStreamWrapper;
     this.underlyingIsFragmentEvent = underlyingIsFragmentEvent;
     this.underlyingStreamNumber = underlyingStreamNumber;
     this.underlyingPropertyEventGetter = underlyingPropertyEventGetter;
     this.underlyingExprForge = underlyingExprForge;
     this.tableMetadata = tableMetadata;
     this.eventTypes = eventTypes;
 }
 public SelectEvalNoWildcardEmptyProps(
     SelectExprForgeContext selectExprForgeContext,
     EventType resultEventType)
 {
     this.selectExprForgeContext = selectExprForgeContext;
     this.resultEventType = resultEventType;
 }
示例#6
0
 public SelectEvalNoWildcardJson(
     SelectExprForgeContext selectContext,
     JsonEventType jsonEventType)
 {
     this._selectContext = selectContext;
     this._jsonEventType = jsonEventType;
 }
示例#7
0
        public SelectEvalInsertWildcardWrapper(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType)
            : base(selectExprForgeContext, resultEventType)

        {
        }
        public SelectEvalInsertNoWildcardSingleColCoercionMapWrap(
            SelectExprForgeContext selectExprForgeContext,
            WrapperEventType wrapper)
            : base(selectExprForgeContext, wrapper)

        {
        }
示例#9
0
 public SelectEvalBaseFirstProp(
     SelectExprForgeContext selectExprForgeContext,
     EventType resultEventType)
 {
     this.selectExprForgeContext = selectExprForgeContext;
     this.resultEventType = resultEventType;
 }
        public SelectEvalInsertNoWildcardSingleColCoercionBean(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType)
            : base(selectExprForgeContext, resultEventType)

        {
        }
        public SelectEvalInsertNoWildcardObjectArray(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType)
            : base(selectExprForgeContext, resultEventType)

        {
        }
示例#12
0
        public SelectEvalBaseFirstPropFromWrap(
            SelectExprForgeContext selectExprForgeContext,
            WrapperEventType wrapper)
            : base(selectExprForgeContext, wrapper)

        {
            this.wrapper = wrapper;
        }
示例#13
0
        public SelectEvalInsertNoWildcardSingleColCoercionBeanWrapVariant(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType,
            VariantEventType variantEventType)
            : base(selectExprForgeContext, resultEventType)

        {
            this.variantEventType = variantEventType;
        }
 public SelectExprProcessorForge MakeSelectNoWildcard(
     SelectExprForgeContext selectExprForgeContext,
     ExprForge[] exprForges,
     EventType resultEventType,
     TableCompileTimeResolver tableService,
     string statementName)
 {
     return new EvalSelectNoWildcardAvro(selectExprForgeContext, exprForges, resultEventType, statementName);
 }
示例#15
0
        public SelectEvalInsertWildcardVariant(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType,
            VariantEventType variantEventType)
            : base(selectExprForgeContext, resultEventType)

        {
            this.variantEventType = variantEventType;
        }
示例#16
0
        protected SelectEvalStreamBaseMap(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType,
            IList<SelectClauseStreamCompiledSpec> namedStreams,
            bool usingWildcard)
            : base(selectExprForgeContext, resultEventType, namedStreams, usingWildcard)

        {
        }
 public SelectEvalInsertNoWildcardObjectArrayRemap(
     SelectExprForgeContext context,
     EventType resultEventType,
     int[] remapped)
 {
     this.context = context;
     this.resultEventType = resultEventType;
     this.remapped = remapped;
 }
 internal OAInsertProcessorSimpleRepackage(
     SelectExprForgeContext selectExprForgeContext,
     int underlyingStreamNumber,
     EventType resultType)
 {
     this.selectExprForgeContext = selectExprForgeContext;
     this.underlyingStreamNumber = underlyingStreamNumber;
     ResultEventType = resultType;
 }
        public SelectEvalStreamBaseObjectArray(
            SelectExprForgeContext context,
            EventType resultEventType,
            IList<SelectClauseStreamCompiledSpec> namedStreams,
            bool usingWildcard)
            : base(context, resultEventType, namedStreams, usingWildcard)

        {
        }
示例#20
0
        public SelectEvalWildcardJoin(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType,
            SelectExprProcessorForge joinWildcardProcessorForge)
            : base(selectExprForgeContext, resultEventType)

        {
            this.joinWildcardProcessorForge = joinWildcardProcessorForge;
        }
        public SelectEvalInsertWildcardWrapperNested(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType,
            WrapperEventType innerWrapperType)
            : base(selectExprForgeContext, resultEventType)

        {
            this.innerWrapperType = innerWrapperType;
        }
示例#22
0
 public SelectEvalStreamBase(
     SelectExprForgeContext context,
     EventType resultEventType,
     IList<SelectClauseStreamCompiledSpec> namedStreams,
     bool usingWildcard)
 {
     this.context = context;
     this.resultEventType = resultEventType;
     this.namedStreams = namedStreams;
     isUsingWildcard = usingWildcard;
 }
        public SelectEvalInsertWildcardJoinVariant(
            SelectExprForgeContext context,
            EventType resultEventType,
            SelectExprProcessorForge joinWildcardProcessorForge,
            VariantEventType variantEventType)
            : base(context, resultEventType)

        {
            this.joinWildcardProcessorForge = joinWildcardProcessorForge;
            this.variantEventType = variantEventType;
        }
示例#24
0
 public SelectEvalInsertNoWildcardObjectArrayRemapWWiden(
     SelectExprForgeContext context,
     EventType resultEventType,
     int[] remapped,
     TypeWidenerSPI[] wideners)
 {
     this.context = context;
     this.resultEventType = resultEventType;
     this.remapped = remapped;
     this.wideners = wideners;
 }
示例#25
0
        public SelectEvalStreamNoUndWEventBeanToObj(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType,
            IList<SelectClauseStreamCompiledSpec> namedStreams,
            bool usingWildcard,
            ISet<string> eventBeanToObjectProps)
            : base(selectExprForgeContext, resultEventType, namedStreams, usingWildcard)

        {
            this.eventBeanToObjectProps = eventBeanToObjectProps.ToArray();
        }
 public SelectExprProcessorForge MakeRecast(
     EventType[] eventTypes,
     SelectExprForgeContext selectExprForgeContext,
     int streamNumber,
     AvroSchemaEventType insertIntoTargetType,
     ExprNode[] exprNodes,
     string statementName)
 {
     return AvroRecastFactory.Make(
         eventTypes,
         selectExprForgeContext,
         streamNumber,
         insertIntoTargetType,
         exprNodes,
         statementName);
 }
示例#27
0
        public SelectEvalStreamNoUndWEventBeanToObjObjArray(
            SelectExprForgeContext selectExprForgeContext,
            EventType resultEventType,
            IList<SelectClauseStreamCompiledSpec> namedStreams,
            bool usingWildcard,
            ISet<string> eventBeanToObjectProps)
            : base(selectExprForgeContext, resultEventType, namedStreams, usingWildcard)

        {
            var eventBeanToObjectIndexes = new HashSet<int>();
            var type = (ObjectArrayEventType) resultEventType;
            foreach (var name in eventBeanToObjectProps) {
                if (type.PropertiesIndexes.TryGetValue(name, out var index)) {
                    eventBeanToObjectIndexes.Add(index);
                }
            }

            eventBeanToObjectIndexesArray = eventBeanToObjectIndexes.ToArray();
        }
        public static SelectExprProcessorForge Make(
            EventType[] eventTypes,
            SelectExprForgeContext selectExprForgeContext,
            int streamNumber,
            EventType targetType,
            ExprNode[] exprNodes,
            ImportServiceCompileTime importService,
            string statementName)
        {
            var oaResultType = (ObjectArrayEventType) targetType;
            var oaStreamType = (ObjectArrayEventType) eventTypes[streamNumber];

            // (A) fully assignment-compatible: same number, name and type of fields, no additional expressions: Straight repackage
            if (oaResultType.IsDeepEqualsConsiderOrder(oaStreamType) && selectExprForgeContext.ExprForges.Length == 0) {
                return new OAInsertProcessorSimpleRepackage(selectExprForgeContext, streamNumber, targetType);
            }

            // (B) not completely assignable: find matching properties
            var writables = EventTypeUtility.GetWriteableProperties(oaResultType, true, false);
            IList<Item> items = new List<Item>();
            IList<WriteablePropertyDescriptor> written = new List<WriteablePropertyDescriptor>();

            // find the properties coming from the providing source stream
            foreach (var writeable in writables) {
                var propertyName = writeable.PropertyName;

                var hasIndexSource = oaStreamType.PropertiesIndexes.TryGetValue(propertyName, out var indexSource);
                var hasIndexTarget = oaResultType.PropertiesIndexes.TryGetValue(propertyName, out var indexTarget);
                if (hasIndexSource) {
                    var setOneType = oaStreamType.Types.Get(propertyName);
                    var setTwoType = oaResultType.Types.Get(propertyName);
                    var setTwoTypeFound = oaResultType.Types.ContainsKey(propertyName);
                    var message = BaseNestableEventUtil.ComparePropType(
                        propertyName,
                        setOneType,
                        setTwoType,
                        setTwoTypeFound,
                        oaResultType.Name);
                    if (message != null) {
                        throw new ExprValidationException(message.Message, message);
                    }

                    items.Add(new Item(indexTarget, indexSource, null, null));
                    written.Add(writeable);
                }
            }

            // find the properties coming from the expressions of the select clause
            var count = written.Count;
            for (var i = 0; i < selectExprForgeContext.ExprForges.Length; i++) {
                var columnName = selectExprForgeContext.ColumnNames[i];
                var forge = selectExprForgeContext.ExprForges[i];
                var exprNode = exprNodes[i];

                var writable = FindWritable(columnName, writables);
                if (writable == null) {
                    throw new ExprValidationException(
                        "Failed to find column '" + columnName + "' in target type '" + oaResultType.Name + "'");
                }

                TypeWidenerSPI widener;
                try {
                    widener = TypeWidenerFactory.GetCheckPropertyAssignType(
                        ExprNodeUtilityPrint.ToExpressionStringMinPrecedenceSafe(exprNode),
                        exprNode.Forge.EvaluationType,
                        writable.PropertyType,
                        columnName,
                        false,
                        null,
                        statementName);
                }
                catch (TypeWidenerException ex) {
                    throw new ExprValidationException(ex.Message, ex);
                }

                items.Add(new Item(count, -1, forge, widener));
                written.Add(writable);
                count++;
            }

            // make manufacturer
            var itemsArr = items.ToArray();
            EventBeanManufacturerForge manufacturer;
            try {
                manufacturer = EventTypeUtility.GetManufacturer(
                    oaResultType,
                    written.ToArray(),
                    importService,
                    true,
                    selectExprForgeContext.EventTypeAvroHandler);
            }
            catch (EventBeanManufactureException e) {
                throw new ExprValidationException("Failed to write to type: " + e.Message, e);
            }

            return new OAInsertProcessorAllocate(streamNumber, itemsArr, manufacturer, targetType);
        }
示例#29
0
        public static SelectExprProcessorForge Make(
            EventType[] eventTypes,
            SelectExprForgeContext selectExprForgeContext,
            int streamNumber,
            AvroSchemaEventType targetType,
            ExprNode[] exprNodes,
            string statementName)
        {
            AvroEventType resultType = (AvroEventType) targetType;
            AvroEventType streamType = (AvroEventType) eventTypes[streamNumber];

            // (A) fully assignment-compatible: same number, name and type of fields, no additional expressions: Straight repackage
            if (resultType.Schema.Equals(streamType.Schema) && selectExprForgeContext.ExprForges.Length == 0) {
                return new AvroInsertProcessorSimpleRepackage(selectExprForgeContext, streamNumber, targetType);
            }

            // (B) not completely assignable: find matching properties
            var writables = EventTypeUtility.GetWriteableProperties(resultType, true, false);
            IList<Item> items = new List<Item>();
            IList<WriteablePropertyDescriptor> written = new List<WriteablePropertyDescriptor>();

            // find the properties coming from the providing source stream
            foreach (var writeable in writables) {
                var propertyName = writeable.PropertyName;

                Field streamTypeField = streamType.SchemaAvro.GetField(propertyName);
                Field resultTypeField = resultType.SchemaAvro.GetField(propertyName);

                if (streamTypeField != null && resultTypeField != null) {
                    if (streamTypeField.Schema.Equals(resultTypeField.Schema)) {
                        items.Add(new Item(resultTypeField, streamTypeField, null, null));
                    }
                    else {
                        throw new ExprValidationException(
                            "Type by name '" +
                            resultType.Name +
                            "' " +
                            "in property '" +
                            propertyName +
                            "' expected schema '" +
                            resultTypeField.Schema +
                            "' but received schema '" +
                            streamTypeField.Schema +
                            "'");
                    }
                }
            }

            // find the properties coming from the expressions of the select clause
            var typeWidenerCustomizer =
                selectExprForgeContext.EventTypeAvroHandler.GetTypeWidenerCustomizer(targetType);
            for (var i = 0; i < selectExprForgeContext.ExprForges.Length; i++) {
                var columnName = selectExprForgeContext.ColumnNames[i];
                var exprNode = exprNodes[i];

                var writable = FindWritable(columnName, writables);
                if (writable == null) {
                    throw new ExprValidationException(
                        "Failed to find column '" + columnName + "' in target type '" + resultType.Name + "'");
                }

                Field resultTypeField = resultType.SchemaAvro.GetField(writable.PropertyName);

                TypeWidenerSPI widener;
                try {
                    widener = TypeWidenerFactory.GetCheckPropertyAssignType(
                        ExprNodeUtilityPrint.ToExpressionStringMinPrecedenceSafe(exprNode),
                        exprNode.Forge.EvaluationType,
                        writable.PropertyType,
                        columnName,
                        false,
                        typeWidenerCustomizer,
                        statementName);
                }
                catch (TypeWidenerException ex) {
                    throw new ExprValidationException(ex.Message, ex);
                }

                items.Add(new Item(resultTypeField, null, exprNode.Forge, widener));
                written.Add(writable);
            }

            // make manufacturer
            Item[] itemsArr = items.ToArray();
            return new AvroInsertProcessorAllocate(
                streamNumber,
                itemsArr,
                resultType,
                resultType.SchemaAvro,
                selectExprForgeContext.EventBeanTypedEventFactory);
        }
示例#30
0
        public EvalSelectNoWildcardAvro(
            SelectExprForgeContext selectExprForgeContext,
            ExprForge[] exprForges,
            EventType resultEventTypeAvro,
            string statementName)
        {
            _selectExprForgeContext = selectExprForgeContext;
            _resultEventTypeAvro = (AvroEventType) resultEventTypeAvro;

            _forges = new ExprForge[selectExprForgeContext.ExprForges.Length];
            var typeWidenerCustomizer =
                selectExprForgeContext.EventTypeAvroHandler.GetTypeWidenerCustomizer(resultEventTypeAvro);
            for (var i = 0; i < _forges.Length; i++) {
                _forges[i] = selectExprForgeContext.ExprForges[i];
                var forge = exprForges[i];
                var forgeEvaluationType = forge.EvaluationType;

                if (forge is ExprEvalByGetterFragment) {
                    _forges[i] = HandleFragment((ExprEvalByGetterFragment) forge);
                }
                else if (forge is ExprEvalStreamInsertBean) {
                    var und = (ExprEvalStreamInsertBean) forge;
                    _forges[i] =
                        new SelectExprInsertEventBeanFactory.ExprForgeStreamUnderlying(und.StreamNum, typeof(object));
                }
                else if (forge is SelectExprProcessorTypableMapForge) {
                    var typableMap = (SelectExprProcessorTypableMapForge) forge;
                    _forges[i] = new SelectExprProcessorEvalAvroMapToAvro(
                        typableMap.InnerForge,
                        ((AvroEventType) resultEventTypeAvro).SchemaAvro,
                        selectExprForgeContext.ColumnNames[i]);
                }
                else if (forge is ExprEvalStreamInsertNamedWindow) {
                    var nw = (ExprEvalStreamInsertNamedWindow) forge;
                    _forges[i] =
                        new SelectExprInsertEventBeanFactory.ExprForgeStreamUnderlying(nw.StreamNum, typeof(object));
                }
                else if (forgeEvaluationType != null && forgeEvaluationType.IsArray) {
                    var widener = TypeWidenerFactory.GetArrayToCollectionCoercer(forgeEvaluationType.GetElementType());
                    var resultType = typeof(ICollection<object>);
                    _forges[i] = new SelectExprProcessorEvalAvroArrayCoercer(forge, widener, resultType);
                }
                else {
                    var propertyName = selectExprForgeContext.ColumnNames[i];
                    var propertyType = resultEventTypeAvro.GetPropertyType(propertyName);
                    TypeWidenerSPI widener;
                    try {
                        widener = TypeWidenerFactory.GetCheckPropertyAssignType(
                            propertyName,
                            forgeEvaluationType,
                            propertyType,
                            propertyName,
                            true,
                            typeWidenerCustomizer,
                            statementName);
                    }
                    catch (TypeWidenerException ex) {
                        throw new ExprValidationException(ex.Message, ex);
                    }

                    if (widener != null) {
                        _forges[i] = new SelectExprProcessorEvalAvroArrayCoercer(forge, widener, propertyType);
                    }
                }
            }
        }