From 283e898b932c808a72112fae15ec04bb6944dbea Mon Sep 17 00:00:00 2001 From: Eliezer Reis Date: Tue, 10 Jun 2025 13:58:34 -0300 Subject: [PATCH 1/3] feat(support_attributes.rb): add fully_qualified_order_by method to have an unambiguous order by expression --- lib/closure_tree/support_attributes.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/closure_tree/support_attributes.rb b/lib/closure_tree/support_attributes.rb index 38879ade..8c6ddc82 100644 --- a/lib/closure_tree/support_attributes.rb +++ b/lib/closure_tree/support_attributes.rb @@ -115,6 +115,10 @@ def quoted_order_column(include_table_name = true) "#{prefix}#{connection.quote_column_name(order_column)}" end + def fully_qualified_order_by + "#{quoted_order_column} #{order_by_order}" + end + # table_name alias keyword , like "AS". When used on table name alias, Oracle Database don't support used 'AS' def t_alias_keyword (ActiveRecord::Base.connection.adapter_name.to_sym == :OracleEnhanced) ? "" : "AS" From a15ceb89f2cebfe12d7f214d422fb27fd6b89af9 Mon Sep 17 00:00:00 2001 From: Eliezer Reis Date: Tue, 10 Jun 2025 14:20:05 -0300 Subject: [PATCH 2/3] fix(closure_tree/numeric_order_support.rb): fix order by clause to use the fully qualified column name --- lib/closure_tree/numeric_order_support.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/closure_tree/numeric_order_support.rb b/lib/closure_tree/numeric_order_support.rb index faeec052..0e533582 100644 --- a/lib/closure_tree/numeric_order_support.rb +++ b/lib/closure_tree/numeric_order_support.rb @@ -42,7 +42,7 @@ def reorder_with_parent_id(parent_id, minimum_sort_order_value = nil) UPDATE #{quoted_table_name} SET #{quoted_order_column(false)} = t.seq + #{minimum_sort_order_value.to_i - 1} FROM ( - SELECT #{quoted_id_column_name} AS id, row_number() OVER(ORDER BY #{order_by}) AS seq + SELECT #{quoted_id_column_name} AS id, row_number() OVER(ORDER BY #{fully_qualified_order_by}) AS seq FROM #{quoted_table_name} WHERE #{where_eq(parent_column_name, parent_id)} #{min_where} ) AS t From 38714e8470834580605f3eb8acb1b0bf9ccc7e7c Mon Sep 17 00:00:00 2001 From: Eliezer Reis Date: Tue, 10 Jun 2025 14:22:03 -0300 Subject: [PATCH 3/3] refactor(closure_tree/support.rb): refactor with_order_option, scope_with_order and has_many_order_with_option methods to use fully_qualified_order_by --- lib/closure_tree/support.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/closure_tree/support.rb b/lib/closure_tree/support.rb index 31013886..9d498da1 100644 --- a/lib/closure_tree/support.rb +++ b/lib/closure_tree/support.rb @@ -66,14 +66,14 @@ def hierarchy_table_name def with_order_option(opts) if order_option? - opts[:order] = [opts[:order], order_by].compact.join(",") + opts[:order] = [opts[:order], fully_qualified_order_by].compact.join(",") end opts end def scope_with_order(scope, additional_order_by = nil) if order_option? - scope.order(*([additional_order_by, order_by].compact)) + scope.order(*([additional_order_by, fully_qualified_order_by].compact)) else additional_order_by ? scope.order(additional_order_by) : scope end @@ -85,7 +85,7 @@ def has_many_order_without_option(order_by_opt) end def has_many_order_with_option(order_by_opt=nil) - order_options = [order_by_opt, order_by].compact + order_options = [order_by_opt, fully_qualified_order_by].compact [lambda { order_options = order_options.map { |o| o.is_a?(Proc) ? o.call : o } order(order_options)