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

index d177168c2dfc4103e6a75176ebd72ee35ce8c3fc..9b55b5ab0d94563ca74a932404c451eeb11952dd 100644 (file)
@@ -24,6 +24,14 @@ import sqlalchemy.util as util
 import sqlalchemy.sql as sql
 import StringIO
 
+class TypeDescriptor(object):
+    def get_col_spec(self):
+        raise NotImplementedError()
+    def convert_bind_param(self, value):
+        raise NotImplementedError()
+    def convert_result_value(self, value):
+        raise NotImplementedError()
+
 class SchemaIterator(schema.SchemaVisitor):
     """a visitor that can gather text into a buffer and execute the contents of the buffer."""
     
@@ -58,6 +66,9 @@ class SQLEngine(schema.SchemaEngine):
         self.tables = {}
         self.notes = {}
 
+    def type_descriptor(self, type):
+        raise NotImplementedError()
+        
     def schemagenerator(self, proxy, **params):
         raise NotImplementedError()
 
@@ -174,6 +185,7 @@ class SQLEngine(schema.SchemaEngine):
             c = connection.cursor()
 
         self.pre_exec(connection, c, statement, parameters, echo = echo, **kwargs)
+        # TODO: affix TypeDescriptors ehre to pre-process bind params
         if isinstance(parameters, list):
             c.executemany(statement, parameters)
         else:
@@ -186,12 +198,14 @@ class SQLEngine(schema.SchemaEngine):
 
 
 class ResultProxy:
-    def __init__(self, cursor, echo = False):
+    def __init__(self, cursor, echo = False, engine = None):
         self.cursor = cursor
         self.echo = echo
+        self.engine = engine
         metadata = cursor.description
         self.props = {}
         i = 0
+        # TODO: affix TypeDescriptors here to post-process results
         if metadata is not None:
             for item in metadata:
                 self.props[item[0]] = i
index dd943325b53c1fb19ea15b71de72ae859421bbab..ab30319c5805200424471160a122ddd159d74b4d 100644 (file)
@@ -163,9 +163,9 @@ class Mapper(object):
         # TODO: get some notion of "primary mapper" going so multiple mappers dont collide
         self.class_._mapper = self.hashkey
 
-    def instances(self, cursor, db = None):
+    def instances(self, cursor, db):
         result = util.HistoryArraySet()
-        cursor = engine.ResultProxy(cursor, echo = db and db.echo, engine = db)
+        cursor = engine.ResultProxy(cursor, db, echo = db.echo)
         imap = {}
         while True:
             row = cursor.fetchone()
index fdce9cf8cc5be6378926be09254142fd9446d3d2..c83ccddae75445541583bd102e71861b5927ce73 100644 (file)
@@ -20,36 +20,41 @@ import copy
 
 __ALL__ = ['Table', 'Column', 'Sequence', 'ForeignKey', 
             'INT', 'CHAR', 'VARCHAR', 'TEXT', 'FLOAT', 'DECIMAL', 
-            'TIMESTAMP', 'DATETIME', 'CLOB', 'BLOB', 'BOOLEAN'
+            'TIMESTAMP', 'DATETIME', 'CLOB', 'BLOB', 'BOOLEAN', 'String', 'Integer', 'Numeric', 'DateTime', 'Binary', 
             ]
 
 
-class INT:
-    """integer datatype"""
-    pass
-
-INTEGER = INT
-class CHAR:
-    """character datatype"""
+class String:
     def __init__(self, length):
         self.length = length
 
-class VARCHAR:
-    def __init__(self, length):
-        self.length = length
+class Integer:
+    """integer datatype"""
+    pass
 
 class Numeric:
     def __init__(self, precision, length):
         self.precision = precision
         self.length = length
+
+class DateTime:
+    pass
+
+class Binary:pass
+class Boolean:pass
+    
 class FLOAT(Numeric):pass
-class TEXT: pass
+class TEXT(String): pass
 class DECIMAL(Numeric):pass
-class TIMESTAMP: pass
-class DATETIME: pass
-class CLOB: pass
-class BLOB: pass
-class BOOLEAN: pass
+class INT(Integer):pass
+INTEGER = INT
+class TIMESTAMP(DateTime): pass
+class DATETIME(DateTime): pass
+class CLOB(String): pass
+class VARCHAR(String): pass
+class CHAR(String):pass
+class BLOB(Binary): pass
+class BOOLEAN(Boolean): pass
 
 
 class SchemaItem(object):
index 9a31c00a7e384aaf7a2116fb0ac5bb48cc1793c9..cf482dbe13d19bbedd369f94e3d2d593237ccfe9 100644 (file)
@@ -178,7 +178,7 @@ class EagerTest(AssertMixin):
         c = s.compile()
         print "\n" + str(c) + repr(c.get_params())
         
-        l = m.instances(s.execute(emailad = 'jack@bean.com'))
+        l = m.instances(s.execute(emailad = 'jack@bean.com'), users.engine)
         print repr(l)
         
     def testmulti(self):