public static DocumentUpdate execute(Expression expression, FieldValuesFactory factory, DocumentUpdate update) {
        DocumentUpdate result = null;
        for (UpdateFieldValues adapter : factory.asFieldValues(update)) {
            DocumentUpdate output = adapter.getExpression(expression).execute(adapter);
            if (output == null) {
                // ignore
            } else if (result != null) {
                result.addAll(output);
            } else {
                result = output;
            }
        }
        if (result != null) {
            result.setCreateIfNonExistent(update.getCreateIfNonExistent());
        }
        return result;
    }
Sets the output type of this and returns the resulting input type, or null if it cannot be
uniquely determined.
Subtypes implement this by calling setOutputType(outputType, requiredType, VerificationContext context).
indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java