]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/MetaDataTable.py
BaseTools: Replace the sqlite database with list
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / MetaDataTable.py
index bd751eadfbc58591750ab28a2426428f538d7bf9..8becddbe0849a7b0793dd626c735d770d35cda4b 100644 (file)
@@ -39,12 +39,13 @@ class Table(object):
     _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
@@ -54,15 +55,7 @@ class Table(object):
     # 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
@@ -73,30 +66,12 @@ class Table(object):
         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
-        return self.ID\r
+        row = [self.ID]\r
+        row.extend(Args)\r
+        self.Contents.append(row)\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
+        return self.ID\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
@@ -105,14 +80,13 @@ class Table(object):
     # @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
+        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
@@ -134,25 +108,26 @@ class Table(object):
     #\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
@@ -227,22 +202,6 @@ class TableFile(Table):
                         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, FromItem=None):\r
-        if FromItem:\r
-            QueryScript = "select ID from %s where FullPath = '%s' and FromItem = %s" % (self.Table, str(File), str(FromItem))\r
-        else:\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
@@ -345,8 +304,8 @@ class TableDataModel(Table):
     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