Changeset 493 for trunk/module/pg.py


Ignore:
Timestamp:
Jan 5, 2013, 5:08:30 PM (7 years ago)
Author:
cito
Message:

Do not use positional parameters internally.
This restores backward compatibility with version 4.0.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/module/pg.py

    r487 r493  
    3030    set_decimal(Decimal)
    3131except ImportError:  # Python < 2.4
    32     pass
     32    Decimal = float
    3333try:
    3434    from collections import namedtuple
     
    129129    return _db_error(msg, ProgrammingError)
    130130
     131
    131132class pgnotify(object):
    132133    """A PostgreSQL client-side asynchronous notification handler."""
     
    319320        if d is None or d == '':
    320321            return 'NULL'
    321         return "'%.2f'" % float(d)
     322        if not isinstance(d, basestring):
     323            d = str(d)
     324        return d
    322325
    323326    _quote_funcs = dict(  # quote methods for each type
     
    694697            else:
    695698                arg = {qoid: arg}
    696             where = 'oid = $1'
    697             params = (arg[qoid],)
     699            where = 'oid = %s' % arg[qoid]
    698700            attnames = '*'
    699701        else:
     
    705707                    raise _prg_error('Composite key needs dict as arg')
    706708                arg = dict([(k, arg) for k in keyname])
    707             where = ' AND '.join(['%s = $%d'
    708                 % (k, i + 1) for i, k in enumerate(keyname)])
    709             params = tuple(arg[k] for k in keyname)
     709            where = ' AND '.join(['%s = %s'
     710                % (k, self._quote(arg[k], attnames[k])) for k in keyname])
    710711            attnames = ', '.join(attnames)
    711712        q = 'SELECT %s FROM %s WHERE %s LIMIT 1' % (attnames, qcl, where)
    712         self._do_debug(q + ' %% %r' % (params,))
    713         res = self.db.query(q, params).dictresult()
     713        self._do_debug(q)
     714        res = self.db.query(q).dictresult()
    714715        if not res:
    715             raise _db_error(
    716                 'No such record in %s where %s %% %r' % (qcl, where, params))
     716            raise _db_error('No such record in %s where %s' % (qcl, where))
    717717        for att, value in res[0].iteritems():
    718718            arg[att == 'oid' and qoid or att] = value
     
    739739        d.update(kw)
    740740        attnames = self.get_attnames(qcl)
    741         names, values, params = [], [], []
    742         i = 1
     741        names, values = [], []
    743742        for n in attnames:
    744743            if n != 'oid' and n in d:
    745744                names.append('"%s"' % n)
    746                 values.append('$%d' % (i,))
    747                 params.append(d[n])
    748                 i += 1
     745                values.append(self._quote(d[n], attnames[n]))
    749746        names, values = ', '.join(names), ', '.join(values)
    750747        selectable = self.has_table_privilege(qcl)
     
    754751            ret = ''
    755752        q = 'INSERT INTO %s (%s) VALUES (%s)%s' % (qcl, names, values, ret)
    756         self._do_debug(q + " %% %r" % (params,))
    757         res = self.db.query(q, params)
     753        self._do_debug(q)
     754        res = self.db.query(q)
    758755        if ret:
    759756            res = res.dictresult()
     
    797794        attnames = self.get_attnames(qcl)
    798795        if qoid in d:
    799             where = 'oid = $1'
    800             params = [d[qoid]]
     796            where = 'oid = %s' % d[qoid]
    801797            keyname = ()
    802798        else:
     
    808804                keyname = (keyname,)
    809805            try:
    810                 where = ' AND '.join(['%s = $%d'
    811                     % (k, i + 1) for i, k in enumerate(keyname)])
    812                 params = [d[k] for k in keyname]
     806                where = ' AND '.join(['%s = %s'
     807                    % (k, self._quote(d[k], attnames[k])) for k in keyname])
    813808            except KeyError:
    814809                raise _prg_error('Update needs primary key or oid.')
    815810        values = []
    816         i = len(params)
    817811        for n in attnames:
    818812            if n in d and n not in keyname:
    819                 i += 1
    820                 values.append('%s = $%d' % (n, i))
    821                 params.append(d[n])
     813                values.append('%s = %s' % (n, self._quote(d[n], attnames[n])))
    822814        if not values:
    823815            return d
     
    830822        q = 'UPDATE %s SET %s WHERE %s%s' % (qcl, values, where, ret)
    831823        self._do_debug(q)
    832         res = self.db.query(q, params)
     824        res = self.db.query(q)
    833825        if ret:
    834826            res = res.dictresult()[0]
     
    892884        d.update(kw)
    893885        if qoid in d:
    894             where = 'oid = $1'
    895             params = (d[qoid],)
     886            where = 'oid = %s' % d[qoid]
    896887        else:
    897888            try:
     
    901892            if isinstance(keyname, basestring):
    902893                keyname = (keyname,)
     894            attnames = self.get_attnames(qcl)
    903895            try:
    904                 where = ' AND '.join(['%s = $%d'
    905                     % (k, i + 1) for i, k in enumerate(keyname)])
    906                 params = tuple(d[k] for k in keyname)
     896                where = ' AND '.join(['%s = %s'
     897                    % (k, self._quote(d[k], attnames[k])) for k in keyname])
    907898            except KeyError:
    908899                raise _prg_error('Delete needs primary key or oid.')
    909900        q = 'DELETE FROM %s WHERE %s' % (qcl, where)
    910         self._do_debug(q + " %% %r" % (params,))
    911         return int(self.db.query(q, params))
     901        self._do_debug(q)
     902        return int(self.db.query(q))
    912903
    913904    def pgnotify(self, event, callback, arg_dict={}, timeout=None):
Note: See TracChangeset for help on using the changeset viewer.