docs: public static SQLParser newInstance(
              final DatabaseType dbType, final ShardingRule shardingRule, final LexerEngine lexerEngine, final ShardingTableMetaData shardingTableMetaData, final String sql) {
          lexerEngine.nextToken();
          TokenType tokenType = lexerEngine.getCurrentToken().getType();
          if (DQLStatement.isDQL(tokenType)) {
              if (DatabaseType.MySQL == dbType || DatabaseType.H2 == dbType) {
                  return new AntlrParsingEngine(dbType, sql, shardingRule, shardingTableMetaData);
              }
              return getDQLParser(dbType, shardingRule, lexerEngine, shardingTableMetaData);
          }
          if (DMLStatement.isDML(tokenType)) {
              if (DatabaseType.MySQL == dbType || DatabaseType.H2 == dbType) {
                  return new AntlrParsingEngine(dbType, sql, shardingRule, shardingTableMetaData);
              }
              return getDMLParser(dbType, tokenType, shardingRule, lexerEngine, shardingTableMetaData);
          }
          if (MySQLKeyword.REPLACE == tokenType) {
              if (DatabaseType.MySQL == dbType || DatabaseType.H2 == dbType) {
                  return new AntlrParsingEngine(dbType, sql, shardingRule, shardingTableMetaData);
              }
          }
          if (TCLStatement.isTCL(tokenType)) {
              return new AntlrParsingEngine(dbType, sql, shardingRule, shardingTableMetaData);
          }
          if (DALStatement.isDAL(tokenType)) {
              if (DatabaseType.PostgreSQL == dbType && PostgreSQLKeyword.SHOW == tokenType) {
                  return new AntlrParsingEngine(dbType, sql, shardingRule, shardingTableMetaData);
              }
              return getDALParser(dbType, (Keyword) tokenType, shardingRule, lexerEngine);
          }
          lexerEngine.nextToken();
          TokenType secondaryTokenType = lexerEngine.getCurrentToken().getType();
          if (DCLStatement.isDCL(tokenType, secondaryTokenType)) {
              return new AntlrParsingEngine(dbType, sql, shardingRule, shardingTableMetaData);
          }
          if (DDLStatement.isDDL(tokenType, secondaryTokenType)) {
              return new AntlrParsingEngine(dbType, sql, shardingRule, shardingTableMetaData);
          }
          if (TCLStatement.isTCLUnsafe(dbType, tokenType, lexerEngine)) {
              return new AntlrParsingEngine(dbType, sql, shardingRule, shardingTableMetaData);
          }
          if (DefaultKeyword.SET.equals(tokenType)) {
              return SetParserFactory.newInstance();
          }
          throw new SQLParsingUnsupportedException(tokenType);
      }