docs: public Expression eliminateDuplicates(final Session session) {
          // First build the map of child expressions joined by the logical AND
          // The key is the expression id and the value is the expression itself
          Map<String, Expression> subExprMap = new HashMap<>();
          extractAndSubExpressions(session, this, subExprMap);
          // Reconstruct the expression
          if (!subExprMap.isEmpty()) {
              Iterator<Map.Entry<String, Expression>> itExpr = subExprMap.entrySet().iterator();
              Expression finalExpr = itExpr.next().getValue();
              while (itExpr.hasNext()) {
                  finalExpr = new ExpressionLogical(OpTypes.AND, finalExpr, itExpr.next().getValue());
              }
              return finalExpr;
          }
          return this;
      }