code: public Optional<ImmutableExpression> extractFoldAndOptimizeBooleanExpressions(
              ImmutableList<JoinOrFilterNode> filterAndJoinNodes)
              throws UnsatisfiableExpressionException {
  
          ImmutableList<ImmutableExpression> booleanExpressions = extractBooleanExpressions(
                  filterAndJoinNodes);
  
          Optional<ImmutableExpression> foldedExpression = foldBooleanExpressions(booleanExpressions);
          if (foldedExpression.isPresent()) {
              ExpressionEvaluator evaluator = defaultExpressionEvaluator.clone();
  
              ExpressionEvaluator.EvaluationResult evaluationResult = evaluator.evaluateExpression(foldedExpression.get());
              if (evaluationResult.isEffectiveFalse()) {
                  throw new UnsatisfiableExpressionException();
              }
              else {
                  return evaluationResult.getOptionalExpression();
              }
          }
          else {
              return Optional.empty();
          }
      }
docs: TODO: explain