diff --git a/crates/dbx-core/src/sql_dialect/table_select.rs b/crates/dbx-core/src/sql_dialect/table_select.rs index 70b2e4db6a..99a206fcf7 100644 --- a/crates/dbx-core/src/sql_dialect/table_select.rs +++ b/crates/dbx-core/src/sql_dialect/table_select.rs @@ -276,9 +276,6 @@ pub fn build_table_data_select_sql_with_database( let include_xugu_row_id = options.include_row_id && uses_xugu_row_id(database_type) && !is_view_table_type(options.table_type.as_deref()); let offset = options.offset.unwrap_or(0); - let oracle_view_first_page = - database_type == Some(DatabaseType::Oracle) && is_view_table_type(options.table_type.as_deref()) && offset == 0; - let select_columns = if include_oracle_row_id { format!("ROWIDTOCHAR(t.ROWID) AS \"{DBX_ROWID_COLUMN}\", t.*") } else if let Some(preview_columns) = build_large_value_preview_columns(&options) { @@ -362,9 +359,6 @@ pub fn build_table_data_select_sql_with_database( ) } TablePaginationStrategy::Rownum => { - if oracle_view_first_page { - return format!("SELECT {page_select_columns} FROM {table_alias}{where_clause}{order}"); - } let rownum_inner_select_columns = if include_oracle_row_id { &select_columns } else { &rownum_select_columns }; build_rownum_table_select_sql( diff --git a/crates/dbx-core/src/sql_dialect/tests.rs b/crates/dbx-core/src/sql_dialect/tests.rs index 83033a2520..1dccff2513 100644 --- a/crates/dbx-core/src/sql_dialect/tests.rs +++ b/crates/dbx-core/src/sql_dialect/tests.rs @@ -1423,7 +1423,7 @@ fn builds_oracle_and_neo4j_table_data_queries() { include_row_id: true, ..Default::default() }), - "SELECT \"ID\", \"NAME\" FROM \"DBXTEST\".\"DBX_JOIN_VIEW\"" + "SELECT \"ID\", \"NAME\" FROM (SELECT \"ID\", \"NAME\" FROM \"DBXTEST\".\"DBX_JOIN_VIEW\") WHERE ROWNUM <= 100" ); assert_eq!( build_table_data_select_sql(TableDataSelectSqlOptions { @@ -1490,7 +1490,7 @@ fn builds_oracle_rowid_wrapped_large_value_reload_sql() { } #[test] -fn oracle_view_first_page_preserves_filter_and_sort_without_rownum() { +fn oracle_view_first_page_is_bounded_and_preserves_filter_and_sort() { assert_eq!( build_table_data_select_sql(TableDataSelectSqlOptions { database_type: Some(DatabaseType::Oracle), @@ -1505,7 +1505,7 @@ fn oracle_view_first_page_preserves_filter_and_sort_without_rownum() { include_row_id: true, ..Default::default() }), - "SELECT \"ID\", \"NAME\" FROM \"DBXTEST\".\"DBX_JOIN_VIEW\" WHERE (STATUS = 'A') ORDER BY \"ID\" DESC" + "SELECT \"ID\", \"NAME\" FROM (SELECT \"ID\", \"NAME\" FROM \"DBXTEST\".\"DBX_JOIN_VIEW\" WHERE (STATUS = 'A') ORDER BY \"ID\" DESC) WHERE ROWNUM <= 100" ); } @@ -1518,12 +1518,13 @@ fn oracle_view_later_pages_keep_rownum_pagination() { table_name: "DBX_JOIN_VIEW".to_string(), table_type: Some("VIEW".to_string()), columns: vec!["ID".to_string(), "NAME".to_string()], + order_by: Some("\"ID\" DESC".to_string()), limit: Some(100), offset: Some(100), include_row_id: true, ..Default::default() }), - "SELECT \"ID\", \"NAME\" FROM (SELECT dbx_inner.*, ROWNUM AS \"__dbx_row_num\" FROM (SELECT \"ID\", \"NAME\" FROM \"DBXTEST\".\"DBX_JOIN_VIEW\") dbx_inner WHERE ROWNUM <= 200) WHERE \"__dbx_row_num\" > 100" + "SELECT \"ID\", \"NAME\" FROM (SELECT dbx_inner.*, ROWNUM AS \"__dbx_row_num\" FROM (SELECT \"ID\", \"NAME\" FROM \"DBXTEST\".\"DBX_JOIN_VIEW\" ORDER BY \"ID\" DESC) dbx_inner WHERE ROWNUM <= 200) WHERE \"__dbx_row_num\" > 100" ); }