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);
}
}