docs: public static SchemaItem parse(String sql) {
          try {
              SQLStatementParser parser = new MySqlStatementParser(sql);
              SQLSelectStatement statement = (SQLSelectStatement) parser.parseStatement();
              MySqlSelectQueryBlock sqlSelectQueryBlock = (MySqlSelectQueryBlock) statement.getSelect().getQuery();
  
              SchemaItem schemaItem = new SchemaItem();
              schemaItem.setSql(SQLUtils.toMySqlString(sqlSelectQueryBlock));
              SQLTableSource sqlTableSource = sqlSelectQueryBlock.getFrom();
              List<TableItem> tableItems = new ArrayList<>();
              SqlParser.visitSelectTable(schemaItem, sqlTableSource, tableItems, null);
              tableItems.forEach(tableItem -> schemaItem.getAliasTableItems().put(tableItem.getAlias(), tableItem));
  
              List<FieldItem> fieldItems = collectSelectQueryFields(sqlSelectQueryBlock);
              fieldItems.forEach(fieldItem -> schemaItem.getSelectFields().put(fieldItem.getFieldName(), fieldItem));
  
              schemaItem.init();
  
              if (schemaItem.getAliasTableItems().isEmpty() || schemaItem.getSelectFields().isEmpty()) {
                  throw new ParserException("Parse sql error");
              }
              return schemaItem;
          } catch (Exception e) {
              throw new ParserException();
          }
      }