mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Removed PostgreSQL version detection for psycopg2 < 2.0.12.
This commit is contained in:
parent
49a63d08d3
commit
29ea9714ee
@ -42,7 +42,6 @@ from .introspection import DatabaseIntrospection # NOQA isort:skip
|
||||
from .operations import DatabaseOperations # NOQA isort:skip
|
||||
from .schema import DatabaseSchemaEditor # NOQA isort:skip
|
||||
from .utils import utc_tzinfo_factory # NOQA isort:skip
|
||||
from .version import get_version # NOQA isort:skip
|
||||
|
||||
psycopg2.extensions.register_adapter(SafeText, psycopg2.extensions.QuotedString)
|
||||
psycopg2.extras.register_uuid()
|
||||
@ -274,4 +273,4 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
||||
@cached_property
|
||||
def pg_version(self):
|
||||
with self.temporary_connection():
|
||||
return get_version(self.connection)
|
||||
return self.connection.server_version
|
||||
|
@ -1,44 +0,0 @@
|
||||
"""
|
||||
Extract the version of the PostgreSQL server.
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
# This reg-exp is intentionally fairly flexible here.
|
||||
# Needs to be able to handle stuff like:
|
||||
# PostgreSQL #.#.#
|
||||
# EnterpriseDB #.#
|
||||
# PostgreSQL #.# beta#
|
||||
# PostgreSQL #.#beta#
|
||||
VERSION_RE = re.compile(r'\S+ (\d+)\.(\d+)\.?(\d+)?')
|
||||
|
||||
|
||||
def _parse_version(text):
|
||||
"Internal parsing method. Factored out for testing purposes."
|
||||
major, major2, minor = VERSION_RE.search(text).groups()
|
||||
try:
|
||||
return int(major) * 10000 + int(major2) * 100 + int(minor)
|
||||
except (ValueError, TypeError):
|
||||
return int(major) * 10000 + int(major2) * 100
|
||||
|
||||
|
||||
def get_version(connection):
|
||||
"""
|
||||
Return an integer representing the major, minor, and revision number of the
|
||||
server. Format is the one used for the return value of libpq
|
||||
PQServerVersion()/``server_version`` connection attribute (available in
|
||||
newer psycopg2 versions.)
|
||||
|
||||
For example, 90304 for 9.3.4. The last two digits will be 00 in the case of
|
||||
releases (e.g., 90400 for 'PostgreSQL 9.4') or in the case of beta and
|
||||
prereleases (e.g. 90100 for 'PostgreSQL 9.1beta2').
|
||||
|
||||
PQServerVersion()/``server_version`` doesn't execute a query so try that
|
||||
first, then fallback to a ``SELECT version()`` query.
|
||||
"""
|
||||
if hasattr(connection, 'server_version'):
|
||||
return connection.server_version
|
||||
else:
|
||||
with connection.cursor() as cursor:
|
||||
cursor.execute("SELECT version()")
|
||||
return _parse_version(cursor.fetchone()[0])
|
@ -14,7 +14,6 @@ from django.db import (
|
||||
reset_queries, transaction,
|
||||
)
|
||||
from django.db.backends.base.base import BaseDatabaseWrapper
|
||||
from django.db.backends.postgresql import version as pg_version
|
||||
from django.db.backends.signals import connection_created
|
||||
from django.db.backends.utils import CursorWrapper, format_number
|
||||
from django.db.models import Avg, StdDev, Sum, Variance
|
||||
@ -190,22 +189,6 @@ class SQLiteTests(TestCase):
|
||||
@unittest.skipUnless(connection.vendor == 'postgresql', "Test only for PostgreSQL")
|
||||
class PostgreSQLTests(TestCase):
|
||||
|
||||
def assert_parses(self, version_string, version):
|
||||
self.assertEqual(pg_version._parse_version(version_string), version)
|
||||
|
||||
def test_parsing(self):
|
||||
"""Test PostgreSQL version parsing from `SELECT version()` output"""
|
||||
self.assert_parses("PostgreSQL 9.3 beta4", 90300)
|
||||
self.assert_parses("PostgreSQL 9.3", 90300)
|
||||
self.assert_parses("EnterpriseDB 9.3", 90300)
|
||||
self.assert_parses("PostgreSQL 9.3.6", 90306)
|
||||
self.assert_parses("PostgreSQL 9.4beta1", 90400)
|
||||
self.assert_parses(
|
||||
"PostgreSQL 9.3.1 on i386-apple-darwin9.2.2, compiled by GCC "
|
||||
"i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5478)",
|
||||
90301
|
||||
)
|
||||
|
||||
def test_nodb_connection(self):
|
||||
"""
|
||||
The _nodb_connection property fallbacks to the default connection
|
||||
@ -231,33 +214,6 @@ class PostgreSQLTests(TestCase):
|
||||
self.assertEqual(len(w), 1)
|
||||
self.assertEqual(w[0].message.__class__, RuntimeWarning)
|
||||
|
||||
def test_version_detection(self):
|
||||
"""Test PostgreSQL version detection"""
|
||||
|
||||
# Helper mocks
|
||||
class CursorMock:
|
||||
"Very simple mock of DB-API cursor"
|
||||
def execute(self, arg):
|
||||
pass
|
||||
|
||||
def fetchone(self):
|
||||
return ["PostgreSQL 9.3"]
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, type, value, traceback):
|
||||
pass
|
||||
|
||||
class OlderConnectionMock:
|
||||
"Mock of psycopg2 (< 2.0.12) connection"
|
||||
def cursor(self):
|
||||
return CursorMock()
|
||||
|
||||
# psycopg2 < 2.0.12 code path
|
||||
conn = OlderConnectionMock()
|
||||
self.assertEqual(pg_version.get_version(conn), 90300)
|
||||
|
||||
def test_connect_and_rollback(self):
|
||||
"""
|
||||
PostgreSQL shouldn't roll back SET TIME ZONE, even if the first
|
||||
|
Loading…
Reference in New Issue
Block a user