summaryrefslogtreecommitdiff
blob: 2ca8c9781247ad25837e886bc667792d145a6d6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
From 94f3c412b154100e53b0800622a503ee56e39a6d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20B=C3=BChmann?= <dev@uuml.de>
Date: Sun, 27 Aug 2017 09:24:41 +0200
Subject: [PATCH] Properly quote table names in table_stats_query

---
 lib/database_cleaner/active_record/deletion.rb | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/lib/database_cleaner/active_record/deletion.rb b/lib/database_cleaner/active_record/deletion.rb
index 59a41c4..d172355 100644
--- a/lib/database_cleaner/active_record/deletion.rb
+++ b/lib/database_cleaner/active_record/deletion.rb
@@ -66,14 +66,16 @@ def table_stats_query(connection, db_name)
       if @cache_tables && !@table_stats_query.nil?
         return @table_stats_query
       else
-        @table_stats_query = connection.select_values(<<-SQL).join(' UNION ')
-               SELECT CONCAT('SELECT \"', table_name, '\" AS table_name, COUNT(*) AS exact_row_count FROM ', table_name)
-               FROM
-               INFORMATION_SCHEMA.TABLES
-               WHERE
-               table_schema = '#{db_name}'
-               AND #{::DatabaseCleaner::ActiveRecord::Base.exclusion_condition('table_name')};
+        tables = connection.select_values(<<-SQL)
+          SELECT table_name
+          FROM information_schema.tables
+          WHERE table_schema = '#{db_name}'
+          AND #{::DatabaseCleaner::ActiveRecord::Base.exclusion_condition('table_name')};
         SQL
+        queries = tables.map do |table|
+          "SELECT #{connection.quote(table)} AS table_name, COUNT(*) AS exact_row_count FROM #{connection.quote_table_name(table)}"
+        end
+        @table_stats_query = queries.join(' UNION ')
       end
     end