From: Mike Bayer Date: Thu, 22 Sep 2005 06:12:22 +0000 (+0000) Subject: (no commit message) X-Git-Tag: rel_0_1_0~625 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2a456b15412ab9c314f8911f74adc55a85f5e2a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git --- diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py index e493d4d285..fec2f7ae90 100644 --- a/lib/sqlalchemy/engine.py +++ b/lib/sqlalchemy/engine.py @@ -197,7 +197,7 @@ class ResultProxy: i = 0 if metadata is not None: for item in metadata: - print repr(item) + #print repr(item) #rec = (engine.type_descriptor(item[1]), i) rec = (None, i) self.props[item[0]] = rec diff --git a/lib/sqlalchemy/mapper.py b/lib/sqlalchemy/mapper.py index 203f96cab7..bf137bcf87 100644 --- a/lib/sqlalchemy/mapper.py +++ b/lib/sqlalchemy/mapper.py @@ -70,10 +70,12 @@ def object_mapper(object): raise "Object " + object.__class__.__name__ + "/" + repr(id(object)) + " has no mapper specified" class Mapper(object): - def __init__(self, hashkey, class_, table, primarytable = None, scope = "thread", properties = None, primary_keys = None, **kwargs): + def __init__(self, hashkey, class_, table, primarytable = None, scope = "thread", properties = None, primary_keys = None, inherits = None, **kwargs): self.hashkey = hashkey self.class_ = class_ self.scope = scope + if inherits is not None: + table = table.join(inherits.table) self.table = table tf = TableFinder() self.table.accept_visitor(tf) @@ -116,6 +118,12 @@ class Mapper(object): # arguments, for caching purposes self.properties = properties + if inherits is not None and inherits.properties is not None: + if self.properties is None: + self.properties = {} + for key in inherits.properties.keys(): + self.properties.setdefault(key, inherits.properties[key]) + # load custom properties if self.properties is not None: for key, prop in self.properties.iteritems(): diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 333fbfa605..1e36117a65 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -110,7 +110,7 @@ class Column(SchemaItem): table.primary_keys.append(self) self.table = table self.engine = table.engine - + self.type = self.engine.type_descriptor(self.type) self._impl = self.engine.columnimpl(self) if self.foreign_key is not None: diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 35747476d3..43891dc48b 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -290,10 +290,11 @@ class FromClause(ClauseElement): visitor.visit_fromclause(self) class BindParamClause(ClauseElement): - def __init__(self, key, value, shortname = None): + def __init__(self, key, value, shortname = None, typeengine = None): self.key = key self.value = value self.shortname = shortname + self.typeengine = typeengine def accept_visitor(self, visitor): visitor.visit_bindparam(self) @@ -303,7 +304,13 @@ class BindParamClause(ClauseElement): def hash_key(self): return "BindParam(%s, %s, %s)" % (repr(self.key), repr(self.value), repr(self.shortname)) - + + def typeprocess(self, value): + if self.typeengine is not None: + return self.typeengine.convert_bind_param(value) + else: + return value + class TextClause(ClauseElement): """represents any plain text WHERE clause or full SQL statement""" @@ -483,7 +490,8 @@ class ColumnSelectable(Selectable): self.column = column self.name = column.name self.columns = [self.column] - + self.typeengine = column.table.engine.type_descriptor(self.column.type) + if column.table.name: self.label = column.table.name + "_" + self.column.name self.fullname = column.table.name + "." + self.column.name @@ -500,9 +508,9 @@ class ColumnSelectable(Selectable): def _compare(self, operator, obj): if _is_literal(obj): if self.column.table.name is None: - obj = BindParamClause(self.name, obj, shortname = self.name) + obj = BindParamClause(self.name, obj, shortname = self.name, typeengine = self.typeengine) else: - obj = BindParamClause(self.column.table.name + "_" + self.name, obj, shortname = self.name) + obj = BindParamClause(self.column.table.name + "_" + self.name, obj, shortname = self.name, typeengine = self.typeengine) return BinaryClause(self.column, obj, operator)