summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-10-16 16:03:59 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-10-16 16:03:59 +0000
commit9b22fc0a9b5a6e97129096dd5ee8b3eb24895ac4 (patch)
tree798ca0b3fdffe8c045e50e09793ffbfc0adb032e /test
parent9226871456014f1283633ead19fac23487a0e429 (diff)
downloadsqlalchemy-9b22fc0a9b5a6e97129096dd5ee8b3eb24895ac4.tar.gz
- Fixed SQL compiler's awareness of top-level column labels as used
in result-set processing; nested selects which contain the same column names don't affect the result or conflict with result-column metadata. - query.get() and related functions (like many-to-one lazyloading) use compile-time-aliased bind parameter names, to prevent name conflicts with bind parameters that already exist in the mapped selectable.
Diffstat (limited to 'test')
-rw-r--r--test/orm/mapper.py6
-rw-r--r--test/orm/query.py15
-rw-r--r--test/sql/query.py13
3 files changed, 30 insertions, 4 deletions
diff --git a/test/orm/mapper.py b/test/orm/mapper.py
index d02feac47..e723f968d 100644
--- a/test/orm/mapper.py
+++ b/test/orm/mapper.py
@@ -728,7 +728,7 @@ class DeferredTest(MapperSuperTest):
orderby = str(orders.default_order_by()[0].compile(bind=testbase.db))
self.assert_sql(testbase.db, go, [
("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.isopen AS orders_isopen FROM orders ORDER BY %s" % orderby, {}),
- ("SELECT orders.description AS orders_description FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3})
+ ("SELECT orders.description AS orders_description FROM orders WHERE orders.order_id = :param_1", {'param_1':3})
])
def testunsaved(self):
@@ -791,7 +791,7 @@ class DeferredTest(MapperSuperTest):
orderby = str(orders.default_order_by()[0].compile(testbase.db))
self.assert_sql(testbase.db, go, [
("SELECT orders.order_id AS orders_order_id FROM orders ORDER BY %s" % orderby, {}),
- ("SELECT orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3})
+ ("SELECT orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders WHERE orders.order_id = :param_1", {'param_1':3})
])
o2 = q.select()[2]
@@ -838,7 +838,7 @@ class DeferredTest(MapperSuperTest):
orderby = str(orders.default_order_by()[0].compile(testbase.db))
self.assert_sql(testbase.db, go, [
("SELECT orders.order_id AS orders_order_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY %s" % orderby, {}),
- ("SELECT orders.user_id AS orders_user_id FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3})
+ ("SELECT orders.user_id AS orders_user_id FROM orders WHERE orders.order_id = :param_1", {'param_1':3})
])
sess.clear()
q3 = q2.options(undefer('user_id'))
diff --git a/test/orm/query.py b/test/orm/query.py
index 49d3852e2..547c7ce88 100644
--- a/test/orm/query.py
+++ b/test/orm/query.py
@@ -65,6 +65,21 @@ class GetTest(QueryTest):
u2 = s.query(User).get(7)
assert u is not u2
+ def test_unique_param_names(self):
+ class SomeUser(object):
+ pass
+ s = users.select(users.c.id!=12).alias('users')
+ m = mapper(SomeUser, s)
+ print s.primary_key
+ print m.primary_key
+ assert s.primary_key == m.primary_key
+
+ row = s.select(use_labels=True).execute().fetchone()
+ print row[s.primary_key[0]]
+
+ sess = create_session()
+ assert sess.query(SomeUser).get(7).name == 'jack'
+
def test_load(self):
s = create_session()
diff --git a/test/sql/query.py b/test/sql/query.py
index eebfb7c08..77e1421a5 100644
--- a/test/sql/query.py
+++ b/test/sql/query.py
@@ -362,7 +362,18 @@ class QueryTest(PersistTest):
except exceptions.InvalidRequestError, e:
assert str(e) == "Ambiguous column name 'user_id' in result set! try 'use_labels' option on select statement." or \
str(e) == "Ambiguous column name 'USER_ID' in result set! try 'use_labels' option on select statement."
-
+
+ def test_column_label_targeting(self):
+ users.insert().execute(user_id=7, user_name='ed')
+
+ for s in (
+ users.select().alias('foo'),
+ users.select().alias(users.name),
+ ):
+ row = s.select(use_labels=True).execute().fetchone()
+ assert row[s.c.user_id] == 7
+ assert row[s.c.user_name] == 'ed'
+
def test_keys(self):
users.insert().execute(user_id=1, user_name='foo')
r = users.select().execute().fetchone()