]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed use_ansi=False mode, which was producing broken
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 3 May 2010 23:24:52 +0000 (19:24 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 3 May 2010 23:24:52 +0000 (19:24 -0400)
WHERE clauses in pretty much all cases.  [ticket:1790]

CHANGES
lib/sqlalchemy/dialects/oracle/base.py
test/dialect/test_oracle.py

diff --git a/CHANGES b/CHANGES
index e110c15e2b78f9d9d3e3dea049494e19ea098ba7..5bbc0bb815c78cd6d2d26f80d58ecd9d626d7696 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -26,6 +26,9 @@ CHANGES
     be used.   This will impact decimal accuracy and some
     unicode handling issues.  [ticket:1775]
 
+  - Fixed use_ansi=False mode, which was producing broken 
+    WHERE clauses in pretty much all cases.  [ticket:1790]
+    
 - firebird
   - Added a label to the query used within has_table() and 
     has_sequence() to work with older versions of Firebird
index 475730988ff6b8610dce948e306efbe098a79e9f..6c8055138ac33642d70669634c575f531a9ba884 100644 (file)
@@ -380,7 +380,8 @@ class OracleCompiler(compiler.SQLCompiler):
                             binary.left = _OuterJoinColumn(binary.left)
                         elif binary.right.table is join.right:
                             binary.right = _OuterJoinColumn(binary.right)
-                clauses.append(visitors.cloned_traverse(join.onclause, {}, {'binary':visit_binary}))
+                clauses.append(visitors.cloned_traverse(join.onclause, {},
+                                {'binary':visit_binary}))
             else:
                 clauses.append(join.onclause)
             
@@ -391,7 +392,11 @@ class OracleCompiler(compiler.SQLCompiler):
         for f in froms:
             if isinstance(f, expression.Join):
                 visit_join(f)
-        return sql.and_(*clauses)
+        
+        if not clauses:
+            return None
+        else:
+            return sql.and_(*clauses)
 
     def visit_outer_join_column(self, vc):
         return self.process(vc.column) + "(+)"
index 31e95f57f7f2009259e792527342fdd11cc4b0a1..b9fb9a1337964bb33f2befcb86133b8288aa9864 100644 (file)
@@ -280,6 +280,22 @@ class CompileTest(TestBase, AssertsCompiledSQL):
                         "WHERE mytable.myid = myothertable.otherid(+)) anon_1 "
                         "WHERE thirdtable.userid = anon_1.myid(+)", 
                         dialect=oracle.dialect(use_ansi=False))
+    
+        q = select([table1.c.name]).where(table1.c.name=='foo')
+        self.assert_compile(q, 
+                "SELECT mytable.name FROM mytable WHERE mytable.name = :name_1", 
+                dialect=oracle.dialect(use_ansi=False))
+
+        subq = select([table3.c.otherstuff]).\
+                    where(table3.c.otherstuff==table1.c.name).\
+                    label('bar')
+        q = select([table1.c.name, subq])
+        self.assert_compile(q, 
+                "SELECT mytable.name, "
+                "(SELECT thirdtable.otherstuff FROM thirdtable "
+                "WHERE thirdtable.otherstuff = mytable.name) AS bar FROM mytable", 
+                dialect=oracle.dialect(use_ansi=False))
+
         
     def test_alias_outer_join(self):
         address_types = table('address_types',