1. Enable checkpoint for Pcd of Fdf
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Fri, 14 Mar 2008 06:56:20 +0000 (06:56 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Fri, 14 Mar 2008 06:56:20 +0000 (06:56 +0000)
2. Enable connect to database without init

git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1068 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Common/FdfClassObject.py [new file with mode: 0644]
Source/Python/Common/FdfParserLite.py [moved from Source/Python/Ecc/FdfParser.py with 100% similarity]
Source/Python/Ecc/Check.py
Source/Python/Ecc/Database.py
Source/Python/Ecc/Ecc.py
Source/Python/Table/Table.py
Source/Python/Table/TableFdf.py [new file with mode: 0644]
Source/Python/Table/TableReport.py

diff --git a/Source/Python/Common/FdfClassObject.py b/Source/Python/Common/FdfClassObject.py
new file mode 100644 (file)
index 0000000..e0df1c2
--- /dev/null
@@ -0,0 +1,116 @@
+## @file\r
+# This file is used to define each component of FDF file\r
+#\r
+# Copyright (c) 2008, Intel Corporation\r
+# All rights reserved. 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
+#\r
+\r
+##\r
+# Import Modules\r
+#\r
+from FdfParserLite import FdfParser\r
+from Table.TableFdf import TableFdf\r
+from CommonDataClass.DataClass import MODEL_FILE_FDF, MODEL_PCD, MODEL_META_DATA_COMPONENT\r
+from String import NormPath\r
+\r
+## FdfObject\r
+#\r
+# This class defined basic Fdf object which is used by inheriting\r
+# \r
+# @param object:       Inherited from object class\r
+#\r
+class FdfObject(object):\r
+    def __init__(self):\r
+        object.__init__()\r
+\r
+## Fdf\r
+#\r
+# This class defined the structure used in Fdf object\r
+# \r
+# @param FdfObject:     Inherited from FdfObject class\r
+# @param Filename:      Input value for Ffilename of Fdf file, default is None\r
+# @param WorkspaceDir:  Input value for current workspace directory, default is None\r
+#\r
+class Fdf(FdfObject):\r
+    def __init__(self, Filename = None, IsToDatabase = False, WorkspaceDir = None, Database = None):\r
+        self.WorkspaceDir = WorkspaceDir\r
+        self.IsToDatabase = IsToDatabase\r
+        \r
+        self.Cur = Database.Cur\r
+        self.TblFile = Database.TblFile\r
+        self.TblFdf = Database.TblFdf\r
+        self.FileID = -1\r
+        self.FileList = {}\r
+\r
+        #\r
+        # Load Fdf file if filename is not None\r
+        #\r
+        if Filename != None:\r
+            self.LoadFdfFile(Filename)\r
+\r
+    #\r
+    # Insert a FDF file record into database\r
+    #\r
+    def InsertFile(self, Filename):\r
+        FileID = -1\r
+        Filename = NormPath(Filename)\r
+        if Filename not in self.FileList:\r
+            FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_FDF)\r
+            self.FileList[Filename] = FileID\r
+\r
+        return self.FileList[Filename]\r
+            \r
+    \r
+    ## Load Fdf file\r
+    #\r
+    # Load the file if it exists\r
+    #\r
+    # @param Filename:  Input value for filename of Fdf file\r
+    #\r
+    def LoadFdfFile(self, Filename):     \r
+        FileList = []\r
+        #\r
+        # Parse Fdf file\r
+        #\r
+        Filename = NormPath(Filename)\r
+        Fdf = FdfParser(Filename)\r
+        Fdf.ParseFile()\r
+\r
+        #\r
+        # Insert inf file and pcd information\r
+        #\r
+        if self.IsToDatabase:\r
+            (Model, Value1, Value2, Value3, Arch, BelongsToItem, BelongsToFile, StartLine, StartColumn, EndLine, EndColumn, Enabled) = \\r
+            (0, '', '', '', 'COMMON', -1, -1, -1, -1, -1, -1, 0)\r
+            for Index in range(0, len(Fdf.Profile.PcdDict)):\r
+                pass\r
+            for Key in Fdf.Profile.PcdDict.keys():\r
+                Model = MODEL_PCD\r
+                Value1 = ''\r
+                Value2 = ".".join((Key[1], Key[0]))\r
+                FileName = Fdf.Profile.PcdFileLineDict[Key][0]\r
+                StartLine = Fdf.Profile.PcdFileLineDict[Key][1]\r
+                BelongsToFile = self.InsertFile(FileName)\r
+                self.TblFdf.Insert(Model, Value1, Value2, Value3, Arch, BelongsToItem, BelongsToFile, StartLine, StartColumn, EndLine, EndColumn, Enabled)\r
+            for Index in range(0, len(Fdf.Profile.InfList)):\r
+                Model = MODEL_META_DATA_COMPONENT\r
+                Value1 = Fdf.Profile.InfList[Index]\r
+                Value2 = ''\r
+                FileName = Fdf.Profile.InfFileLineList[Index][0]\r
+                StartLine = Fdf.Profile.InfFileLineList[Index][1]\r
+                BelongsToFile = self.InsertFile(FileName)\r
+                self.TblFdf.Insert(Model, Value1, Value2, Value3, Arch, BelongsToItem, BelongsToFile, StartLine, StartColumn, EndLine, EndColumn, Enabled)\r
+\r
+##\r
+#\r
+# This acts like the main() function for the script, unless it is 'import'ed into another\r
+# script.\r
+#\r
+if __name__ == '__main__':\r
+    pass\r
index 4c74220..d94e894 100644 (file)
@@ -10,7 +10,7 @@
 # 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
 #\r
