@@ -66,9 +66,15 @@ def BIND_ENV_GROUP(cursor, eid, name_id):
66
66
67
67
68
68
# YUMDB
69
- def get_yumdb_packages (cursor , yumdb_path , pid_to_pdid , repo_fn ):
69
+ def get_yumdb_packages (cursor , yumdb_path , repo_fn ):
70
70
""" Insert additional data from yumdb info SWDB """
71
71
72
+ # prepare pid to pdid dictionary
73
+ cursor .execute ("SELECT PD_ID, P_ID FROM PACKAGE_DATA" )
74
+ pid_to_pdid = {}
75
+ for row in cursor :
76
+ pid_to_pdid [row [1 ]] = row [0 ]
77
+
72
78
# load whole yumdb into dictionary structure
73
79
pkgs = {}
74
80
for path , dirs , files in os .walk (yumdb_path ):
@@ -286,12 +292,6 @@ def bind_repo(cursor, name):
286
292
record_PD [0 ] = actualPID
287
293
PACKAGE_DATA_INSERT (cursor , record_PD ) # insert last record
288
294
289
- # integrity optimalization
290
- cursor .execute ('SELECT P_ID FROM PACKAGE WHERE P_ID NOT IN (SELECT P_ID FROM PACKAGE_DATA)' )
291
- tmp_row = cursor .fetchall ()
292
- for row in tmp_row :
293
- cursor .execute ("INSERT INTO PACKAGE_DATA VALUES(null,?,'','','','','')" , (row [0 ],))
294
-
295
295
# save changes
296
296
database .commit ()
297
297
@@ -301,34 +301,46 @@ def bind_repo(cursor, name):
301
301
for row in cursor :
302
302
pid_to_pdid [row [1 ]] = row [0 ]
303
303
304
- obsoleting_pdids = []
304
+ obsoleting_pkgs = []
305
305
306
306
# trans_data construction
307
307
h_cursor .execute ('SELECT tid, pkgtupid, done, state FROM trans_data_pkgs' )
308
308
for row in h_cursor :
309
- data = ['' ] * len (TRANS_DATA )
310
309
state = row [3 ]
311
- pdid = pid_to_pdid .get (int (row [1 ]), 0 )
312
-
313
- # skip empty rows
314
- if not pdid :
315
- continue
310
+ pid = int (row [1 ])
311
+ tid = int (row [0 ])
316
312
317
313
# handle Obsoleting packages - save it as separate attribute
318
314
if state == 'Obsoleting' :
319
- obsoleting_pdids .append (pdid )
315
+ obsoleting_pkgs .append (( tid , pid ) )
320
316
continue
321
317
318
+ data = ['' ] * len (TRANS_DATA )
319
+ pdid = pid_to_pdid .get (pid , 0 )
320
+
321
+ if not pdid :
322
+ # create new entry
323
+ cursor .execute ("INSERT INTO PACKAGE_DATA VALUES (null,?,'','','','','')" , (pid ,))
324
+ cursor .execute ('SELECT last_insert_rowid()' )
325
+ pdid = cursor .fetchone ()[0 ]
326
+ else :
327
+ # use this entry and delete it from the DB
328
+ del pid_to_pdid [pid ]
329
+
322
330
# insert trans_data record
323
331
data [TRANS_DATA .index ('state' )] = bind_state (cursor , state )
324
332
data [TRANS_DATA .index ('PD_ID' )] = pdid
325
333
data [TRANS_DATA .index ('done' )] = 1 if row [2 ] == 'TRUE' else 0
326
334
data [0 ] = row [0 ]
327
335
cursor .execute ('INSERT INTO TRANS_DATA VALUES (null,?,?,?,?,?,?,?)' , data )
328
336
337
+ update_cmd = """UPDATE TRANS_DATA SET obsoleting=1 WHERE TD_ID IN (
338
+ SELECT TD_ID FROM PACKAGE_DATA JOIN TRANS_DATA using (PD_ID)
339
+ WHERE T_ID=? and P_ID=?)"""
340
+
329
341
# set flag for Obsoleting PD_IDs
330
- for pdid in obsoleting_pdids :
331
- cursor .execute ('UPDATE TRANS_DATA SET obsoleting=1 WHERE PD_ID=?' , ( pdid ,) )
342
+ for keys in obsoleting_pkgs :
343
+ cursor .execute (update_cmd , keys )
332
344
333
345
# save changes
334
346
database .commit ()
@@ -374,7 +386,7 @@ def bind_repo(cursor, name):
374
386
cursor .execute ('UPDATE TRANS_DATA SET reason=? WHERE TD_ID=?' , (t_reason , row [0 ]))
375
387
376
388
# fetch additional data from yumdb
377
- get_yumdb_packages (cursor , yumdb_path , pid_to_pdid , bind_repo )
389
+ get_yumdb_packages (cursor , yumdb_path , bind_repo )
378
390
379
391
# contruction of OUTPUT
380
392
h_cursor .execute ('SELECT * FROM trans_script_stdout' )
0 commit comments