use of com.facebook.presto.bytecode.Parameter in project presto by prestodb.
the class JoinCompiler method generateIsPositionNull.
private static void generateIsPositionNull(ClassDefinition classDefinition, List<FieldDefinition> joinChannelFields) {
Parameter blockIndex = arg("blockIndex", int.class);
Parameter blockPosition = arg("blockPosition", int.class);
MethodDefinition isPositionNullMethod = classDefinition.declareMethod(a(PUBLIC), "isPositionNull", type(boolean.class), blockIndex, blockPosition);
for (FieldDefinition joinChannelField : joinChannelFields) {
BytecodeExpression block = isPositionNullMethod.getThis().getField(joinChannelField).invoke("get", Object.class, blockIndex).cast(Block.class);
IfStatement ifStatement = new IfStatement();
ifStatement.condition(block.invoke("isNull", boolean.class, blockPosition));
ifStatement.ifTrue(constantTrue().ret());
isPositionNullMethod.getBody().append(ifStatement);
}
isPositionNullMethod.getBody().append(constantFalse().ret());
}
use of com.facebook.presto.bytecode.Parameter in project presto by prestodb.
the class AbstractMinMaxBy method generateOutputMethod.
private void generateOutputMethod(ClassDefinition definition, CallSiteBinder binder, Type valueType, Class<?> stateClass) {
Parameter state = arg("state", stateClass);
Parameter out = arg("out", BlockBuilder.class);
MethodDefinition method = definition.declareMethod(a(PUBLIC, STATIC), "output", type(void.class), state, out);
IfStatement ifStatement = new IfStatement().condition(or(state.invoke("isFirstNull", boolean.class), state.invoke("isSecondNull", boolean.class))).ifTrue(new BytecodeBlock().append(out.invoke("appendNull", BlockBuilder.class)).pop());
if (!valueType.equals(UNKNOWN)) {
ifStatement.ifFalse(constantType(binder, valueType).writeValue(out, state.invoke("getSecond", valueType.getJavaType())));
}
method.getBody().append(ifStatement).ret();
}
use of com.facebook.presto.bytecode.Parameter in project presto by prestodb.
the class AccumulatorCompiler method generateEvaluateIntermediate.
private static void generateEvaluateIntermediate(ClassDefinition definition, FieldDefinition stateSerializerField, FieldDefinition stateField) {
Parameter out = arg("out", BlockBuilder.class);
MethodDefinition method = definition.declareMethod(a(PUBLIC), "evaluateIntermediate", type(void.class), out);
Variable thisVariable = method.getThis();
BytecodeExpression stateSerializer = thisVariable.getField(stateSerializerField);
BytecodeExpression state = thisVariable.getField(stateField);
method.getBody().append(stateSerializer.invoke("serialize", void.class, state.cast(Object.class), out)).ret();
}
use of com.facebook.presto.bytecode.Parameter in project presto by prestodb.
the class AccumulatorCompiler method generateGroupedEvaluateIntermediate.
private static void generateGroupedEvaluateIntermediate(ClassDefinition definition, FieldDefinition stateSerializerField, FieldDefinition stateField) {
Parameter groupId = arg("groupId", int.class);
Parameter out = arg("out", BlockBuilder.class);
MethodDefinition method = definition.declareMethod(a(PUBLIC), "evaluateIntermediate", type(void.class), groupId, out);
Variable thisVariable = method.getThis();
BytecodeExpression state = thisVariable.getField(stateField);
BytecodeExpression stateSerializer = thisVariable.getField(stateSerializerField);
method.getBody().append(state.invoke("setGroupId", void.class, groupId.cast(long.class))).append(stateSerializer.invoke("serialize", void.class, state.cast(Object.class), out)).ret();
}
use of com.facebook.presto.bytecode.Parameter in project presto by prestodb.
the class AccumulatorCompiler method generateConstructor.
private static void generateConstructor(ClassDefinition definition, FieldDefinition stateSerializerField, FieldDefinition stateFactoryField, FieldDefinition inputChannelsField, FieldDefinition maskChannelField, FieldDefinition stateField, boolean grouped) {
Parameter stateSerializer = arg("stateSerializer", AccumulatorStateSerializer.class);
Parameter stateFactory = arg("stateFactory", AccumulatorStateFactory.class);
Parameter inputChannels = arg("inputChannels", type(List.class, Integer.class));
Parameter maskChannel = arg("maskChannel", type(Optional.class, Integer.class));
MethodDefinition method = definition.declareConstructor(a(PUBLIC), stateSerializer, stateFactory, inputChannels, maskChannel);
BytecodeBlock body = method.getBody();
Variable thisVariable = method.getThis();
body.comment("super();").append(thisVariable).invokeConstructor(Object.class);
body.append(thisVariable.setField(stateSerializerField, generateRequireNotNull(stateSerializer)));
body.append(thisVariable.setField(stateFactoryField, generateRequireNotNull(stateFactory)));
body.append(thisVariable.setField(inputChannelsField, generateRequireNotNull(inputChannels)));
body.append(thisVariable.setField(maskChannelField, generateRequireNotNull(maskChannel)));
String createState;
if (grouped) {
createState = "createGroupedState";
} else {
createState = "createSingleState";
}
body.append(thisVariable.setField(stateField, stateFactory.invoke(createState, Object.class).cast(stateField.getType())));
body.ret();
}
Aggregations