code: private List<Object> buildMetadataArgs(
        String line,
        String paramName,
        String[] defaultValues) {
      final List<Object> list = new ArrayList<>();
      final String[][] ret = sqlLine.splitCompound(line);
      String[] compound;
      if (ret == null || ret.length != 2) {
        if (defaultValues[defaultValues.length - 1] == null) {
          throw new IllegalArgumentException(
              sqlLine.loc("arg-usage",
                  ret == null || ret.length == 0 ? "" : ret[0][0], paramName));
        }
        compound = new String[0];
      } else {
        compound = ret[1];
      }
      if (compound.length <= defaultValues.length) {
        list.addAll(
            Arrays.asList(defaultValues).subList(
                0, defaultValues.length - compound.length));
        list.addAll(Arrays.asList(compound));
      } else {
        list.addAll(
            Arrays.asList(compound).subList(0, defaultValues.length));
      }
      return list;
    }
docs: Constructs a list of string parameters for a metadata call.
  
  <p>The number of items is equal to the number of arguments once
  the command line (the {@code line} parameter) has been parsed,
  typically three (catalog, schema, table name).
  
  <p>Parses the command line, and assumes that the the first word is
  a compound identifier. If the compound identifier has fewer parts
  than required, fills from the right.
  
  <p>The result is a mutable list of strings.
  
  @param line          Command line
  @param paramName     Name of parameter being read from command line
  @param defaultValues Default values for each component of parameter
  @return Mutable list of strings