Mercurial > p > roundup > code
comparison roundup/backends/rdbms_common.py @ 2380:1ccfcfeca61b maint-0.7
backport from HEAD
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Sat, 29 May 2004 02:09:13 +0000 |
| parents | c69b67905043 |
| children | fe722c32ce0c |
comparison
equal
deleted
inserted
replaced
| 2373:b48fcae8b2ad | 2380:1ccfcfeca61b |
|---|---|
| 1 # $Id: rdbms_common.py,v 1.98.2.4 2004-05-23 23:26:29 richard Exp $ | 1 # $Id: rdbms_common.py,v 1.98.2.5 2004-05-29 02:09:13 richard Exp $ |
| 2 ''' Relational database (SQL) backend common code. | 2 ''' Relational database (SQL) backend common code. |
| 3 | 3 |
| 4 Basics: | 4 Basics: |
| 5 | 5 |
| 6 - map roundup classes to relational tables | 6 - map roundup classes to relational tables |
| 2005 start_t = time.time() | 2005 start_t = time.time() |
| 2006 | 2006 |
| 2007 cn = self.classname | 2007 cn = self.classname |
| 2008 | 2008 |
| 2009 timezone = self.db.getUserTimezone() | 2009 timezone = self.db.getUserTimezone() |
| 2010 | 2010 |
| 2011 # vars to hold the components of the SQL statement | |
| 2012 frum = ['_'+cn] # FROM clauses | |
| 2013 loj = [] # LEFT OUTER JOIN clauses | |
| 2014 where = [] # WHERE clauses | |
| 2015 args = [] # *any* positional arguments | |
| 2016 a = self.db.arg | |
| 2017 | |
| 2011 # figure the WHERE clause from the filterspec | 2018 # figure the WHERE clause from the filterspec |
| 2012 props = self.getprops() | 2019 props = self.getprops() |
| 2013 frum = ['_'+cn] | |
| 2014 where = [] | |
| 2015 args = [] | |
| 2016 a = self.db.arg | |
| 2017 mlfilt = 0 # are we joining with Multilink tables? | 2020 mlfilt = 0 # are we joining with Multilink tables? |
| 2018 for k, v in filterspec.items(): | 2021 for k, v in filterspec.items(): |
| 2019 propclass = props[k] | 2022 propclass = props[k] |
| 2020 # now do other where clause stuff | 2023 # now do other where clause stuff |
| 2021 if isinstance(propclass, Multilink): | 2024 if isinstance(propclass, Multilink): |
| 2152 ordercols.append(o) | 2155 ordercols.append(o) |
| 2153 elif isinstance(props[prop], Link): | 2156 elif isinstance(props[prop], Link): |
| 2154 # determine whether the linked Class has an order property | 2157 # determine whether the linked Class has an order property |
| 2155 lcn = props[prop].classname | 2158 lcn = props[prop].classname |
| 2156 link = self.db.classes[lcn] | 2159 link = self.db.classes[lcn] |
| 2160 o = '_%s._%s'%(cn, prop) | |
| 2157 if link.getprops().has_key('order'): | 2161 if link.getprops().has_key('order'): |
| 2158 tn = '_' + lcn | 2162 tn = '_' + lcn |
| 2159 frum.append(tn) | 2163 loj.append('LEFT OUTER JOIN %s on %s=%s.id'%(tn, |
| 2160 where.append('_%s._%s = %s.id'%(cn, prop, tn)) | 2164 o, tn)) |
| 2161 ordercols.append(tn + '._order') | 2165 ordercols.append(tn + '._order') |
| 2162 o = tn + '._order' | 2166 o = tn + '._order' |
| 2167 else: | |
| 2168 ordercols.append(o) | |
| 2163 elif prop == 'id': | 2169 elif prop == 'id': |
| 2164 o = '_%s.id'%cn | 2170 o = '_%s.id'%cn |
| 2165 else: | 2171 else: |
| 2166 o = '_%s._%s'%(cn, prop) | 2172 o = '_%s._%s'%(cn, prop) |
| 2167 ordercols.append(o) | 2173 ordercols.append(o) |
| 2185 cols = cols + ordercols | 2191 cols = cols + ordercols |
| 2186 order = ' order by %s'%(','.join(orderby)) | 2192 order = ' order by %s'%(','.join(orderby)) |
| 2187 else: | 2193 else: |
| 2188 order = '' | 2194 order = '' |
| 2189 cols = ','.join(cols) | 2195 cols = ','.join(cols) |
| 2190 sql = 'select %s from %s %s%s'%(cols, frum, where, order) | 2196 loj = ' '.join(loj) |
| 2197 sql = 'select %s from %s %s %s%s'%(cols, frum, loj, where, order) | |
| 2191 args = tuple(args) | 2198 args = tuple(args) |
| 2192 if __debug__: | 2199 if __debug__: |
| 2193 print >>hyperdb.DEBUG, 'filter', (self, sql, args) | 2200 print >>hyperdb.DEBUG, 'filter', (self, sql, args) |
| 2194 __traceback_info__ = (sql, args) | 2201 __traceback_info__ = (sql, args) |
| 2195 if args: | 2202 if args: |
