code: public List<Attribute> getAttributes(final String catalog, final String schemaPattern, final String typeNamePattern,
                                           final String attributeNamePattern)
              throws SQLException {
          final List<Attribute> list = new ArrayList<>();
          try (ResultSet results = databaseMetadata.getAttributes(
                  catalog, schemaPattern, typeNamePattern, attributeNamePattern)) {
              if (results != null) {
                  bind(results, Attribute.class, list);
              }
          }
          return list;
      }
docs: Invokes {@link DatabaseMetaData#getAttributes(java.lang.String, java.lang.String, java.lang.String,
  java.lang.String)} with given arguments and returns bound information.
  
  @param catalog              the value for {@code catalog} parameter.
  @param schemaPattern        the value for {@code schemaPattern} parameter.
  @param typeNamePattern      the value for {@code typeNamePattern} parameter.
  @param attributeNamePattern the value for {@code attributeNamePattern} parameter.
  @return a list of attributes.
  @throws SQLException if a database error occurs.