docs: private static void visitSelectTable(SchemaItem schemaItem, SQLTableSource sqlTableSource,
                                           List<TableItem> tableItems, TableItem tableItemTmp) {
          if (sqlTableSource instanceof SQLExprTableSource) {
              SQLExprTableSource sqlExprTableSource = (SQLExprTableSource) sqlTableSource;
              TableItem tableItem;
              if (tableItemTmp != null) {
                  tableItem = tableItemTmp;
              } else {
                  tableItem = new TableItem(schemaItem);
              }
              tableItem.setSchema(sqlExprTableSource.getSchema());
              tableItem.setTableName(sqlExprTableSource.getTableName());
              if (tableItem.getAlias() == null) {
                  tableItem.setAlias(sqlExprTableSource.getAlias());
              }
              if (tableItems.isEmpty()) {
                  // 第一张表为主表
                  tableItem.setMain(true);
              }
              tableItems.add(tableItem);
          } else if (sqlTableSource instanceof SQLJoinTableSource) {
              SQLJoinTableSource sqlJoinTableSource = (SQLJoinTableSource) sqlTableSource;
              SQLTableSource leftTableSource = sqlJoinTableSource.getLeft();
              visitSelectTable(schemaItem, leftTableSource, tableItems, null);
              SQLTableSource rightTableSource = sqlJoinTableSource.getRight();
              TableItem rightTableItem = new TableItem(schemaItem);
              // 解析on条件字段
              visitOnCondition(sqlJoinTableSource.getCondition(), rightTableItem);
              visitSelectTable(schemaItem, rightTableSource, tableItems, rightTableItem);
  
          } else if (sqlTableSource instanceof SQLSubqueryTableSource) {
              SQLSubqueryTableSource subQueryTableSource = (SQLSubqueryTableSource) sqlTableSource;
              MySqlSelectQueryBlock sqlSelectQuery = (MySqlSelectQueryBlock) subQueryTableSource.getSelect().getQuery();
              TableItem tableItem;
              if (tableItemTmp != null) {
                  tableItem = tableItemTmp;
              } else {
                  tableItem = new TableItem(schemaItem);
              }
              tableItem.setAlias(subQueryTableSource.getAlias());
              tableItem.setSubQuerySql(SQLUtils.toMySqlString(sqlSelectQuery));
              tableItem.setSubQuery(true);
              tableItem.setSubQueryFields(collectSelectQueryFields(sqlSelectQuery));
              visitSelectTable(schemaItem, sqlSelectQuery.getFrom(), tableItems, tableItem);
          }
      }