-\r
+import os\r
 from CommonDataClass.DataClass import *\r
 from EccToolError import *\r
 import EccGlobalData\r
@@ -30,6 +30,53 @@ class Check(object):
     #   \r
     def Check(self):\r
         self.MetaDataFileCheck()\r
+        self.DoxygenCheck()\r
+    \r
+    #\r
+    # Doxygen document checking\r
+    #\r
+    def DoxygenCheck(self):\r
+        self.DoxygenCheckFileHeader()\r
+        self.DoxygenCheckFunctionHeader()\r
+        self.DoxygenCheckCommentDescription()\r
+        self.DoxygenCheckCommentFormat()\r
+        self.DoxygenCheckCommand()\r
+    \r
+    #\r
+    # Check whether the file headers are followed Doxygen special documentation blocks in section 2.3.5\r
+    #\r
+    def DoxygenCheckFileHeader(self):\r
+        if EccGlobalData.gConfig.DoxygenCheckFileHeader == '1' or EccGlobalData.gConfig.DoxygenCheckAll == '1':\r
+            pass\r
+    \r
+    #\r
+    # Check whether the function headers are followed Doxygen special documentation blocks in section 2.3.5\r
+    #\r
+    def DoxygenCheckFunctionHeader(self):\r
+        if EccGlobalData.gConfig.DoxygenCheckFunctionHeader == '1' or EccGlobalData.gConfig.DoxygenCheckAll == '1':\r
+            pass\r
+    \r
+    #\r
+    # Check whether the first line of text in a comment block is a brief description of the element being documented. \r
+    # The brief description must end with a period.\r
+    #\r
+    def DoxygenCheckCommentDescription(self):\r
+        if EccGlobalData.gConfig.DoxygenCheckCommentDescription == '1' or EccGlobalData.gConfig.DoxygenCheckAll == '1':\r
+            pass\r
+\r
+    #\r
+    # Check whether comment lines with '///< ... text ...' format, if it is used, it should be after the code section.\r
+    #\r
+    def DoxygenCheckCommentFormat(self):\r
+        if EccGlobalData.gConfig.DoxygenCheckCommentFormat == '1' or EccGlobalData.gConfig.DoxygenCheckAll == '1':\r
+            pass\r
+        \r
+    #\r
+    # Check whether only Doxygen commands allowed to mark the code are @bug and @todo.\r
+    #\r
+    def DoxygenCheckCommand(self):\r
+        if EccGlobalData.gConfig.DoxygenCheckCommand == '1' or EccGlobalData.gConfig.DoxygenCheckAll == '1':\r
+            pass\r
     \r
     #\r
     # Meta-Data File Processing Checking\r
