public List getTables()

in seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-sqlserver/src/main/java/org/apache/seatunnel/datasource/plugin/sqlserver/jdbc/SqlServerDataSourceChannel.java [58:127]


    public List<String> getTables(
            @NonNull String pluginName,
            Map<String, String> requestParams,
            String database,
            Map<String, String> options) {
        List<String> tableNames = new ArrayList<>();
        StringBuilder queryWhere = new StringBuilder();
        String query =
                String.format(
                        "SELECT SCHEMA_NAME(schema_id) AS schema_name, name AS table_name\n"
                                + "FROM %s.sys.tables \n"
                                + "WHERE type = 'U' AND is_ms_shipped = 0 \n",
                        database);
        queryWhere.append(query);
        String filterName = options.get("filterName");
        if (StringUtils.isNotEmpty(filterName)) {
            String[] split = filterName.split("\\.");
            if (split.length == 2) {
                String formatStr =
                        " AND (name LIKE '"
                                + (split[1].contains("%") ? split[1] : "%" + split[1] + "%")
                                + "' AND SCHEMA_NAME(schema_id) LIKE '"
                                + (split[0].contains("%") ? split[0] : "%" + split[0] + "%")
                                + "')";
                queryWhere.append(formatStr);
            } else {
                String filterNameRep =
                        filterName.contains("%") ? filterName : "%" + filterName + "%";
                String formatStr =
                        " AND (name LIKE '"
                                + filterNameRep
                                + "' OR SCHEMA_NAME(schema_id) LIKE '"
                                + filterNameRep
                                + "')";
                queryWhere.append(formatStr);
            }
        }
        queryWhere.append("ORDER BY schema_name, table_name");
        String size = options.get("size");
        if (StringUtils.isNotEmpty(size)) {
            queryWhere.append(" OFFSET 0 ROWS FETCH NEXT ").append(size).append(" ROWS ONLY");
        }
        log.info("execute sql :{}", queryWhere.toString());
        long start = System.currentTimeMillis();
        try (Connection connection = getConnection(requestParams)) {
            long end = System.currentTimeMillis();
            log.info("connection, cost {}ms for sqlserver", end - start);
            start = System.currentTimeMillis();
            try (Statement statement = connection.createStatement();
                    ResultSet resultSet = statement.executeQuery(queryWhere.toString())) {
                end = System.currentTimeMillis();
                log.info("execute sql, cost {}ms for sqlserver", end - start);
                start = System.currentTimeMillis();
                while (resultSet.next()) {
                    String schemaName = resultSet.getString("SCHEMA_NAME");
                    String tableName = resultSet.getString("table_name");
                    if (StringUtils.isNotBlank(schemaName)
                            && !SqlServerDataSourceConfig.SQLSERVER_SYSTEM_DATABASES.contains(
                                    schemaName)) {
                        tableNames.add(schemaName + "." + tableName);
                    }
                }
                end = System.currentTimeMillis();
                log.info("while result set, cost {}ms for sqlserver", end - start);
            }
            return tableNames;
        } catch (ClassNotFoundException | SQLException e) {
            throw new DataSourcePluginException("get table names failed", e);
        }
    }