## @file\r
# This file is used to create/update/query/erase table for files\r
#\r
-# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution. The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
#\r
\r
##\r
\r
## Convert to SQL required string format\r
def ConvertToSqlString(StringList):\r
- return map(lambda s: "'" + s.replace("'", "''") + "'", StringList)\r
+ return list(map(lambda s: "'" + s.replace("'", "''") + "'", StringList))\r
\r
## TableFile\r
#\r
_ID_MAX_ = 0x80000000\r
_DUMMY_ = 0\r
\r
- def __init__(self, Cursor, Name='', IdBase=0, Temporary=False):\r
- self.Cur = Cursor\r
+ def __init__(self, Db, Name='', IdBase=0, Temporary=False):\r
+ self.Db = Db\r
self.Table = Name\r
self.IdBase = int(IdBase)\r
self.ID = int(IdBase)\r
self.Temporary = Temporary\r
+ self.Contents = []\r
\r
def __str__(self):\r
return self.Table\r
# Create a table\r
#\r
def Create(self, NewTable=True):\r
- if NewTable:\r
- self.Drop()\r
-\r
- if self.Temporary:\r
- SqlCommand = """create temp table IF NOT EXISTS %s (%s)""" % (self.Table, self._COLUMN_)\r
- else:\r
- SqlCommand = """create table IF NOT EXISTS %s (%s)""" % (self.Table, self._COLUMN_)\r
- EdkLogger.debug(EdkLogger.DEBUG_8, SqlCommand)\r
- self.Cur.execute(SqlCommand)\r
+ self.Db.CreateEmptyTable(self.Table)\r
self.ID = self.GetId()\r
\r
## Insert table\r
self.ID = self.ID + self._ID_STEP_\r
if self.ID >= (self.IdBase + self._ID_MAX_):\r
self.ID = self.IdBase + self._ID_STEP_\r
- Values = ", ".join([str(Arg) for Arg in Args])\r
- SqlCommand = "insert into %s values(%s, %s)" % (self.Table, self.ID, Values)\r
- EdkLogger.debug(EdkLogger.DEBUG_5, SqlCommand)\r
- self.Cur.execute(SqlCommand)\r
+ row = [self.ID]\r
+ row.extend(Args)\r
+ self.Contents.append(row)\r
+\r
return self.ID\r
\r
- ## Query table\r
- #\r
- # Query all records of the table\r
- #\r
- def Query(self):\r
- SqlCommand = """select * from %s""" % self.Table\r
- self.Cur.execute(SqlCommand)\r
- for Rs in self.Cur:\r
- EdkLogger.verbose(str(Rs))\r
- TotalCount = self.GetId()\r
-\r
- ## Drop a table\r
- #\r
- # Drop the table\r
- #\r
- def Drop(self):\r
- SqlCommand = """drop table IF EXISTS %s""" % self.Table\r
- self.Cur.execute(SqlCommand)\r
\r
## Get count\r
#\r
# @retval Count: Total count of all records\r
#\r
def GetCount(self):\r
- SqlCommand = """select count(ID) from %s""" % self.Table\r
- Record = self.Cur.execute(SqlCommand).fetchall()\r
- return Record[0][0]\r
+ tab = self.Db.GetTable(self.Table)\r
+ return len(tab)\r
+\r
\r
def GetId(self):\r
- SqlCommand = """select max(ID) from %s""" % self.Table\r
- Record = self.Cur.execute(SqlCommand).fetchall()\r
- Id = Record[0][0]\r
- if Id == None:\r
+ tab = self.Db.GetTable(self.Table)\r
+ Id = max([int(item[0]) for item in tab])\r
+ if Id is None:\r
Id = self.IdBase\r
return Id\r
\r
#\r
def Exec(self, SqlCommand):\r
EdkLogger.debug(EdkLogger.DEBUG_5, SqlCommand)\r
- self.Cur.execute(SqlCommand)\r
- RecordSet = self.Cur.fetchall()\r
+ self.Db.execute(SqlCommand)\r
+ RecordSet = self.Db.fetchall()\r
return RecordSet\r
\r
def SetEndFlag(self):\r
- self.Exec("insert into %s values(%s)" % (self.Table, self._DUMMY_))\r
- #\r
- # Need to execution commit for table data changed.\r
- #\r
- self.Cur.connection.commit()\r
+ Tab = self.Db.GetTable(self.Table)\r
+ Tab.append(self._DUMMY_)\r
+\r
\r
def IsIntegral(self):\r
- Result = self.Exec("select min(ID) from %s" % (self.Table))\r
- if Result[0][0] != -1:\r
+ tab = self.Db.GetTable(self.Table)\r
+ Id = min([int(item[0]) for item in tab])\r
+ if Id != -1:\r
return False\r
return True\r
\r
def GetAll(self):\r
- return self.Exec("select * from %s where ID > 0 order by ID" % (self.Table))\r
+ tab = self.Db.GetTable(self.Table)\r
+ return tab\r
+\r
\r
## TableFile\r
#\r
Path VARCHAR,\r
FullPath VARCHAR NOT NULL,\r
Model INTEGER DEFAULT 0,\r
- TimeStamp SINGLE NOT NULL\r
+ TimeStamp SINGLE NOT NULL,\r
+ FromItem REAL NOT NULL\r
'''\r
def __init__(self, Cursor):\r
Table.__init__(self, Cursor, 'File')\r
# @param Model: Model of a File\r
# @param TimeStamp: TimeStamp of a File\r
#\r
- def Insert(self, Name, ExtName, Path, FullPath, Model, TimeStamp):\r
+ def Insert(self, Name, ExtName, Path, FullPath, Model, TimeStamp, FromItem=0):\r
(Name, ExtName, Path, FullPath) = ConvertToSqlString((Name, ExtName, Path, FullPath))\r
return Table.Insert(\r
self,\r
Path,\r
FullPath,\r
Model,\r
- TimeStamp\r
+ TimeStamp,\r
+ FromItem\r
)\r
\r
## InsertFile\r
#\r
# @retval FileID: The ID after record is inserted\r
#\r
- def InsertFile(self, File, Model):\r
+ def InsertFile(self, File, Model, FromItem=''):\r
+ if FromItem:\r
+ return self.Insert(\r
+ File.Name,\r
+ File.Ext,\r
+ File.Dir,\r
+ File.Path,\r
+ Model,\r
+ File.TimeStamp,\r
+ FromItem\r
+ )\r
return self.Insert(\r
File.Name,\r
File.Ext,\r
File.TimeStamp\r
)\r
\r
- ## Get ID of a given file\r
- #\r
- # @param FilePath Path of file\r
- #\r
- # @retval ID ID value of given file in the table\r
- #\r
- def GetFileId(self, File):\r
- QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, str(File))\r
- RecordList = self.Exec(QueryScript)\r
- if len(RecordList) == 0:\r
- return None\r
- return RecordList[0][0]\r
-\r
## Get type of a given file\r
#\r
# @param FileId ID of a file\r
def InitTable(self):\r
EdkLogger.verbose("\nInitialize table DataModel started ...")\r
Count = self.GetCount()\r
- if Count != None and Count != 0:\r
+ if Count is not None and Count != 0:\r
return\r
for Item in DataClass.MODEL_LIST:\r
CrossIndex = Item[1]\r
def GetCrossIndex(self, ModelName):\r
CrossIndex = -1\r
SqlCommand = """select CrossIndex from DataModel where name = '""" + ModelName + """'"""\r
- self.Cur.execute(SqlCommand)\r
- for Item in self.Cur:\r
+ self.Db.execute(SqlCommand)\r
+ for Item in self.Db:\r
CrossIndex = Item[0]\r
\r
return CrossIndex\r