public ConstantPageProjection(Object value, Type type) { this.type = type; BlockBuilder blockBuilder = type.createBlockBuilder(null, 1); writeNativeValue(type, blockBuilder, value); this.value = blockBuilder.build(); }
public static Block nativeValueToBlock(Type type, Object object) { if (object != null && !Primitives.wrap(type.getJavaType()).isInstance(object)) { throw new IllegalArgumentException(String.format("Object '%s' does not match type %s", object, type.getJavaType())); } BlockBuilder blockBuilder = type.createBlockBuilder(null, 1); writeNativeValue(type, blockBuilder, object); return blockBuilder.build(); }
public Builder add(Object... values) { pageBuilder.declarePosition(); for (int i = 0; i < types.size(); i++) { writeNativeValue(types.get(i), pageBuilder.getBlockBuilder(i), values[i]); } if (pageBuilder.isFull()) { flushPage(); } return this; }
private static void appendToBlockBuilder(Type type, Object hiveValue, BlockBuilder blockBuilder) { writeNativeValue(type, blockBuilder, toNativeContainerValue(type, hiveValue)); } }
private static Object toTypeObjectValue(Session session, Type type, Object value) { BlockBuilder blockBuilder = type.createBlockBuilder(null, 1); writeNativeValue(type, blockBuilder, value); return type.getObjectValue(session.toConnectorSession(), blockBuilder, 0); } }
private static void writeEntries(int expectedEntries, BlockBuilder blockBuilder, Type type) { for (int i = 0; i < expectedEntries; i++) { writeNativeValue(type, blockBuilder, castIntegerToObject(i, type)); } }
private static Block createBlock(Type type, Object[] values) { BlockBuilder blockBuilder = type.createBlockBuilder(null, values.length); for (Object value : values) { writeNativeValue(type, blockBuilder, value); } return blockBuilder.build(); } }
private Object evaluatePropertyValue(Expression expression, Type expectedType, Session session, Metadata metadata, List<Expression> parameters) { Expression rewritten = ExpressionTreeRewriter.rewriteWith(new ParameterRewriter(parameters), expression); Object value = evaluateConstantExpression(rewritten, expectedType, metadata, session, parameters); // convert to object value type of SQL type BlockBuilder blockBuilder = expectedType.createBlockBuilder(null, 1); writeNativeValue(expectedType, blockBuilder, value); Object objectValue = expectedType.getObjectValue(session.toConnectorSession(), blockBuilder, 0); if (objectValue == null) { throw new PrestoException(propertyError, format("Invalid null value for %s property", propertyType)); } return objectValue; } }
@Override protected Object visitRow(Row node, Object context) { RowType rowType = (RowType) type(node); List<Type> parameterTypes = rowType.getTypeParameters(); List<Expression> arguments = node.getItems(); int cardinality = arguments.size(); List<Object> values = new ArrayList<>(cardinality); for (Expression argument : arguments) { values.add(process(argument, context)); } if (hasUnresolvedValue(values)) { return new Row(toExpressions(values, parameterTypes)); } else { BlockBuilder blockBuilder = new RowBlockBuilder(parameterTypes, null, 1); BlockBuilder singleRowBlockWriter = blockBuilder.beginBlockEntry(); for (int i = 0; i < cardinality; ++i) { writeNativeValue(parameterTypes.get(i), singleRowBlockWriter, values.get(i)); } blockBuilder.closeEntry(); return rowType.getObject(blockBuilder, 0); } }
private static Block createChannel(int positionCount, MapType mapType, Type elementType) { BlockBuilder mapBlockBuilder = mapType.createBlockBuilder(null, 1); BlockBuilder singleMapBlockWriter = mapBlockBuilder.beginBlockEntry(); Object value; for (int position = 0; position < positionCount; position++) { if (elementType.equals(BIGINT)) { value = ThreadLocalRandom.current().nextLong(); } else if (elementType.equals(DOUBLE)) { value = ThreadLocalRandom.current().nextDouble(); } else { throw new UnsupportedOperationException(); } // Use position as the key to avoid collision writeNativeValue(elementType, singleMapBlockWriter, position); writeNativeValue(elementType, singleMapBlockWriter, value); } mapBlockBuilder.closeEntry(); return mapBlockBuilder.build(); }
private static Block createChannel(int positionCount, MapType mapType, Type elementType) { BlockBuilder mapBlockBuilder = mapType.createBlockBuilder(null, 1); BlockBuilder singleMapBlockWriter = mapBlockBuilder.beginBlockEntry(); Object key; Object value; for (int position = 0; position < positionCount; position++) { if (elementType.equals(BIGINT)) { key = position; value = ThreadLocalRandom.current().nextLong(); } else if (elementType.equals(DOUBLE)) { key = position; value = ThreadLocalRandom.current().nextDouble(); } else if (elementType.equals(VARCHAR)) { key = Slices.utf8Slice(Integer.toString(position)); value = Slices.utf8Slice(Double.toString(ThreadLocalRandom.current().nextDouble())); } else { throw new UnsupportedOperationException(); } // Use position as the key to avoid collision writeNativeValue(elementType, singleMapBlockWriter, key); writeNativeValue(elementType, singleMapBlockWriter, value); } mapBlockBuilder.closeEntry(); return mapBlockBuilder.build(); }
@Override public boolean process() { checkState(result == null, "result has been generated"); int length = selectedPositions.getOffset() + selectedPositions.size(); if (selectedPositions.isList()) { int[] positions = selectedPositions.getPositions(); while (nextIndexOrPosition < length) { writeNativeValue(evaluator.getType(), blockBuilder, evaluator.evaluate(positions[nextIndexOrPosition], page)); nextIndexOrPosition++; if (yieldSignal.isSet()) { return false; } } } else { while (nextIndexOrPosition < length) { writeNativeValue(evaluator.getType(), blockBuilder, evaluator.evaluate(nextIndexOrPosition, page)); nextIndexOrPosition++; if (yieldSignal.isSet()) { return false; } } } result = blockBuilder.build(); blockBuilder = blockBuilder.newBlockBuilderLike(null); return true; }
public static Object evaluatePropertyValue(Expression expression, Type expectedType, Session session, Metadata metadata, List<Expression> parameters) { Expression rewritten = ExpressionTreeRewriter.rewriteWith(new ParameterRewriter(parameters), expression); Object value = evaluateConstantExpression(rewritten, expectedType, metadata, session, parameters); // convert to object value type of SQL type BlockBuilder blockBuilder = expectedType.createBlockBuilder(null, 1); writeNativeValue(expectedType, blockBuilder, value); Object objectValue = expectedType.getObjectValue(session.toConnectorSession(), blockBuilder, 0); if (objectValue == null) { throw new PrestoException(INVALID_SESSION_PROPERTY, "Session property value must not be null"); } return objectValue; }
TypeUtils.writeNativeValue(type, builder, obj);
writeNativeValue(outputTypes.get(i), pageBuilder.getBlockBuilder(i), result);
@Override protected Object visitArrayConstructor(ArrayConstructor node, Object context) { Type elementType = ((ArrayType) type(node)).getElementType(); BlockBuilder arrayBlockBuilder = elementType.createBlockBuilder(null, node.getValues().size()); for (Expression expression : node.getValues()) { Object value = process(expression, context); if (value instanceof Expression) { return visitFunctionCall(new FunctionCall(QualifiedName.of(ArrayConstructor.ARRAY_CONSTRUCTOR), node.getValues()), context); } writeNativeValue(elementType, arrayBlockBuilder, value); } return arrayBlockBuilder.build(); }
@Test public void testArrayBlock() { BlockBuilder arrayBlockBuilder = new ArrayBlockBuilder(BIGINT, null, EXPECTED_ENTRIES); for (int i = 0; i < EXPECTED_ENTRIES; i++) { BlockBuilder arrayElementBuilder = arrayBlockBuilder.beginBlockEntry(); writeNativeValue(BIGINT, arrayElementBuilder, castIntegerToObject(i, BIGINT)); arrayBlockBuilder.closeEntry(); } checkRetainedSize(arrayBlockBuilder.build(), false); }
throw new RuntimeException(throwable); writeNativeValue(outputElementType, blockBuilder, output);
writeNativeValue(outputValueType, blockBuilder, outputValue); writeNativeValue(outputValueType, blockBuilder, outputValue);
public static Block nativeValueToBlock(Type type, Object object) { if (object != null && !Primitives.wrap(type.getJavaType()).isInstance(object)) { throw new IllegalArgumentException(String.format("Object '%s' does not match type %s", object, type.getJavaType())); } BlockBuilder blockBuilder = type.createBlockBuilder(null, 1); writeNativeValue(type, blockBuilder, object); return blockBuilder.build(); }