Mercurial > p > roundup > code
changeset 2319:7cf7e3bd1b31
more column uniqueness fixes
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Sun, 16 May 2004 21:49:30 +0000 |
| parents | fa2f7ba34399 |
| children | 41bc4936e115 |
| files | roundup/backends/back_mysql.py roundup/backends/rdbms_common.py |
| diffstat | 2 files changed, 53 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/roundup/backends/back_mysql.py Sun May 16 09:35:50 2004 +0000 +++ b/roundup/backends/back_mysql.py Sun May 16 21:49:30 2004 +0000 @@ -539,23 +539,25 @@ self.db.sql('select nodeid from %s'%tn) s = ','.join([x[0] for x in self.db.sql_fetchall()]) - where.append('id not in (%s)'%s) + where.append('_%s.id not in (%s)'%(cn, s)) elif isinstance(v, type([])): frum.append(tn) s = ','.join([a for x in v]) - where.append('id=%s.nodeid and %s.linkid in (%s)'%(tn,tn,s)) + where.append('_%s.id=%s.nodeid and %s.linkid in (%s)'%(cn, + tn, tn, s)) args = args + v else: frum.append(tn) - where.append('id=%s.nodeid and %s.linkid=%s'%(tn, tn, a)) + where.append('_%s.id=%s.nodeid and %s.linkid=%s'%(cn, tn, + tn, a)) args.append(v) elif k == 'id': if isinstance(v, type([])): s = ','.join([a for x in v]) - where.append('%s in (%s)'%(k, s)) + where.append('_%s.%s in (%s)'%(cn, k, s)) args = args + v else: - where.append('%s=%s'%(k, a)) + where.append('_%s.%s=%s'%(cn, k, a)) args.append(v) elif isinstance(propclass, String): if not isinstance(v, type([])): @@ -567,44 +569,45 @@ v = ['%%'+self.db.sql_stringquote(s)+'%%' for s in v] # now add to the where clause - where.append(' or '.join(["_%s LIKE '%s'"%(k, s) for s in v])) + where.append(' or '.join(["_%s._%s LIKE '%s'"%(cn, k, s) + for s in v])) # note: args are embedded in the query string now elif isinstance(propclass, Link): if isinstance(v, type([])): if '-1' in v: v = v[:] v.remove('-1') - xtra = ' or _%s is NULL'%k + xtra = ' or _%s._%s is NULL'%(cn, k) else: xtra = '' if v: s = ','.join([a for x in v]) - where.append('(_%s in (%s)%s)'%(k, s, xtra)) + where.append('(_%s._%s in (%s)%s)'%(cn, k, s, xtra)) args = args + v else: - where.append('_%s is NULL'%k) + where.append('_%s._%s is NULL'%(cn, k)) else: if v == '-1': v = None - where.append('_%s is NULL'%k) + where.append('_%s._%s is NULL'%(cn, k)) else: - where.append('_%s=%s'%(k, a)) + where.append('_%s._%s=%s'%(cn, k, a)) args.append(v) elif isinstance(propclass, Date): dc = self.db.hyperdb_to_sql_value[hyperdb.Date] if isinstance(v, type([])): s = ','.join([a for x in v]) - where.append('_%s in (%s)'%(k, s)) + where.append('_%s._%s in (%s)'%(cn, k, s)) args = args + [dc(date.Date(x)) for x in v] else: try: # Try to filter on range of dates date_rng = Range(v, date.Date, offset=timezone) if date_rng.from_value: - where.append('_%s >= %s'%(k, a)) + where.append('_%s._%s >= %s'%(cn, k, a)) args.append(dc(date_rng.from_value)) if date_rng.to_value: - where.append('_%s <= %s'%(k, a)) + where.append('_%s._%s <= %s'%(cn, k, a)) args.append(dc(date_rng.to_value)) except ValueError: # If range creation fails - ignore that search parameter @@ -613,17 +616,17 @@ # filter using the __<prop>_int__ column if isinstance(v, type([])): s = ','.join([a for x in v]) - where.append('__%s_int__ in (%s)'%(k, s)) + where.append('_%s.__%s_int__ in (%s)'%(cn, k, s)) args = args + [date.Interval(x).as_seconds() for x in v] else: try: # Try to filter on range of intervals date_rng = Range(v, date.Interval) if date_rng.from_value: - where.append('__%s_int__ >= %s'%(k, a)) + where.append('_%s.__%s_int__ >= %s'%(cn, k, a)) args.append(date_rng.from_value.as_seconds()) if date_rng.to_value: - where.append('__%s_int__ <= %s'%(k, a)) + where.append('_%s.__%s_int__ <= %s'%(cn, k, a)) args.append(date_rng.to_value.as_seconds()) except ValueError: # If range creation fails - ignore that search parameter @@ -631,10 +634,10 @@ else: if isinstance(v, type([])): s = ','.join([a for x in v]) - where.append('_%s in (%s)'%(k, s)) + where.append('_%s._%s in (%s)'%(cn, k, s)) args = args + v else: - where.append('_%s=%s'%(k, a)) + where.append('_%s._%s=%s'%(cn, k, a)) args.append(v) # don't match retired nodes @@ -644,7 +647,7 @@ if search_matches is not None: v = search_matches.keys() s = ','.join([a for x in v]) - where.append('id in (%s)'%s) + where.append('_%s.id in (%s)'%(cn, s)) args = args + v # "grouping" is just the first-order sorting in the SQL fetch @@ -672,9 +675,9 @@ ordercols.append(tn + '._order') o = tn + '._order' elif prop == 'id': - o = 'id' + o = '_%s.id'%cn else: - o = '_'+prop + o = '_%s._%s'%(cn, prop) ordercols.append(o) if sdir == '-': o += ' desc'
--- a/roundup/backends/rdbms_common.py Sun May 16 09:35:50 2004 +0000 +++ b/roundup/backends/rdbms_common.py Sun May 16 21:49:30 2004 +0000 @@ -1,4 +1,4 @@ -# $Id: rdbms_common.py,v 1.100 2004-05-16 09:35:49 richard Exp $ +# $Id: rdbms_common.py,v 1.101 2004-05-16 21:49:30 richard Exp $ ''' Relational database (SQL) backend common code. Basics: @@ -2024,23 +2024,26 @@ if v in ('-1', ['-1']): # only match rows that have count(linkid)=0 in the # corresponding multilink table) - where.append('id not in (select nodeid from %s)'%tn) + where.append('_%s.id not in (select nodeid from %s)'%(cn, + tn)) elif isinstance(v, type([])): frum.append(tn) s = ','.join([a for x in v]) - where.append('id=%s.nodeid and %s.linkid in (%s)'%(tn,tn,s)) + where.append('_%s.id=%s.nodeid and %s.linkid in (%s)'%(cn, + tn, tn, s)) args = args + v else: frum.append(tn) - where.append('id=%s.nodeid and %s.linkid=%s'%(tn, tn, a)) + where.append('_%s.id=%s.nodeid and %s.linkid=%s'%(cn, tn, + tn, a)) args.append(v) elif k == 'id': if isinstance(v, type([])): s = ','.join([a for x in v]) - where.append('%s in (%s)'%(k, s)) + where.append('_%s.%s in (%s)'%(cn, k, s)) args = args + v else: - where.append('%s=%s'%(k, a)) + where.append('_%s.%s=%s'%(cn, k, a)) args.append(v) elif isinstance(propclass, String): if not isinstance(v, type([])): @@ -2052,44 +2055,45 @@ v = ['%%'+self.db.sql_stringquote(s)+'%%' for s in v] # now add to the where clause - where.append(' or '.join(["_%s LIKE '%s'"%(k, s) for s in v])) + where.append(' or '.join(["_%s._%s LIKE '%s'"%(cn, k, s) + for s in v])) # note: args are embedded in the query string now elif isinstance(propclass, Link): if isinstance(v, type([])): if '-1' in v: v = v[:] v.remove('-1') - xtra = ' or _%s is NULL'%k + xtra = ' or _%s._%s is NULL'%(cn, k) else: xtra = '' if v: s = ','.join([a for x in v]) - where.append('(_%s in (%s)%s)'%(k, s, xtra)) + where.append('(_%s._%s in (%s)%s)'%(cn, k, s, xtra)) args = args + v else: - where.append('_%s is NULL'%k) + where.append('_%s._%s is NULL'%(cn, k)) else: if v == '-1': v = None - where.append('_%s is NULL'%k) + where.append('_%s._%s is NULL'%(cn, k)) else: - where.append('_%s=%s'%(k, a)) + where.append('_%s._%s=%s'%(cn, k, a)) args.append(v) elif isinstance(propclass, Date): dc = self.db.hyperdb_to_sql_value[hyperdb.Date] if isinstance(v, type([])): s = ','.join([a for x in v]) - where.append('_%s in (%s)'%(k, s)) + where.append('_%s._%s in (%s)'%(cn, k, s)) args = args + [dc(date.Date(v)) for x in v] else: try: # Try to filter on range of dates date_rng = Range(v, date.Date, offset=timezone) if date_rng.from_value: - where.append('_%s >= %s'%(k, a)) + where.append('_%s._%s >= %s'%(cn, k, a)) args.append(dc(date_rng.from_value)) if date_rng.to_value: - where.append('_%s <= %s'%(k, a)) + where.append('_%s._%s <= %s'%(cn, k, a)) args.append(dc(date_rng.to_value)) except ValueError: # If range creation fails - ignore that search parameter @@ -2098,17 +2102,17 @@ # filter using the __<prop>_int__ column if isinstance(v, type([])): s = ','.join([a for x in v]) - where.append('__%s_int__ in (%s)'%(k, s)) + where.append('_%s.__%s_int__ in (%s)'%(cn, k, s)) args = args + [date.Interval(x).as_seconds() for x in v] else: try: # Try to filter on range of intervals date_rng = Range(v, date.Interval) if date_rng.from_value: - where.append('__%s_int__ >= %s'%(k, a)) + where.append('_%s.__%s_int__ >= %s'%(cn, k, a)) args.append(date_rng.from_value.as_seconds()) if date_rng.to_value: - where.append('__%s_int__ <= %s'%(k, a)) + where.append('_%s.__%s_int__ <= %s'%(cn, k, a)) args.append(date_rng.to_value.as_seconds()) except ValueError: # If range creation fails - ignore that search parameter @@ -2116,10 +2120,10 @@ else: if isinstance(v, type([])): s = ','.join([a for x in v]) - where.append('_%s in (%s)'%(k, s)) + where.append('_%s._%s in (%s)'%(cn, k, s)) args = args + v else: - where.append('_%s=%s'%(k, a)) + where.append('_%s._%s=%s'%(cn, k, a)) args.append(v) # don't match retired nodes @@ -2129,7 +2133,7 @@ if search_matches is not None: v = search_matches.keys() s = ','.join([a for x in v]) - where.append('id in (%s)'%s) + where.append('_%s.id in (%s)'%(cn, s)) args = args + v # "grouping" is just the first-order sorting in the SQL fetch @@ -2157,9 +2161,9 @@ ordercols.append(tn + '._order') o = tn + '._order' elif prop == 'id': - o = 'id' + o = '_%s.id'%cn else: - o = '_'+prop + o = '_%s._%s'%(cn, prop) ordercols.append(o) if sdir == '-': o += ' desc' @@ -2187,6 +2191,7 @@ args = tuple(args) if __debug__: print >>hyperdb.DEBUG, 'filter', (self, sql, args) + __traceback_info__ = (sql, args) if args: self.db.cursor.execute(sql, args) else:
