private IntermediateQuery insertFilter(IntermediateQuery originalQuery, ImmutableList<Variable> nullableVariables) {
FilterNode filterNode = iQFactory.createFilterNode(computeFilterExpression(nullableVariables));
IntermediateQueryBuilder builder = originalQuery.newBuilder();
QueryNode rootNode = originalQuery.getRootNode();
QueryNode newRoot = rootNode instanceof ConstructionNode ?
rootNode :
filterNode;
QueryNode child = rootNode instanceof ConstructionNode ?
filterNode :
rootNode;
builder.init(originalQuery.getProjectionAtom(), newRoot);
builder.addChild(newRoot, child, Optional.empty());
copyChildren(originalQuery, rootNode, builder, child);
return builder.build();
}