@@ -52,7 +99,7 @@ class Check(object):
     #\r
     def MetaDataFileCheckPathName(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckPathName == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            # This item is covered when parsing INF/DEC/DSC files\r
+            # This item is covered when parsing Inf/Dec/Dsc files\r
             pass\r
     \r
     #\r
@@ -60,12 +107,12 @@ class Check(object):
     #\r
     def MetaDataFileCheckGenerateFileList(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckGenerateFileList == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            # This item is covered when parsing INF/DEC/DSC files\r
+            # This item is covered when parsing Inf/Dec/Dsc files\r
             pass\r
     \r
     #\r
     # Check whether all Library Instances defined for a given module (or dependent library instance) match the module's type.  \r
-    # Each Library Instance must specify the Supported Module Types in its INF file, \r
+    # Each Library Instance must specify the Supported Module Types in its Inf file, \r
     # and any module specifying the library instance must be one of the supported types.\r
     #\r
     def MetaDataFileCheckLibraryInstance(self):\r
@@ -87,35 +134,69 @@ class Check(object):
             pass\r
 \r
     #\r
-    # Check whether the unnecessary inclusion of library classes in the INF file\r
+    # Check whether the unnecessary inclusion of library classes in the Inf file\r
     #\r
     def MetaDataFileCheckLibraryNoUse(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckLibraryNoUse == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
             pass\r
 \r
     #\r
-    # Check whether an INF file is specified in the FDF file, but not in the DSC file, then the INF file must be for a Binary module only\r
+    # Check whether an Inf file is specified in the FDF file, but not in the Dsc file, then the Inf file must be for a Binary module only\r
     #\r
     def MetaDataFileCheckBinaryInfInFdf(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckBinaryInfInFdf == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            pass\r
+            SqlCommand = """select A.ID, A.Value1 from Fdf as A\r
+                         where A.Model = %s\r
+                         and A.Enabled > -1\r
+                         and A.Value1 not in \r
+                         (select B.Value1 from Dsc as B\r
+                         where B.Model = %s\r
+                         and B.Enabled > -1)""" % (MODEL_META_DATA_COMPONENT, MODEL_META_DATA_COMPONENT)\r
+            RecordSet = EccGlobalData.gDb.TblFdf.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                FdfID = Record[0]\r
+                FilePath = Record[1]\r
+                FilePath = os.path.normpath(os.path.join(EccGlobalData.gWorkspace, FilePath))\r
+                SqlCommand = """select * from Inf where BelongsToFile = (select ID from File where FullPath like '%s')""" % FilePath\r
+                NewRecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
 \r
     #\r
-    # Check whether a PCD is set in a DSC file or the FDF file, but not in both.\r
+    # Check whether a PCD is set in a Dsc file or the FDF file, but not in both.\r
     #\r
     def MetaDataFileCheckPcdDuplicate(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckPcdDuplicate == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            pass\r
+            EdkLogger.quiet("Checking duplicate pcd defined in both Dsc and Fdf files ...")\r
+            SqlCommand = """\r
+                         select A.ID, A.Value2, B.ID, B.Value2 from Dsc as A, Fdf as B \r
+                         where A.Model >= %s and A.Model < %s \r
+                         and B.Model >= %s and B.Model < %s \r
+                         and A.Value2 = B.Value2\r
+                         and A.Enabled > -1\r
+                         and B.Enabled > -1\r
+                         """% (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER)\r
+            RecordSet = EccGlobalData.gDb.TblDsc.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg = "The pcd '%s' is defined in both Fdf file and Dsc file" % (Record[1]), BelongsToTable = 'Dsc', BelongsToItem = Record[0])\r
+                EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg = "The pcd '%s' is defined in both Fdf file and Dsc file" % (Record[3]), BelongsToTable = 'Fdf', BelongsToItem = Record[2])\r
 \r
     #\r
     # Check whether PCD settings in the FDF file can only be related to flash.\r
     #\r
     def MetaDataFileCheckPcdFlash(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckPcdFlash == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            pass\r
+            EdkLogger.quiet("Checking only Flash related Pcd is used in FDF ...")\r
+            SqlCommand = """\r
+                         select ID, Value2, BelongsToFile from Fdf as A\r
+                         where A.Model >= %s and Model < %s\r
+                         and A.Enabled > -1\r
+                         and A.Value2 not like '%%Flash%%'\r
+                         """% (MODEL_PCD, MODEL_META_DATA_HEADER)\r
+            RecordSet = EccGlobalData.gDb.TblFdf.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_FLASH, OtherMsg = "The pcd '%s' defined in Fdf file is not related to Flash" % (Record[1]), BelongsToTable = 'Fdf', BelongsToItem = Record[0])\r
         \r
     #\r
-    # Check whether PCDs used in INF files but not specified in DSC or FDF files\r
+    # Check whether PCDs used in Inf files but not specified in Dsc or FDF files\r
     #\r
     def MetaDataFileCheckPcdNoUse(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckPcdNoUse == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
@@ -127,10 +208,15 @@ class Check(object):
                          and A.Value2 not in \r
                              (select Value2 from Dsc as B \r
                               where B.Model >= %s and B.Model < %s\r
-                              and B.Enabled > -1)""" % (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER)\r
+                              and B.Enabled > -1)\r
+                         and A.Value2 not in\r
+                             (select Value2 from Fdf as C \r
+                              where C.Model >= %s and C.Model < %s\r
+                              and C.Enabled > -1)\r
+                         """% (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER)\r
             RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand)\r
             for Record in RecordSet:\r
-                EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_NO_USE, OtherMsg = "The pcd '%s' defined in INF file is not referenced by any DSC files" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0])\r
+                EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_NO_USE, OtherMsg = "The pcd '%s' defined in Inf file is not referenced by any Dsc of Fdf files" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0])\r
         \r
     #\r
     # Check whether having duplicate guids defined for Guid/Protocol/Ppi\r
