]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Support pg10
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 2 Oct 2017 15:50:05 +0000 (11:50 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 3 Oct 2017 17:01:58 +0000 (13:01 -0400)
One test appears to use some awkward calling style
with the current_date function that isn't working in pg10
anymore, this looks like an extremely
old test that can be removed

Also cherry-picks f846a789b78f977b4d7e8e16b412b07e77f2ab13 from master
to repair 'postgres'-deprecation warning test for multiple
calls within a single process

Change-Id: I5f8aee0f5ed423461be5a9060c812eb0acdc7df5
(cherry picked from commit 67ee56be69687a828d3998b2f6e2caccb3fe9072)

lib/sqlalchemy/util/langhelpers.py
test/dialect/postgresql/test_dialect.py
test/sql/test_functions.py

index 66a06c5e9df6508ca28c6d2632d9a33559e7de38..09d85b8f3e6ee457da1e3f11224c3d0889971868 100644 (file)
@@ -193,6 +193,9 @@ class PluginLoader(object):
         self.impls = {}
         self.auto_fn = auto_fn
 
+    def clear(self):
+        self.impls.clear()
+
     def load(self, name):
         if name in self.impls:
             return self.impls[name]()
index 376ba081cf29bf921cb42c95e688d7187ea7a6ad..5ab17ea8cd93ce3ba466f3ccee7a275c2efc044c 100644 (file)
@@ -19,33 +19,19 @@ from sqlalchemy.engine import url
 from sqlalchemy.testing import is_
 from sqlalchemy.testing import expect_deprecated
 from ...engine import test_execute
+from sqlalchemy import dialects
 
 
-class MiscTest(fixtures.TestBase, AssertsExecutionResults, AssertsCompiledSQL):
+class DialectTest(fixtures.TestBase):
+    """python-side dialect tests.  """
 
-    __only_on__ = 'postgresql'
-    __backend__ = True
-
-    @testing.provide_metadata
-    def test_date_reflection(self):
-        metadata = self.metadata
-        Table(
-            'pgdate', metadata, Column('date1', DateTime(timezone=True)),
-            Column('date2', DateTime(timezone=False)))
-        metadata.create_all()
-        m2 = MetaData(testing.db)
-        t2 = Table('pgdate', m2, autoload=True)
-        assert t2.c.date1.type.timezone is True
-        assert t2.c.date2.type.timezone is False
-
-    @testing.fails_on('+zxjdbc',
-                      'The JDBC driver handles the version parsing')
     def test_version_parsing(self):
 
         def mock_conn(res):
             return Mock(
                 execute=Mock(return_value=Mock(scalar=Mock(return_value=res))))
 
+        dialect = postgresql.dialect()
         for string, version in [
                 (
                     'PostgreSQL 8.3.8 on i686-redhat-linux-gnu, compiled by '
@@ -69,9 +55,52 @@ class MiscTest(fixtures.TestBase, AssertsExecutionResults, AssertsCompiledSQL):
                     'compiled by gcc (GCC) 4.8.5 20150623 '
                     '(Red Hat 4.8.5-11), 64-bit', (10,))
         ]:
-            eq_(testing.db.dialect._get_server_version_info(mock_conn(string)),
+            eq_(dialect._get_server_version_info(mock_conn(string)),
                 version)
 
+    def test_deprecated_dialect_name_still_loads(self):
+        dialects.registry.clear()
+        with expect_deprecated(
+                "The 'postgres' dialect name "
+                "has been renamed to 'postgresql'"):
+            dialect = url.URL("postgres").get_dialect()
+        is_(dialect, postgresql.dialect)
+
+    @testing.requires.psycopg2_compatibility
+    def test_pg_dialect_use_native_unicode_from_config(self):
+        config = {
+            'sqlalchemy.url': testing.db.url,
+            'sqlalchemy.use_native_unicode': "false"}
+
+        e = engine_from_config(config, _initialize=False)
+        eq_(e.dialect.use_native_unicode, False)
+
+        config = {
+            'sqlalchemy.url': testing.db.url,
+            'sqlalchemy.use_native_unicode': "true"}
+
+        e = engine_from_config(config, _initialize=False)
+        eq_(e.dialect.use_native_unicode, True)
+
+
+class MiscBackendTest(
+        fixtures.TestBase, AssertsExecutionResults, AssertsCompiledSQL):
+
+    __only_on__ = 'postgresql'
+    __backend__ = True
+
+    @testing.provide_metadata
+    def test_date_reflection(self):
+        metadata = self.metadata
+        Table(
+            'pgdate', metadata, Column('date1', DateTime(timezone=True)),
+            Column('date2', DateTime(timezone=False)))
+        metadata.create_all()
+        m2 = MetaData(testing.db)
+        t2 = Table('pgdate', m2, autoload=True)
+        assert t2.c.date1.type.timezone is True
+        assert t2.c.date2.type.timezone is False
+
     @testing.requires.psycopg2_compatibility
     def test_psycopg2_version(self):
         v = testing.db.dialect.psycopg2_version
@@ -91,13 +120,6 @@ class MiscTest(fixtures.TestBase, AssertsExecutionResults, AssertsCompiledSQL):
             psycopg2.Error)
         assert isinstance(exception, exc.OperationalError)
 
-    def test_deprecated_dialect_name_still_loads(self):
-        with expect_deprecated(
-                "The 'postgres' dialect name "
-                "has been renamed to 'postgresql'"):
-            dialect = url.URL("postgres").get_dialect()
-        is_(dialect, postgresql.dialect)
-
     # currently not passing with pg 9.3 that does not seem to generate
     # any notices here, would rather find a way to mock this
     @testing.requires.no_coverage
@@ -141,22 +163,6 @@ class MiscTest(fixtures.TestBase, AssertsExecutionResults, AssertsCompiledSQL):
         new_encoding = c.execute("show client_encoding").fetchone()[0]
         eq_(new_encoding, test_encoding)
 
-    @testing.requires.psycopg2_compatibility
-    def test_pg_dialect_use_native_unicode_from_config(self):
-        config = {
-            'sqlalchemy.url': testing.db.url,
-            'sqlalchemy.use_native_unicode': "false"}
-
-        e = engine_from_config(config, _initialize=False)
-        eq_(e.dialect.use_native_unicode, False)
-
-        config = {
-            'sqlalchemy.url': testing.db.url,
-            'sqlalchemy.use_native_unicode': "true"}
-
-        e = engine_from_config(config, _initialize=False)
-        eq_(e.dialect.use_native_unicode, True)
-
     @testing.requires.psycopg2_or_pg8000_compatibility
     @engines.close_open_connections
     def test_autocommit_isolation_level(self):
@@ -185,45 +191,41 @@ class MiscTest(fixtures.TestBase, AssertsExecutionResults, AssertsCompiledSQL):
             ).scalar()
             eq_(r, exp)
 
