--- ZSQLExtend/ZSQLExtend.py 2005/10/24 23:50:53 1.70 +++ ZSQLExtend/ZSQLExtend.py 2005/12/22 20:33:11 1.76 @@ -17,7 +17,7 @@ import Shared.DC.ZRDB.DA import zLOG import os.path import os - +from OFS.SimpleItem import SimpleItem def analyseIntSearch(word): #analyse integer searches @@ -48,11 +48,86 @@ def sql_quote(v): def showSQLConnectionIDs(self): return SQLConnectionIDs(self) +class ZSQLIndex(SimpleItem): + """index""" + meta_type="ZSQLIndex" + + def __init__(self,index,id,table=''): + self.index=[x for x in index] + self.id=id + self.table=table + + def setIndex(self,index): + self.index=[x for x in index] + + def getIndex(self): + return self.index + class ZSQLExtendFolder(Folder,Persistent, Implicit): """Folder""" meta_type="ZSQLExtendFolder" - - + + def ZSQLQuote(self,str): + """quote str for sql""" + return sql_quote(str) + + + def importXMLFile(self,table,containerTagName,file,identify=None,RESPONSE=None): + #TODO: finish importXMLFile + ''' + Import XML file into the table + @param table: name of the table the xml shall be imported into + @param containerTagName: XML-Tag which describes a dataset + @param file: xmlfile handle + @param identify: (optional) field res. tag which identifies a entry uniquely for updating purposes. + @param RESPONSE: (optional) + ''' + from xml.dom.pulldom import parseString + + doc=parseString(file.read()) + while 1: + node=doc.getEvent() + + if node is None: + break; + else: + if node[1].nodeName==containerTagName: + doc.expandNode(node[1]) + #fn=node[1].getAttribute("xml:id") + #nf=file("xtf/"+fn+".xtf",'w') + #nf.write(""""""+node[1].toxml()+"") + #print "wrote: %s"%fn + + + def generateIndex(self,field,index_name,table,RESPONSE=None): + """erzeuge index aus feld""" + index={} + founds=self.ZSQLSimpleSearch("""SELECT %s,oid FROM %s LIMIT 2000"""%(field,table)) + + for found in founds: + tmp=getattr(found,field,None) + if tmp: + strings=tmp.split(" ") + for string in strings: + if index.get(string): + index[string].append(found.oid) + else: + index[string]=[found.oid] + RESPONSE.write(string+"\n") + + if not hasattr(self,index_name): + obj=ZSQLIndex(index,index_name,table) + self._setObject(index_name,obj) + + self._getOb(index_name).setIndex(index) + + def getIndex(self,index_name): + """getIndex""" + founds=self.ZopeFind(self,obj_ids=[index_name]) + + return founds[0][1].getIndex() + + def testneu(self): """test""" relStatement="""period like '%s%%'""" @@ -64,6 +139,7 @@ class ZSQLExtendFolder(Folder,Persistent def URLquote(self,txt): """urlquote""" return urllib.quote(txt) + def searchRel(self,relStatement,statement,wherePart,classes): """suche relative haufigkeiten""" ret={} @@ -131,6 +207,8 @@ class ZSQLExtendFolder(Folder,Persistent def formatAscii(self,str,url=None): """ersetze ascii umbrueche durch
""" #url=None + str=str.rstrip().lstrip() + if url and str: retStr="" @@ -280,11 +358,12 @@ class ZSQLExtendFolder(Folder,Persistent ret="""