index e2727c2..3f21b4d 100644 (file)
@@ -29,6 +29,7 @@ from Table.TableReport import TableReport
 from Table.TableInf import TableInf\r
 from Table.TableDec import TableDec\r
 from Table.TableDsc import TableDsc\r
+from Table.TableFdf import TableFdf\r
 \r
 ##\r
 # Static definitions\r
@@ -50,12 +51,39 @@ DATABASE_PATH = "Database/Ecc.db"
 #\r
 class Database(object):\r
     def __init__(self, DbPath):\r
-        if os.path.exists(DbPath):\r
-            os.remove(DbPath)\r
-        self.Conn = sqlite3.connect(DbPath, isolation_level = 'DEFERRED')\r
+        self.DbPath = DbPath\r
+        self.Conn = None\r
+        self.Cur = None\r
+        self.TblDataModel = None\r
+        self.TblFile = None\r
+        self.TblFunction = None\r
+        self.TblIdentifier = None\r
+        self.TblPcd = None\r
+        self.TblReport = None\r
+        self.TblInf = None\r
+        self.TblDec = None\r
+        self.TblDsc = None\r
+        self.TblFdf = None\r
+    \r
+    ## Initialize ECC database\r
+    #\r
+    # 1. Delete all old existing tables\r
+    # 2. Create new tables\r
+    # 3. Initialize table DataModel\r
+    #\r
+    def InitDatabase(self, NewDatabase = True):\r
+        EdkLogger.verbose("\nInitialize ECC database started ...")\r
+        #\r
+        # Drop all old existing tables\r
+        #\r
+        if NewDatabase:\r
+            if os.path.exists(self.DbPath):\r
+                os.remove(self.DbPath)\r
+        self.Conn = sqlite3.connect(self.DbPath, isolation_level = 'DEFERRED')\r
         self.Conn.execute("PRAGMA page_size=4096")\r
         self.Conn.execute("PRAGMA synchronous=OFF")\r
         self.Cur = self.Conn.cursor()\r
+        \r
         self.TblDataModel = TableDataModel(self.Cur)\r
         self.TblFile = TableFile(self.Cur)\r
         self.TblFunction = TableFunction(self.Cur)\r
@@ -65,41 +93,42 @@ class Database(object):
         self.TblInf = TableInf(self.Cur)\r
         self.TblDec = TableDec(self.Cur)\r
         self.TblDsc = TableDsc(self.Cur)\r
-    \r
-    ## Initialize ECC database\r
-    #\r
-    # 1. Delete all old existing tables\r
-    # 2. Create new tables\r
-    # 3. Initialize table DataModel\r
-    #\r
-    def InitDatabase(self):\r
-        EdkLogger.verbose("\nInitialize ECC database started ...")\r
+        self.TblFdf = TableFdf(self.Cur)\r
+        \r
         #\r
-        # Drop all old existing tables\r
+        # Create new tables\r
         #\r
