Sync BaseTools Trunk (version r2387) to EDKII main trunk.

Signed-off-by: lgao4
Reviewed-by: gikidy

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12602 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4
2011-10-29 06:59:30 +00:00
parent 421fb3b504
commit 0d2711a693
80 changed files with 5138 additions and 4325 deletions

View File

@ -140,6 +140,10 @@ class Table(object):
def SetEndFlag(self):
self.Exec("insert into %s values(%s)" % (self.Table, self._DUMMY_))
#
# Need to execution commit for table data changed.
#
self.Cur.connection.commit()
def IsIntegral(self):
Result = self.Exec("select min(ID) from %s" % (self.Table))
@ -147,6 +151,9 @@ class Table(object):
return False
return True
def GetAll(self):
return self.Exec("select * from %s where ID > 0 order by ID" % (self.Table))
## TableFile
#
# This class defined a table used for file
@ -198,19 +205,15 @@ class TableFile(Table):
#
# @retval FileID: The ID after record is inserted
#
def InsertFile(self, FileFullPath, Model):
(Filepath, Name) = os.path.split(FileFullPath)
(Root, Ext) = os.path.splitext(FileFullPath)
TimeStamp = os.stat(FileFullPath)[8]
File = FileClass(-1, Name, Ext, Filepath, FileFullPath, Model, '', [], [], [])
def InsertFile(self, File, Model):
return self.Insert(
Name,
Ext,
Filepath,
FileFullPath,
Model,
TimeStamp
)
File.Name,
File.Ext,
File.Dir,
File.Path,
Model,
File.TimeStamp
)
## Get ID of a given file
#
@ -218,8 +221,8 @@ class TableFile(Table):
#
# @retval ID ID value of given file in the table
#
def GetFileId(self, FilePath):
QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, FilePath)
def GetFileId(self, File):
QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, str(File))
RecordList = self.Exec(QueryScript)
if len(RecordList) == 0:
return None

File diff suppressed because it is too large Load Diff

View File

