From 7549de841c6e0d18822af047763f5e3211539be8 Mon Sep 17 00:00:00 2001
From: Claude Paroz <claude@2xlibre.net>
Date: Fri, 18 May 2012 12:08:36 +0200
Subject: [PATCH] Fixed #18334 -- Fixed detection of supports_stddev backend
 feature.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Thanks to Michael Manfre for the report and Anssi Kääriäinen for the
review.
---
 django/db/backends/__init__.py          | 12 +++++++-----
 tests/regressiontests/backends/tests.py |  6 ++++++
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py
index 27623505e5..bf622b9a0f 100644
--- a/django/db/backends/__init__.py
+++ b/django/db/backends/__init__.py
@@ -414,10 +414,11 @@ class BaseDatabaseFeatures(object):
 
     def confirm(self):
         "Perform manual checks of any database features that might vary between installs"
-        self._confirmed = True
-        self.supports_transactions = self._supports_transactions()
-        self.supports_stddev = self._supports_stddev()
-        self.can_introspect_foreign_keys = self._can_introspect_foreign_keys()
+        if not self._confirmed:
+            self._confirmed = True
+            self.supports_transactions = self._supports_transactions()
+            self.supports_stddev = self._supports_stddev()
+            self.can_introspect_foreign_keys = self._can_introspect_foreign_keys()
 
     def _supports_transactions(self):
         "Confirm support for transactions"
@@ -439,8 +440,9 @@ class BaseDatabaseFeatures(object):
 
         try:
             self.connection.ops.check_aggregate_support(StdDevPop())
+            return True
         except NotImplementedError:
-            self.supports_stddev = False
+            return False
 
     def _can_introspect_foreign_keys(self):
         "Confirm support for introspected foreign keys"
diff --git a/tests/regressiontests/backends/tests.py b/tests/regressiontests/backends/tests.py
index eec817c5a2..10e69b65c1 100644
--- a/tests/regressiontests/backends/tests.py
+++ b/tests/regressiontests/backends/tests.py
@@ -397,6 +397,12 @@ class BackendTestCase(TestCase):
         self.assertTrue(hasattr(connection.ops, 'connection'))
         self.assertEqual(connection, connection.ops.connection)
 
+    def test_supports_needed_confirm(self):
+        connection.features.confirm()
+        self.assertIn(connection.features.supports_transactions, (True, False))
+        self.assertIn(connection.features.supports_stddev, (True, False))
+        self.assertIn(connection.features.can_introspect_foreign_keys, (True, False))
+
     def test_duplicate_table_error(self):
         """ Test that creating an existing table returns a DatabaseError """
         cursor = connection.cursor()