protected static CodegenExpression pairNotNull(String name, String get) { return and(notEqualsNull(ref(name)), notEqualsNull(exprDotMethod(ref(name), get))); } }
public CodegenBlock ifRefNotNull(String ref) { return ifCondition(notEqualsNull(ref(ref))); }
public CodegenExpression underlyingExistsCodegen(CodegenExpression underlyingExpression, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { return notEqualsNull(exprDotMethodChain(underlyingExpression).add("getSchema").add("getField", constant(propertyName))); }
public CodegenExpression codegen(Class requiredType, CodegenMethodScope codegenMethodScope, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { CodegenMethod methodNode = codegenMethodScope.makeChild(resultType, this.getClass(), codegenClassScope); CodegenExpressionRef refExprEvalCtx = exprSymbol.getAddExprEvalCtx(methodNode); methodNode.getBlock() .ifCondition(notEqualsNull(refExprEvalCtx)) .blockReturn(CodegenLegoCast.castSafeFromObjectType(resultType, getter.eventBeanGetCodegen(exprDotMethod(refExprEvalCtx, "getContextProperties"), methodNode, codegenClassScope))) .methodReturn(constantNull()); return localMethod(methodNode); }
public void clearResultsCodegen(CodegenMethod method, CodegenClassScope classScope) { method.getBlock().ifCondition(notEqualsNull(REF_AGGREGATORSTOPLEVEL)) .exprDotMethod(REF_AGGREGATORSTOPLEVEL, "clear"); for (int i = 0; i < localGroupByPlan.getAllLevelsForges().length; i++) { method.getBlock().exprDotMethod(arrayAtIndex(REF_AGGREGATORSPERLEVELANDGROUP, constant(i)), "clear"); } }
private CodegenMethod isExistsPropertyCodegen(CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { return codegenMethodScope.makeChild(boolean.class, this.getClass(), codegenClassScope).addParam(GenericData.Record.class, "record").getBlock() .declareVar(GenericData.Record.class, "inner", cast(GenericData.Record.class, exprDotMethod(ref("record"), "get", constant(posTop)))) .ifRefNullReturnFalse("inner") .methodReturn(notEqualsNull(exprDotMethodChain(ref("inner")).add("getSchema").add("getField", constant(propertyName)))); }
private CodegenExpression getNumGroupsCodegen(CodegenMethodScope parent, CodegenClassScope classScope) { CodegenMethod method = parent.makeChild(int.class, this.getClass(), classScope); method.getBlock().declareVar(int.class, "size", constant(0)) .ifCondition(notEqualsNull(REF_AGGREGATORSTOPLEVEL)).increment("size").blockEnd(); for (int i = 0; i < localGroupByPlan.getAllLevelsForges().length; i++) { method.getBlock().assignCompound("size", "+", exprDotMethod(arrayAtIndex(REF_AGGREGATORSPERLEVELANDGROUP, constant(i)), "size")); } method.getBlock().methodReturn(ref("size")); return localMethod(method); }
public CodegenExpression evaluateCodegen(Class requiredType, CodegenMethodScope codegenMethodScope, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { CodegenMethod methodNode = codegenMethodScope.makeChild(EventBean[].class, this.getClass(), codegenClassScope); methodNode.getBlock() .declareVar(Object.class, "result", enumerationForge.evaluateGetROCollectionEventsCodegen(methodNode, exprSymbol, codegenClassScope)) .ifCondition(and(notEqualsNull(ref("result")), instanceOf(ref("result"), Collection.class))) .declareVar(Collection.class, EventBean.class, "events", cast(Collection.class, ref("result"))) .blockReturn(cast(EventBean[].class, exprDotMethod(ref("events"), "toArray", newArrayByLength(EventBean.class, exprDotMethod(ref("events"), "size"))))) .methodReturn(cast(EventBean[].class, ref("result"))); return localMethod(methodNode); }
public void acceptGroupDetailCodegen(CodegenMethod method, CodegenClassScope classScope) { method.getBlock().exprDotMethod(REF_AGGVISITOR, "visitGrouped", getNumGroupsCodegen(method, classScope)) .ifCondition(notEqualsNull(REF_AGGREGATORSTOPLEVEL)) .exprDotMethod(REF_AGGVISITOR, "visitGroup", constantNull(), REF_AGGREGATORSTOPLEVEL); for (int i = 0; i < localGroupByPlan.getAllLevelsForges().length; i++) { method.getBlock().forEach(Map.Entry.class, "entry", exprDotMethod(arrayAtIndex(REF_AGGREGATORSPERLEVELANDGROUP, constant(i)), "entrySet")) .exprDotMethod(REF_AGGVISITOR, "visitGroup", exprDotMethod(ref("entry"), "getKey"), exprDotMethod(ref("entry"), "getValue")); } }
public void processCodegen(CodegenMethod method, CodegenClassScope classScope) { method.getBlock().apply(instblock(classScope, "qOutputProcessNonBufferedJoin", REF_NEWDATA, REF_OLDDATA)); generateRSPCall("processJoinResult", method, classScope); method.getBlock().ifRefNull("newOldEvents") .apply(instblock(classScope, "aOutputProcessNonBufferedJoin")) .blockReturnNoValue(); if (postProcess != null) { method.getBlock().expression(localMethod(postProcess.postProcessCodegenMayNullMayForce(classScope, method), constantFalse(), ref("newOldEvents"))); } else { CodegenBlock ifPairHasData = method.getBlock().ifCondition(or(notEqualsNull(exprDotMethod(ref("newOldEvents"), "getFirst")), notEqualsNull(exprDotMethod(ref("newOldEvents"), "getSecond")))); ifPairHasData.exprDotMethod(REF_CHILD, "newResult", ref("newOldEvents")) .ifElseIf(and(equalsNull(ref("newData")), equalsNull(ref("oldData")))) .exprDotMethod(REF_CHILD, "newResult", ref("newOldEvents")); } method.getBlock().apply(instblock(classScope, "aOutputProcessNonBufferedJoin")); }
public static void applyViewResultCodegen(ResultSetProcessorAggregateGroupedForge forge, CodegenClassScope classScope, CodegenMethod method, CodegenInstanceAux instance) { CodegenMethod generateGroupKeySingle = generateGroupKeySingleCodegen(forge.getGroupKeyNodeExpressions(), classScope, instance); method.getBlock().declareVar(EventBean[].class, "eventsPerStream", newArrayByLength(EventBean.class, constant(1))) .ifCondition(notEqualsNull(REF_NEWDATA)) .forEach(EventBean.class, "aNewData", REF_NEWDATA) .assignArrayElement("eventsPerStream", constant(0), ref("aNewData")) .declareVar(Object.class, "mk", localMethod(generateGroupKeySingle, ref("eventsPerStream"), constantTrue())) .exprDotMethod(REF_AGGREGATIONSVC, "applyEnter", ref("eventsPerStream"), ref("mk"), REF_AGENTINSTANCECONTEXT) .blockEnd() .blockEnd() .ifCondition(notEqualsNull(REF_OLDDATA)) .forEach(EventBean.class, "anOldData", REF_OLDDATA) .assignArrayElement("eventsPerStream", constant(0), ref("anOldData")) .declareVar(Object.class, "mk", localMethod(generateGroupKeySingle, ref("eventsPerStream"), constantFalse())) .exprDotMethod(REF_AGGREGATIONSVC, "applyLeave", ref("eventsPerStream"), ref("mk"), REF_AGENTINSTANCECONTEXT) .blockEnd() .blockEnd(); }
public static void applyViewResultCodegen(ResultSetProcessorRowPerGroupForge forge, CodegenClassScope classScope, CodegenMethod method, CodegenInstanceAux instance) { CodegenMethod generateGroupKeySingle = generateGroupKeySingleCodegen(forge.getGroupKeyNodeExpressions(), classScope, instance); method.getBlock().declareVar(EventBean[].class, "eventsPerStream", newArrayByLength(EventBean.class, constant(1))) .ifCondition(notEqualsNull(REF_NEWDATA)) .forEach(EventBean.class, "aNewData", REF_NEWDATA) .assignArrayElement("eventsPerStream", constant(0), ref("aNewData")) .declareVar(Object.class, "mk", localMethod(generateGroupKeySingle, ref("eventsPerStream"), constantTrue())) .exprDotMethod(REF_AGGREGATIONSVC, "applyEnter", ref("eventsPerStream"), ref("mk"), REF_AGENTINSTANCECONTEXT) .blockEnd() .blockEnd() .ifCondition(notEqualsNull(REF_OLDDATA)) .forEach(EventBean.class, "anOldData", REF_OLDDATA) .assignArrayElement("eventsPerStream", constant(0), ref("anOldData")) .declareVar(Object.class, "mk", localMethod(generateGroupKeySingle, ref("eventsPerStream"), constantFalse())) .exprDotMethod(REF_AGGREGATIONSVC, "applyLeave", ref("eventsPerStream"), ref("mk"), REF_AGENTINSTANCECONTEXT) .blockEnd() .blockEnd(); }
public static CodegenExpression codegen(ExprCaseNodeForge forge, CodegenMethodScope codegenMethodScope, ExprForgeCodegenSymbol exprSymbol, CodegenClassScope codegenClassScope) { Class evaluationType = forge.getEvaluationType() == null ? Map.class : forge.getEvaluationType(); CodegenMethod methodNode = codegenMethodScope.makeChild(evaluationType, ExprCaseNodeForgeEvalSyntax1.class, codegenClassScope); CodegenBlock block = methodNode.getBlock().declareVar(Boolean.class, "when", constantFalse()); for (UniformPair<ExprNode> pair : forge.getWhenThenNodeList()) { block.assignRef("when", pair.getFirst().getForge().evaluateCodegen(Boolean.class, methodNode, exprSymbol, codegenClassScope)); block.ifCondition(and(notEqualsNull(ref("when")), ref("when"))) .blockReturn(codegenToType(forge, pair.getSecond(), methodNode, exprSymbol, codegenClassScope)); } if (forge.getOptionalElseExprNode() != null) { block.methodReturn(codegenToType(forge, forge.getOptionalElseExprNode(), methodNode, exprSymbol, codegenClassScope)); } else { block.methodReturn(constantNull()); } return localMethod(methodNode); }
public static CodegenMethod populateSelectJoinEventsHavingCodegen(CodegenClassScope classScope, CodegenInstanceAux instance) { Consumer<CodegenMethod> code = methodNode -> { methodNode.getBlock().ifRefNull("events").blockReturnNoValue(); { CodegenBlock forEach = methodNode.getBlock().forEach(MultiKey.class, "key", ref("events")); forEach.declareVar(EventBean[].class, NAME_EPS, cast(EventBean[].class, exprDotMethod(ref("key"), "getArray"))); forEach.ifCondition(not(localMethod(instance.getMethods().getMethod("evaluateHavingClause"), REF_EPS, REF_ISNEWDATA, REF_EXPREVALCONTEXT))).blockContinue(); forEach.declareVar(EventBean.class, "resultEvent", exprDotMethod(REF_SELECTEXPRNONMEMBER, "process", REF_EPS, REF_ISNEWDATA, REF_ISSYNTHESIZE, REF_EXPREVALCONTEXT)) .ifCondition(notEqualsNull(ref("resultEvent"))) .exprDotMethod(ref("result"), "add", ref("resultEvent")); } }; return instance.getMethods().addMethod(void.class, "populateSelectJoinEventsHavingCodegen", CodegenNamedParam.from(SelectExprProcessor.class, NAME_SELECTEXPRPROCESSOR, Set.class, "events", boolean.class, NAME_ISNEWDATA, boolean.class, NAME_ISSYNTHESIZE, List.class, "result", ExprEvaluatorContext.class, NAME_EXPREVALCONTEXT), ResultSetProcessorUtil.class, classScope, code); }
static void sortPlainCodegenCodegen(OrderByProcessorOrderedLimitForge forge, CodegenMethod method, CodegenClassScope classScope, CodegenNamedMethods namedMethods) { CodegenExpression limit1 = equalsIdentity(exprDotMethod(REF_ROWLIMITPROCESSOR, "getCurrentRowLimit"), constant(1)); CodegenExpression offset0 = equalsIdentity(exprDotMethod(REF_ROWLIMITPROCESSOR, "getCurrentOffset"), constant(0)); CodegenExpression haveOutgoing = and(notEqualsNull(REF_OUTGOINGEVENTS), relational(arrayLength(REF_OUTGOINGEVENTS), GT, constant(1))); CodegenMethod determineLocalMinMax = OrderByProcessorImpl.determineLocalMinMaxCodegen(forge.getOrderByProcessorForge(), classScope, namedMethods); CodegenMethod sortPlain = method.makeChild(EventBean[].class, OrderByProcessorOrderedLimit.class, classScope).addParam(SORTPLAIN_PARAMS); OrderByProcessorImpl.sortPlainCodegen(forge.getOrderByProcessorForge(), sortPlain, classScope, namedMethods); method.getBlock().exprDotMethod(REF_ROWLIMITPROCESSOR, "determineCurrentLimit") .ifCondition(and(limit1, offset0, haveOutgoing)) .declareVar(EventBean.class, "minmax", localMethod(determineLocalMinMax, REF_OUTGOINGEVENTS, REF_GENERATINGEVENTS, REF_ISNEWDATA, REF_EXPREVALCONTEXT, REF_AGGREGATIONSVC)) .blockReturn(newArrayWithInit(EventBean.class, ref("minmax"))) .declareVar(EventBean[].class, "sorted", localMethod(sortPlain, REF_OUTGOINGEVENTS, REF_GENERATINGEVENTS, REF_ISNEWDATA, REF_EXPREVALCONTEXT, REF_AGGREGATIONSVC)) .methodReturn(exprDotMethod(REF_ROWLIMITPROCESSOR, "applyLimit", ref("sorted"))); }
public static CodegenExpression codegen(EnumSelectFromEventsForge forge, EnumForgeCodegenParams args, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { ExprForgeCodegenSymbol scope = new ExprForgeCodegenSymbol(false, null); CodegenMethod methodNode = codegenMethodScope.makeChildWithScope(Collection.class, EnumSelectFromEventsForgeEval.class, scope, codegenClassScope).addParam(EnumForgeCodegenNames.PARAMS); CodegenBlock block = methodNode.getBlock() .ifCondition(exprDotMethod(EnumForgeCodegenNames.REF_ENUMCOLL, "isEmpty")) .blockReturn(EnumForgeCodegenNames.REF_ENUMCOLL) .declareVar(ArrayDeque.class, "result", newInstance(ArrayDeque.class, exprDotMethod(EnumForgeCodegenNames.REF_ENUMCOLL, "size"))); CodegenBlock forEach = block.forEach(EventBean.class, "next", EnumForgeCodegenNames.REF_ENUMCOLL) .assignArrayElement(EnumForgeCodegenNames.REF_EPS, constant(forge.streamNumLambda), ref("next")) .declareVar(Object.class, "item", forge.innerExpression.evaluateCodegen(Object.class, methodNode, scope, codegenClassScope)) .ifCondition(notEqualsNull(ref("item"))) .expression(exprDotMethod(ref("result"), "add", ref("item"))); block.methodReturn(ref("result")); return localMethod(methodNode, args.getEps(), args.getEnumcoll(), args.getIsNewData(), args.getExprCtx()); } }
public static CodegenMethod populateSelectEventsHavingCodegen(CodegenClassScope classScope, CodegenInstanceAux instance) { Consumer<CodegenMethod> code = methodNode -> { methodNode.getBlock() .ifRefNull("events").blockReturnNoValue() .declareVar(EventBean[].class, "eventsPerStream", newArrayByLength(EventBean.class, constant(1))); { CodegenBlock forEach = methodNode.getBlock().forEach(EventBean.class, "theEvent", ref("events")); forEach.assignArrayElement(REF_EPS, constant(0), ref("theEvent")); forEach.ifCondition(not(localMethod(instance.getMethods().getMethod("evaluateHavingClause"), REF_EPS, REF_ISNEWDATA, REF_EXPREVALCONTEXT))).blockContinue(); forEach.declareVar(EventBean.class, "resultEvent", exprDotMethod(REF_SELECTEXPRNONMEMBER, "process", REF_EPS, REF_ISNEWDATA, REF_ISSYNTHESIZE, REF_EXPREVALCONTEXT)) .ifCondition(notEqualsNull(ref("resultEvent"))) .exprDotMethod(ref("result"), "add", ref("resultEvent")); } }; return instance.getMethods().addMethod(void.class, "populateSelectEventsHaving", CodegenNamedParam.from(SelectExprProcessor.class, NAME_SELECTEXPRPROCESSOR, EventBean[].class, "events", boolean.class, NAME_ISNEWDATA, boolean.class, NAME_ISSYNTHESIZE, List.class, "result", ExprEvaluatorContext.class, NAME_EXPREVALCONTEXT), ResultSetProcessorUtil.class, classScope, code); }
public static CodegenMethod populateSelectJoinEventsHavingWithOrderByCodegen(CodegenClassScope classScope, CodegenInstanceAux instance) { Consumer<CodegenMethod> code = methodNode -> { methodNode.getBlock().ifRefNull("events").blockReturnNoValue(); { CodegenBlock forEach = methodNode.getBlock().forEach(MultiKey.class, "key", ref("events")); forEach.declareVar(EventBean[].class, NAME_EPS, cast(EventBean[].class, exprDotMethod(ref("key"), "getArray"))); forEach.ifCondition(not(localMethod(instance.getMethods().getMethod("evaluateHavingClause"), REF_EPS, REF_ISNEWDATA, REF_EXPREVALCONTEXT))).blockContinue(); forEach.declareVar(EventBean.class, "resultEvent", exprDotMethod(REF_SELECTEXPRNONMEMBER, "process", REF_EPS, REF_ISNEWDATA, REF_ISSYNTHESIZE, REF_EXPREVALCONTEXT)) .ifCondition(notEqualsNull(ref("resultEvent"))) .exprDotMethod(ref("result"), "add", ref("resultEvent")) .exprDotMethod(ref("sortKeys"), "add", exprDotMethod(REF_ORDERBYPROCESSOR, "getSortKey", REF_EPS, REF_ISNEWDATA, REF_EXPREVALCONTEXT)); } }; return instance.getMethods().addMethod(void.class, "populateSelectJoinEventsHavingWithOrderBy", CodegenNamedParam.from(SelectExprProcessor.class, NAME_SELECTEXPRPROCESSOR, OrderByProcessor.class, NAME_ORDERBYPROCESSOR, Set.class, "events", boolean.class, NAME_ISNEWDATA, boolean.class, NAME_ISSYNTHESIZE, List.class, "result", List.class, "sortKeys", ExprEvaluatorContext.class, NAME_EXPREVALCONTEXT), ResultSetProcessorUtil.class, classScope, code); }
public static void applyJoinResultCodegen(ResultSetProcessorRowPerGroupForge forge, CodegenClassScope classScope, CodegenMethod method, CodegenInstanceAux instance) { CodegenMethod generateGroupKeySingle = generateGroupKeySingleCodegen(forge.getGroupKeyNodeExpressions(), classScope, instance); method.getBlock() .ifCondition(not(exprDotMethod(REF_NEWDATA, "isEmpty"))) .forEach(MultiKey.class, "aNewEvent", REF_NEWDATA) .declareVar(EventBean[].class, "eventsPerStream", cast(EventBean[].class, exprDotMethod(ref("aNewEvent"), "getArray"))) .declareVar(Object.class, "mk", localMethod(generateGroupKeySingle, ref("eventsPerStream"), constantTrue())) .exprDotMethod(REF_AGGREGATIONSVC, "applyEnter", ref("eventsPerStream"), ref("mk"), REF_AGENTINSTANCECONTEXT) .blockEnd() .blockEnd() .ifCondition(and(notEqualsNull(REF_OLDDATA), not(exprDotMethod(REF_OLDDATA, "isEmpty")))) .forEach(MultiKey.class, "anOldEvent", REF_OLDDATA) .declareVar(EventBean[].class, "eventsPerStream", cast(EventBean[].class, exprDotMethod(ref("anOldEvent"), "getArray"))) .declareVar(Object.class, "mk", localMethod(generateGroupKeySingle, ref("eventsPerStream"), constantFalse())) .exprDotMethod(REF_AGGREGATIONSVC, "applyLeave", ref("eventsPerStream"), ref("mk"), REF_AGENTINSTANCECONTEXT) .blockEnd() .blockEnd(); }
public static void processViewResultCodegen(ResultSetProcessorAggregateGroupedForge forge, CodegenClassScope classScope, CodegenMethod method, CodegenInstanceAux instance) { CodegenMethod generateGroupKeyArrayView = generateGroupKeyArrayViewCodegen(forge.getGroupKeyNodeExpressions(), classScope, instance); CodegenMethod generateOutputEventsView = generateOutputEventsViewCodegen(forge, classScope, instance); CodegenMethod processViewResultNewDepthOne = processViewResultNewDepthOneCodegen(forge, classScope, instance); CodegenMethod processViewResultPairDepthOneNoRStream = processViewResultPairDepthOneCodegen(forge, classScope, instance); CodegenBlock ifShortcut = method.getBlock().ifCondition(and(notEqualsNull(REF_NEWDATA), equalsIdentity(arrayLength(REF_NEWDATA), constant(1)))); ifShortcut.ifCondition(or(equalsNull(REF_OLDDATA), equalsIdentity(arrayLength(REF_OLDDATA), constant(0)))) .blockReturn(localMethod(processViewResultNewDepthOne, REF_NEWDATA, REF_ISSYNTHESIZE)) .ifCondition(equalsIdentity(arrayLength(REF_OLDDATA), constant(1))) .blockReturn(localMethod(processViewResultPairDepthOneNoRStream, REF_NEWDATA, REF_OLDDATA, REF_ISSYNTHESIZE)); method.getBlock().declareVar(Object[].class, "newDataGroupByKeys", localMethod(generateGroupKeyArrayView, REF_NEWDATA, constantTrue())) .declareVar(Object[].class, "oldDataGroupByKeys", localMethod(generateGroupKeyArrayView, REF_OLDDATA, constantFalse())) .declareVar(EventBean[].class, "eventsPerStream", newArrayByLength(EventBean.class, constant(1))) .staticMethod(ResultSetProcessorGroupedUtil.class, METHOD_APPLYAGGVIEWRESULTKEYEDVIEW, REF_AGGREGATIONSVC, REF_AGENTINSTANCECONTEXT, REF_NEWDATA, ref("newDataGroupByKeys"), REF_OLDDATA, ref("oldDataGroupByKeys"), ref("eventsPerStream")); method.getBlock().declareVar(EventBean[].class, "selectOldEvents", forge.isSelectRStream() ? localMethod(generateOutputEventsView, REF_OLDDATA, ref("oldDataGroupByKeys"), constantFalse(), REF_ISSYNTHESIZE, ref("eventsPerStream")) : constantNull()) .declareVar(EventBean[].class, "selectNewEvents", localMethod(generateOutputEventsView, REF_NEWDATA, ref("newDataGroupByKeys"), constantTrue(), REF_ISSYNTHESIZE, ref("eventsPerStream"))) .methodReturn(staticMethod(ResultSetProcessorUtil.class, METHOD_TOPAIRNULLIFALLNULL, ref("selectNewEvents"), ref("selectOldEvents"))); }