# HG changeset patch # User root@xserve09.mpiwg-berlin.mpg.de # Date 1297798788 -3600 # Node ID ca30cf0e810d96b310a4b4c39510be46ac9f4b1a # Parent 0ade331198de87e0794e3c74142592ef05ef9fcd fix bugs in ZDBInlineSearch. diff -r 0ade331198de -r ca30cf0e810d ZDBInterfaceFolder.py --- a/ZDBInterfaceFolder.py Tue Feb 15 19:59:07 2011 +0100 +++ b/ZDBInterfaceFolder.py Tue Feb 15 20:39:48 2011 +0100 @@ -34,7 +34,7 @@ self.connection_id = connection_id - def getSQLQuery(self, table=None, argv): + def getSQLQuery(self, table, argv): """returns dict with SQL query string and args""" logging.debug("getSQLquery table=%s argv=%s"%(table,argv)) args = [] @@ -43,19 +43,51 @@ wheres = [] whereOp = "AND" done = {} + + def doOp(op, param, val): + # handles comparison operations in WHERE clause + if isinstance(val, list): + # join multiple parameters with spaces (makes sense with checkbox and -op=all) + val = " ".join(val) + logging.debug("doop op=%s param=%s val=%s"%(op,param,val)) + if op == "eq": + wheres.append(param + " = %s") + args.append(val) + elif op == "lt": + wheres.append(param + " < %s") + args.append(val) + elif op == "gt": + wheres.append(param + " > %s") + args.append(val) + elif op == "bw": + wheres.append(param + " LIKE %s") + args.append("%" + val) + elif op == "ew": + wheres.append(param + " LIKE %s") + args.append(val + "%") + elif op == "ct": + wheres.append(param + " LIKE %s") + args.append("%" + val + "%") + elif op == "all": + words = [] + for word in val.split(" "): + words.append(param + " LIKE %s") + args.append("%" + word + "%") + wheres.append("(" + " AND ".join(words) + ")") + else: + logging.error("getSQLquery: unknown op=%s!"%op) + + return + # evaluate argv for (key, val) in argv.items(): if key in done: # parameter has been processed continue - if isinstance(val, list): - # join multiple parameters with spaces (makes sense with checkbox and -op=all) - val = " ".join(val) - # beginning of a command should always be "_" if key[0] == "-": - key[0] = "_" + key = "_" + key[1:] if key == "_select": # SELECT expression @@ -69,8 +101,9 @@ elif key[:3] == "_op": # operation parameters _op_param=option param = sqlName(key[4:]) + logging.debug("param=%s key=%s val=%s"%(param,key,val)) if param in argv: - doOp(op, param) + doOp(val, param, argv[param]) done[param] = True else: # no corresponding parameter @@ -78,10 +111,10 @@ # process remaining parameters (without _op) for (key, val) in argv.items(): - if key not in done: + if key not in done and key[0] not in ("_", "-"): param = sqlName(key) # default is begins-with - doOp("bw", param) + doOp("bw", param, val) # join it all query = "SELECT %s FROM %s"%(select, table) @@ -92,36 +125,10 @@ query += " ORDER BY " + order return {'query' : query, 'args' : args} - - def doOp(op, param): - # handles comparison operations in WHERE clause - if op == "eq": - wheres.append(param + " = %s") - args.append(argv[param]) - elif op == "lt": - wheres.append(param + " < %s") - args.append(argv[param]) - elif op == "gt": - wheres.append(param + " > %s") - args.append(argv[param]) - elif op == "bw": - wheres.append(param + " LIKE %s") - args.append("%" + argv[param]) - elif op == "ew": - wheres.append(param + " LIKE %s") - args.append(argv[param] + "%") - elif op == "ct": - wheres.append(param + " LIKE %s") - args.append("%" + argv[param] + "%") - else: - logging.error("getSQLquery: unknown op=%s!"%op) - - return - def ZDBInlineSearch(self, _table=None, **argv): """returns result set from search""" - query = self.getSQLQuery(_table=_table, argv) + query = self.getSQLQuery(_table, argv) result = self.executeZSQL(query['query'], query['args']) return result