docs: @Override
      public void endElement(String uri, String localName, String name) throws SAXException {
          if ("table".equals(name)) {
              for (final Column column : this.currentColumns.values()) {
                  this.currentTable.addColumn(column);
              }
  
              if (this.primaryKey != null) {
                  this.currentTable.setPrimaryKey(this.primaryKey);
              }
  
              this.tables.put(this.currentTable.getName(), this.currentTable);
              this.tableColumnTypes.put(this.currentTable.getName(), this.currentColumnTypes);
              this.primaryKey = null;
              this.currentColumns = null;
              this.currentColumnTypes = null;
              this.currentTable = null;
          } else if ("column".equals(name)) {
              this.currentColumns.put(this.currentColumn.getName(), this.currentColumn);
              this.currentColumn = null;
          } else if ("name".equals(name)) {
              final String itemName = this.chars.toString().trim();
  
              if (this.currentIndex != null) {
                  this.currentIndex.setName(itemName);
              } else if (this.currentUnique != null) {
                  this.currentUnique.setName(itemName);
              } else if (this.currentTable == null) {
                  this.currentTable = new Table(itemName);
              } else if (this.currentColumn == null) {
                  this.currentColumn = new Column(itemName);
              }
          } else if ("type".equals(name)) {
              final String sqlTypeName = this.chars.toString().trim();
  
              final int sqlType = this.getSqlType(sqlTypeName);
              this.currentColumnTypes.put(this.currentColumn.getName(), sqlType);
  
              final String hibType = this.getHibernateType(sqlType);
  
              final SimpleValue value = new SimpleValue(this.mappings, this.currentTable);
              value.setTypeName(hibType);
  
              this.currentColumn.setValue(value);
          } else if ("param".equals(name)) {
              final String param = this.chars.toString().trim();
  
              final Integer length = Integer.valueOf(param);
              this.currentColumn.setLength(length);
          } else if ("primary-key".equals(name)) {
              final String columnName = this.chars.toString().trim();
  
              if (this.primaryKey == null) {
                  this.primaryKey = new PrimaryKey();
              }
  
              final Column column = this.currentColumns.get(columnName);
              this.primaryKey.addColumn(column);
          } else if ("not-null".equals(name)) {
              final String columnName = this.chars.toString().trim();
              final Column column = this.currentColumns.get(columnName);
              column.setNullable(false);
          } else if ("column-ref".equals(name)) {
              final String columnName = this.chars.toString().trim();
              final Column column = this.currentColumns.get(columnName);
  
              if (this.currentIndex != null) {
                  this.currentIndex.addColumn(column);
              } else if (this.currentUnique != null) {
                  this.currentUnique.addColumn(column);
              }
          } else if ("index".equals(name)) {
              this.currentTable.addIndex(this.currentIndex);
              this.currentIndex = null;
          } else if ("unique".equals(name)) {
              this.currentTable.addUniqueKey(this.currentUnique);
              this.currentUnique = null;
          } else if ("key".equals(name)) {
              this.logger.warn(
                      "the 'key' element is ignored, use the table level 'primary-key' element instead");
          }
  
          this.chars = null;
      }