def copyTrees( self, treenames ): """copy tree from an external source. Merge inventory if existing in the destination """ allleafs=[] for treename in treenames: t=TagTree.tagTree(self.__sourcesession,treename) allleafs.append(t.getAllLeaves()) #create a unique tag list merged={} for s in allleafs: for x in s: merged[x.tagid]=1 sourceinv=tagInventory.tagInventory(self.__sourcesession) sourcetags=sourceinv.getAllEntries() entries=[] for i in merged.keys(): for n in sourcetags: if n.tagid==i: entry={} entry['tagid']=i entry['tagname']=n.tagname entry['pfn']=n.pfn entry['recordname']=n.recordname entry['objectname']=n.objectname entry['labelname']=n.labelname entries.append(entry) inv=tagInventory.tagInventory(self.__destsession) tagiddict=inv.bulkInsertEntries(entries) dest_transaction=self.__destsession.transaction() source_transaction=self.__sourcesession.transaction() #copy table contents try: for treename in treenames: desttree=TagTree.tagTree(self.__destsession,treename) desttree.createTagTreeTable() dest_transaction.start(False) source_transaction.start(True) #copy tree tables data=coral.AttributeList() dest_editor=self.__destsession.nominalSchema().tableHandle(CommonUtils.treeTableName(treename)).dataEditor() source_query=self.__sourcesession.nominalSchema().tableHandle(CommonUtils.treeTableName(treename)).newQuery() conditionData=coral.AttributeList() source_query.setCondition('',conditionData) source_query.setRowCacheSize(self.__rowcachesize) dest_editor.rowBuffer(data) source_query.defineOutput(data) bulkOperation=dest_editor.bulkInsert(data,self.__rowcachesize) cursor=source_query.execute() while next(cursor): bulkOperation.processNextIteration() bulkOperation.flush() del bulkOperation del source_query #copy id tables iddata=coral.AttributeList() dest_editor=self.__destsession.nominalSchema().tableHandle(CommonUtils.treeIDTableName(treename)).dataEditor() source_query=self.__sourcesession.nominalSchema().tableHandle(CommonUtils.treeIDTableName(treename)).newQuery() conditionData=coral.AttributeList() source_query.setCondition('',conditionData) source_query.setRowCacheSize(self.__rowcachesize) dest_editor.rowBuffer(iddata) source_query.defineOutput(iddata) bulkOperation=dest_editor.bulkInsert(iddata,self.__rowcachesize) cursor=source_query.execute() while next(cursor): bulkOperation.processNextIteration() bulkOperation.flush() del bulkOperation del source_query #copy comment tables if exist if self.__sourcesession.nominalSchema().existsTable(CommonUtils.commentTableName()): data=coral.AttributeList() dest_editor=self.__destsession.nominalSchema().tableHandle(CommonUtils.commentTableName()).dataEditor() source_query=self.__sourcesession.nominalSchema().tableHandle(CommonUtils.commentTableName()).newQuery() conditionData=coral.AttributeList() source_query.setCondition('tablename = :tablename',conditionData) conditionData.extend('tablename','string') conditionData['tablename'].setData(CommonUtils.treeTableName(treename)) source_query.setRowCacheSize(self.__rowcachesize) dest_editor.rowBuffer(data) source_query.defineOutput(data) bulkOperation=dest_editor.bulkInsert(data,self.__rowcachesize) cursor=source_query.execute() while next(cursor): bulkOperation.processNextIteration() bulkOperation.flush() del bulkOperation del source_query source_transaction.commit() dest_transaction.commit() #fix leaf node links desttree.replaceLeafLinks(tagiddict) except Exception, e: source_transaction.rollback() dest_transaction.rollback() raise Exception, str(e)
def copyTrees( self, treenames ): """copy tree from an external source. Merge inventory if existing in the destination """ allleafs=[] for treename in treenames: t=TagTree.tagTree(self.__sourcesession,treename) allleafs.append(t.getAllLeaves()) #create a unique tag list merged={} for s in allleafs: for x in s: merged[x.tagid]=1 sourceinv=tagInventory.tagInventory(self.__sourcesession) sourcetags=sourceinv.getAllEntries() entries=[] for i in merged.keys(): for n in sourcetags: if n.tagid==i: entry={} entry['tagid']=i entry['tagname']=n.tagname entry['pfn']=n.pfn entry['recordname']=n.recordname entry['objectname']=n.objectname entry['labelname']=n.labelname entries.append(entry) inv=tagInventory.tagInventory(self.__destsession) tagiddict=inv.bulkInsertEntries(entries) dest_transaction=self.__destsession.transaction() source_transaction=self.__sourcesession.transaction() #copy table contents try: for treename in treenames: desttree=TagTree.tagTree(self.__destsession,treename) desttree.createTagTreeTable() dest_transaction.start(False) source_transaction.start(True) #copy tree tables data=coral.AttributeList() dest_editor=self.__destsession.nominalSchema().tableHandle(CommonUtils.treeTableName(treename)).dataEditor() source_query=self.__sourcesession.nominalSchema().tableHandle(CommonUtils.treeTableName(treename)).newQuery() conditionData=coral.AttributeList() source_query.setCondition('',conditionData) source_query.setRowCacheSize(self.__rowcachesize) dest_editor.rowBuffer(data) source_query.defineOutput(data) bulkOperation=dest_editor.bulkInsert(data,self.__rowcachesize) cursor=source_query.execute() while cursor.next(): bulkOperation.processNextIteration() bulkOperation.flush() del bulkOperation del source_query #copy id tables iddata=coral.AttributeList() dest_editor=self.__destsession.nominalSchema().tableHandle(CommonUtils.treeIDTableName(treename)).dataEditor() source_query=self.__sourcesession.nominalSchema().tableHandle(CommonUtils.treeIDTableName(treename)).newQuery() conditionData=coral.AttributeList() source_query.setCondition('',conditionData) source_query.setRowCacheSize(self.__rowcachesize) dest_editor.rowBuffer(iddata) source_query.defineOutput(iddata) bulkOperation=dest_editor.bulkInsert(iddata,self.__rowcachesize) cursor=source_query.execute() while cursor.next(): bulkOperation.processNextIteration() bulkOperation.flush() del bulkOperation del source_query #copy comment tables if exist if self.__sourcesession.nominalSchema().existsTable(CommonUtils.commentTableName()): data=coral.AttributeList() dest_editor=self.__destsession.nominalSchema().tableHandle(CommonUtils.commentTableName()).dataEditor() source_query=self.__sourcesession.nominalSchema().tableHandle(CommonUtils.commentTableName()).newQuery() conditionData=coral.AttributeList() source_query.setCondition('tablename = :tablename',conditionData) conditionData.extend('tablename','string') conditionData['tablename'].setData(CommonUtils.treeTableName(treename)) source_query.setRowCacheSize(self.__rowcachesize) dest_editor.rowBuffer(data) source_query.defineOutput(data) bulkOperation=dest_editor.bulkInsert(data,self.__rowcachesize) cursor=source_query.execute() while cursor.next(): bulkOperation.processNextIteration() bulkOperation.flush() del bulkOperation del source_query source_transaction.commit() dest_transaction.commit() #fix leaf node links desttree.replaceLeafLinks(tagiddict) except Exception, e: source_transaction.rollback() dest_transaction.rollback() raise Exception, str(e)
if posbeg != -1: treename=tablename[posbeg+len('TAGTREE_TABLE_'):] trees.append(treename) for tree in trees: try: tablelist.index(CommonUtils.treeIDTableName(tree)) except ValueError: print 'non-existing id table for tree ',tree continue alltablelist.append(CommonUtils.treeTableName(tree)) alltablelist.append(CommonUtils.treeIDTableName(tree)) #schema preparation inv=tagInventory.tagInventory(self.__destsession) inv.createInventoryTable() for treename in trees: t=TagTree.tagTree(self.__destsession,treename) t.createTagTreeTable() #copy table contents try: for mytable in alltablelist: dest_transaction.start(False) source_transaction.start(True) data=coral.AttributeList() my_editor=self.__destsession.nominalSchema().tableHandle(mytable).dataEditor() source_query=self.__sourcesession.nominalSchema().tableHandle(mytable).newQuery() conditionData=coral.AttributeList() source_query.setCondition('',conditionData) source_query.setRowCacheSize(self.__rowcachesize) my_editor.rowBuffer(data) source_query.defineOutput(data) bulkOperation=my_editor.bulkInsert(data,self.__rowcachesize)