code: @Nullable
    public static List<DruidExpression> toDruidExpressions(
        final PlannerContext plannerContext,
        final RowSignature rowSignature,
        final List<RexNode> rexNodes
    )
    {
      final List<DruidExpression> retVal = new ArrayList<>(rexNodes.size());
      for (RexNode rexNode : rexNodes) {
        final DruidExpression druidExpression = toDruidExpression(plannerContext, rowSignature, rexNode);
        if (druidExpression == null) {
          return null;
        }
  
        retVal.add(druidExpression);
      }
      return retVal;
    }
docs: Translate a list of Calcite {@code RexNode} to Druid expressions.
  
  @param plannerContext SQL planner context
  @param rowSignature   signature of the rows to be extracted from
  @param rexNodes       list of Calcite expressions meant to be applied on top of the rows
  
  @return list of Druid expressions in the same order as rexNodes, or null if not possible.
  If a non-null list is returned, all elements will be non-null.