diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-05-05 17:23:00 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-05-05 17:23:00 +0000 |
commit | 6c89f97e45baf5cbda183f0fdda4135545d0ffbc (patch) | |
tree | e3e3fe0c1f8fb353183f13e6861c5242e8bed703 /lib/sqlalchemy | |
parent | a7ba115c3dd536ac75c334838872c3f587a9c2ec (diff) | |
download | sqlalchemy-6c89f97e45baf5cbda183f0fdda4135545d0ffbc.tar.gz |
fixed a _get_criterion mismatch, cleaned up types + updated types doc
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r-- | lib/sqlalchemy/mapping/mapper.py | 16 | ||||
-rw-r--r-- | lib/sqlalchemy/mapping/query.py | 17 | ||||
-rw-r--r-- | lib/sqlalchemy/types.py | 8 |
3 files changed, 20 insertions, 21 deletions
diff --git a/lib/sqlalchemy/mapping/mapper.py b/lib/sqlalchemy/mapping/mapper.py index 15d197a34..7977cae6a 100644 --- a/lib/sqlalchemy/mapping/mapper.py +++ b/lib/sqlalchemy/mapping/mapper.py @@ -450,6 +450,22 @@ class Mapper(object): self._options[optkey] = mapper return mapper + def _get_criterion(self, key, value): + """used by select_by to match a key/value pair against + local properties, column names, or a matching property in this mapper's + list of relations.""" + if self.props.has_key(key): + return self.props[key].columns[0] == value + elif self.table.c.has_key(key): + return self.table.c[key] == value + else: + for prop in self.props.values(): + c = prop.get_criterion(key, value) + if c is not None: + return c + else: + return None + def __getattr__(self, key): if (key.startswith('select_by_') or key.startswith('get_by_')): return getattr(self.query, key) diff --git a/lib/sqlalchemy/mapping/query.py b/lib/sqlalchemy/mapping/query.py index 2ef23c560..283e8c189 100644 --- a/lib/sqlalchemy/mapping/query.py +++ b/lib/sqlalchemy/mapping/query.py @@ -177,7 +177,7 @@ class Query(object): for key, value in params.iteritems(): if value is False: continue - c = self._get_criterion(key, value) + c = self.mapper._get_criterion(key, value) if c is None: raise InvalidRequestError("Cant find criterion for property '"+ key + "'") if clause is None: @@ -261,18 +261,3 @@ class Query(object): value.setup(key, statement, **kwargs) return statement - def _get_criterion(self, key, value): - """used by select_by to match a key/value pair against - local properties, column names, or a matching property in this mapper's - list of relations.""" - if self.props.has_key(key): - return self.props[key].columns[0] == value - elif self.table.c.has_key(key): - return self.table.c[key] == value - else: - for prop in self.props.values(): - c = prop.get_criterion(key, value) - if c is not None: - return c - else: - return None diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 40b94bbd8..bc894184f 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -67,7 +67,9 @@ class TypeDecorator(AbstractType): def convert_result_value(self, value, engine): return self.impl.convert_result_value(value, engine) def copy(self): - raise NotImplementedError() + instance = self.__class__.__new__(self.__class__) + instance.__dict__.update(self.__dict__) + return instance def to_instance(typeobj): if typeobj is None: @@ -132,8 +134,6 @@ class Unicode(TypeDecorator): return value.decode(engine.encoding) else: return value - def copy(self): - return Unicode(self.impl.length) class Integer(TypeEngine): """integer datatype""" @@ -194,8 +194,6 @@ class PickleType(TypeDecorator): if value is None: return None return self.impl.convert_bind_param(pickle.dumps(value, self.protocol), engine) - def copy(self): - return PickleType(self.protocol) class Boolean(TypeEngine): pass |