public BytecodeExpression getValue(BytecodeExpression block, BytecodeExpression position) { Class<?> fromJavaElementType = type.getJavaType(); if (fromJavaElementType == boolean.class) { return invoke("getBoolean", boolean.class, block, position); } if (fromJavaElementType == long.class) { return invoke("getLong", long.class, block, position); } if (fromJavaElementType == double.class) { return invoke("getDouble", double.class, block, position); } if (fromJavaElementType == Slice.class) { return invoke("getSlice", Slice.class, block, position); } return invoke("getObject", Object.class, block, position).cast(fromJavaElementType); }
public BytecodeExpression writeValue(BytecodeExpression blockBuilder, BytecodeExpression value) { Class<?> fromJavaElementType = type.getJavaType(); if (fromJavaElementType == boolean.class) { return invoke("writeBoolean", void.class, blockBuilder, value); } if (fromJavaElementType == long.class) { return invoke("writeLong", void.class, blockBuilder, value); } if (fromJavaElementType == double.class) { return invoke("writeDouble", void.class, blockBuilder, value); } if (fromJavaElementType == Slice.class) { return invoke("writeSlice", void.class, blockBuilder, value); } return invoke("writeObject", void.class, blockBuilder, value.cast(Object.class)); } }
private InputReferenceNode(CallSiteBinder callSiteBinder, Scope scope, Type type, BytecodeExpression block, BytecodeExpression position) { // Generate body based on block and position Variable wasNullVariable = scope.getVariable("wasNull"); Class<?> javaType = type.getJavaType(); if (!javaType.isPrimitive() && javaType != Slice.class) { javaType = Object.class; } IfStatement ifStatement = new IfStatement(); ifStatement.condition(block.invoke("isNull", boolean.class, position)); ifStatement.ifTrue() .putVariable(wasNullVariable, true) .pushJavaDefault(javaType); String methodName = "get" + Primitives.wrap(javaType).getSimpleName(); ifStatement.ifFalse(constantType(callSiteBinder, type).invoke(methodName, javaType, block, position)); this.body = ifStatement; this.block = block; this.position = position; }
constantType(binder, elementType).invoke("createBlockBuilder", BlockBuilder.class, constantNull(BlockBuilderStatus.class), constantInt(stackTypes.size()))); body.append(createBlockBuilder);
Variable singleRowBlockWriter = scope.createTempVariable(BlockBuilder.class); block.append(blockBuilder.set( constantType(binder, rowType).invoke( "createBlockBuilder", BlockBuilder.class, block.append(constantType(binder, rowType).invoke("getObject", Object.class, blockBuilder.cast(Block.class), constantInt(0)) .cast(Block.class)); block.append(context.wasNull().set(constantFalse()));
body.append(blockBuilder.set(constantType(binder, toType).invoke("createBlockBuilder", BlockBuilder.class, constantNull(BlockBuilderStatus.class), array.invoke("getPositionCount", int.class))));
.condition(and(notEqual(keep, constantNull(Boolean.class)), keep.cast(boolean.class))) .ifTrue(new BytecodeBlock() .append(keySqlType.invoke("appendTo", void.class, block, position, singleMapBlockWriter)) .append(valueSqlType.invoke("appendTo", void.class, block, add(position, constantInt(1)), singleMapBlockWriter)))))); body.append(pageBuilder.invoke("declarePosition", void.class)); body.append(constantType(binder, mapType) .invoke( "getObject", Object.class,
.ifFalse(new BytecodeBlock() .append(constantType(binder, transformedKeyType).writeValue(blockBuilder, transformedKeyElement.cast(transformedKeyType.getJavaType()))) .append(valueSqlType.invoke("appendTo", void.class, block, add(position, constantInt(1)), blockBuilder)))); String.class, constantString("Duplicate keys (%s) are not allowed"), newArray(type(Object[].class), ImmutableList.of(transformedKeySqlType.invoke("getObjectValue", Object.class, session, blockBuilder.cast(Block.class), position)))))) .throwObject(); body.append(pageBuilder.invoke("declarePosition", void.class)); body.append(constantType(binder, resultMapType) .invoke( "getObject", Object.class,
.append(loadValueElement) .append(transformedValueElement.set(function.invoke("apply", Object.class, keyElement.cast(Object.class), valueElement.cast(Object.class)).cast(transformedValueJavaType))) .append(keySqlType.invoke("appendTo", void.class, block, position, blockBuilder)) .append(writeTransformedValueElement))); body.append(pageBuilder.invoke("declarePosition", void.class)); body.append(constantType(binder, resultMapType) .invoke( "getObject", Object.class,
.append(newInstance(PageBuilder.class, constantType(binder, new ArrayType(outputType)).invoke("getTypeParameters", List.class)).ret());
public BytecodeExpression getValue(BytecodeExpression block, BytecodeExpression position) { Class<?> fromJavaElementType = type.getJavaType(); if (fromJavaElementType == boolean.class) { return invoke("getBoolean", boolean.class, block, position); } if (fromJavaElementType == long.class) { return invoke("getLong", long.class, block, position); } if (fromJavaElementType == double.class) { return invoke("getDouble", double.class, block, position); } if (fromJavaElementType == Slice.class) { return invoke("getSlice", Slice.class, block, position); } return invoke("getObject", Object.class, block, position).cast(fromJavaElementType); }
public BytecodeExpression writeValue(BytecodeExpression blockBuilder, BytecodeExpression value) { Class<?> fromJavaElementType = type.getJavaType(); if (fromJavaElementType == boolean.class) { return invoke("writeBoolean", void.class, blockBuilder, value); } if (fromJavaElementType == long.class) { return invoke("writeLong", void.class, blockBuilder, value); } if (fromJavaElementType == double.class) { return invoke("writeDouble", void.class, blockBuilder, value); } if (fromJavaElementType == Slice.class) { return invoke("writeSlice", void.class, blockBuilder, value); } return invoke("writeObject", void.class, blockBuilder, value.cast(Object.class)); } }
private void generateAppendToMethod( ClassDefinition classDefinition, CallSiteBinder callSiteBinder, List<Type> types, List<FieldDefinition> blockFields, FieldDefinition positionField) { Parameter pageBuilder = arg("pageBuilder", PageBuilder.class); MethodDefinition method = classDefinition.declareMethod( a(PUBLIC), "appendTo", type(void.class), pageBuilder); Variable thisVariable = method.getThis(); for (int index = 0; index < blockFields.size(); index++) { Type type = types.get(index); method.getBody() .comment("%s.appendTo(block_%s, position, pageBuilder.getBlockBuilder(%s));", type.getClass(), index, index) .append(constantType(callSiteBinder, type).invoke("appendTo", void.class, thisVariable.getField(blockFields.get(index)), thisVariable.getField(positionField), pageBuilder.invoke("getBlockBuilder", BlockBuilder.class, constantInt(index)))); } method.getBody() .ret(); }
constantType(binder, elementType).invoke("createBlockBuilder", BlockBuilder.class, newInstance(BlockBuilderStatus.class), constantInt(stackTypes.size()))); body.append(createBlockBuilder);
body.append(blockBuilder.set(constantType(binder, toType).invoke("createBlockBuilder", BlockBuilder.class, newInstance(BlockBuilderStatus.class), array.invoke("getPositionCount", int.class))));
position, page, constantType(callSiteBinder, BigintType.BIGINT).invoke("getLong", long.class, probeHashBlock,