modular alchemy backend bug fixes
authorSofia Papagiannaki <papagian@gmail.com>
Tue, 6 Sep 2011 12:40:27 +0000 (15:40 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Tue, 6 Sep 2011 12:40:27 +0000 (15:40 +0300)
pithos/backends/lib_alchemy/node.py
pithos/backends/lib_alchemy/permissions.py

index 41f2ab9..69c7d39 100644 (file)
@@ -35,7 +35,12 @@ from time import time
 from sqlalchemy import Table, Integer, Float, Column, String, MetaData, ForeignKey
 from sqlalchemy.schema import Index, Sequence
 from sqlalchemy.sql import func, and_, or_, null, select, bindparam
-from duplicate import insertOnDuplicate
+from sqlalchemy.ext.compiler import compiles
+try:
+    from sqlalchemy.sql.expression import _UpdateBase
+except:
+    from sqlalchemy.sql.expression import UpdateBase as _UpdateBase
+
 from dbworker import DBWorker
 
 ROOTNODE  = 0
@@ -641,10 +646,7 @@ class Node(DBWorker):
             self.conn.execute(s).close()
     
     def attribute_copy(self, source, dest):
-        from sqlalchemy.ext.compiler import compiles
-        from sqlalchemy.sql.expression import UpdateBase
-                
-        class InsertFromSelect(UpdateBase):
+        class InsertFromSelect(_UpdateBase):
             def __init__(self, table, select):
                 self.table = table
                 self.select = select
index 3cdab40..46066d0 100644 (file)
@@ -32,7 +32,7 @@
 # or implied, of GRNET S.A.
 
 from sqlalchemy.sql import select, literal
-from sqlalchemy.sql.expression import join
+from sqlalchemy.sql.expression import join, union
 
 from xfeatures import XFeatures
 from groups import Groups
@@ -127,9 +127,9 @@ class Permissions(XFeatures, Groups, Public):
         members = select([literal(member).label('value')])
         any = select([literal('*').label('value')])
         
-        inner_join = join(xfeatures_xfeaturevals,
-                    union(member_groups, members, any),
-                    self.xfeaturevals.c.value == extended_member_groups.c.value)
+        u = union(member_groups, members, any)
+        inner_join = join(xfeatures_xfeaturevals, u,
+                    self.xfeaturevals.c.value == u.c.value).alias()
         s = select([self.xfeatures.c.path], from_obj=[inner_join]).distinct()
         if prefix:
             s = s.where(self.xfeatures.c.path.like(prefix + '%'))