]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- postgresql dialect can properly detect pg "devel" version
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 29 Dec 2009 23:41:04 +0000 (23:41 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 29 Dec 2009 23:41:04 +0000 (23:41 +0000)
strings, i.e. "8.5devel" [ticket:1636]

CHANGES
lib/sqlalchemy/dialects/postgresql/base.py
test/dialect/test_postgresql.py

diff --git a/CHANGES b/CHANGES
index ae6e839595dc0d1737ae839b1fed5904e1e0e218..1fd825d4c3875d2707dfa6df983e3cff287229de 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -559,6 +559,9 @@ CHANGES
       select from a procedure that modifies rows, now work 
       with server-side cursor mode (the named cursor isn't 
       used for such statements.)
+    
+    - postgresql dialect can properly detect pg "devel" version
+      strings, i.e. "8.5devel" [ticket:1636]
       
 - mysql
     - New dialects: oursql, a new native dialect, 
index 1d7240fbfe0d75c8eb97339410c2fe1bddf57dbc..2f9a5b5e460073361152806020bcc678211819fc 100644 (file)
@@ -706,10 +706,10 @@ class PGDialect(default.DefaultDialect):
 
     def _get_server_version_info(self, connection):
         v = connection.execute("select version()").scalar()
-        m = re.match('PostgreSQL (\d+)\.(\d+)\.(\d+)', v)
+        m = re.match('PostgreSQL (\d+)\.(\d+)(?:\.(\d+))?(?:devel)?', v)
         if not m:
             raise AssertionError("Could not determine version from string '%s'" % v)
-        return tuple([int(x) for x in m.group(1, 2, 3)])
+        return tuple([int(x) for x in m.group(1, 2, 3) if x is not None])
 
     @reflection.cache
     def get_table_oid(self, connection, table_name, schema=None, **kw):
index fdc2e7ea926df12bc073af158467bae3e360b508..bc181810e6e67a290fa374fab061a927355b10bc 100644 (file)
@@ -978,7 +978,25 @@ class MiscTest(TestBase, AssertsExecutionResults, AssertsCompiledSQL):
             assert t2.c.date2.type.timezone is False
         finally:
             m1.drop_all()
-
+    
+    def test_version_parsing(self):
+        class MockConn(object):
+            def __init__(self, res):
+                self.res = res
+                
+            def execute(self, str):
+                return self
+                
+            def scalar(self):
+                return self.res
+                
+        for string, version in [
+            ("PostgreSQL 8.3.8 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33)", (8, 3, 8)),
+            ("PostgreSQL 8.5devel on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2, 64-bit", (8, 5)),
+        ]:
+            
+            eq_(testing.db.dialect._get_server_version_info(MockConn(string)), version)
+        
     def test_pg_weirdchar_reflection(self):
         meta1 = MetaData(testing.db)
         subject = Table("subject", meta1,