6 from RecoLuminosity.LumiDB
import nameDealer,idDealer,dbUtil
12 returns all revisions before tag in selected branch
13 select revision_id from revisions where revision_id!=0 and revision_id<tagrevisionid and branch_id=:branchid
17 qHandle=schema.newQuery()
21 qHandle.addToOutputList(
'distinct BRANCH_ID',
'branch_id')
22 qCondition=coral.AttributeList()
23 qCondition.extend(
'branchid',
'unsigned long long')
24 qCondition[
'branchid'].setData(branchid)
25 qResult=coral.AttributeList()
26 qResult.extend(
'branch_id',
'unsigned long long')
27 qHandle.defineOutput(qResult)
28 qHandle.setCondition(
'BRANCH_ID>:branchid',qCondition)
29 cursor=qHandle.execute()
31 nextbranches.append(cursor.currentRow()[
'branch_id'].
data())
34 conditionStr=
'REVISION_ID!=0 and BRANCH_ID=:branchid and REVISION_ID<:tagrevisionid'
35 qHandle=schema.newQuery()
37 qHandle.addToOutputList(
'REVISION_ID',
'revision_id')
38 qCondition=coral.AttributeList()
39 qCondition.extend(
'branchid',
'unsigned long long')
40 qCondition.extend(
'tagrevisionid',
'unsigned long long')
41 qCondition[
'branchid'].setData(branchid)
42 qCondition[
'tagrevisionid'].setData(tagrevisionid)
43 qResult=coral.AttributeList()
44 qResult.extend(
'revision_id',
'unsigned long long')
45 qHandle.defineOutput(qResult)
46 qHandle.setCondition(conditionStr,qCondition)
47 cursor=qHandle.execute()
49 candidates.append(cursor.currentRow()[
'revision_id'].
data())
57 if qHandle:del qHandle
61 returns all revision values in a branch
63 select distinct branch_id from revisions where branch_id>:branchid;
64 select revision_id from revisions where branch_id=:branchid ;
65 if the branchid matches and the revisionid is not in the branchid collection,not 0, then this revision is in the branch
66 require also revisionid>branchid
69 qHandle=schema.newQuery()
73 qHandle.addToOutputList(
'distinct BRANCH_ID',
'branch_id')
74 qCondition=coral.AttributeList()
75 qCondition.extend(
'branchid',
'unsigned long long')
76 qCondition[
'branchid'].setData(branchid)
77 qResult=coral.AttributeList()
78 qResult.extend(
'branch_id',
'unsigned long long')
79 qHandle.defineOutput(qResult)
80 qHandle.setCondition(
'BRANCH_ID>:branchid',qCondition)
81 cursor=qHandle.execute()
83 nextbranches.append(cursor.currentRow()[
'branch_id'].
data())
86 conditionStr=
'BRANCH_ID=:branchid and REVISION_ID!=0'
87 qHandle=schema.newQuery()
89 qHandle.addToOutputList(
'REVISION_ID',
'revision_id')
90 qCondition=coral.AttributeList()
91 qCondition.extend(
'branchid',
'unsigned long long')
92 qCondition[
'branchid'].setData(branchid)
93 qResult=coral.AttributeList()
94 qResult.extend(
'revision_id',
'unsigned long long')
95 qHandle.defineOutput(qResult)
96 qHandle.setCondition(conditionStr,qCondition)
97 cursor=qHandle.execute()
99 candidates.append(cursor.currentRow()[
'revision_id'].
data())
102 if c
in nextbranches:
107 if qHandle: del qHandle
113 the difference between tag and branch: tag is an empty branch
114 select count(revision_id) from revisions where branch_name=:name
115 if >0: is real branch
120 qHandle=schema.newQuery()
122 qHandle.addToOutputList(
'count(REVISION_ID)',
'nchildren')
123 qCondition=coral.AttributeList()
124 qCondition.extend(
'branch_name',
'string')
125 qCondition[
'branch_name'].setData(name)
126 qResult=coral.AttributeList()
127 qResult.extend(
'nchildren',
'unsigned int')
128 qHandle.defineOutput(qResult)
129 conditionStr=
'BRANCH_NAME=:branch_name'
130 qHandle.setCondition(conditionStr,qCondition)
131 cursor=qHandle.execute()
133 if cursor.currentRow()[
'nchildren'].
data()>0:
177 returns all revisions in a branch/tag by name
188 whether an entry(by name) already exists in the given branch
189 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
191 if isinstance(branch,str):byname
198 if isinstance(branch,str):
200 qHandle=schema.newQuery()
203 qHandle.addToOutputList('e.ENTRY_ID',
'entry_id')
204 qCondition=coral.AttributeList()
205 qCondition.extend(
'entryname',
'string')
206 qCondition[
'entryname'].setData(entryname)
207 qConditionStr=
'r.REVISION_ID=e.REVISION_ID and e.NAME=:entryname and '
209 qCondition.extend(
'branch_name',
'string')
210 qCondition[
'branch_name'].setData(branch)
211 qConditionStr+=
'r.BRANCH_NAME=:branch_name'
213 qCondition.extend(
'branch_id',
'unsigned long long')
214 qCondition[
'branch_id'].setData(branch)
215 qConditionStr+=
'r.BRANCH_ID=:branch_id'
216 qResult=coral.AttributeList()
217 qResult.extend(
'entry_id',
'unsigned long long')
218 qHandle.defineOutput(qResult)
219 qHandle.setCondition(qConditionStr,qCondition)
220 cursor=qHandle.execute()
222 entry_id=cursor.currentRow()[
'entry_id'].
data()
231 all data version of the given entry whose revision falls in branch revision range
232 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
233 input: if isinstance(entry,str): d.entry_name=:entry ; else d.entry_id=:entry
236 qHandle=schema.newQuery()
240 if isinstance(entry,str):
242 qHandle.addToTableList( datatableName,
'd' )
244 qHandle.addToOutputList('d.DATA_ID',
'data_id')
245 qHandle.addToOutputList(
'r.REVISION_ID',
'revision_id')
246 qCondition=coral.AttributeList()
247 qConditionStr=
'd.DATA_ID=r.DATA_ID and '
249 qCondition.extend(
'entry_name',
'string')
250 qCondition[
'entry_name'].setData(entry)
251 qConditionStr+=
'd.ENTRY_NAME=:entry_name'
253 qCondition.extend(
'entry_id',
'unsigned long long')
254 qCondition[
'entry_id'].setData(entry)
255 qConditionStr+=
'd.ENTRY_ID=:entry_id'
256 qResult=coral.AttributeList()
257 qResult.extend(
'data_id',
'unsigned long long')
258 qResult.extend(
'revision_id',
'unsigned long long')
259 qHandle.defineOutput(qResult)
260 qHandle.setCondition(qConditionStr,qCondition)
261 cursor=qHandle.execute()
263 data_id=cursor.currentRow()[
'data_id'].
data()
264 revision_id=cursor.currentRow()[
'revision_id'].
data()
265 if revision_id
in revrange:
266 result.append(data_id)
274 return max(data_id) of all datarevisionofEntry
277 if result
and len(result)!=0:
return max(result)
282 select (revision_id,branch_id) from revisions where name=:branchName
285 qHandle=schema.newQuery()
287 qHandle.addToOutputList(
'REVISION_ID',
'revision_id')
288 qHandle.addToOutputList(
'BRANCH_ID',
'branch_id')
289 qCondition=coral.AttributeList()
290 qCondition.extend(
'name',
'string')
291 qCondition[
'name'].setData(branchName)
292 qResult=coral.AttributeList()
293 qResult.extend(
'revision_id',
'unsigned long long')
294 qResult.extend(
'branch_id',
'unsigned long long')
295 qHandle.defineOutput(qResult)
296 qHandle.setCondition(
'NAME=:name',qCondition)
297 cursor=qHandle.execute()
301 revision_id=cursor.currentRow()[
'revision_id'].
data()
302 branch_id=cursor.currentRow()[
'branch_id'].
data()
304 return (revision_id,branch_id)
306 raise RuntimeError(
' revisionDML.branchInfoByName: '+str(e))
316 allocate new revision_id,entry_id,data_id
322 data_id=iddealer.generateNextIDForTable( datatableName)
324 return (revision_id,entry_id,data_id)
330 allocate new revision_id,data_id
335 data_id=iddealer.generateNextIDForTable(datatableName)
336 return (revision_id,data_id)
340 def addEntry(schema,datatableName,entryinfo,branchinfo):
343 entryinfo (revision_id(0),entry_id(1),entry_name(2),data_id(3))
344 branchinfo (branch_id,branch_name)
345 1.allocate and insert a new revision into the revisions table
346 2.allocate and insert a new entry into the entry table with the new revision
347 3.inset into data_rev table with new data_id ,revision)id mapping
349 insert into revisions(revision_id,branch_id,branch_name,comment,ctime) values()
350 insert into datatablename_entries (entry_id,revision_id) values()
351 insert into datatablename_rev(data_id,revision_id) values()
360 tabrowDefDict[
'REVISION_ID']=
'unsigned long long'
361 tabrowDefDict[
'BRANCH_ID']=
'unsigned long long'
362 tabrowDefDict[
'BRANCH_NAME']=
'string'
363 tabrowDefDict[
'CTIME']=
'time stamp'
365 tabrowValueDict[
'REVISION_ID']=entryinfo[0]
366 tabrowValueDict[
'BRANCH_ID']=branchinfo[0]
367 tabrowValueDict[
'BRANCH_NAME']=branchinfo[1]
368 tabrowValueDict[
'CTIME']=coral.TimeStamp()
369 db.insertOneRow(revisiontableName,tabrowDefDict,tabrowValueDict)
372 tabrowDefDict[
'REVISION_ID']=
'unsigned long long'
373 tabrowDefDict[
'ENTRY_ID']=
'unsigned long long'
374 tabrowDefDict[
'NAME']=
'string'
377 tabrowValueDict[
'REVISION_ID']=entryinfo[0]
378 tabrowValueDict[
'ENTRY_ID']=entryinfo[1]
379 tabrowValueDict[
'NAME']=entryinfo[2]
380 db.insertOneRow(entrytableName,tabrowDefDict,tabrowValueDict)
383 tabrowDefDict[
'REVISION_ID']=
'unsigned long long'
384 tabrowDefDict[
'DATA_ID']=
'unsigned long long'
386 tabrowValueDict[
'REVISION_ID']=entryinfo[0]
387 tabrowValueDict[
'DATA_ID']=entryinfo[3]
388 db.insertOneRow(revtableName,tabrowDefDict,tabrowValueDict)
394 1.insert a new revision into the revisions table
395 2.insert into data_id, revision_id pair to datatable_revmap
396 insert into revisions(revision_id,branch_id,branch_name,ctime) values()
397 insert into datatable_rev(data_id,revision_id) values())
399 revisioninfo (revision_id(0),data_id(1))
400 branchinfo (branch_id(0),branch_name(1))
408 tabrowDefDict[
'REVISION_ID']=
'unsigned long long'
409 tabrowDefDict[
'BRANCH_ID']=
'unsigned long long'
410 tabrowDefDict[
'BRANCH_NAME']=
'string'
411 tabrowDefDict[
'CTIME']=
'time stamp'
414 tabrowValueDict[
'REVISION_ID']=revisioninfo[0]
415 tabrowValueDict[
'BRANCH_ID']=branchinfo[0]
416 tabrowValueDict[
'BRANCH_NAME']=branchinfo[1]
417 tabrowValueDict[
'CTIME']=coral.TimeStamp()
419 db.insertOneRow(revisiontableName,tabrowDefDict,tabrowValueDict)
422 tabrowDefDict[
'REVISION_ID']=
'unsigned long long'
423 tabrowDefDict[
'DATA_ID']=
'unsigned long long'
425 tabrowValueDict[
'REVISION_ID']=revisioninfo[0]
426 tabrowValueDict[
'DATA_ID']=revisioninfo[1]
427 db.insertOneRow(revtableName,tabrowDefDict,tabrowValueDict)
432 create a new branch/tag under given parentnode
433 insert into revisions(revision_id,branch_id,branch_name,name,comment,ctime) values()
434 return (revisionid,parentid,parentname)
439 if not parentname
is None:
440 qHandle=schema.newQuery()
442 qHandle.addToOutputList(
'REVISION_ID',
'revision_id' )
443 qCondition=coral.AttributeList()
444 qCondition.extend(
'parentname',
'string')
445 qCondition[
'parentname'].setData(parentname)
446 qResult=coral.AttributeList()
447 qResult.extend(
'revision_id',
'unsigned long long')
448 qHandle.defineOutput(qResult)
449 qHandle.setCondition(
'NAME=:parentname',qCondition)
450 cursor=qHandle.execute()
452 parentid=cursor.currentRow()[
'revision_id'].
data()
460 tabrowDefDict[
'REVISION_ID']=
'unsigned long long'
461 tabrowDefDict[
'BRANCH_ID']=
'unsigned long long'
462 tabrowDefDict[
'BRANCH_NAME']=
'string'
463 tabrowDefDict[
'NAME']=
'string'
464 tabrowDefDict[
'COMMENT']=
'string'
465 tabrowDefDict[
'CTIME']=
'time stamp'
467 tabrowValueDict[
'REVISION_ID']=revisionid
468 tabrowValueDict[
'BRANCH_ID']=parentid
469 tabrowValueDict[
'BRANCH_NAME']=parentname
470 tabrowValueDict[
'NAME']=name
471 tabrowValueDict[
'COMMENT']=comment
472 tabrowValueDict[
'CTIME']=coral.TimeStamp()
474 return (revisionid,parentid,parentname)
478 if __name__ ==
"__main__":
479 import sessionManager
483 myconstr=
'sqlite_file:test.db'
485 session=svc.openSession(isReadOnly=
False,cpp2sqltype=[(
'unsigned int',
'NUMBER(10)'),(
'unsigned long long',
'NUMBER(20)')])
486 schema=session.nominalSchema()
487 session.transaction().
start(
False)
493 norminfo=
createBranch(schema,
'NORM',
'TRUNK',comment=
'hold normalization factor')
496 databranchinfo=(branchid,
'DATA')
498 for runnum
in [1200,1211,1222,1233,1345,1222,1200]:
502 if lumientryid
is None:
504 entryinfo=(revision_id,entry_id,str(runnum),data_id)
511 if trgentryid
is None:
513 entryinfo=(revision_id,entry_id,str(runnum),data_id)
520 if hltentryid
is None:
522 entryinfo=(revision_id,entry_id,str(runnum),data_id)
530 session.transaction().commit()
532 session.transaction().
start(
True)
535 print 'DATA revlist ',revlist
539 print 'latest data_id for run 1211 ',latestrevision
540 session.transaction().commit()
def revisionsInBranchName
const T & max(const T &a, const T &b)
def latestDataRevisionOfEntry