Esempio n. 1
0
        public static IList <StmtClassForgeableFactory> Plan(
            EventType eventType,
            StatementRawInfo raw,
            SerdeEventTypeCompileTimeRegistry registry,
            SerdeCompileTimeResolver resolver)
        {
            // there is no need to register a serde when not using HA, or when it is already registered, or for table-internal type
            var typeClass = eventType.Metadata.TypeClass;

            if (!registry.IsTargetHA || registry.EventTypes.ContainsKey(eventType) || typeClass == EventTypeTypeClass.TABLE_INTERNAL)
            {
                return(EmptyList <StmtClassForgeableFactory> .Instance);
            }

            // there is also no need to register a serde when using a public object
            var statementType = raw.StatementType;

            if ((typeClass == EventTypeTypeClass.NAMED_WINDOW && statementType != StatementType.CREATE_WINDOW) ||
                (typeClass == EventTypeTypeClass.TABLE_PUBLIC && statementType != StatementType.CREATE_TABLE))
            {
                return(EmptyList <StmtClassForgeableFactory> .Instance);
            }

            IList <StmtClassForgeableFactory> forgeables = new List <StmtClassForgeableFactory>(2);

            PlanRecursive(forgeables, eventType, raw, registry, resolver);
            return(forgeables);
        }
Esempio n. 2
0
        private static void PlanRecursive(
            IList <StmtClassForgeableFactory> additionalForgeables,
            EventType eventType,
            StatementRawInfo raw,
            SerdeEventTypeCompileTimeRegistry registry,
            SerdeCompileTimeResolver resolver)
        {
            if (!registry.IsTargetHA)
            {
                return;
            }

            if (registry.EventTypes.ContainsKey(eventType))
            {
                return;
            }

            SerdeAndForgeables pair;

            if (eventType is BeanEventType)
            {
                pair = PlanBean((BeanEventType)eventType, raw, resolver);
            }
            else if (eventType is BaseNestableEventType)
            {
                pair = PlanBaseNestable((BaseNestableEventType)eventType, raw, resolver);
                PlanPropertiesMayRecurse(eventType, additionalForgeables, raw, registry, resolver);
            }
            else if (eventType is WrapperEventType)
            {
                var wrapperEventType = (WrapperEventType)eventType;
                PlanRecursive(additionalForgeables, wrapperEventType.UnderlyingEventType, raw, registry, resolver);
                pair = PlanBaseNestable(wrapperEventType.UnderlyingMapType, raw, resolver);
            }
            else if (eventType is VariantEventType || eventType is AvroSchemaEventType || eventType is BaseXMLEventType)
            {
                // no serde generation
                pair = null;
            }
            else
            {
                throw new UnsupportedOperationException("Event type not yet handled: " + eventType);
            }

            if (pair != null)
            {
                registry.AddSerdeFor(eventType, pair.Forge);
                additionalForgeables.AddAll(pair.AdditionalForgeables);
            }
        }
Esempio n. 3
0
        private static void PlanPropertiesMayRecurse(
            EventType eventType,
            IList <StmtClassForgeableFactory> additionalForgeables,
            StatementRawInfo raw,
            SerdeEventTypeCompileTimeRegistry registry,
            SerdeCompileTimeResolver resolver)
        {
            foreach (var desc in eventType.PropertyDescriptors)
            {
                if (!desc.IsFragment)
                {
                    continue;
                }

                var fragmentEventType = eventType.GetFragmentType(desc.PropertyName);
                if (fragmentEventType == null || registry.EventTypes.ContainsKey(fragmentEventType.FragmentType))
                {
                    continue;
                }

                PlanRecursive(additionalForgeables, fragmentEventType.FragmentType, raw, registry, resolver);
            }
        }