+    @testing.provide_metadata
     def test_checksfor_sequence(self):
-        meta1 = MetaData(testing.db)
+        meta1 = self.metadata
         seq = Sequence('fooseq')
         t = Table(
             'mytable', meta1,
             Column('col1', Integer, seq)
         )
         seq.drop()
-        try:
-            testing.db.execute('CREATE SEQUENCE fooseq')
-            t.create(checkfirst=True)
-        finally:
-            t.drop(checkfirst=True)
+        testing.db.execute('CREATE SEQUENCE fooseq')
+        t.create(checkfirst=True)
 
+    @testing.provide_metadata
     def test_schema_roundtrips(self):
-        meta = MetaData(testing.db)
+        meta = self.metadata
         users = Table(
             'users', meta, Column(
                 'id', Integer, primary_key=True), Column(
                 'name', String(50)), schema='test_schema')
         users.create()
-        try:
-            users.insert().execute(id=1, name='name1')
-            users.insert().execute(id=2, name='name2')
-            users.insert().execute(id=3, name='name3')
-            users.insert().execute(id=4, name='name4')
-            eq_(users.select().where(users.c.name == 'name2')
-                .execute().fetchall(), [(2, 'name2')])
-            eq_(users.select(use_labels=True).where(
-                users.c.name == 'name2').execute().fetchall(), [(2, 'name2')])
-            users.delete().where(users.c.id == 3).execute()
-            eq_(users.select().where(users.c.name == 'name3')
-                .execute().fetchall(), [])
-            users.update().where(users.c.name == 'name4'
-                                 ).execute(name='newname')
-            eq_(users.select(use_labels=True).where(
-                users.c.id == 4).execute().fetchall(), [(4, 'newname')])
-        finally:
-            users.drop()
+        users.insert().execute(id=1, name='name1')
+        users.insert().execute(id=2, name='name2')
+        users.insert().execute(id=3, name='name3')
+        users.insert().execute(id=4, name='name4')
+        eq_(users.select().where(users.c.name == 'name2')
+            .execute().fetchall(), [(2, 'name2')])
+        eq_(users.select(use_labels=True).where(
+            users.c.name == 'name2').execute().fetchall(), [(2, 'name2')])
+        users.delete().where(users.c.id == 3).execute()
+        eq_(users.select().where(users.c.name == 'name3')
+            .execute().fetchall(), [])
+        users.update().where(users.c.name == 'name4'
+                             ).execute(name='newname')
+        eq_(users.select(use_labels=True).where(
+            users.c.id == 4).execute().fetchall(), [(4, 'newname')])
 
     def test_preexecute_passivedefault(self):
         """test that when we get a primary key column back from
index 272bd876e17369abb62922dee457fa0fb3a3cad4..51ce6b2386bef1bbfc8df23adc1374cbf7decfe8 100644 (file)
@@ -594,6 +594,7 @@ class ReturnTypeTest(fixtures.TestBase):
 
 
 class ExecuteTest(fixtures.TestBase):
+    __backend__ = True
 
     @engines.close_first
     def tearDown(self):
@@ -708,14 +709,7 @@ class ExecuteTest(fixtures.TestBase):
         w = select(['*'], from_obj=[func.current_date(bind=testing.db)]).\
             scalar()
 
-        # construct a column-based FROM object out of a function,
-        # like in [ticket:172]
-        s = select([sql.column('date', type_=DateTime)],
-                   from_obj=[func.current_date(bind=testing.db)])
-        q = s.execute().first()[s.c.date]
-        r = s.alias('datequery').select().scalar()
-
-        assert x == y == z == w == q == r
+        assert x == y == z == w
 
     def test_extract_bind(self):
         """Basic common denominator execution tests for extract()"""