Beispiel #1
0
 public EPFireAndForgetPreparedQueryParameterizedImpl(
     AtomicBoolean serviceProviderStatus,
     FAFQueryMethodAssignerSetter fields,
     FAFQueryMethod queryMethod,
     FAFQueryInformationals queryInformationals)
 {
     ServiceProviderStatus = serviceProviderStatus;
     Fields = fields;
     QueryMethod = queryMethod;
     types = queryInformationals.SubstitutionParamsTypes;
     Names = queryInformationals.SubstitutionParamsNames;
     if (types != null && types.Length > 0) {
         UnsatisfiedParamsOneOffset = new LinkedHashSet<int>();
         for (var i = 0; i < types.Length; i++) {
             UnsatisfiedParamsOneOffset.Add(i + 1);
         }
     }
     else {
         UnsatisfiedParamsOneOffset = new EmptySet<int>();
     }
 }
Beispiel #2
0
        public CodegenClass Forge(bool includeDebugSymbols)
        {
            var debugInformationProvider = new Supplier<string>(
                () => {
                    var writer = new StringWriter();
                    writer.Write("FAF query");
                    return writer.ToString();
                });

            try {
                IList<CodegenInnerClass> innerClasses = new List<CodegenInnerClass>();

                // build ctor
                IList<CodegenTypedParam> ctorParms = new List<CodegenTypedParam>();
                ctorParms.Add(
                    new CodegenTypedParam(
                        typeof(EPStatementInitServices),
                        EPStatementInitServicesConstants.REF.Ref,
                        false));
                ctorParms.Add(
                    new CodegenTypedParam(
                        _namespaceScope.FieldsClassName,
                        null,
                        "statementFields",
                        true,
                        false));
                var providerCtor = new CodegenCtor(GetType(), ClassName, includeDebugSymbols, ctorParms);
                var classScope = new CodegenClassScope(includeDebugSymbols, _namespaceScope, ClassName);

                // add query method member
                IList<CodegenTypedParam> providerExplicitMembers = new List<CodegenTypedParam>(2);
                providerExplicitMembers.Add(new CodegenTypedParam(typeof(FAFQueryMethod), MEMBERNAME_QUERYMETHOD));

                var symbols = new SAIFFInitializeSymbol();
                var makeMethod = providerCtor.MakeChildWithScope(typeof(FAFQueryMethod), GetType(), symbols, classScope)
                    .AddParam(typeof(EPStatementInitServices), EPStatementInitServicesConstants.REF.Ref);
                providerCtor.Block
                    .ExprDotMethod(Ref("statementFields"), "Init", EPStatementInitServicesConstants.REF)
                    .AssignRef(MEMBERNAME_QUERYMETHOD, LocalMethod(makeMethod, EPStatementInitServicesConstants.REF));
                _forge.MakeMethod(makeMethod, symbols, classScope);

                // make provider methods
                var propQueryMethod = CodegenProperty.MakePropertyNode(
                    typeof(FAFQueryMethod),
                    GetType(),
                    CodegenSymbolProviderEmpty.INSTANCE,
                    classScope);
                propQueryMethod
                    .GetterBlock
                    .BlockReturn(Ref(MEMBERNAME_QUERYMETHOD));

                // add get-informational methods
                var propQueryInformationals = CodegenProperty.MakePropertyNode(
                    typeof(FAFQueryInformationals),
                    GetType(),
                    CodegenSymbolProviderEmpty.INSTANCE,
                    classScope);
                var queryInformationals = FAFQueryInformationals.From(
                    _namespaceScope.SubstitutionParamsByNumber,
                    _namespaceScope.SubstitutionParamsByName);

                queryInformationals.Make(
                    propQueryInformationals.GetterBlock,
                    classScope);

                // add get-statement-fields method
                var propSubstitutionFieldSetter = CodegenProperty.MakePropertyNode(
                    typeof(FAFQueryMethodAssignerSetter),
                    GetType(),
                    CodegenSymbolProviderEmpty.INSTANCE,
                    classScope);
                StmtClassForgableStmtFields.MakeSubstitutionSetter(
                    _namespaceScope,
                    propSubstitutionFieldSetter.GetterBlock,
                    classScope);

                // make provider methods
                var methods = new CodegenClassMethods();
                var properties = new CodegenClassProperties();
                CodegenStackGenerator.RecursiveBuildStack(providerCtor, "ctor", methods, properties);
                CodegenStackGenerator.RecursiveBuildStack(propQueryMethod, "QueryMethod", methods, properties);
                CodegenStackGenerator.RecursiveBuildStack(propQueryInformationals, "QueryInformationals", methods, properties);
                CodegenStackGenerator.RecursiveBuildStack(propSubstitutionFieldSetter, "SubstitutionFieldSetter", methods, properties);

                // render and compile
                return new CodegenClass(
                    typeof(FAFQueryMethodProvider),
                    _namespaceScope.Namespace,
                    ClassName,
                    classScope,
                    providerExplicitMembers,
                    providerCtor,
                    methods,
                    properties,
                    innerClasses);
            }
            catch (EPException) {
                throw;
            }
            catch (Exception e) {
                throw new EPException(
                    "Fatal exception during code-generation for " +
                    debugInformationProvider.Invoke() +
                    " : " +
                    e.Message,
                    e);
            }
        }