--- ZSQLExtend/ZSQLExtend.py 2007/04/05 14:20:08 1.110 +++ ZSQLExtend/ZSQLExtend.py 2007/04/19 20:47:00 1.113 @@ -623,6 +623,63 @@ class ZSQLExtendFolder(Folder,Persistent return 1 return 0 + def ZSQLMultiSearch(self,_table,_searchField,_value,_idField,_additionalStatement="",_select=None,_storename=None): + """ + Durchsucht in einer Tabelle "table" die Spalte "searchfield" nach dem allen Vorkommnissen + von Worten in value und gibt alle Werte mit gleichem id field zurŸck, d.h. es wird die "und" suche realisiert, + z.B. fŸr simplesearch ueber mehrere Felder + """ + if _storename: + """store""" + else: + _storename="foundCount" + + queries=[] + #baue jede einzelne abfrage + splitted=_value.split(" ") + if not _select: + _select=_idField + + queries.append("select %s from %s %s where lower(%s) like '%%%s%%'"%(_select,_table,_additionalStatement,_searchField,splitted[0].lower())) + + if len(splitted)>1: + for v in splitted[1:]: + queries.append("select %s from %s where lower(%s) like '%%%s%%'"%(_idField,_table,_searchField,v.lower())) + + q=" and %s in ("%_idField + query=q.join(queries) # nun baue sie zusammen + for i in range(len(queries)-1): + query+=")" #noch die klammern schliessen + + + if _additionalStatement: + query=query+" " + + logging.info("ZSQLSimple: %s"%query) + retT=self.ZSQLSimpleSearch(query) + logging.info("ZSQLSimple: %s"%retT) + + retFinalT={} + for x in retT: + split=_idField.split(".") + if len(split)>1: + f=split[1] + else: + f=_idField + + retFinalT[getattr(x,f)]=x + + ret=list(retFinalT.values()) + + + + if not self.REQUEST.SESSION.has_key(_storename): + self.REQUEST.SESSION[_storename]={} + + self.REQUEST.SESSION[_storename]['searchFieldsOnly']={} + self.REQUEST.SESSION[_storename]['qs']=query + return ret + def ZSQLsearchOptions(self,fieldname=""): """return HTML Fragment with search options""" @@ -829,6 +886,7 @@ class ZSQLExtendFolder(Folder,Persistent if x: value=x else: + value=str(argTmp[a]) qs.append(aFiltered+"="+urllib.quote(value)) @@ -858,7 +916,7 @@ class ZSQLExtendFolder(Folder,Persistent def ZSQLSimpleSearch(self,query=None,max_rows=1000000): """simple search""" - #logging.error("ZSQLSimpleSearch X %s"%query) + logging.error("ZSQLSimpleSearch X %s"%query) #print query if not query: query=self.query @@ -1021,7 +1079,7 @@ class ZSQLExtendFolder(Folder,Persistent table=urllib.unquote(value) elif name=="-identify": identify=urllib.unquote(value) - identify=identify.split("=")[0]+"="+sql_quote(identify.split("=")[1]) + identify="lower("+identify.split("=")[0]+")="+sql_quote(identify.split("=")[1].lower()) elif name=="-format": format=urllib.unquote(value) #elif (not (name[0]=="-" or name[0]=="_")) and (not len(value)==0): @@ -1132,11 +1190,11 @@ class ZSQLExtendFolder(Folder,Persistent #print "calling Query with",repr(NoQuery) - logging.error("blo") + ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename,tableExt=tableExt,NoQuery=NoQuery,NoLimit=NoLimit,restrictField=restrictField,restrictConnect=restrictConnect,filter=filter) #print self.REQUEST.SESSION["foundCount"] - logging.error("BlAAAAAAAAAA %s"%ret) + return ret @@ -1184,9 +1242,11 @@ class ZSQLExtendFolder(Folder,Persistent for query in querys: arg=query.split("=")[0] if arg[0]=="_": arg="-"+arg[1:] # sicherstellen, dass an Anfang stets "_" - queryList[arg]=query.split("=")[1] - - + try: + queryList[arg]=query.split("=")[1] + except: + queryList[arg]='' + argList=[] arg=""