-#        self.TblDataModel.Drop()\r
-#        self.TblFile.Drop()\r
-#        self.TblFunction.Drop()\r
-#        self.TblPcd.Drop()\r
-#        self.TblIdentifier.Drop()\r
+        if NewDatabase:\r
+            self.TblDataModel.Create()\r
+            self.TblFile.Create()\r
+            self.TblFunction.Create()\r
+            self.TblPcd.Create()\r
+            self.TblReport.Create()\r
+            self.TblInf.Create()\r
+            self.TblDec.Create()\r
+            self.TblDsc.Create()\r
+            self.TblFdf.Create()\r
+            #self.TblIdentifier.Create()\r
         \r
         #\r
-        # Create new tables\r
+        # Init each table's ID\r
         #\r
-        self.TblDataModel.Create()\r
-        self.TblFile.Create()\r
-        self.TblFunction.Create()\r
-        self.TblPcd.Create()\r
-        self.TblReport.Create()\r
-        self.TblInf.Create()\r
-        self.TblDec.Create()\r
-        self.TblDsc.Create()\r
-        #self.TblIdentifier.Create()\r
+        self.TblDataModel.InitID()\r
+        self.TblFile.InitID()\r
+        self.TblFunction.InitID()\r
+        self.TblPcd.InitID()\r
+        self.TblReport.InitID()\r
+        self.TblInf.InitID()\r
+        self.TblDec.InitID()\r
+        self.TblDsc.InitID()\r
+        self.TblFdf.InitID()\r
         \r
         #\r
         # Initialize table DataModel\r
         #\r
-        self.TblDataModel.InitTable()\r
+        if NewDatabase:\r
+            self.TblDataModel.InitTable()\r
+        \r
         EdkLogger.verbose("Initialize ECC database ... DONE!")\r
 \r
     ## Query a table\r
index 5e3a9da..f574e17 100644 (file)
 # Import Modules\r
 #\r
 import os, time, glob\r
-from optparse import OptionParser\r
 import Common.EdkLogger as EdkLogger\r
 import Database\r
+import EccGlobalData\r
+from optparse import OptionParser\r
 from Configuration import Configuration\r
 from Check import Check\r
-import EccGlobalData\r
 from Common.InfClassObject import Inf\r
 from Common.DecClassObject import Dec\r
 from Common.DscClassObject import Dsc\r
+from Common.FdfClassObject import Fdf\r
 from Common.String import NormPath\r
 #import c\r
 \r
@@ -135,6 +136,7 @@ class Ecc(object):
                     Filename = os.path.normpath(os.path.join(Root, File))\r
                     EdkLogger.quiet("Parsing %s" % Filename)\r
                     Op.write("%s\r" % Filename)\r
+                    Fdf(Filename, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)                    \r
                     continue\r
         Op.close()\r
 \r
index 8d8c925..9a9657a 100644 (file)
@@ -96,6 +96,14 @@ class Table(object):
             self.ID = self.ID + 1\r
 \r
         return self.ID\r
+    \r
+    ## Init the ID of the table\r
+    #\r
+    # Init the ID of the table\r
+    #\r
+    def InitID(self):\r
+        self.ID = self.GetCount()\r
+    \r
     ## Exec\r
     #\r
     # Exec Sql Command, return result\r
