fix(sqlserver): honor sidebar probe limits above 1000

This commit is contained in:
jearhe
2026-09-01 01:18:36 +08:00
committed by GitHub
parent cb3de0ef49
commit c7c420bbd0
+13 -2
View File
@@ -2382,9 +2382,11 @@ fn sqlserver_list_tables_sql_with_kind(
// Use SELECT TOP for broad SQL Server version compatibility.
// OFFSET / FETCH NEXT is only available in SQL Server 2012+.
// Keep the requested limit intact: the sidebar requests page_size + 1 to
// detect whether it should render a load-more node.
match (limit, offset) {
(Some(limit), Some(offset)) if offset > 0 => {
let end = offset + limit.min(1000);
let end = offset + limit;
format!(
"SELECT * FROM (\
SELECT {base_columns}, ROW_NUMBER() OVER ({order_by}) AS __dbx_rn \
@@ -2393,7 +2395,7 @@ fn sqlserver_list_tables_sql_with_kind(
)
}
(Some(limit), _) => {
format!("SELECT TOP ({}) {base_columns} {base_from} {base_where} {order_by}", limit.min(1000))
format!("SELECT TOP ({}) {base_columns} {base_from} {base_where} {order_by}", limit)
}
_ => {
format!("SELECT {base_columns} {base_from} {base_where} {order_by}")
@@ -4274,6 +4276,15 @@ mod tests {
assert!(sql.contains("__dbx_rn > 100 AND __dbx_rn <= 201"));
}
#[test]
fn sqlserver_table_objects_sql_preserves_sidebar_probe_limits_above_1000() {
let first_page = sqlserver_table_objects_sql("dbo", None, Some(1001), None);
let next_page = sqlserver_table_objects_sql("dbo", None, Some(1001), Some(1000));
assert!(first_page.contains("SELECT TOP (1001)"));
assert!(next_page.contains("__dbx_rn > 1000 AND __dbx_rn <= 2001"));
}
#[test]
fn sqlserver_list_tables_filter_escapes_like_literals() {
let sql = sqlserver_list_tables_sql("dbo", Some("Temp_Table[%]"), Some(200), None);