]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Reflection functions for Table, Sequence no longer
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 9 Sep 2011 21:12:52 +0000 (17:12 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 9 Sep 2011 21:12:52 +0000 (17:12 -0400)
    case insensitive.  Names can be differ only in case
    and will be correctly distinguished.  [ticket:2256]

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

diff --git a/CHANGES b/CHANGES
index aac1a7a4a777ce003a2f1cd8495093da1c20db59..72476994b735e7d3ebdd7cbf9369af19f9c7ba36 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -107,6 +107,10 @@ CHANGES
     extensions are in use or not.
 
 - postgresql
+  - Reflection functions for Table, Sequence no longer
+    case insensitive.  Names can be differ only in case
+    and will be correctly distinguished.  [ticket:2256]
+
   - Use an atomic counter as the "random number" 
     source for server side cursor names; 
     conflicts have been reported in rare cases.
index 5ff20ce734971b97aea4deef74e06cb95484ed8f..8c3babd313a7794cc6c69782481f7996365c710d 100644 (file)
@@ -938,9 +938,9 @@ class PGDialect(default.DefaultDialect):
                 sql.text(
                 "select relname from pg_class c join pg_namespace n on "
                 "n.oid=c.relnamespace where n.nspname=current_schema() and "
-                "lower(relname)=:name",
+                "relname=:name",
                 bindparams=[
-                        sql.bindparam('name', unicode(table_name.lower()),
+                        sql.bindparam('name', unicode(table_name),
                         type_=sqltypes.Unicode)]
                 )
             )
@@ -949,10 +949,10 @@ class PGDialect(default.DefaultDialect):
                 sql.text(
                 "select relname from pg_class c join pg_namespace n on "
                 "n.oid=c.relnamespace where n.nspname=:schema and "
-                "lower(relname)=:name",
+                "relname=:name",
                     bindparams=[
                         sql.bindparam('name', 
-                        unicode(table_name.lower()), type_=sqltypes.Unicode),
+                        unicode(table_name), type_=sqltypes.Unicode),
                         sql.bindparam('schema', 
                         unicode(schema), type_=sqltypes.Unicode)] 
                 )
@@ -966,9 +966,9 @@ class PGDialect(default.DefaultDialect):
                     "SELECT relname FROM pg_class c join pg_namespace n on "
                     "n.oid=c.relnamespace where relkind='S' and "
                     "n.nspname=current_schema() "
-                    "and lower(relname)=:name",
+                    "and relname=:name",
                     bindparams=[
-                        sql.bindparam('name', unicode(sequence_name.lower()),
+                        sql.bindparam('name', unicode(sequence_name),
                         type_=sqltypes.Unicode)
                     ] 
                 )
@@ -978,9 +978,9 @@ class PGDialect(default.DefaultDialect):
                 sql.text(
                 "SELECT relname FROM pg_class c join pg_namespace n on "
                 "n.oid=c.relnamespace where relkind='S' and "
-                "n.nspname=:schema and lower(relname)=:name",
+                "n.nspname=:schema and relname=:name",
                 bindparams=[
-                    sql.bindparam('name', unicode(sequence_name.lower()),
+                    sql.bindparam('name', unicode(sequence_name),
                      type_=sqltypes.Unicode),
                     sql.bindparam('schema', 
                                 unicode(schema), type_=sqltypes.Unicode)
index a8b998c71e19c57e6ff13a5ae58f635d5b25679c..adf292999da8f1adc60ac8fafc0743e6d9d211c8 100644 (file)
@@ -1360,6 +1360,33 @@ class ReflectionTest(fixtures.TestBase):
                      == referer.c.ref).compare(
                         subject.join(referer).onclause))
 
+    @testing.provide_metadata
+    def test_uppercase_lowercase_table(self):
+        metadata = self.metadata
+
+        a_table = Table('a', metadata, Column('x', Integer))
+        A_table = Table('A', metadata, Column('x', Integer))
+
+        a_table.create()
+        assert testing.db.has_table("a")
+        assert not testing.db.has_table("A")
+        A_table.create(checkfirst=True)
+        assert testing.db.has_table("A")
+
+    def test_uppercase_lowercase_sequence(self):
+
+        a_seq = Sequence('a')
+        A_seq = Sequence('A')
+
+        a_seq.create(testing.db)
+        assert testing.db.dialect.has_sequence(testing.db, "a")
+        assert not testing.db.dialect.has_sequence(testing.db, "A")
+        A_seq.create(testing.db, checkfirst=True)
+        assert testing.db.dialect.has_sequence(testing.db, "A")
+
+        a_seq.drop(testing.db)
+        A_seq.drop(testing.db)
+
     def test_schema_reflection_multi_search_path(self):
         """test the 'set the same schema' rule when
         multiple schemas/search paths are in effect."""