From 460b72fc4ef1d6b11f0364d76a5e888962018c62 Mon Sep 17 00:00:00 2001 From: Peter Ramm Date: Mon, 25 Aug 2025 16:05:11 +0200 Subject: [PATCH 1/3] Added missing method Cursor.select_statement? --- .../connection_adapters/oracle_enhanced/jdbc_connection.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb b/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb index 998a4b867..06c568709 100644 --- a/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +++ b/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb @@ -389,6 +389,13 @@ def row_count @raw_statement.getUpdateCount end + # Is the current statement a SELECT statement? + def select_statement? + # Only simple SELECT and WITH statements are considered SELECT statements. + # because no other valid ojdbc method found to check it. + @raw_statement.get_original_sql.strip.match?(/\A\s*(SELECT|WITH)/i) + end + def fetch(options = {}) if @raw_result_set.next get_lob_value = options[:get_lob_value] From 4e9b15435533bde3d6eae7784717a95fbf66f283 Mon Sep 17 00:00:00 2001 From: Peter Ramm Date: Mon, 25 Aug 2025 16:59:27 +0200 Subject: [PATCH 2/3] Cursor.select_statement?: Exclude comments and leading newlines before check --- .../oracle_enhanced/jdbc_connection.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb b/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb index 06c568709..80f023f62 100644 --- a/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +++ b/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb @@ -393,7 +393,14 @@ def row_count def select_statement? # Only simple SELECT and WITH statements are considered SELECT statements. # because no other valid ojdbc method found to check it. - @raw_statement.get_original_sql.strip.match?(/\A\s*(SELECT|WITH)/i) + + sql = @raw_statement.get_original_sql.strip + + sql.gsub!(/\A\n+/, '') # remove leading newlines + sql.gsub!(/\A\r+/, '') # remove leading carriage returns + sql.gsub!(/--.*$/, '') # remove single line comments + sql.gsub!(/\/\*.*?\*\//m, '') # Remove multi-line comments (/* ... */) + sql.match?(/\A\s*(SELECT|WITH)/i) end def fetch(options = {}) From c2573f2807a1f4a7030c68c611def2b95cc8f1d2 Mon Sep 17 00:00:00 2001 From: Peter Ramm Date: Mon, 25 Aug 2025 17:01:23 +0200 Subject: [PATCH 3/3] Cursor.select_statement?: Exclude comments and leading newlines before check: Fix rubocop --- .../oracle_enhanced/jdbc_connection.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb b/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb index 80f023f62..c5310e877 100644 --- a/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +++ b/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb @@ -396,10 +396,10 @@ def select_statement? sql = @raw_statement.get_original_sql.strip - sql.gsub!(/\A\n+/, '') # remove leading newlines - sql.gsub!(/\A\r+/, '') # remove leading carriage returns - sql.gsub!(/--.*$/, '') # remove single line comments - sql.gsub!(/\/\*.*?\*\//m, '') # Remove multi-line comments (/* ... */) + sql.gsub!(/\A\n+/, "") # remove leading newlines + sql.gsub!(/\A\r+/, "") # remove leading carriage returns + sql.gsub!(/--.*$/, "") # remove single line comments + sql.gsub!(/\/\*.*?\*\//m, "") # Remove multi-line comments (/* ... */) sql.match?(/\A\s*(SELECT|WITH)/i) end