summaryrefslogtreecommitdiffstats
path: root/BaseTools/Source/Python/Workspace
diff options
context:
space:
mode:
Diffstat (limited to 'BaseTools/Source/Python/Workspace')
-rw-r--r--BaseTools/Source/Python/Workspace/MetaDataTable.py27
-rw-r--r--BaseTools/Source/Python/Workspace/MetaFileParser.py4
-rw-r--r--BaseTools/Source/Python/Workspace/MetaFileTable.py14
3 files changed, 31 insertions, 14 deletions
diff --git a/BaseTools/Source/Python/Workspace/MetaDataTable.py b/BaseTools/Source/Python/Workspace/MetaDataTable.py
index e37a10c82f..bd751eadfb 100644
--- a/BaseTools/Source/Python/Workspace/MetaDataTable.py
+++ b/BaseTools/Source/Python/Workspace/MetaDataTable.py
@@ -168,7 +168,8 @@ class TableFile(Table):
Path VARCHAR,
FullPath VARCHAR NOT NULL,
Model INTEGER DEFAULT 0,
- TimeStamp SINGLE NOT NULL
+ TimeStamp SINGLE NOT NULL,
+ FromItem REAL NOT NULL
'''
def __init__(self, Cursor):
Table.__init__(self, Cursor, 'File')
@@ -184,7 +185,7 @@ class TableFile(Table):
# @param Model: Model of a File
# @param TimeStamp: TimeStamp of a File
#
- def Insert(self, Name, ExtName, Path, FullPath, Model, TimeStamp):
+ def Insert(self, Name, ExtName, Path, FullPath, Model, TimeStamp, FromItem=0):
(Name, ExtName, Path, FullPath) = ConvertToSqlString((Name, ExtName, Path, FullPath))
return Table.Insert(
self,
@@ -193,7 +194,8 @@ class TableFile(Table):
Path,
FullPath,
Model,
- TimeStamp
+ TimeStamp,
+ FromItem
)
## InsertFile
@@ -205,7 +207,17 @@ class TableFile(Table):
#
# @retval FileID: The ID after record is inserted
#
- def InsertFile(self, File, Model):
+ def InsertFile(self, File, Model, FromItem=''):
+ if FromItem:
+ return self.Insert(
+ File.Name,
+ File.Ext,
+ File.Dir,
+ File.Path,
+ Model,
+ File.TimeStamp,
+ FromItem
+ )
return self.Insert(
File.Name,
File.Ext,
@@ -221,8 +233,11 @@ class TableFile(Table):
#
# @retval ID ID value of given file in the table
#
- def GetFileId(self, File):
- QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, str(File))
+ def GetFileId(self, File, FromItem=None):
+ if FromItem:
+ QueryScript = "select ID from %s where FullPath = '%s' and FromItem = %s" % (self.Table, str(File), str(FromItem))
+ else:
+ QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, str(File))
RecordList = self.Exec(QueryScript)
if len(RecordList) == 0:
return None
diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py
index f089758fe6..f35778d18a 100644
--- a/BaseTools/Source/Python/Workspace/MetaFileParser.py
+++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py
@@ -886,7 +886,7 @@ class DscParser(MetaFileParser):
#
def __init__(self, FilePath, FileType, Arch, Table, Owner= -1, From= -1):
# prevent re-initialization
- if hasattr(self, "_Table"):
+ if hasattr(self, "_Table") and self._Table is Table:
return
MetaFileParser.__init__(self, FilePath, FileType, Arch, Table, Owner, From)
self._Version = 0x00010005 # Only EDK2 dsc file is supported
@@ -1557,12 +1557,12 @@ class DscParser(MetaFileParser):
self._FileWithError = IncludedFile1
- IncludedFileTable = MetaFileStorage(self._Table.Cur, IncludedFile1, MODEL_FILE_DSC, False)
FromItem = self._Content[self._ContentIndex - 1][0]
if self._InSubsection:
Owner = self._Content[self._ContentIndex - 1][8]
else:
Owner = self._Content[self._ContentIndex - 1][0]
+ IncludedFileTable = MetaFileStorage(self._Table.Cur, IncludedFile1, MODEL_FILE_DSC, False, FromItem=FromItem)
Parser = DscParser(IncludedFile1, self._FileType, self._Arch, IncludedFileTable,
Owner=Owner, From=FromItem)
diff --git a/BaseTools/Source/Python/Workspace/MetaFileTable.py b/BaseTools/Source/Python/Workspace/MetaFileTable.py
index 69b2c40e7f..f528c1ee66 100644
--- a/BaseTools/Source/Python/Workspace/MetaFileTable.py
+++ b/BaseTools/Source/Python/Workspace/MetaFileTable.py
@@ -31,15 +31,15 @@ class MetaFileTable(Table):
_ID_MAX_ = 0.99999999
## Constructor
- def __init__(self, Cursor, MetaFile, FileType, Temporary):
+ def __init__(self, Cursor, MetaFile, FileType, Temporary, FromItem=None):
self.MetaFile = MetaFile
self._FileIndexTable = TableFile(Cursor)
self._FileIndexTable.Create(False)
- FileId = self._FileIndexTable.GetFileId(MetaFile)
+ FileId = self._FileIndexTable.GetFileId(MetaFile, FromItem)
if not FileId:
- FileId = self._FileIndexTable.InsertFile(MetaFile, FileType)
+ FileId = self._FileIndexTable.InsertFile(MetaFile, FileType, FromItem)
if Temporary:
TableName = "_%s_%s_%s" % (FileType, FileId, uuid.uuid4().hex)
@@ -285,8 +285,8 @@ class PlatformTable(MetaFileTable):
_DUMMY_ = "-1, -1, '====', '====', '====', '====', '====','====', -1, -1, -1, -1, -1, -1, -1"
## Constructor
- def __init__(self, Cursor, MetaFile, Temporary):
- MetaFileTable.__init__(self, Cursor, MetaFile, MODEL_FILE_DSC, Temporary)
+ def __init__(self, Cursor, MetaFile, Temporary, FromItem=0):
+ MetaFileTable.__init__(self, Cursor, MetaFile, MODEL_FILE_DSC, Temporary, FromItem)
## Insert table
#
@@ -379,7 +379,7 @@ class MetaFileStorage(object):
}
## Constructor
- def __new__(Class, Cursor, MetaFile, FileType=None, Temporary=False):
+ def __new__(Class, Cursor, MetaFile, FileType=None, Temporary=False, FromItem=None):
# no type given, try to find one
if not FileType:
if MetaFile.Type in self._FILE_TYPE_:
@@ -392,6 +392,8 @@ class MetaFileStorage(object):
Args = (Cursor, MetaFile, FileType, Temporary)
else:
Args = (Cursor, MetaFile, Temporary)
+ if FromItem:
+ Args = Args + (FromItem,)
# create the storage object and return it to caller
return Class._FILE_TABLE_[FileType](*Args)