]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed a bug in extract() introduced in 0.5.4 whereby
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 17 Jul 2009 15:10:54 +0000 (15:10 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 17 Jul 2009 15:10:54 +0000 (15:10 +0000)
the string "field" argument was getting treated as a
ClauseElement, causing various errors within more
complex SQL transformations.

CHANGES
lib/sqlalchemy/sql/expression.py
test/sql/test_generative.py

diff --git a/CHANGES b/CHANGES
index 2ea185a91af0e0f418098ffc1bd0d1612222c3ec..f6d89c29d91ecfcfa08aae26c6a7af14b5c36bfc 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -3,7 +3,14 @@
 =======
 CHANGES
 =======
-
+0.5.6
+=====
+- sql
+    - Fixed a bug in extract() introduced in 0.5.4 whereby
+      the string "field" argument was getting treated as a 
+      ClauseElement, causing various errors within more 
+      complex SQL transformations.
+      
 0.5.5
 =======
 - general
index 565c3407b7925a2b811477a3fdaf92a78b0c68a5..b5eb0eee97c5fee33bc9ab45e2cd334f2a6c004d 100644 (file)
@@ -2326,11 +2326,10 @@ class _Extract(ColumnElement):
         self.expr = _literal_as_binds(expr, None)
 
     def _copy_internals(self, clone=_clone):
-        self.field = clone(self.field)
         self.expr = clone(self.expr)
 
     def get_children(self, **kwargs):
-        return self.field, self.expr
+        return self.expr,
 
     @property
     def _from_objects(self):
index ca427ca5f57d5043c0c6ce127f1965d1239ba77b..7c094c26b05bf9f143f03925b8dad11c6d1f2a66 100644 (file)
@@ -310,7 +310,17 @@ class ClauseTest(TestBase, AssertsCompiledSQL):
         "table1.col3 AS col3 FROM table1 WHERE table1.col1 = :col1_1) AS anon_1, "\
         "(SELECT table1.col1 AS col1, table1.col2 AS col2, table1.col3 AS col3 FROM table1 WHERE table1.col1 = :col1_2) AS anon_2 "\
         "WHERE anon_1.col2 = anon_2.col2")
-
+    
+    def test_extract(self):
+        s = select([extract('foo', t1.c.col1).label('col1')])
+        self.assert_compile(s, "SELECT EXTRACT(foo FROM table1.col1) AS col1 FROM table1")
+        
+        s2 = CloningVisitor().traverse(s).alias()
+        s3 = select([s2.c.col1])
+        self.assert_compile(s, "SELECT EXTRACT(foo FROM table1.col1) AS col1 FROM table1")
+        self.assert_compile(s3, "SELECT anon_1.col1 FROM (SELECT EXTRACT(foo FROM table1.col1) AS col1 FROM table1) AS anon_1")
+        
+        
     @testing.emits_warning('.*replaced by another column with the same key')
     def test_alias(self):
         subq = t2.select().alias('subq')