use of com.facebook.presto.bytecode.expression.BytecodeExpression in project presto by prestodb.
the class AccumulatorCompiler method generateSetGroupIdFromGroupIdsBlock.
private static void generateSetGroupIdFromGroupIdsBlock(Scope scope, FieldDefinition stateField, BytecodeBlock block) {
Variable groupIdsBlock = scope.getVariable("groupIdsBlock");
Variable position = scope.getVariable("position");
BytecodeExpression state = scope.getThis().getField(stateField);
block.append(state.invoke("setGroupId", void.class, groupIdsBlock.invoke("getGroupId", long.class, position)));
}
use of com.facebook.presto.bytecode.expression.BytecodeExpression 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.expression.BytecodeExpression 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.expression.BytecodeExpression in project presto by prestodb.
the class AccumulatorCompiler method generateGetEstimatedSize.
private static void generateGetEstimatedSize(ClassDefinition definition, FieldDefinition stateField) {
MethodDefinition method = definition.declareMethod(a(PUBLIC), "getEstimatedSize", type(long.class));
BytecodeExpression state = method.getThis().getField(stateField);
method.getBody().append(state.invoke("getEstimatedSize", long.class).ret());
}
use of com.facebook.presto.bytecode.expression.BytecodeExpression 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());
SqlTypeBytecodeExpression valueSqlType = constantType(binder, valueType);
BytecodeExpression getValueExpression;
if (valueType.getJavaType().isPrimitive()) {
getValueExpression = state.invoke("getSecond", valueType.getJavaType());
} else {
getValueExpression = valueSqlType.getValue(state.invoke("getSecondBlock", Block.class), state.invoke("getSecondPosition", int.class));
}
ifStatement.ifFalse(valueSqlType.writeValue(out, getValueExpression));
method.getBody().append(ifStatement).ret();
}
Aggregations