From 67df5c92dd8d6123552496839b1e01d12d78686a Mon Sep 17 00:00:00 2001 From: "N.lohitha" Date: Wed, 9 Jul 2025 13:38:31 +0530 Subject: [PATCH] Fix #2429: Replaced slow UNION query with optimized all_objects query --- .../oracle_enhanced/connection.rb | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/lib/active_record/connection_adapters/oracle_enhanced/connection.rb b/lib/active_record/connection_adapters/oracle_enhanced/connection.rb index 8af7f8b38..2bd3ea880 100644 --- a/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +++ b/lib/active_record/connection_adapters/oracle_enhanced/connection.rb @@ -34,25 +34,11 @@ def describe(name) table_owner, table_name = default_owner, real_name end sql = <<~SQL.squish - SELECT owner, table_name, 'TABLE' name_type - FROM all_tables - WHERE owner = :table_owner - AND table_name = :table_name - UNION ALL - SELECT owner, view_name table_name, 'VIEW' name_type - FROM all_views - WHERE owner = :table_owner - AND view_name = :table_name - UNION ALL - SELECT table_owner, table_name, 'SYNONYM' name_type - FROM all_synonyms - WHERE owner = :table_owner - AND synonym_name = :table_name - UNION ALL - SELECT table_owner, table_name, 'SYNONYM' name_type - FROM all_synonyms - WHERE owner = 'PUBLIC' - AND synonym_name = :real_name + SELECT owner, object_name, object_type + FROM all_objects + WHERE owner = :table_owner + AND object_name = :table_name + AND object_type IN ('TABLE','VIEW','SYNONYM') SQL if result = _select_one(sql, "CONNECTION", [table_owner, table_name, table_owner, table_name, table_owner, table_name, real_name]) case result["name_type"]