Revision 7fef13f0 snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py

b/snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
102 102
    'muser': 7,
103 103
    'uuid': 8,
104 104
    'checksum': 9,
105
    'cluster': 10
105
    'cluster': 10,
106 106
}
107 107

  
108 108

  
......
672 672

  
673 673
        # All children (get size and mtime).
674 674
        # This is why the full path is stored.
675
        s = select([func.count(v.c.serial),
675
        if before != inf:
676
            s = select([func.count(v.c.serial),
676 677
                    func.sum(v.c.size),
677 678
                    func.max(v.c.mtime)])
678
        if before != inf:
679 679
            c1 = select([func.max(self.versions.c.serial)],
680 680
                        self.versions.c.node == v.c.node)
681 681
            c1 = c1.where(self.versions.c.mtime < before)
682 682
        else:
683
            c1 = select([self.nodes.c.latest_version],
684
                        self.nodes.c.node == v.c.node)
683
            inner_join = \
684
                    self.versions.join(self.nodes, onclause=\
685
                    self.versions.c.serial == self.nodes.c.latest_version)
686
            s = select([func.count(self.versions.c.serial),
687
                    func.sum(self.versions.c.size),
688
                    func.max(self.versions.c.mtime)], from_obj=[inner_join])
689

  
685 690
        c2 = select([self.nodes.c.node],
686 691
                    self.nodes.c.path.like(self.escape_like(path) + '%',
687 692
                                           escape=ESCAPE_CHAR))
688
        s = s.where(and_(v.c.serial == c1,
693
        if before != inf:
694
            s = s.where(and_(v.c.serial == c1,
689 695
                         v.c.cluster != except_cluster,
690 696
                         v.c.node.in_(c2)))
697
        else:
698
            s = s.where(and_(self.versions.c.cluster != except_cluster,
699
                        self.versions.c.node.in_(c2)))
700

  
691 701
        rp = self.conn.execute(s)
692 702
        r = rp.fetchone()
693 703
        rp.close()
......
1233 1243
    def get_props(self, paths):
1234 1244
        inner_join = \
1235 1245
            self.nodes.join(self.versions,
1236
                onclause=self.versions.c.serial==self.nodes.c.latest_version)
1246
                onclause=self.versions.c.serial == self.nodes.c.latest_version)
1237 1247
        cc = self.nodes.c.path.in_(paths)
1238
        s = select([self.nodes.c.path,self.versions.c.type],
1248
        s = select([self.nodes.c.path, self.versions.c.type],
1239 1249
                    from_obj=[inner_join]).where(cc).distinct()
1240 1250
        r = self.conn.execute(s)
1241 1251
        rows = r.fetchall()

Also available in: Unified diff