From 98e001641ff0f859349cd60d270fec972edc16de Mon Sep 17 00:00:00 2001
From: Aaron Patterson <aaron.patterson@gmail.com>
Date: Fri, 4 Oct 2013 15:53:13 -0700
Subject: log every sql statement, even when they error

---
 .../connection_adapters/postgresql_adapter.rb      | 50 +++++++++++-----------
 1 file changed, 25 insertions(+), 25 deletions(-)

(limited to 'activerecord/lib')

diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index 158a0573dd..71a70e5c48 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -772,32 +772,32 @@ module ActiveRecord
         end
 
         def exec_cache(sql, name, binds)
+          stmt_key = prepare_statement(sql)
+
           log(sql, name, binds) do
-            begin
-              stmt_key = prepare_statement(sql)
-
-              @connection.send_query_prepared(stmt_key, binds.map { |col, val|
-                type_cast(val, col)
-              })
-              @connection.block
-              @connection.get_last_result
-            rescue PGError => e
-              # Get the PG code for the failure.  Annoyingly, the code for
-              # prepared statements whose return value may have changed is
-              # FEATURE_NOT_SUPPORTED.  Check here for more details:
-              # http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/plancache.c#l573
-              begin
-                code = e.result.result_error_field(PGresult::PG_DIAG_SQLSTATE)
-              rescue
-                raise e
-              end
-              if FEATURE_NOT_SUPPORTED == code
-                @statements.delete sql_key(sql)
-                retry
-              else
-                raise e
-              end
-            end
+            @connection.send_query_prepared(stmt_key, binds.map { |col, val|
+              type_cast(val, col)
+            })
+            @connection.block
+            @connection.get_last_result
+          end
+        rescue ActiveRecord::StatementInvalid => e
+          pgerror = e.original_exception
+
+          # Get the PG code for the failure.  Annoyingly, the code for
+          # prepared statements whose return value may have changed is
+          # FEATURE_NOT_SUPPORTED.  Check here for more details:
+          # http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/plancache.c#l573
+          begin
+            code = pgerror.result.result_error_field(PGresult::PG_DIAG_SQLSTATE)
+          rescue
+            raise e
+          end
+          if FEATURE_NOT_SUPPORTED == code
+            @statements.delete sql_key(sql)
+            retry
+          else
+            raise e
           end
         end
 
-- 
cgit v1.2.3