diff --git a/Source/Python/Table/TableFdf.py b/Source/Python/Table/TableFdf.py
new file mode 100644 (file)
index 0000000..317bd41
--- /dev/null
@@ -0,0 +1,108 @@
+## @file\r
+# This file is used to create/update/query/erase table for fdf datas\r
+#\r
+# Copyright (c) 2008, Intel Corporation\r
+# All rights reserved. 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
+#\r
+\r
+##\r
+# Import Modules\r
+#\r
+import Common.EdkLogger as EdkLogger\r
+import CommonDataClass.DataClass as DataClass\r
+from Table import Table\r
+from Common.String import ConvertToSqlString\r
+\r
+## TableFdf\r
+#\r
+# This class defined a table used for data model\r
+# \r
+# @param object:       Inherited from object class\r
+#\r
+#\r
+class TableFdf(Table):\r
+    def __init__(self, Cursor):\r
+        Table.__init__(self, Cursor)\r
+        self.Table = 'Fdf'\r
+    \r
+    ## Create table\r
+    #\r
+    # Create table Fdf\r
+    #\r
+    # @param ID:             ID of a Fdf item\r
+    # @param Model:          Model of a Fdf item\r
+    # @param Value1:         Value1 of a Fdf item\r
+    # @param Value2:         Value2 of a Fdf item\r
+    # @param Value3:         Value3 of a Fdf item\r
+    # @param Arch:           Arch of a Fdf item\r
+    # @param BelongsToItem:  The item belongs to which another item\r
+    # @param BelongsToFile:  The item belongs to which fdf file\r
+    # @param StartLine:      StartLine of a Fdf item\r
+    # @param StartColumn:    StartColumn of a Fdf item\r
+    # @param EndLine:        EndLine of a Fdf item\r
+    # @param EndColumn:      EndColumn of a Fdf item\r
+    # @param Enabled:        If this item enabled\r
+    #\r
+    def Create(self):\r
+        SqlCommand = """create table IF NOT EXISTS %s (ID INTEGER PRIMARY KEY,\r
+                                                       Model INTEGER NOT NULL,\r
+                                                       Value1 VARCHAR NOT NULL,\r
+                                                       Value2 VARCHAR,\r
+                                                       Value3 VARCHAR,\r
+                                                       Arch VarCHAR,\r
+                                                       BelongsToItem SINGLE NOT NULL,\r
+                                                       BelongsToFile SINGLE NOT NULL,\r
+                                                       StartLine INTEGER NOT NULL,\r
+                                                       StartColumn INTEGER NOT NULL,\r
+                                                       EndLine INTEGER NOT NULL,\r
+                                                       EndColumn INTEGER NOT NULL,\r
+                                                       Enabled INTEGER DEFAULT 0\r
+                                                      )""" % self.Table\r
+        Table.Create(self, SqlCommand)\r
+\r
+    ## Insert table\r
+    #\r
+    # Insert a record into table Fdf\r
+    #\r
+    # @param ID:             ID of a Fdf item\r
+    # @param Model:          Model of a Fdf item\r
+    # @param Value1:         Value1 of a Fdf item\r
+    # @param Value2:         Value2 of a Fdf item\r
+    # @param Value3:         Value3 of a Fdf item\r
+    # @param Arch:           Arch of a Fdf item\r
+    # @param BelongsToItem:  The item belongs to which another item\r
+    # @param BelongsToFile:  The item belongs to which fdf file\r
+    # @param StartLine:      StartLine of a Fdf item\r
+    # @param StartColumn:    StartColumn of a Fdf item\r
+    # @param EndLine:        EndLine of a Fdf item\r
+    # @param EndColumn:      EndColumn of a Fdf item\r
+    # @param Enabled:        If this item enabled\r
+    #\r
+    def Insert(self, Model, Value1, Value2, Value3, Arch, BelongsToItem, BelongsToFile, StartLine, StartColumn, EndLine, EndColumn, Enabled):\r
+        self.ID = self.ID + 1\r
+        (Value1, Value2, Value3, Arch) = ConvertToSqlString((Value1, Value2, Value3, Arch))\r
+        SqlCommand = """insert into %s values(%s, %s, '%s', '%s', '%s', '%s', %s, %s, %s, %s, %s, %s, %s)""" \\r
+                     % (self.Table, self.ID, Model, Value1, Value2, Value3, Arch, BelongsToItem, BelongsToFile, StartLine, StartColumn, EndLine, EndColumn, Enabled)\r
+        Table.Insert(self, SqlCommand)\r
+        \r
+        return self.ID\r
+    \r
+    ## Query table\r
+    #\r
+    # @param Model:  The Model of Record \r
+    #\r
+    # @retval:       A recordSet of all found records \r
+    #\r
+    def Query(self, Model):\r
+        SqlCommand = """select ID, Value1, Value2, Value3, Arch, BelongsToItem, BelongsToFile, StartLine from %s\r
+                        where Model = %s\r
+                        and Enabled > -1""" % (self.Table, Model)\r
+        EdkLogger.debug(4, "SqlCommand: %s" % SqlCommand)\r
+        self.Cur.execute(SqlCommand)\r
+        return self.Cur.fetchall()\r
index 6ea158a..ab49694 100644 (file)
@@ -18,8 +18,8 @@ import Common.EdkLogger as EdkLogger
 import os\r
 from Table import Table\r
 from Common.String import ConvertToSqlString2\r
-import EccToolError\r
-import EccGlobalData\r
+import EccToolError as EccToolError\r
+import EccGlobalData as EccGlobalData\r
 \r
 ## TableReport\r
 #\r