--- ZSQLExtend/ZSQLExtend.py 2007/04/03 14:44:24 1.109 +++ ZSQLExtend/ZSQLExtend.py 2007/04/19 20:29:59 1.112 @@ -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 %s like '%%%s%%'"%(_select,_table,_additionalStatement,_searchField,splitted[0])) + + if len(splitted)>1: + for v in splitted[1:]: + queries.append("select %s from %s where %s like '%%%s%%'"%(_idField,_table,_searchField,v)) + + 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""" @@ -691,7 +748,8 @@ class ZSQLExtendFolder(Folder,Persistent valueName=None,start=None, multiple='',startValue=None, additionalSelect="",size=None, - linelen=None,selected=None): + linelen=None,selected=None, + clear=False): """generate select options form a search list es wird """ return ret @@ -824,6 +886,7 @@ class ZSQLExtendFolder(Folder,Persistent if x: value=x else: + value=str(argTmp[a]) qs.append(aFiltered+"="+urllib.quote(value)) @@ -853,7 +916,7 @@ class ZSQLExtendFolder(Folder,Persistent def ZSQLSimpleSearch(self,query=None,max_rows=1000000): """simple search""" - logging.error(query) + logging.error("ZSQLSimpleSearch X %s"%query) #print query if not query: query=self.query @@ -865,14 +928,17 @@ class ZSQLExtendFolder(Folder,Persistent self._v_searchSQL.max_rows_=max_rows try: - return self._v_searchSQL.__call__(var=query) + logging.error("I am here") + t=self._v_searchSQL.__call__(var=query) + logging.error("I am here %s"%t) + return t except : - + logger("ZSQLSimpleSearch ERROR1",logging.ERROR, '%s %s'%sys.exc_info()[:2]) if sys.exc_info()[0]=="Database Error": try: self.getConnectionObj().manage_open_connection() except: - logger("ZSQLSimpleSearch",logging.ERROR, '%s %s'%sys.exc_info()[:2]) + logger("ZSQLSimpleSearch ERROR2",logging.ERROR, '%s %s'%sys.exc_info()[:2]) else: try: @@ -880,7 +946,7 @@ class ZSQLExtendFolder(Folder,Persistent return self._v_searchSQL.__call__(var=query) except : - + logger("ZSQLSimpleSearch ERROR2",logging.ERROR, '%s %s'%sys.exc_info()[:2]) if sys.exc_info()[0]=="Database Error": try: self.getConnectionObj().manage_open_connection() @@ -1013,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): @@ -1124,9 +1190,11 @@ class ZSQLExtendFolder(Folder,Persistent #print "calling Query with",repr(NoQuery) + 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"] + return ret @@ -1174,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="" @@ -1350,6 +1420,7 @@ class ZSQLExtendFolder(Folder,Persistent #something is defined by _op_TABELLE.SUCHFELD_IN_DIESER_TABELLE.SELECT_FIELD.IDENTIFIER_IN_TABELLE elif (not name[0]==iCT) and len(punktsplit)==4: + if opfields.has_key(name): op=opfields[name] else: @@ -1390,10 +1461,10 @@ class ZSQLExtendFolder(Folder,Persistent op="all" + if value!='': #lehre Werte werde nicht hinzugefuegt + searchTmp="""%s in (select %s from %s where %s)"""%(punktsplit[3],punktsplit[2],punktsplit[0],tmp) - searchTmp="""%s in (select %s from %s where %s)"""%(punktsplit[3],punktsplit[2],punktsplit[0],tmp) - - queryTemplate.append(searchTmp) + queryTemplate.append(searchTmp) elif (not name[0]==iCT) and (not len(value)==0): @@ -1440,7 +1511,7 @@ class ZSQLExtendFolder(Folder,Persistent op="all" - if (not tableExt) or (namealt.split('.')[0]==tableExt): + if (value!='') and ((not tableExt) or (namealt.split('.')[0]==tableExt)): #keine leeren werde und keine auschluss if searchFields.has_key(namealt): searchFields[namealt]+=lopfields.get(name,'OR')+" "+tmp searchFieldsOnly[namealt]+=lopfields.get(name,'OR')+" "+value