/**
   * Extract the meta data of parameter bean.
   *
   * @param sql Target SQL. (NotNull and NotEmpty)
   * @return the meta data of parameter bean. (NullAllowed: If it returns null, it means 'not
   *     found'.)
   */
  public DfPmbMetaData extractPmbMetaData(String sql) {
    final String parameterBeanName = getParameterBeanName(sql);
    if (parameterBeanName == null) {
      return null;
    }
    final DfPmbMetaData pmbMetaData = new DfPmbMetaData();
    processClassHeader(sql, parameterBeanName, pmbMetaData);
    processParameterProperty(sql, parameterBeanName, pmbMetaData);
    pmbMetaData.setOutsideSqlFile(_outsideSqlFile);
    pmbMetaData.adjustPropertyMetaFinally(_schemaData);

    filterAlternateBooleanMethod(pmbMetaData);
    if (!_alternateBooleanMethodNameSet.isEmpty()) {
      // copy and clear the collection just in case
      final Set<String> set = new LinkedHashSet<String>(_alternateBooleanMethodNameSet);
      pmbMetaData.setAlternateMethodBooleanNameSet(set);
      _alternateBooleanMethodNameSet.clear();
    }
    return pmbMetaData;
  }