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 .operations import DatabaseOperations # NOQA isort:skip
|
||||||
from .schema import DatabaseSchemaEditor # NOQA isort:skip
|
from .schema import DatabaseSchemaEditor # NOQA isort:skip
|
||||||
from .utils import utc_tzinfo_factory # 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.extensions.register_adapter(SafeText, psycopg2.extensions.QuotedString)
|
||||||
psycopg2.extras.register_uuid()
|
psycopg2.extras.register_uuid()
|
||||||
|
@ -274,4 +273,4 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
||||||
@cached_property
|
@cached_property
|
||||||
def pg_version(self):
|
def pg_version(self):
|
||||||
with self.temporary_connection():
|
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,
|
reset_queries, transaction,
|
||||||
)
|
)
|
||||||
from django.db.backends.base.base import BaseDatabaseWrapper
|
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.signals import connection_created
|
||||||
from django.db.backends.utils import CursorWrapper, format_number
|
from django.db.backends.utils import CursorWrapper, format_number
|
||||||
from django.db.models import Avg, StdDev, Sum, Variance
|
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")
|
@unittest.skipUnless(connection.vendor == 'postgresql', "Test only for PostgreSQL")
|
||||||
class PostgreSQLTests(TestCase):
|
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):
|
def test_nodb_connection(self):
|
||||||
"""
|
"""
|
||||||
The _nodb_connection property fallbacks to the default connection
|
The _nodb_connection property fallbacks to the default connection
|
||||||
|
@ -231,33 +214,6 @@ class PostgreSQLTests(TestCase):
|
||||||
self.assertEqual(len(w), 1)
|
self.assertEqual(len(w), 1)
|
||||||
self.assertEqual(w[0].message.__class__, RuntimeWarning)
|
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):
|
def test_connect_and_rollback(self):
|
||||||
"""
|
"""
|
||||||
PostgreSQL shouldn't roll back SET TIME ZONE, even if the first
|
PostgreSQL shouldn't roll back SET TIME ZONE, even if the first
|
||||||
|
|
Loading…
Reference in New Issue