protected List<CodegenExpression> additionalParams(CodegenMethod method, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { List<CodegenExpression> params = new ArrayList<>(); params.add(constant(indexedProps)); params.add(constant(hashCoercionDesc.getCoercionTypes())); params.add(constant(unique)); Class[] propertyTypes = EventTypeUtility.getPropertyTypes(eventType, indexedProps); EventPropertyGetterSPI[] getters = EventTypeUtility.getGetters(eventType, indexedProps); CodegenExpression getter = EventTypeUtility.codegenGetterMayMultiKeyWCoerce(eventType, getters, propertyTypes, hashCoercionDesc.getCoercionTypes(), method, this.getClass(), classScope); params.add(getter); return params; }
public Collection<CodegenExpression> additionalParams(CodegenMethod method, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { EventPropertyGetterSPI[] getterSPIS = QueryGraphValueEntryHashKeyedForge.getGettersIfPropsOnly(hashKeys); ExprForge[] forges = QueryGraphValueEntryHashKeyedForge.getForges(hashKeys); Class[] types = ExprNodeUtilityQuery.getExprResultTypes(forges); // we take coercion types from the index plan as the index plan is always accurate but not always available (for tables it is not) Class[] coercionTypes; QueryPlanIndexItemForge indexForge = indexSpecs.getItems().get(getIndexNum()[0]); if (indexForge != null) { coercionTypes = indexForge.getHashTypes(); } else { coercionTypes = optionalCoercionTypes; } CodegenExpression getter; if (getterSPIS != null) { getter = EventTypeUtility.codegenGetterMayMultiKeyWCoerce(typesPerStream[getLookupStream()], getterSPIS, types, coercionTypes, method, this.getClass(), classScope); } else { getter = ExprNodeUtilityCodegen.codegenEvaluatorMayMultiKeyWCoerce(forges, coercionTypes, method, this.getClass(), classScope); } return Collections.singletonList(getter); } }
Class[] propertyTypes = EventTypeUtility.getPropertyTypes(eventType, optKeyProps); EventPropertyGetterSPI[] getters = EventTypeUtility.getGetters(eventType, optKeyProps); hashGetter = EventTypeUtility.codegenGetterMayMultiKeyWCoerce(eventType, getters, propertyTypes, optKeyTypes, method, this.getClass(), classScope);
public CodegenExpression make(CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { CodegenMethod method = parent.makeChild(PollResultIndexingStrategyHash.class, this.getClass(), classScope); EventPropertyGetterSPI[] propertyGetters = EventTypeUtility.getGetters(eventType, propertyNames); Class[] propertyTypes = EventTypeUtility.getPropertyTypes(eventType, propertyNames); CodegenExpression valueGetter = EventTypeUtility.codegenGetterMayMultiKeyWCoerce(eventType, propertyGetters, propertyTypes, coercionTypes, method, this.getClass(), classScope); method.getBlock() .declareVar(PollResultIndexingStrategyHash.class, "strat", newInstance(PollResultIndexingStrategyHash.class)) .exprDotMethod(ref("strat"), "setStreamNum", constant(streamNum)) .exprDotMethod(ref("strat"), "setPropertyNames", constant(propertyNames)) .exprDotMethod(ref("strat"), "setValueGetter", valueGetter) .exprDotMethod(ref("strat"), "init") .methodReturn(ref("strat")); return localMethod(method); } }
EventPropertyGetterSPI[] propertyGetters = EventTypeUtility.getGetters(eventType, hashProps); Class[] propertyTypes = EventTypeUtility.getPropertyTypes(eventType, hashProps); valueGetter = EventTypeUtility.codegenGetterMayMultiKeyWCoerce(eventType, propertyGetters, propertyTypes, hashTypes, method, this.getClass(), classScope);
public CodegenExpression makeCodegen(CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { CodegenMethod method = parent.makeChild(ContextControllerDetailKeyedItem.class, this.getClass(), classScope); Class[] types = EventTypeUtility.getPropertyTypes(filterSpecCompiled.getFilterForEventType(), propertyNames.toArray(new String[0])); method.getBlock() .declareVar(FilterSpecActivatable.class, "activatable", localMethod(filterSpecCompiled.makeCodegen(method, symbols, classScope))) .declareVar(ExprFilterSpecLookupable[].class, "lookupables", newArrayByLength(ExprFilterSpecLookupable.class, constant(getters.length))); for (int i = 0; i < getters.length; i++) { CodegenExpression getter = EventTypeUtility.codegenGetterWCoerce(getters[i], types[i], types[i], method, this.getClass(), classScope); CodegenExpression lookupable = newInstance(ExprFilterSpecLookupable.class, constant(propertyNames.get(i)), getter, constant(types[i]), constantFalse()); CodegenExpression eventType = exprDotMethod(ref("activatable"), "getFilterForEventType"); method.getBlock() .assignArrayElement(ref("lookupables"), constant(i), lookupable) .expression(exprDotMethodChain(symbols.getAddInitSvc(method)).add(EPStatementInitServices.GETFILTERSHAREDLOOKUPABLEREGISTERY).add("registerLookupable", eventType, arrayAtIndex(ref("lookupables"), constant(i)))); } method.getBlock() .declareVar(ContextControllerDetailKeyedItem.class, "item", newInstance(ContextControllerDetailKeyedItem.class)) .exprDotMethod(ref("item"), "setGetter", EventTypeUtility.codegenGetterMayMultiKeyWCoerce(filterSpecCompiled.getFilterForEventType(), getters, types, null, method, this.getClass(), classScope)) .exprDotMethod(ref("item"), "setLookupables", ref("lookupables")) .exprDotMethod(ref("item"), "setPropertyTypes", constant(types)) .exprDotMethod(ref("item"), "setFilterSpecActivatable", ref("activatable")) .exprDotMethod(ref("item"), "setAliasName", constant(aliasName)) .methodReturn(ref("item")); return localMethod(method); } }
public CodegenMethod initializeCodegen(CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { // add aggregation row+factory+serde as inner classes AggregationClassNames aggregationClassNames = new AggregationClassNames(); List<CodegenInnerClass> inners = AggregationServiceFactoryCompiler.makeTable(AggregationCodegenRowLevelDesc.fromTopOnly(plan.getAggDesc()), this.getClass(), classScope, aggregationClassNames, className); classScope.addInnerClasses(inners); CodegenMethod method = parent.makeChild(StatementAgentInstanceFactoryCreateTable.class, this.getClass(), classScope); CodegenExpression primaryKeyGetter = constantNull(); if (plan.getPrimaryKeyGetters() != null) { primaryKeyGetter = EventTypeUtility.codegenGetterMayMultiKeyWCoerce(plan.getInternalEventType(), plan.getPrimaryKeyGetters(), plan.getPrimaryKeyTypes(), null, method, this.getClass(), classScope); } method.getBlock() .declareVar(StatementAgentInstanceFactoryCreateTable.class, "saiff", newInstance(StatementAgentInstanceFactoryCreateTable.class)) .exprDotMethod(ref("saiff"), "setTableName", constant(tableName)) .exprDotMethod(ref("saiff"), "setPublicEventType", EventTypeUtility.resolveTypeCodegen(plan.getPublicEventType(), symbols.getAddInitSvc(method))) .exprDotMethod(ref("saiff"), "setEventToPublic", makeEventToPublic(method, symbols, classScope)) .exprDotMethod(ref("saiff"), "setAggregationRowFactory", CodegenExpressionBuilder.newInstance(aggregationClassNames.getRowFactoryTop(), ref("this"))) .exprDotMethod(ref("saiff"), "setAggregationSerde", CodegenExpressionBuilder.newInstance(aggregationClassNames.getRowSerdeTop(), ref("this"))) .exprDotMethod(ref("saiff"), "setPrimaryKeyGetter", primaryKeyGetter) .exprDotMethod(symbols.getAddInitSvc(method), "addReadyCallback", ref("saiff")) .methodReturn(ref("saiff")); return method; }
EventPropertyGetterSPI[] propertyGetters = EventTypeUtility.getGetters(eventType, optHashPropertyNames); Class[] propertyTypes = EventTypeUtility.getPropertyTypes(eventType, optHashPropertyNames); hashGetter = EventTypeUtility.codegenGetterMayMultiKeyWCoerce(eventType, propertyGetters, propertyTypes, optHashCoercedTypes, method, this.getClass(), classScope);