From a440e3651535dd5ccb5cfecfd5cca0676d862943 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 4 Aug 2005 04:52:42 +0000 Subject: [PATCH] --- lib/sqlalchemy/sql.py | 18 ++++++++++++++---- test/select.py | 7 ++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 035d402aa1..062ae00149 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -190,7 +190,7 @@ class FromClause(ClauseElement): return None def hash_key(self): - return "FromClause(%s, %s)" % (self.id, self.from_name) + return "FromClause(%s, %s)" % (repr(self.id), repr(self.from_name)) def accept_visitor(self, visitor): visitor.visit_fromclause(self) @@ -208,7 +208,7 @@ class BindParamClause(ClauseElement): return [] def hash_key(self): - return "BindParam(%s, %s)" % (self.key, self.value) + return "BindParam(%s, %s, %s)" % (repr(self.key), repr(self.value), repr(self.shortname)) class TextClause(ClauseElement): """represents any plain text WHERE clause or full SQL statement""" @@ -220,7 +220,7 @@ class TextClause(ClauseElement): def accept_visitor(self, visitor): visitor.visit_textclause(self) def hash_key(self): - return "TextClause(%s)" % self.text + return "TextClause(%s)" % repr(self.text) def _get_from_objects(self): return [] @@ -257,6 +257,9 @@ class CompoundClause(ClauseElement): def _get_from_objects(self): return self.fromobj + def hash_key(self): + return string.join(self.clauses.hash_key(), self.operator) + class ClauseList(ClauseElement): def __init__(self, *clauses): self.clauses = clauses @@ -282,6 +285,9 @@ class BinaryClause(ClauseElement): def _get_from_objects(self): return self.left._get_from_objects() + self.right._get_from_objects() + def hash_key(self): + return self.left.hash_key() + self.operator + self.right.hash_key() + def accept_visitor(self, visitor): self.left.accept_visitor(visitor) self.right.accept_visitor(visitor) @@ -306,6 +312,7 @@ class Join(Selectable): self.left = left self.right = right self.id = self.left.id + "_" + self.right.id + self.allcols = allcols if allcols: self.columns = [c for c in self.left.columns] + [c for c in self.right.columns] else: @@ -314,7 +321,10 @@ class Join(Selectable): # TODO: if no onclause, do NATURAL JOIN self.onclause = onclause self.isouter = isouter - + + def hash_key(self): + return "Join(%s, %s, %s, %s)" % (repr(self.left.hash_key()), repr(self.right.hash_key()), repr(self.onclause.hash_key()), repr(self.isouter)) + def add_join(self, join): pass diff --git a/test/select.py b/test/select.py index c883e254f1..b1e2ed13ca 100644 --- a/test/select.py +++ b/test/select.py @@ -9,7 +9,7 @@ from sqlalchemy.sql import * from sqlalchemy.schema import * from testbase import PersistTest -import unittest +import unittest, re class SelectTest(PersistTest): @@ -46,7 +46,7 @@ class SelectTest(PersistTest): def testtext(self): self.runtest( - textclause("select * from foo where lala = bar", {}) , + textclause("select * from foo where lala = bar") , "select * from foo where lala = bar", engine = db ) @@ -330,7 +330,8 @@ FROM mytable, myothertable WHERE mytable.myid = myothertable.otherid AND mytable def runtest(self, clause, result, engine = None, params = None): c = clause.compile(engine, params) print "\n" + str(c) + repr(c.get_params()) - self.assert_(str(c) == result) + cc = re.sub(r'\n', '', str(c)) + self.assert_(cc == result) if __name__ == "__main__": unittest.main() -- 2.47.2