summaryrefslogtreecommitdiff
path: root/test/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-11-08 18:06:21 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-11-08 18:06:21 +0000
commit2cbb133567befca7e92f8e3bbc0aaae96b1781a8 (patch)
treec5848def75457a3bb1c5887af09ee5bd7fee1b83 /test/sql
parent7a25be0f4214720198029e85c2f1d18f4fc8bad3 (diff)
downloadsqlalchemy-2cbb133567befca7e92f8e3bbc0aaae96b1781a8.tar.gz
more changes to traverse-and-clone; a particular element will only be cloned once and is
then re-used. the FROM calculation of a Select normalizes the list of hide_froms against all previous incarnations of each FROM clause, using a tag attached from cloned clause to previous.
Diffstat (limited to 'test/sql')
-rw-r--r--test/sql/generative.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/test/sql/generative.py b/test/sql/generative.py
index 2d1f3ccf9..1497ecde3 100644
--- a/test/sql/generative.py
+++ b/test/sql/generative.py
@@ -1,6 +1,7 @@
import testbase
from sqlalchemy import *
from sqlalchemy.sql import table, column, ClauseElement
+from sqlalchemy.sql.expression import _clone
from testlib import *
from sqlalchemy.sql.visitors import *
from sqlalchemy import util
@@ -56,8 +57,8 @@ class TraversalTest(AssertMixin):
return True
return False
- def _copy_internals(self):
- self.items = [i._clone() for i in self.items]
+ def _copy_internals(self, clone=_clone):
+ self.items = [clone(i) for i in self.items]
def get_children(self, **kwargs):
return self.items
@@ -223,7 +224,23 @@ class ClauseTest(SQLCompileTest):
print str(s5)
assert str(s5) == s5_assert
assert str(s4) == s4_assert
-
+
+ def test_alias(self):
+ subq = t2.select().alias('subq')
+ s = select([t1.c.col1, subq.c.col1], from_obj=[t1, subq, t1.join(subq, t1.c.col1==subq.c.col2)])
+ orig = str(s)
+ s2 = ClauseVisitor().traverse(s, clone=True)
+ assert orig == str(s) == str(s2)
+
+ s4 = ClauseVisitor().traverse(s2, clone=True)
+ assert orig == str(s) == str(s2) == str(s4)
+
+ s3 = sql_util.ClauseAdapter(table('foo')).traverse(s, clone=True)
+ assert orig == str(s) == str(s3)
+
+ s4 = sql_util.ClauseAdapter(table('foo')).traverse(s3, clone=True)
+ assert orig == str(s) == str(s3) == str(s4)
+
def test_correlated_select(self):
s = select(['*'], t1.c.col1==t2.c.col1, from_obj=[t1, t2]).correlate(t2)
class Vis(ClauseVisitor):