X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FWorkspace%2FMetaFileTable.py;fp=BaseTools%2FSource%2FPython%2FWorkspace%2FMetaFileTable.py;h=004e9494c3a0b77545d651da725525d4c6f55734;hb=643556fc484397364f92fcfe7aed8abe1c082de0;hp=081970dba8eeb4c4e904db237c3fba6ff899bc99;hpb=4c6e6f9f75a7b86d7760f5409a24b3c20759ccb9;p=mirror_edk2.git diff --git a/BaseTools/Source/Python/Workspace/MetaFileTable.py b/BaseTools/Source/Python/Workspace/MetaFileTable.py index 081970dba8..004e9494c3 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileTable.py +++ b/BaseTools/Source/Python/Workspace/MetaFileTable.py @@ -26,8 +26,8 @@ from Common.DataType import * class MetaFileTable(): # TRICK: use file ID as the part before '.' - _ID_STEP_ = 0.00000001 - _ID_MAX_ = 0.99999999 + _ID_STEP_ = 1 + _ID_MAX_ = 99999999 ## Constructor def __init__(self, DB, MetaFile, FileType, Temporary, FromItem=None): @@ -35,8 +35,7 @@ class MetaFileTable(): self.TableName = "" self.DB = DB self._NumpyTab = None - self.FileId = len(DB.TblFile) - self.ID = self.FileId + self.CurrentContent = [] DB.TblFile.append([MetaFile.Name, MetaFile.Ext, @@ -45,6 +44,8 @@ class MetaFileTable(): FileType, MetaFile.TimeStamp, FromItem]) + self.FileId = len(DB.TblFile) + self.ID = self.FileId * 10**8 if Temporary: self.TableName = "_%s_%s_%s" % (FileType, len(DB.TblFile), uuid.uuid4().hex) else: @@ -53,7 +54,10 @@ class MetaFileTable(): def IsIntegrity(self): try: TimeStamp = self.MetaFile.TimeStamp - Result = int(self.CurrentContent[-1][0]) < 0 + if not self.CurrentContent: + Result = False + else: + Result = self.CurrentContent[-1][0] < 0 if not Result: # update the timestamp in database self.DB.SetFileTimeStamp(self.FileId, TimeStamp) @@ -72,12 +76,10 @@ class MetaFileTable(): self.CurrentContent.append(self._DUMMY_) def GetAll(self): - return [item for item in self.CurrentContent if item[0] > 0 ] + return [item for item in self.CurrentContent if item[0] >= 0 ] ## Python class representation of table storing module data class ModuleTable(MetaFileTable): - _ID_STEP_ = 0.00000001 - _ID_MAX_ = 0.99999999 _COLUMN_ = ''' ID REAL PRIMARY KEY, Model INTEGER NOT NULL, @@ -140,7 +142,6 @@ class ModuleTable(MetaFileTable): self.CurrentContent.append(row) return self.ID - ## Query table # # @param Model: The Model of Record @@ -215,8 +216,6 @@ class PackageTable(MetaFileTable): BelongsToItem=-1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=0): (Value1, Value2, Value3, Scope1, Scope2) = (Value1.strip(), Value2.strip(), Value3.strip(), Scope1.strip(), Scope2.strip()) self.ID = self.ID + self._ID_STEP_ - if self.ID >= (MODEL_FILE_INF + self._ID_MAX_): - self.ID = MODEL_FILE_INF + self._ID_STEP_ row = [ self.ID, Model, @@ -290,6 +289,7 @@ class PackageTable(MetaFileTable): ExtraData=oricomment, File=self.MetaFile, Line=LineNum) return set(), set(), set() return set(validateranges), set(validlists), set(expressions) + ## Python class representation of table storing platform data class PlatformTable(MetaFileTable): _COLUMN_ = ''' @@ -338,8 +338,6 @@ class PlatformTable(MetaFileTable): FromItem=-1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=1): (Value1, Value2, Value3, Scope1, Scope2, Scope3) = (Value1.strip(), Value2.strip(), Value3.strip(), Scope1.strip(), Scope2.strip(), Scope3.strip()) self.ID = self.ID + self._ID_STEP_ - if self.ID >= (MODEL_FILE_INF + self._ID_MAX_): - self.ID = MODEL_FILE_INF + self._ID_STEP_ row = [ self.ID, Model, @@ -414,10 +412,13 @@ class MetaFileStorage(object): ".dec" : MODEL_FILE_DEC, ".dsc" : MODEL_FILE_DSC, } - + _ObjectCache = {} ## Constructor def __new__(Class, Cursor, MetaFile, FileType=None, Temporary=False, FromItem=None): # no type given, try to find one + key = (MetaFile.Path, FileType,Temporary,FromItem) + if key in Class._ObjectCache: + return Class._ObjectCache[key] if not FileType: if MetaFile.Type in self._FILE_TYPE_: FileType = Class._FILE_TYPE_[MetaFile.Type] @@ -433,5 +434,8 @@ class MetaFileStorage(object): Args = Args + (FromItem,) # create the storage object and return it to caller - return Class._FILE_TABLE_[FileType](*Args) + reval = Class._FILE_TABLE_[FileType](*Args) + if not Temporary: + Class._ObjectCache[key] = reval + return reval