00001
00002
00003
00004
00005
00006
00007 import coral
00008 from RecoLuminosity.LumiDB import nameDealer,idDealer,dbUtil
00009
00010
00011
00012 def revisionsInTag(schema,tagrevisionid,branchid):
00013 '''
00014 returns all revisions before tag in selected branch
00015 select revision_id from revisions where revision_id!=0 and revision_id<tagrevisionid and branch_id=:branchid
00016 result=[revision_id]
00017 '''
00018 result=[]
00019 qHandle=schema.newQuery()
00020 try:
00021 nextbranches=[]
00022 qHandle.addToTableList( nameDealer.revisionTableName() )
00023 qHandle.addToOutputList('distinct BRANCH_ID','branch_id')
00024 qCondition=coral.AttributeList()
00025 qCondition.extend('branchid','unsigned long long')
00026 qCondition['branchid'].setData(branchid)
00027 qResult=coral.AttributeList()
00028 qResult.extend('branch_id','unsigned long long')
00029 qHandle.defineOutput(qResult)
00030 qHandle.setCondition('BRANCH_ID>:branchid',qCondition)
00031 cursor=qHandle.execute()
00032 while cursor.next():
00033 nextbranches.append(cursor.currentRow()['branch_id'].data())
00034 del qHandle
00035 candidates=[]
00036 conditionStr='REVISION_ID!=0 and BRANCH_ID=:branchid and REVISION_ID<:tagrevisionid'
00037 qHandle=schema.newQuery()
00038 qHandle.addToTableList( nameDealer.revisionTableName() )
00039 qHandle.addToOutputList('REVISION_ID','revision_id')
00040 qCondition=coral.AttributeList()
00041 qCondition.extend('branchid','unsigned long long')
00042 qCondition.extend('tagrevisionid','unsigned long long')
00043 qCondition['branchid'].setData(branchid)
00044 qCondition['tagrevisionid'].setData(tagrevisionid)
00045 qResult=coral.AttributeList()
00046 qResult.extend('revision_id','unsigned long long')
00047 qHandle.defineOutput(qResult)
00048 qHandle.setCondition(conditionStr,qCondition)
00049 cursor=qHandle.execute()
00050 while cursor.next():
00051 candidates.append(cursor.currentRow()['revision_id'].data())
00052 del qHandle
00053 for c in candidates:
00054 if c in nextbranches:
00055 continue
00056 result.append(c)
00057 return result
00058 except:
00059 if qHandle:del qHandle
00060 raise
00061 def revisionsInBranch(schema,branchid):
00062 '''
00063 returns all revision values in a branch
00064 result=[revision_id]
00065 select distinct branch_id from revisions where branch_id>:branchid;
00066 select revision_id from revisions where branch_id=:branchid ;
00067 if the branchid matches and the revisionid is not in the branchid collection,not 0, then this revision is in the branch
00068 require also revisionid>branchid
00069 '''
00070 result=[]
00071 qHandle=schema.newQuery()
00072 try:
00073 nextbranches=[]
00074 qHandle.addToTableList( nameDealer.revisionTableName() )
00075 qHandle.addToOutputList('distinct BRANCH_ID','branch_id')
00076 qCondition=coral.AttributeList()
00077 qCondition.extend('branchid','unsigned long long')
00078 qCondition['branchid'].setData(branchid)
00079 qResult=coral.AttributeList()
00080 qResult.extend('branch_id','unsigned long long')
00081 qHandle.defineOutput(qResult)
00082 qHandle.setCondition('BRANCH_ID>:branchid',qCondition)
00083 cursor=qHandle.execute()
00084 while cursor.next():
00085 nextbranches.append(cursor.currentRow()['branch_id'].data())
00086 del qHandle
00087 candidates=[]
00088 conditionStr='BRANCH_ID=:branchid and REVISION_ID!=0'
00089 qHandle=schema.newQuery()
00090 qHandle.addToTableList( nameDealer.revisionTableName() )
00091 qHandle.addToOutputList('REVISION_ID','revision_id')
00092 qCondition=coral.AttributeList()
00093 qCondition.extend('branchid','unsigned long long')
00094 qCondition['branchid'].setData(branchid)
00095 qResult=coral.AttributeList()
00096 qResult.extend('revision_id','unsigned long long')
00097 qHandle.defineOutput(qResult)
00098 qHandle.setCondition(conditionStr,qCondition)
00099 cursor=qHandle.execute()
00100 while cursor.next():
00101 candidates.append(cursor.currentRow()['revision_id'].data())
00102 del qHandle
00103 for c in candidates:
00104 if c in nextbranches:
00105 continue
00106 result.append(c)
00107 return result
00108 except:
00109 if qHandle: del qHandle
00110 raise
00111
00112 def branchType(schema,name):
00113 '''
00114 output: tag,branch
00115 the difference between tag and branch: tag is an empty branch
00116 select count(revision_id) from revisions where branch_name=:name
00117 if >0: is real branch
00118 else: is tag
00119 '''
00120 result='tag'
00121 try:
00122 qHandle=schema.newQuery()
00123 qHandle.addToTableList( nameDealer.revisionTableName() )
00124 qHandle.addToOutputList('count(REVISION_ID)','nchildren')
00125 qCondition=coral.AttributeList()
00126 qCondition.extend('branch_name','string')
00127 qCondition['branch_name'].setData(name)
00128 qResult=coral.AttributeList()
00129 qResult.extend('nchildren','unsigned int')
00130 qHandle.defineOutput(qResult)
00131 conditionStr='BRANCH_NAME=:branch_name'
00132 qHandle.setCondition(conditionStr,qCondition)
00133 cursor=qHandle.execute()
00134 while cursor.next():
00135 if cursor.currentRow()['nchildren'].data()>0:
00136 result='branch'
00137 del qHandle
00138 return result
00139 except :
00140 raise
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 def revisionsInBranchName(schema,branchname):
00178 '''
00179 returns all revisions in a branch/tag by name
00180 '''
00181 result=[]
00182 try:
00183 (revision_id,branch_id)=branchInfoByName(schema,branchname)
00184 result=revisionsInBranch(schema,revision_id)
00185 return result
00186 except :
00187 raise
00188 def entryInBranch(schema,datatableName,entryname,branch):
00189 '''
00190 whether an entry(by name) already exists in the given branch
00191 select e.entry_id from entrytable e,revisiontable r where r.revision_id=e.revision_id and e.name=:entryname and r.branch_name=branchname/branch_id
00192 input:
00193 if isinstance(branch,str):byname
00194 else: byid
00195 output:entry_id/None
00196 '''
00197 try:
00198 result=None
00199 byname=False
00200 if isinstance(branch,str):
00201 byname=True
00202 qHandle=schema.newQuery()
00203 qHandle.addToTableList( nameDealer.entryTableName(datatableName),'e' )
00204 qHandle.addToTableList( nameDealer.revisionTableName(),'r' )
00205 qHandle.addToOutputList('e.ENTRY_ID','entry_id')
00206 qCondition=coral.AttributeList()
00207 qCondition.extend('entryname','string')
00208 qCondition['entryname'].setData(entryname)
00209 qConditionStr='r.REVISION_ID=e.REVISION_ID and e.NAME=:entryname and '
00210 if byname:
00211 qCondition.extend('branch_name','string')
00212 qCondition['branch_name'].setData(branch)
00213 qConditionStr+='r.BRANCH_NAME=:branch_name'
00214 else:
00215 qCondition.extend('branch_id','unsigned long long')
00216 qCondition['branch_id'].setData(branch)
00217 qConditionStr+='r.BRANCH_ID=:branch_id'
00218 qResult=coral.AttributeList()
00219 qResult.extend('entry_id','unsigned long long')
00220 qHandle.defineOutput(qResult)
00221 qHandle.setCondition(qConditionStr,qCondition)
00222 cursor=qHandle.execute()
00223 while cursor.next():
00224 entry_id=cursor.currentRow()['entry_id'].data()
00225 result=entry_id
00226 del qHandle
00227 return result
00228 except :
00229 raise
00230
00231 def dataRevisionsOfEntry(schema,datatableName,entry,revrange):
00232 '''
00233 all data version of the given entry whose revision falls in branch revision range
00234 select d.data_id,r.revision_id from datatable d, datarevmaptable r where d.entry_id(or name )=:entry and d.data_id=r.data_id
00235 input: if isinstance(entry,str): d.entry_name=:entry ; else d.entry_id=:entry
00236 output: [data_id]
00237 '''
00238 qHandle=schema.newQuery()
00239 try:
00240 result=[]
00241 byname=False
00242 if isinstance(entry,str):
00243 byname=True
00244 qHandle.addToTableList( datatableName,'d' )
00245 qHandle.addToTableList( nameDealer.revmapTableName(datatableName), 'r')
00246 qHandle.addToOutputList('d.DATA_ID','data_id')
00247 qHandle.addToOutputList('r.REVISION_ID','revision_id')
00248 qCondition=coral.AttributeList()
00249 qConditionStr='d.DATA_ID=r.DATA_ID and '
00250 if byname:
00251 qCondition.extend('entry_name','string')
00252 qCondition['entry_name'].setData(entry)
00253 qConditionStr+='d.ENTRY_NAME=:entry_name'
00254 else:
00255 qCondition.extend('entry_id','unsigned long long')
00256 qCondition['entry_id'].setData(entry)
00257 qConditionStr+='d.ENTRY_ID=:entry_id'
00258 qResult=coral.AttributeList()
00259 qResult.extend('data_id','unsigned long long')
00260 qResult.extend('revision_id','unsigned long long')
00261 qHandle.defineOutput(qResult)
00262 qHandle.setCondition(qConditionStr,qCondition)
00263 cursor=qHandle.execute()
00264 while cursor.next():
00265 data_id=cursor.currentRow()['data_id'].data()
00266 revision_id=cursor.currentRow()['revision_id'].data()
00267 if revision_id in revrange:
00268 result.append(data_id)
00269 return result
00270 except :
00271 del qHandle
00272 raise
00273
00274 def latestDataRevisionOfEntry(schema,datatableName,entry,revrange):
00275 '''
00276 return max(data_id) of all datarevisionofEntry
00277 '''
00278 result=dataRevisionsOfEntry(schema,datatableName,entry,revrange)
00279 if result and len(result)!=0: return max(result)
00280 return None
00281
00282 def branchInfoByName(schema,branchName):
00283 '''
00284 select (revision_id,branch_id) from revisions where name=:branchName
00285 '''
00286 try:
00287 qHandle=schema.newQuery()
00288 qHandle.addToTableList( nameDealer.revisionTableName() )
00289 qHandle.addToOutputList('REVISION_ID','revision_id')
00290 qHandle.addToOutputList('BRANCH_ID','branch_id')
00291 qCondition=coral.AttributeList()
00292 qCondition.extend('name','string')
00293 qCondition['name'].setData(branchName)
00294 qResult=coral.AttributeList()
00295 qResult.extend('revision_id','unsigned long long')
00296 qResult.extend('branch_id','unsigned long long')
00297 qHandle.defineOutput(qResult)
00298 qHandle.setCondition('NAME=:name',qCondition)
00299 cursor=qHandle.execute()
00300 revision_id=None
00301 branch_id=None
00302 while cursor.next():
00303 revision_id=cursor.currentRow()['revision_id'].data()
00304 branch_id=cursor.currentRow()['branch_id'].data()
00305 del qHandle
00306 return (revision_id,branch_id)
00307 except Exception,e :
00308 raise RuntimeError(' revisionDML.branchInfoByName: '+str(e))
00309
00310
00311
00312
00313
00314
00315
00316 def bookNewEntry(schema,datatableName):
00317 '''
00318 allocate new revision_id,entry_id,data_id
00319 '''
00320 try:
00321 entrytableName=nameDealer.entryTableName(datatableName)
00322 iddealer=idDealer.idDealer(schema)
00323 revision_id=iddealer.generateNextIDForTable( nameDealer.revisionTableName() )
00324 data_id=iddealer.generateNextIDForTable( datatableName)
00325 entry_id=iddealer.generateNextIDForTable( nameDealer.entryTableName(datatableName) )
00326 return (revision_id,entry_id,data_id)
00327 except:
00328 raise
00329
00330 def bookNewRevision(schema,datatableName):
00331 '''
00332 allocate new revision_id,data_id
00333 '''
00334 try:
00335 iddealer=idDealer.idDealer(schema)
00336 revision_id=iddealer.generateNextIDForTable( nameDealer.revisionTableName() )
00337 data_id=iddealer.generateNextIDForTable(datatableName)
00338 return (revision_id,data_id)
00339 except:
00340 raise
00341
00342 def addEntry(schema,datatableName,entryinfo,branchinfo):
00343 '''
00344 input:
00345 entryinfo (revision_id(0),entry_id(1),entry_name(2),data_id(3))
00346 branchinfo (branch_id,branch_name)
00347 1.allocate and insert a new revision into the revisions table
00348 2.allocate and insert a new entry into the entry table with the new revision
00349 3.inset into data_rev table with new data_id ,revision)id mapping
00350
00351 insert into revisions(revision_id,branch_id,branch_name,comment,ctime) values()
00352 insert into datatablename_entries (entry_id,revision_id) values()
00353 insert into datatablename_rev(data_id,revision_id) values()
00354 '''
00355 try:
00356 revisiontableName=nameDealer.revisionTableName()
00357 entrytableName=nameDealer.entryTableName(datatableName)
00358 revtableName=nameDealer.revmapTableName(datatableName)
00359
00360 db=dbUtil.dbUtil(schema)
00361 tabrowDefDict={}
00362 tabrowDefDict['REVISION_ID']='unsigned long long'
00363 tabrowDefDict['BRANCH_ID']='unsigned long long'
00364 tabrowDefDict['BRANCH_NAME']='string'
00365 tabrowDefDict['CTIME']='time stamp'
00366 tabrowValueDict={}
00367 tabrowValueDict['REVISION_ID']=entryinfo[0]
00368 tabrowValueDict['BRANCH_ID']=branchinfo[0]
00369 tabrowValueDict['BRANCH_NAME']=branchinfo[1]
00370 tabrowValueDict['CTIME']=coral.TimeStamp()
00371 db.insertOneRow(revisiontableName,tabrowDefDict,tabrowValueDict)
00372
00373 tabrowDefDict={}
00374 tabrowDefDict['REVISION_ID']='unsigned long long'
00375 tabrowDefDict['ENTRY_ID']='unsigned long long'
00376 tabrowDefDict['NAME']='string'
00377
00378 tabrowValueDict={}
00379 tabrowValueDict['REVISION_ID']=entryinfo[0]
00380 tabrowValueDict['ENTRY_ID']=entryinfo[1]
00381 tabrowValueDict['NAME']=entryinfo[2]
00382 db.insertOneRow(entrytableName,tabrowDefDict,tabrowValueDict)
00383
00384 tabrowDefDict={}
00385 tabrowDefDict['REVISION_ID']='unsigned long long'
00386 tabrowDefDict['DATA_ID']='unsigned long long'
00387 tabrowValueDict={}
00388 tabrowValueDict['REVISION_ID']=entryinfo[0]
00389 tabrowValueDict['DATA_ID']=entryinfo[3]
00390 db.insertOneRow(revtableName,tabrowDefDict,tabrowValueDict)
00391 except:
00392 raise
00393
00394 def addRevision(schema,datatableName,revisioninfo,branchinfo):
00395 '''
00396 1.insert a new revision into the revisions table
00397 2.insert into data_id, revision_id pair to datatable_revmap
00398 insert into revisions(revision_id,branch_id,branch_name,ctime) values()
00399 insert into datatable_rev(data_id,revision_id) values())
00400 input:
00401 revisioninfo (revision_id(0),data_id(1))
00402 branchinfo (branch_id(0),branch_name(1))
00403 '''
00404 try:
00405 revisiontableName=nameDealer.revisionTableName()
00406 revtableName=nameDealer.revmapTableName(datatableName)
00407
00408 db=dbUtil.dbUtil(schema)
00409 tabrowDefDict={}
00410 tabrowDefDict['REVISION_ID']='unsigned long long'
00411 tabrowDefDict['BRANCH_ID']='unsigned long long'
00412 tabrowDefDict['BRANCH_NAME']='string'
00413 tabrowDefDict['CTIME']='time stamp'
00414
00415 tabrowValueDict={}
00416 tabrowValueDict['REVISION_ID']=revisioninfo[0]
00417 tabrowValueDict['BRANCH_ID']=branchinfo[0]
00418 tabrowValueDict['BRANCH_NAME']=branchinfo[1]
00419 tabrowValueDict['CTIME']=coral.TimeStamp()
00420
00421 db.insertOneRow(revisiontableName,tabrowDefDict,tabrowValueDict)
00422
00423 tabrowDefDict={}
00424 tabrowDefDict['REVISION_ID']='unsigned long long'
00425 tabrowDefDict['DATA_ID']='unsigned long long'
00426 tabrowValueDict={}
00427 tabrowValueDict['REVISION_ID']=revisioninfo[0]
00428 tabrowValueDict['DATA_ID']=revisioninfo[1]
00429 db.insertOneRow(revtableName,tabrowDefDict,tabrowValueDict)
00430 except:
00431 raise
00432 def createBranch(schema,name,parentname,comment=''):
00433 '''
00434 create a new branch/tag under given parentnode
00435 insert into revisions(revision_id,branch_id,branch_name,name,comment,ctime) values()
00436 return (revisionid,parentid,parentname)
00437 '''
00438 try:
00439 parentid=None
00440 revisionid=0
00441 if not parentname is None:
00442 qHandle=schema.newQuery()
00443 qHandle.addToTableList( nameDealer.revisionTableName() )
00444 qHandle.addToOutputList( 'REVISION_ID','revision_id' )
00445 qCondition=coral.AttributeList()
00446 qCondition.extend('parentname','string')
00447 qCondition['parentname'].setData(parentname)
00448 qResult=coral.AttributeList()
00449 qResult.extend('revision_id','unsigned long long')
00450 qHandle.defineOutput(qResult)
00451 qHandle.setCondition('NAME=:parentname',qCondition)
00452 cursor=qHandle.execute()
00453 while cursor.next():
00454 parentid=cursor.currentRow()['revision_id'].data()
00455 del qHandle
00456 else:
00457 parentname='ROOT'
00458 iddealer=idDealer.idDealer(schema)
00459 revisionid=iddealer.generateNextIDForTable( nameDealer.revisionTableName() )
00460 db=dbUtil.dbUtil(schema)
00461 tabrowDefDict={}
00462 tabrowDefDict['REVISION_ID']='unsigned long long'
00463 tabrowDefDict['BRANCH_ID']='unsigned long long'
00464 tabrowDefDict['BRANCH_NAME']='string'
00465 tabrowDefDict['NAME']='string'
00466 tabrowDefDict['COMMENT']='string'
00467 tabrowDefDict['CTIME']='time stamp'
00468 tabrowValueDict={}
00469 tabrowValueDict['REVISION_ID']=revisionid
00470 tabrowValueDict['BRANCH_ID']=parentid
00471 tabrowValueDict['BRANCH_NAME']=parentname
00472 tabrowValueDict['NAME']=name
00473 tabrowValueDict['COMMENT']=comment
00474 tabrowValueDict['CTIME']=coral.TimeStamp()
00475 db.insertOneRow(nameDealer.revisionTableName(),tabrowDefDict, tabrowValueDict )
00476 return (revisionid,parentid,parentname)
00477 except:
00478 raise
00479
00480
00481
00482
00483 def createDataTag(schema,tagname,lumitype='HF'):
00484 '''
00485 insert into tags(tagname,tagid,creationtime) values()
00486 output:
00487 tagname,tagid,creationtime
00488 '''
00489 if lumitype not in ['HF','PIXEL']:
00490 raise ValueError('unknown lumitype '+lumitype)
00491 if lumitype=='HF':
00492 tagstablename=nameDealer.tagsTableName()
00493 else:
00494 tagstablename=nameDealer.pixeltagsTableName()
00495 try:
00496 iddealer=idDealer.idDealer(schema)
00497 tagid=iddealer.generateNextIDForTable( tagstablename )
00498 db=dbUtil.dbUtil(schema)
00499 tabrowDefDict={}
00500 tabrowDefDict['TAGNAME']='string'
00501 tabrowDefDict['TAGID']='unsigned long long'
00502 tabrowDefDict['CREATIONTIME']='time stamp'
00503 tabrowValueDict={}
00504 tabrowValueDict['TAGNAME']=tagname
00505 tabrowValueDict['TAGID']=tagid
00506 creationtime=coral.TimeStamp()
00507 tabrowValueDict['CREATIONTIME']=creationtime
00508 db.insertOneRow(tagstablename,tabrowDefDict, tabrowValueDict )
00509 return (tagname,tagid,creationtime)
00510 except:
00511 raise
00512
00513 def currentDataTag(schema,lumitype='HF'):
00514 '''
00515 select tagid,tagname from tags
00516 output:(tagid,tagname)
00517 '''
00518 if lumitype not in ['HF','PIXEL']:
00519 raise ValueError('unknown lumitype '+lumitype)
00520 if lumitype=='HF':
00521 tagstablename=nameDealer.tagsTableName()
00522 else:
00523 tagstablename=nameDealer.pixeltagsTableName()
00524 tagmap={}
00525 try:
00526 qHandle=schema.newQuery()
00527 qHandle.addToTableList( tagstablename )
00528 qHandle.addToOutputList('TAGID')
00529 qHandle.addToOutputList('TAGNAME')
00530 qResult=coral.AttributeList()
00531 qResult.extend('TAGID','unsigned long long')
00532 qResult.extend('TAGNAME','string')
00533 qHandle.defineOutput(qResult)
00534 cursor=qHandle.execute()
00535 currenttagid=0
00536 while cursor.next():
00537 tagid=cursor.currentRow()['TAGID'].data()
00538 tagname=cursor.currentRow()['TAGNAME'].data()
00539 tagmap[tagid]=tagname
00540 del qHandle
00541 if len(tagmap)!=0:
00542 currenttagid=max(tagmap.keys())
00543 if currenttagid==0:
00544 raise 'currentDataTag: no tag available'
00545 return (currenttagid,tagmap[currenttagid])
00546 except:
00547 raise
00548
00549 def addRunToCurrentDataTag(schema,runnum,lumiid,trgid,hltid,lumitype='HF',comment=''):
00550 '''
00551 select tagid from tags
00552 insert into tagruns(tagid,runnum,lumidataid,trgdataid,hltdataid,creationtime,comment) values(tagid,runnum,lumiid,trgid,hltid,creationtime,comment)
00553 '''
00554 if lumitype not in ['HF','PIXEL']:
00555 raise ValueError('unknown lumitype '+lumitype)
00556 if lumitype=='HF':
00557 tagrunstablename=nameDealer.tagRunsTableName()
00558 else:
00559 tagrunstablename=nameDealer.pixeltagRunsTableName()
00560 currenttagid=currentDataTag(schema,lumitype=lumitype)[0]
00561 try:
00562 db=dbUtil.dbUtil(schema)
00563 tabrowDefDict={}
00564 tabrowDefDict['TAGID']='unsigned long long'
00565 tabrowDefDict['RUNNUM']='unsigned int'
00566 tabrowDefDict['LUMIDATAID']='unsigned long long'
00567 tabrowDefDict['TRGDATAID']='unsigned long long'
00568 tabrowDefDict['HLTDATAID']='unsigned long long'
00569 tabrowDefDict['CREATIONTIME']='time stamp'
00570 tabrowDefDict['COMMENT']='string'
00571 tabrowValueDict={}
00572 tabrowValueDict['TAGID']=currenttagid
00573 tabrowValueDict['RUNNUM']=runnum
00574 tabrowValueDict['LUMIDATAID']=lumiid
00575 tabrowValueDict['TRGDATAID']=trgid
00576 tabrowValueDict['HLTDATAID']=hltid
00577 tabrowValueDict['CREATIONTIME']=coral.TimeStamp()
00578 tabrowValueDict['COMMENT']=comment
00579 db.insertOneRow( tagrunstablename,tabrowDefDict, tabrowValueDict )
00580 except:
00581 raise
00582
00583 def alldataTags(schema,lumitype='HF'):
00584 '''
00585 select tagname,tagid from tags,tagruns
00586 if number of tags==1->open tag
00587 if tagid is max ->open tag
00588 for closed tag:
00589 max run=max(runnum) where tagid=:tagid
00590 min run
00591 select min(runnum) from tagruns where tagid<=:tagid
00592 for open tag:
00593 max run=None
00594 min run
00595 select min(runnum) from tagruns where tagid<=:tagid
00596 output:
00597 {tagid:(name,minrun,maxrun,creationtime)}
00598 '''
00599 if lumitype not in ['HF','PIXEL']:
00600 raise ValueError('unknown lumitype '+lumitype)
00601 if lumitype=='HF':
00602 tagstablename=nameDealer.tagsTableName()
00603 tagrunstablename=nameDealer.tagRunsTableName()
00604 else:
00605 tagstablename=nameDealer.pixeltagsTableName()
00606 tagrunstablename=nameDealer.pixeltagRunsTableName()
00607 tagmap={}
00608 try:
00609 qHandle=schema.newQuery()
00610 qHandle.addToTableList( tagstablename )
00611 qCondition=coral.AttributeList()
00612 qHandle.addToOutputList('TAGNAME')
00613 qHandle.addToOutputList('TAGID')
00614 qHandle.addToOutputList("TO_CHAR(CREATIONTIME,\'MM/DD/YY HH24:MI:SS\')",'creationtime')
00615 qResult=coral.AttributeList()
00616 qResult.extend('TAGNAME','string')
00617 qResult.extend('TAGID','unsigned long long')
00618 qResult.extend('creationtime','string')
00619 qHandle.defineOutput(qResult)
00620 cursor=qHandle.execute()
00621 while cursor.next():
00622 tagname=cursor.currentRow()['TAGNAME'].data()
00623 tagid=cursor.currentRow()['TAGID'].data()
00624 creationtime=cursor.currentRow()['creationtime'].data()
00625 tagmap[tagid]=[tagname,0,0,creationtime]
00626 del qHandle
00627
00628 tagids=tagmap.keys()
00629 allruns=set()
00630 for tagid in tagids:
00631 qConditionStr='TAGID<=:tagid'
00632 qCondition=coral.AttributeList()
00633 qCondition.extend('tagid','unsigned long long')
00634 qCondition['tagid'].setData(tagid)
00635 qHandle=schema.newQuery()
00636 qHandle.addToTableList( tagrunstablename )
00637 qResult=coral.AttributeList()
00638 qResult.extend('RUNNUM','unsigned int')
00639 qHandle.defineOutput(qResult)
00640 qHandle.setCondition(qConditionStr,qCondition)
00641 qHandle.addToOutputList('RUNNUM')
00642 cursor=qHandle.execute()
00643 while cursor.next():
00644 rnum=cursor.currentRow()['RUNNUM'].data()
00645 allruns.add(rnum)
00646 minrun=0
00647 maxrun=0
00648 if len(allruns)!=0:
00649 minrun=min(allruns)
00650 maxrun=max(allruns)
00651 tagmap[tagid][1]=minrun
00652 if len(tagmap)>1 and tagid!=max(tagids):
00653 tagmap[tagid][2]=maxrun
00654 except:
00655 raise
00656 return tagmap
00657
00658 def getDataTagId(schema,tagname,lumitype='HF'):
00659 '''
00660 select tagid from tags where tagname=:tagname
00661 '''
00662 if lumitype not in ['HF','PIXEL']:
00663 raise ValueError('unknown lumitype '+lumitype)
00664 if lumitype=='HF':
00665 tagstablename=nameDealer.tagsTableName()
00666 else:
00667 tagstablename=nameDealer.pixeltagsTableName()
00668 tagid=None
00669 try:
00670 qHandle=schema.newQuery()
00671 qHandle.addToTableList( tagstablename )
00672 qConditionStr='TAGNAME=:tagname'
00673 qCondition=coral.AttributeList()
00674 qCondition.extend('tagname','string')
00675 qCondition['tagname'].setData(tagname)
00676 qHandle.addToOutputList('TAGID')
00677 qResult=coral.AttributeList()
00678 qResult.extend('TAGID','unsigned long long')
00679 qHandle.defineOutput(qResult)
00680 qHandle.setCondition(qConditionStr,qCondition)
00681 cursor=qHandle.execute()
00682 while cursor.next():
00683 if not cursor.currentRow()['TAGID'].isNull():
00684 tagid=cursor.currentRow()['TAGID'].data()
00685 del qHandle
00686 except:
00687 raise
00688 return tagid
00689 def dataIdsByTagName(schema,tagname,runlist=None,withcomment=False,lumitype='HF'):
00690 '''
00691 select tagid from tags where tagname=:tagname
00692 input:
00693 runlist: select run list, if None, all
00694 output:
00695 {run:(lumidataid,trgdataid,hltdataid,(creationtime,comment)}
00696 '''
00697 if lumitype not in ['HF','PIXEL']:
00698 raise ValueError('unknown lumitype '+lumitype)
00699 if lumitype=='HF':
00700 tagstablename=nameDealer.tagsTableName()
00701 else:
00702 tagstablename=nameDealer.pixeltagsTableName()
00703 tagid=None
00704 try:
00705 qHandle=schema.newQuery()
00706 qHandle.addToTableList( tagstablename )
00707 qConditionStr='TAGNAME=:tagname'
00708 qCondition=coral.AttributeList()
00709 qCondition.extend('tagname','string')
00710 qCondition['tagname'].setData(tagname)
00711 qHandle.addToOutputList('TAGID')
00712 qResult=coral.AttributeList()
00713 qResult.extend('TAGID','unsigned long long')
00714 qHandle.defineOutput(qResult)
00715 qHandle.setCondition(qConditionStr,qCondition)
00716 cursor=qHandle.execute()
00717 while cursor.next():
00718 if not cursor.currentRow()['TAGID'].isNull():
00719 tagid=cursor.currentRow()['TAGID'].data()
00720 del qHandle
00721 except:
00722 raise
00723 if tagid is None:
00724 return {}
00725 return dataIdsByTagId(schema,tagid,runlist=runlist,withcomment=withcomment,lumitype=lumitype)
00726
00727
00728 def dataTagInfo(schema,tagname,runlist=None,lumitype='HF'):
00729 '''
00730 select tagid from tags where tagname=:tagname
00731 select runnum,comment from tagruns where tagid<=:tagid
00732 input:
00733 runlist: select run list, if None, all
00734 output:
00735 {tagid:(name,minrun,maxrun,creationtime)}
00736 '''
00737 if lumitype not in ['HF','PIXEL']:
00738 raise ValueError('unknown lumitype '+lumitype)
00739 if lumitype=='HF':
00740 tagstablename=nameDealer.tagsTableName()
00741 tagrunstablename=nameDealer.tagRunsTableName()
00742 else:
00743 tagstablename=nameDealer.pixeltagsTableName()
00744 tagrunstablename=nameDealer.pixeltagRunsTableName()
00745 tagmap={}
00746 try:
00747 qHandle=schema.newQuery()
00748 qHandle.addToTableList( tagstablename )
00749 qCondition=coral.AttributeList()
00750 qHandle.addToOutputList('TAGNAME')
00751 qHandle.addToOutputList('TAGID')
00752 qHandle.addToOutputList("TO_CHAR(CREATIONTIME,\'MM/DD/YY HH24:MI:SS\')",'creationtime')
00753 qResult=coral.AttributeList()
00754 qResult.extend('TAGNAME','string')
00755 qResult.extend('TAGID','unsigned long long')
00756 qResult.extend('creationtime','string')
00757 qHandle.defineOutput(qResult)
00758 cursor=qHandle.execute()
00759 while cursor.next():
00760 tagname=cursor.currentRow()['TAGNAME'].data()
00761 tagid=cursor.currentRow()['TAGID'].data()
00762 creationtime=cursor.currentRow()['creationtime'].data()
00763 tagmap[tagid]=[tagname,0,0,creationtime]
00764 del qHandle
00765
00766 tagids=tagmap.keys()
00767 allruns=set()
00768 for tagid in tagids:
00769 qConditionStr='TAGID<=:tagid'
00770 qCondition=coral.AttributeList()
00771 qCondition.extend('tagid','unsigned long long')
00772 qCondition['tagid'].setData(tagid)
00773 qHandle=schema.newQuery()
00774 qHandle.addToTableList(tagrunstablename)
00775 qResult=coral.AttributeList()
00776 qResult.extend('RUNNUM','unsigned int')
00777 qHandle.defineOutput(qResult)
00778 qHandle.setCondition(qConditionStr,qCondition)
00779 qHandle.addToOutputList('RUNNUM')
00780 cursor=qHandle.execute()
00781 while cursor.next():
00782 rnum=cursor.currentRow()['RUNNUM'].data()
00783 if runlist is not None and rnum not in runlist:
00784 continue
00785 allruns.add(rnum)
00786 minrun=0
00787 maxrun=0
00788 if len(allruns)!=0:
00789 minrun=min(allruns)
00790 maxrun=max(allruns)
00791 tagmap[tagid][1]=minrun
00792 if len(tagmap)>1 and tagid!=max(tagids):
00793 tagmap[tagid][2]=maxrun
00794 except:
00795 raise
00796 return tagmap
00797
00798 def dataIdsByTagId(schema,tagid,runlist=None,withcomment=False,lumitype='HF'):
00799 '''
00800 select runnum,lumidataid,trgdataid,hltdataid,comment from tagruns where TAGID<=:tagid;
00801 input:
00802 runlist: select run list, if None, all
00803 output:
00804 {run:(lumidataid,trgdataid,hltdataid,(creationtime,comment))}
00805 '''
00806 if lumitype not in ['HF','PIXEL']:
00807 raise ValueError('unknown lumitype '+lumitype)
00808 if lumitype=='HF':
00809 tagrunstablename=nameDealer.tagRunsTableName()
00810 else:
00811 tagrunstablename=nameDealer.pixeltagRunsTableName()
00812 result={}
00813 commentdict={}
00814 try:
00815 qHandle=schema.newQuery()
00816 qHandle.addToTableList(tagrunstablename)
00817 qConditionStr='TAGID<=:tagid'
00818 qCondition=coral.AttributeList()
00819 qCondition.extend('tagid','unsigned long long')
00820 qCondition['tagid'].setData(tagid)
00821 qResult=coral.AttributeList()
00822 qResult.extend('RUNNUM','unsigned int')
00823 qResult.extend('LUMIDATAID','unsigned long long')
00824 qResult.extend('TRGDATAID','unsigned long long')
00825 qResult.extend('HLTDATAID','unsigned long long')
00826 if withcomment:
00827 qResult.extend('COMMENT','string')
00828 qResult.extend('creationtime','string')
00829 qHandle.defineOutput(qResult)
00830 qHandle.setCondition(qConditionStr,qCondition)
00831 qHandle.addToOutputList('RUNNUM')
00832 qHandle.addToOutputList('LUMIDATAID')
00833 qHandle.addToOutputList('TRGDATAID')
00834 qHandle.addToOutputList('HLTDATAID')
00835 if withcomment:
00836 qHandle.addToOutputList('COMMENT')
00837 qHandle.addToOutputList("TO_CHAR(CREATIONTIME,\'MM/DD/YY HH24:MI:SS\')",'creationtime')
00838 cursor=qHandle.execute()
00839 while cursor.next():
00840 runnum=cursor.currentRow()['RUNNUM'].data()
00841 if runlist is not None and runnum not in runlist:
00842 continue
00843 lumidataid=0
00844 if not cursor.currentRow()['LUMIDATAID'].isNull():
00845 lumidataid=cursor.currentRow()['LUMIDATAID'].data()
00846 trgdataid=0
00847 if not cursor.currentRow()['TRGDATAID'].isNull():
00848 trgdataid=cursor.currentRow()['TRGDATAID'].data()
00849 hltdataid=0
00850 if not cursor.currentRow()['HLTDATAID'].isNull():
00851 hltdataid=cursor.currentRow()['HLTDATAID'].data()
00852 if not result.has_key(runnum):
00853 result[runnum]=[0,0,0]
00854 if lumidataid>result[runnum][0]:
00855 result[runnum][0]=lumidataid
00856 if trgdataid>result[runnum][1]:
00857 result[runnum][1]=trgdataid
00858 if hltdataid>result[runnum][2]:
00859 result[runnum][2]=hltdataid
00860 if withcomment:
00861 comment=''
00862 creationtime=''
00863 if not cursor.currentRow()['creationtime'].isNull():
00864 creationtime=cursor.currentRow()['creationtime'].data()
00865 if not cursor.currentRow()['COMMENT'].isNull():
00866 comment=cursor.currentRow()['COMMENT'].data()
00867 commentdict[(lumidataid,trgdataid,hltdataid)]=(creationtime,comment)
00868 del qHandle
00869 if withcomment:
00870 for run,resultentry in result.items():
00871 lumiid=resultentry[0]
00872 trgid=resultentry[1]
00873 hltid=resultentry[2]
00874 if commentdict.has_key((lumiid,trgid,hltid)):
00875 resultentry.append(commentdict[(lumiid,trgid,hltid)])
00876 elif commentdict.has_key((lumiid,0,0)):
00877 resultentry.append(commentdict[(lumiid,0,0)])
00878 elif commentdict.has_ley((0,trgid,0)):
00879 resultentry.append(commentdict[(0,trgid,0)])
00880 elif commentdict.has_ley((0,0,hltid)):
00881 resultentry.append(commentdict[(0,0,hltid)])
00882 else:
00883 resultentry.append(())
00884
00885 except:
00886 raise
00887 return result
00888
00889 def dataIdsByCurrentTag(schema,runlist=None,lumitype='HF'):
00890 '''
00891 dataIdsByTagId(schema,currenttagid,runlist)
00892 output:
00893 (currenttagname,{run:(lumidataid,trgdataid,hltdataid)})
00894 '''
00895 (currenttagid,currenttagname)=currentDataTag(schema)
00896 result=dataIdsByTagId(schema,currenttagid,runlist=runlist,withcomment=False,lumitype=lumitype)
00897 return (currenttagname,result)
00898
00899 if __name__ == "__main__":
00900 import sessionManager
00901 import lumidbDDL
00902
00903
00904 myconstr='sqlite_file:test.db'
00905 svc=sessionManager.sessionManager(myconstr,debugON=False)
00906 session=svc.openSession(isReadOnly=False,cpp2sqltype=[('unsigned int','NUMBER(10)'),('unsigned long long','NUMBER(20)')])
00907 schema=session.nominalSchema()
00908 session.transaction().start(False)
00909 tables=lumidbDDL.createTables(schema)
00910 trunkinfo=createBranch(schema,'TRUNK',None,comment='main')
00911
00912 datainfo=createBranch(schema,'DATA','TRUNK',comment='hold data')
00913
00914 norminfo=createBranch(schema,'NORM','TRUNK',comment='hold normalization factor')
00915
00916 (branchid,branchparent)=branchInfoByName(schema,'DATA')
00917 databranchinfo=(branchid,'DATA')
00918 print databranchinfo
00919 for runnum in [1200,1211,1222,1233,1345,1222,1200]:
00920 lumientryid=entryInBranch(schema,nameDealer.lumidataTableName(),str(runnum),'DATA')
00921 trgentryid=entryInBranch(schema,nameDealer.trgdataTableName(),str(runnum),'DATA')
00922 hltentryid=entryInBranch(schema,nameDealer.hltdataTableName(),str(runnum),'DATA')
00923 if lumientryid is None:
00924 (revision_id,entry_id,data_id)=bookNewEntry( schema,nameDealer.lumidataTableName() )
00925 entryinfo=(revision_id,entry_id,str(runnum),data_id)
00926 addEntry(schema,nameDealer.lumidataTableName(),entryinfo,databranchinfo)
00927
00928 else:
00929 revisioninfo=bookNewRevision( schema,nameDealer.lumidataTableName() )
00930 addRevision(schema,nameDealer.lumidataTableName(),revisioninfo,databranchinfo)
00931
00932 if trgentryid is None:
00933 (revision_id,entry_id,data_id)=bookNewEntry( schema,nameDealer.trgdataTableName() )
00934 entryinfo=(revision_id,entry_id,str(runnum),data_id)
00935 addEntry(schema,nameDealer.trgdataTableName(),entryinfo,databranchinfo)
00936
00937 else:
00938 revisioninfo=bookNewRevision( schema,nameDealer.trgdataTableName() )
00939 addRevision(schema,nameDealer.trgdataTableName(),revisioninfo,databranchinfo)
00940
00941 if hltentryid is None:
00942 (revision_id,entry_id,data_id)=bookNewEntry( schema,nameDealer.hltdataTableName() )
00943 entryinfo=(revision_id,entry_id,str(runnum),data_id)
00944 addEntry(schema,nameDealer.hltdataTableName(),entryinfo,databranchinfo)
00945
00946 else:
00947 revisioninfo=bookNewRevision( schema,nameDealer.hltdataTableName() )
00948 addRevision(schema,nameDealer.hltdataTableName(),revisioninfo,databranchinfo)
00949
00950
00951 session.transaction().commit()
00952 print 'test reading'
00953 session.transaction().start(True)
00954 print branchType(schema,'DATA')
00955 revlist=revisionsInBranchName(schema,'DATA')
00956 print 'DATA revlist ',revlist
00957 lumientry_id=entryInBranch(schema,nameDealer.lumidataTableName(),'1211','DATA')
00958 print lumientry_id
00959 latestrevision=latestDataRevisionOfEntry(schema,nameDealer.lumidataTableName(),lumientry_id,revlist)
00960 print 'latest data_id for run 1211 ',latestrevision
00961 session.transaction().commit()
00962 del session