docs: @Override
      public Set<AbstractExpression> findAllSubexpressionsOfClass(
              Class< ? extends AbstractExpression> aeClass) {
          Set<AbstractExpression> exprs =
                  super.findAllSubexpressionsOfClass(aeClass);
  
          if (m_having != null) {
              Collection<AbstractExpression> found =
                      m_having.findAllSubexpressionsOfClass(aeClass);
              if (! found.isEmpty()) {
                  exprs.addAll(found);
              }
          }
          addAllSubexpressionsOfClassFromColList(exprs, aeClass, m_groupByColumns);
          addAllSubexpressionsOfClassFromColList(exprs, aeClass, m_orderColumns);
          if (hasWindowFunctionExpression()) {
              WindowFunctionExpression windowFunctionExpression = m_windowFunctionExpressions.get(0);
              exprs.addAll(windowFunctionExpression.findAllSubexpressionsOfClass(aeClass));
          }
          if (m_projectSchema != null) {
              m_projectSchema.addAllSubexpressionsOfClassFromNodeSchema(exprs, aeClass);
          }
          // m_having, m_groupByExpressions, or m_projectSchema may no longer contain
          // the aggregation or group by expression if they have been replaced with
          // TVEs already and added to m_aggResultColumns.
          // So, also look for the original expression in m_aggResultColumns.
          addAllSubexpressionsOfClassFromColList(exprs, aeClass, m_aggResultColumns);
  
          if (m_avgPushdownHaving != null &&
                  m_avgPushdownHaving != m_having) {
              Collection<AbstractExpression> found =
                      m_avgPushdownHaving.findAllSubexpressionsOfClass(aeClass);
              if (! found.isEmpty()) {
                  exprs.addAll(found);
              }
          }
          if (m_avgPushdownGroupByColumns != null &&
                  m_avgPushdownGroupByColumns != m_groupByColumns) {
              addAllSubexpressionsOfClassFromColList(exprs, aeClass,
                      m_avgPushdownGroupByColumns);
          }
          if (m_avgPushdownProjectSchema != null &&
                  m_avgPushdownProjectSchema != m_projectSchema) {
              m_avgPushdownProjectSchema.addAllSubexpressionsOfClassFromNodeSchema(exprs, aeClass);
          }
          // m_avgPushdownHaving, m_avgPushdownGroupByColumns,
          // or m_avgPushdownProjectSchema may no longer contain
          // the aggregation or group by expression if they have been
          // replaced with TVEs already and added to
          // m_avgPushdownAggResultColumns.
          // So, also look for the original expression in
          // m_avgPushdownAggResultColumns.
          if (m_avgPushdownAggResultColumns != null &&
                  m_avgPushdownAggResultColumns != m_aggResultColumns) {
              addAllSubexpressionsOfClassFromColList(exprs, aeClass,
                      m_avgPushdownAggResultColumns);
          }
          return exprs;
  
      }