Esempio n. 4
0
        public ModuleCompileTimeServices(
            IContainer container,
            CompilerServices compilerServices,
            Configuration configuration,
            ContextCompileTimeRegistry contextCompileTimeRegistry,
            ContextCompileTimeResolver contextCompileTimeResolver,
            BeanEventTypeStemService beanEventTypeStemService,
            BeanEventTypeFactoryPrivate beanEventTypeFactoryPrivate,
            ClassProvidedCompileTimeRegistry classProvidedCompileTimeRegistry,
            ClassProvidedCompileTimeResolver classProvidedCompileTimeResolver,
            DatabaseConfigServiceCompileTime databaseConfigServiceCompileTime,
            ImportServiceCompileTime importService,
            ExprDeclaredCompileTimeRegistry exprDeclaredCompileTimeRegistry,
            ExprDeclaredCompileTimeResolver exprDeclaredCompileTimeResolver,
            EventTypeAvroHandler eventTypeAvroHandler,
            EventTypeCompileTimeRegistry eventTypeCompileTimeRegistry,
            EventTypeCompileTimeResolver eventTypeCompileTimeResolver,
            EventTypeRepositoryImpl eventTypeRepositoryPreconfigured,
            bool fireAndForget,
            IndexCompileTimeRegistry indexCompileTimeRegistry,
            ModuleDependenciesCompileTime moduleDependencies,
            ModuleAccessModifierService moduleVisibilityRules,
            NamedWindowCompileTimeResolver namedWindowCompileTimeResolver,
            NamedWindowCompileTimeRegistry namedWindowCompileTimeRegistry,
            ParentClassLoader parentClassLoader,
            PatternObjectResolutionService patternObjectResolutionService,
            ScriptCompileTimeRegistry scriptCompileTimeRegistry,
            ScriptCompileTimeResolver scriptCompileTimeResolver,
            ScriptCompiler scriptCompiler,
            SerdeEventTypeCompileTimeRegistry serdeEventTypeRegistry,
            SerdeCompileTimeResolver serdeResolver, 
            TableCompileTimeRegistry tableCompileTimeRegistry,
            TableCompileTimeResolver tableCompileTimeResolver,
            VariableCompileTimeRegistry variableCompileTimeRegistry,
            VariableCompileTimeResolver variableCompileTimeResolver,
            ViewResolutionService viewResolutionService,
            XMLFragmentEventTypeFactory xmlFragmentEventTypeFactory)
        {
            var generation = Interlocked.Increment(ref _generation);
            
            Namespace = $"generation_{generation}";

            Container = container;
            CompilerServices = compilerServices;
            Configuration = configuration;
            ContextCompileTimeRegistry = contextCompileTimeRegistry;
            ContextCompileTimeResolver = contextCompileTimeResolver;
            BeanEventTypeStemService = beanEventTypeStemService;
            BeanEventTypeFactoryPrivate = beanEventTypeFactoryPrivate;
            DatabaseConfigServiceCompileTime = databaseConfigServiceCompileTime;
            ImportServiceCompileTime = importService;
            ExprDeclaredCompileTimeRegistry = exprDeclaredCompileTimeRegistry;
            ExprDeclaredCompileTimeResolver = exprDeclaredCompileTimeResolver;
            EventTypeAvroHandler = eventTypeAvroHandler;
            EventTypeCompileTimeRegistry = eventTypeCompileTimeRegistry;
            EventTypeCompileTimeResolver = eventTypeCompileTimeResolver;
            EventTypeRepositoryPreconfigured = eventTypeRepositoryPreconfigured;
            IndexCompileTimeRegistry = indexCompileTimeRegistry;
            ModuleDependencies = moduleDependencies;
            ModuleVisibilityRules = moduleVisibilityRules;
            NamedWindowCompileTimeResolver = namedWindowCompileTimeResolver;
            NamedWindowCompileTimeRegistry = namedWindowCompileTimeRegistry;
            ParentClassLoader = parentClassLoader;
            PatternObjectResolutionService = patternObjectResolutionService;
            ScriptCompileTimeRegistry = scriptCompileTimeRegistry;
            ScriptCompileTimeResolver = scriptCompileTimeResolver;
            ScriptCompiler = scriptCompiler;
            TableCompileTimeRegistry = tableCompileTimeRegistry;
            TableCompileTimeResolver = tableCompileTimeResolver;
            VariableCompileTimeRegistry = variableCompileTimeRegistry;
            VariableCompileTimeResolver = variableCompileTimeResolver;
            ViewResolutionService = viewResolutionService;
            XmlFragmentEventTypeFactory = xmlFragmentEventTypeFactory;

            #region ESPER_8.5.1
            ClassProvidedCompileTimeRegistry = classProvidedCompileTimeRegistry;
            ClassProvidedCompileTimeResolver = classProvidedCompileTimeResolver;
            SerdeEventTypeRegistry = serdeEventTypeRegistry;
            SerdeResolver = serdeResolver;
            IsFireAndForget = fireAndForget;
            #endregion
        }