[jToolkit-cvs] jToolkit/data database.py,1.15,1.16
Brought to you by:
davidfraser,
friedelwolff
From: <dav...@us...> - 2004-02-09 14:13:13
|
Update of /cvsroot/jtoolkit/jToolkit/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9957 Modified Files: database.py Log Message: added support for dropping columns (for consistency with adding...) added support for deleting with multiple keys (factored out multiequalsphrase from update to help here) Index: database.py =================================================================== RCS file: /cvsroot/jtoolkit/jToolkit/data/database.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** database.py 9 Feb 2004 14:03:31 -0000 1.15 --- database.py 9 Feb 2004 14:10:00 -0000 1.16 *************** *** 254,257 **** --- 254,262 ---- return "alter table %s add %s %s" % (tablename, columnname, self.dbtypename(columntype)) + def getdropcolumnsql(self, tablename, columnname): + """returns the sql required to drop a column of the given name from a table""" + # TODO: verify this works on each database... + return "alter table %s drop column %s" % (tablename, columnname) + def dblowerfn(self): """return a function that converts text to lower case""" *************** *** 369,382 **** raise ValueError, "unknown action %r in update" % action sql = "update "+tablename+" set "+", ".join(updates) ! sql += " where " ! if type(keys) in (unicode, str): ! sql += self.equalsphrase(keys, keyvalues) ! else: ! if len(keys) == 1 and type(keyvalues) not in (tuple, list): ! sql += self.equalsphrase(keys[0], keyvalues) ! else: ! if len(keys) != len(keyvalues): ! self.errorhandler.logtrace("update: keys and keyvalues are of different lengths: %r, %r" % (keys, keyvalues)) ! sql += " and ".join([self.equalsphrase(keys[n], keyvalues[n]) for n in range(len(keys))]) self.errorhandler.logtrace("traceupdate: sql=%s, actiondict=%r" % (sql,actiondict)) if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') --- 374,378 ---- raise ValueError, "unknown action %r in update" % action sql = "update "+tablename+" set "+", ".join(updates) ! sql += " where " + self.multiequalsphrase(keys, keyvalues) self.errorhandler.logtrace("traceupdate: sql=%s, actiondict=%r" % (sql,actiondict)) if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') *************** *** 392,399 **** raise ! def delete(self,tablename,keyname,keyvalue): """delete from a table, trap errors. """ ! sql = "delete from "+tablename+" where "+self.equalsphrase(keyname, keyvalue) if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: --- 388,395 ---- raise ! def delete(self,tablename,keys,keyvalues): """delete from a table, trap errors. """ ! sql = "delete from "+tablename+" where "+self.multiequalsphrase(keys, keyvalues) if type(sql) == unicode and self.DBTYPE == 'postgres': sql = sql.encode('iso8859') try: *************** *** 404,408 **** except self.dberror: self.db.rollback() ! self.errorhandler.logerror("sql error in delete: "+tablename+", %s=%r"%(keyname,keyvalue)+": "\ +"sql:"+sql+"\n"+self.errorhandler.exception_str()) raise --- 400,404 ---- except self.dberror: self.db.rollback() ! self.errorhandler.logerror("sql error in delete: "+tablename+", %r=%r"%(keys,keyvalues)+": "\ +"sql:"+sql+"\n"+self.errorhandler.exception_str()) raise *************** *** 542,545 **** --- 538,552 ---- return column + "=" + self.dbrepr(value) + def multiequalsphrase(self, keys, keyvalues): + if type(keys) in (unicode, str): + return self.equalsphrase(keys, keyvalues) + else: + if len(keys) == 1 and type(keyvalues) not in (tuple, list): + return self.equalsphrase(keys[0], keyvalues) + else: + if len(keys) != len(keyvalues): + self.errorhandler.logtrace("multiequalsphrase: keys and keyvalues are of different lengths: %r, %r" % (keys, keyvalues)) + return " and ".join([self.equalsphrase(keys[n], keyvalues[n]) for n in range(len(keys))]) + def catclauses(self, clauselist): """cat the clauses in the list into a string that can be used as a where clause""" |