@ -14,13 +14,58 @@
##
# Import Modules
#
import uuid
import Common.EdkLogger as EdkLogger
from MetaDataTable import Table
from MetaDataTable import Table, TableFile
from MetaDataTable import ConvertToSqlString
from CommonDataClass.DataClass import MODEL_FILE_DSC, MODEL_FILE_DEC, MODEL_FILE_INF, \
MODEL_FILE_OTHERS
class MetaFileTable(Table):
# TRICK: use file ID as the part before '.'
_ID_STEP_ = 0.00000001
_ID_MAX_ = 0.99999999
## Constructor
def __init__(self, Cursor, MetaFile, FileType, Temporary):
self.MetaFile = MetaFile
self._FileIndexTable = TableFile(Cursor)
self._FileIndexTable.Create(False)
FileId = self._FileIndexTable.GetFileId(MetaFile)
if not FileId:
FileId = self._FileIndexTable.InsertFile(MetaFile, FileType)
if Temporary:
TableName = "_%s_%s_%s" % (FileType, FileId, uuid.uuid4().hex)
else:
TableName = "_%s_%s" % (FileType, FileId)
#Table.__init__(self, Cursor, TableName, FileId, False)
Table.__init__(self, Cursor, TableName, FileId, Temporary)
self.Create(not self.IsIntegrity())
def IsIntegrity(self):
try:
Result = self.Cur.execute("select ID from %s where ID<0" % (self.Table)).fetchall()
if not Result:
return False
TimeStamp = self.MetaFile.TimeStamp
if TimeStamp != self._FileIndexTable.GetFileTimeStamp(self.IdBase):
# update the timestamp in database
self._FileIndexTable.SetFileTimeStamp(self.IdBase, TimeStamp)
return False
except Exception, Exc:
EdkLogger.debug(EdkLogger.DEBUG_5, str(Exc))
return False
return True
## Python class representation of table storing module data
class ModuleTable(Table):
# TRICK: use file ID as the part before '.'
class ModuleTable(MetaFileTable):
_ID_STEP_ = 0.00000001
_ID_MAX_ = 0.99999999
_COLUMN_ = '''
@ -42,8 +87,8 @@ class ModuleTable(Table):
_DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1"
## Constructor
def __init__(self, Cursor, Name='Inf', IdBase=0, Temporary=False):
Table.__init__(self, Cursor, Name, IdBase, Temporary)
def __init__(self, Cursor, MetaFile, Temporary):
MetaFileTable.__init__(self, Cursor, MetaFile, MODEL_FILE_INF, Temporary)
## Insert a record into table Inf
#
@ -100,9 +145,7 @@ class ModuleTable(Table):
return self.Exec(SqlCommand)
## Python class representation of table storing package data
class PackageTable(Table):
_ID_STEP_ = 0.00000001
_ID_MAX_ = 0.99999999
class PackageTable(MetaFileTable):
_COLUMN_ = '''
ID REAL PRIMARY KEY,
Model INTEGER NOT NULL,
@ -122,8 +165,8 @@ class PackageTable(Table):
_DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1"
## Constructor
def __init__(self, Cursor, Name='Dec', IdBase=0, Temporary=False):
Table.__init__(self, Cursor, Name, IdBase, Temporary)
def __init__(self, Cursor, MetaFile, Temporary):
MetaFileTable.__init__(self, Cursor, MetaFile, MODEL_FILE_DEC, Temporary)
## Insert table
#
@ -179,9 +222,7 @@ class PackageTable(Table):
return self.Exec(SqlCommand)
## Python class representation of table storing platform data
class PlatformTable(Table):
_ID_STEP_ = 0.00000001
_ID_MAX_ = 0.99999999
class PlatformTable(MetaFileTable):
_COLUMN_ = '''
ID REAL PRIMARY KEY,
Model INTEGER NOT NULL,
@ -202,8 +243,8 @@ class PlatformTable(Table):
_DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1, -1"
## Constructor
def __init__(self, Cursor, Name='Dsc', IdBase=0, Temporary=False):
Table.__init__(self, Cursor, Name, IdBase, Temporary)
def __init__(self, Cursor, MetaFile, Temporary):
MetaFileTable.__init__(self, Cursor, MetaFile, MODEL_FILE_DSC, Temporary)
## Insert table
#
@ -254,7 +295,7 @@ class PlatformTable(Table):
# @retval: A recordSet of all found records
#
def Query(self, Model, Scope1=None, Scope2=None, BelongsToItem=None, FromItem=None):
ConditionString = "Model=%s AND Enabled>=0" % Model
ConditionString = "Model=%s AND Enabled>0" % Model
ValueString = "Value1,Value2,Value3,Scope1,Scope2,ID,StartLine"
if Scope1 != None and Scope1 != 'COMMON':
@ -273,3 +314,36 @@ class PlatformTable(Table):
SqlCommand = "SELECT %s FROM %s WHERE %s" % (ValueString, self.Table, ConditionString)
return self.Exec(SqlCommand)
## Factory class to produce different storage for different type of meta-file
class MetaFileStorage(object):
_FILE_TABLE_ = {
MODEL_FILE_INF : ModuleTable,
MODEL_FILE_DEC : PackageTable,
MODEL_FILE_DSC : PlatformTable,
MODEL_FILE_OTHERS : MetaFileTable,
}
_FILE_TYPE_ = {
".inf" : MODEL_FILE_INF,
".dec" : MODEL_FILE_DEC,
".dsc" : MODEL_FILE_DSC,
}
## Constructor
def __new__(Class, Cursor, MetaFile, FileType=None, Temporary=False):
# no type given, try to find one
if not FileType:
if MetaFile.Type in self._FILE_TYPE_:
FileType = Class._FILE_TYPE_[MetaFile.Type]
else:
FileType = MODEL_FILE_OTHERS
# don't pass the type around if it's well known
if FileType == MODEL_FILE_OTHERS:
Args = (Cursor, MetaFile, FileType, Temporary)
else:
Args = (Cursor, MetaFile, Temporary)
# create the storage object and return it to caller
return Class._FILE_TABLE_[FileType](*Args)

File diff suppressed because it is too large Load Diff