]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
factor create_row_adapter into sql.util.row_adapter
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 20 Jan 2008 05:06:55 +0000 (05:06 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 20 Jan 2008 05:06:55 +0000 (05:06 +0000)
lib/sqlalchemy/orm/util.py
lib/sqlalchemy/sql/util.py

index 4f2ab5444af1e6e9c0a88e86326f1ee86eb3d009..d2f1d2491a626ddc511e5e273492349a6da3d83a 100644 (file)
@@ -6,6 +6,7 @@
 
 from sqlalchemy import sql, util, exceptions
 from sqlalchemy.sql import util as sql_util
+from sqlalchemy.sql.util import row_adapter as create_row_adapter
 from sqlalchemy.sql import visitors
 from sqlalchemy.orm.interfaces import MapperExtension, EXT_CONTINUE, build_path
 
@@ -188,46 +189,6 @@ class AliasedClauses(object):
         """
         return create_row_adapter(self.alias, self.mapped_table)
 
-def create_row_adapter(from_, to, equivalent_columns=None):
-    """create a row adapter between two selectables.
-    
-    The returned adapter is a class that can be instantiated repeatedly for any number
-    of rows; this is an inexpensive process.  However, the creation of the row
-    adapter class itself *is* fairly expensive so caching should be used to prevent
-    repeated calls to this function.
-    """
-    
-    map = {}
-    for c in to.c:
-        corr = from_.corresponding_column(c)
-        if corr:
-            map[c] = corr
-        elif equivalent_columns:
-            if c in equivalent_columns:
-                for c2 in equivalent_columns[c]:
-                    corr = from_.corresponding_column(c2)
-                    if corr:
-                        map[c] = corr
-                        break
-
-    class AliasedRow(object):
-        def __init__(self, row):
-            self.row = row
-        def __contains__(self, key):
-            if key in map:
-                return map[key] in self.row
-            else:
-                return key in self.row
-        def has_key(self, key):
-            return key in self
-        def __getitem__(self, key):
-            if key in map:
-                key = map[key]
-            return self.row[key]
-        def keys(self):
-            return map.keys()
-    AliasedRow.map = map
-    return AliasedRow
 
 class PropertyAliasedClauses(AliasedClauses):
     """extends AliasedClauses to add support for primary/secondary joins on a relation()."""
index 34397f261c4c4d03dd60a00b13e64f476c736c68..cecea51d334b6997d185119727f34f69b002a396 100644 (file)
@@ -89,6 +89,47 @@ def reduce_columns(columns, *clauses):
     
     return expression.ColumnSet(columns.difference(omit))
 
+def row_adapter(from_, to, equivalent_columns=None):
+    """create a row adapter between two selectables.
+
+    The returned adapter is a class that can be instantiated repeatedly for any number
+    of rows; this is an inexpensive process.  However, the creation of the row
+    adapter class itself *is* fairly expensive so caching should be used to prevent
+    repeated calls to this function.
+    """
+
+    map = {}
+    for c in to.c:
+        corr = from_.corresponding_column(c)
+        if corr:
+            map[c] = corr
+        elif equivalent_columns:
+            if c in equivalent_columns:
+                for c2 in equivalent_columns[c]:
+                    corr = from_.corresponding_column(c2)
+                    if corr:
+                        map[c] = corr
+                        break
+
+    class AliasedRow(object):
+        def __init__(self, row):
+            self.row = row
+        def __contains__(self, key):
+            if key in map:
+                return map[key] in self.row
+            else:
+                return key in self.row
+        def has_key(self, key):
+            return key in self
+        def __getitem__(self, key):
+            if key in map:
+                key = map[key]
+            return self.row[key]
+        def keys(self):
+            return map.keys()
+    AliasedRow.map = map
+    return AliasedRow
+    
 class ColumnsInClause(visitors.ClauseVisitor):
     """Given a selectable, visit clauses and determine if any columns
     from the clause are in the selectable.