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:

Roundup Issue Tracker: http://roundup-tracker.org/