]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Sep 2005 06:12:22 +0000 (06:12 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Sep 2005 06:12:22 +0000 (06:12 +0000)
lib/sqlalchemy/engine.py
lib/sqlalchemy/mapper.py
lib/sqlalchemy/schema.py
lib/sqlalchemy/sql.py

index e493d4d2855b2df75095ffeffa00e63dbe78f3f0..fec2f7ae902f7eb7d37d2750d9972f43cf4ffae4 100644 (file)
@@ -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
index 203f96cab7752a15d991cc606fafa9153ed85471..bf137bcf87a27769ad4be8955ee053312e6afef5 100644 (file)
@@ -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():
index 333fbfa605c7676c0f9fe24e5216a517e1a16c5f..1e36117a655a13fe44e7ce321313e079edd1baf9 100644 (file)
@@ -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:
index 35747476d38e667f6f48324db95d868cd1da73fd..43891dc48b34b0fe51695fcbff13b540db375db5 100644 (file)
@@ -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)