1. Add a table class for report
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 11 Mar 2008 05:46:23 +0000 (05:46 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 11 Mar 2008 05:46:23 +0000 (05:46 +0000)
2. Add a class for ecc tool error code
3. Adjust the database init statement in ecc main entrance
4. Fix some invalid chars in config.ini

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

Source/Python/Ecc/Ecc.py
Source/Python/Ecc/EccGlobalData.py
Source/Python/Ecc/EccToolError.py [new file with mode: 0644]
Source/Python/Ecc/c.py
Source/Python/Ecc/config.ini
Source/Python/Table/TableReport.py [new file with mode: 0644]

index d88dcdc..723afff 100644 (file)
 import os\r
 from optparse import OptionParser\r
 import Common.EdkLogger as EdkLogger\r
+import Database\r
 from Configuration import Configuration\r
 from Check import Check\r
 import EccGlobalData\r
 import time\r
-import c\r
+#import c\r
 \r
 ## Ecc\r
 #\r
@@ -69,6 +70,11 @@ class Ecc(object):
         # Show report\r
         #\r
         self.GenReport()\r
+        \r
+        #\r
+        # Close Database\r
+        #\r
+        EccGlobalData.gDb.Close()\r
 \r
     ##\r
     #\r
@@ -76,7 +82,9 @@ class Ecc(object):
     #\r
     def BuildDatabase(self):\r
         EdkLogger.quiet("Parsing target ...")\r
-        c.CollectSourceCodeDataIntoDB(EccGlobalData.gTarget)\r
+        EccGlobalData.gDb = Database.Database(Database.DATABASE_PATH)\r
+        EccGlobalData.gDb.InitDatabase()\r
+        #c.CollectSourceCodeDataIntoDB(EccGlobalData.gTarget)\r
         EdkLogger.quiet("Parsing target done!")\r
 \r
     ##\r
index 1d7bb4f..b6fa839 100644 (file)
@@ -18,4 +18,5 @@ import os
 \r
 gWorkspace = ''\r
 gTarget = ''\r
-gConfig = None
\ No newline at end of file
+gConfig = None\r
+gDb = None
\ No newline at end of file
diff --git a/Source/Python/Ecc/EccToolError.py b/Source/Python/Ecc/EccToolError.py
new file mode 100644 (file)
index 0000000..fe99aa2
--- /dev/null
@@ -0,0 +1,162 @@
+## @file\r
+# Standardized Error Hanlding infrastructures.\r
+#\r
+# Copyright (c) 20087, 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
+ERROR_GENERAL_CHECK_ALL = 1000\r
+ERROR_GENERAL_CHECK_NO_TAB = 1001\r
+ERROR_GENERAL_CHECK_INDENTATION = 1002\r
+ERROR_GENERAL_CHECK_LINE = 1003\r
+ERROR_GENERAL_CHECK_NO_ASM = 1004\r
+ERROR_GENERAL_CHECK_NO_PROGMA = 1005\r
+ERROR_GENERAL_CHECK_CARRIAGE_RETURN = 1006\r
+ERROR_GENERAL_CHECK_FILE_EXISTENCE = 1007\r
+\r
+ERROR_SPACE_CHECK_ALL = 2000\r
+\r
+ERROR_PREDICATE_EXPRESSION_CHECK_ALL = 3000\r
+ERROR_PREDICATE_EXPRESSION_CHECK_BOOLEAN_VALUE = 3001\r
+ERROR_PREDICATE_EXPRESSION_CHECK_NO_BOOLEAN_OPERATOR = 3002\r
+ERROR_PREDICATE_EXPRESSION_CHECK_COMPARISON_NULL_TYPE = 3003\r
+\r
+ERROR_HEADER_CHECK_ALL = 4000\r
+ERROR_HEADER_CHECK_FILE = 4001\r
+ERROR_HEADER_CHECK_FUNCTION = 4001\r
+\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_ALL = 5000\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_RETURN_TYPE = 5001\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_OPTIONAL_FUNCTIONAL_MODIFIER = 5002\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_NAME = 5003\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE = 5004\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_BODY = 5005\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_DATA_DECLARATION = 5006\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE = 5007\r
+ERROR_C_FUNCTION_LAYOUT_CHECK_NO_STATIC = 5008\r
+\r
+ERROR_INCLUDE_FILE_CHECK_ALL = 6000\r
+ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT = 6001\r
+ERROR_INCLUDE_FILE_CHECK_DATA = 6002\r
+\r
+ERROR_DECLARATION_DATA_TYPE_CHECK_ALL = 7000\r
+ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE = 7001\r
+ERROR_DECLARATION_DATA_TYPE_CHECK_IN_OUT_MODIFIER = 7002\r
+ERROR_DECLARATION_DATA_TYPE_CHECK_EFI_API_MODIFIER = 7003\r
+ERROR_DECLARATION_DATA_TYPE_CHECK_ENUMERATED_TYPE = 7004\r
+ERROR_DECLARATION_DATA_TYPE_CHECK_STRUCTURE_DECLARATION = 7005\r
+ERROR_DECLARATION_DATA_TYPE_CHECK_UNION_TYPE = 7006\r
+\r
+ERROR_NAMING_CONVENTION_CHECK_ALL = 8000\r
+ERROR_NAMING_CONVENTION_CHECK_DEFINE_STATEMENT = 8001\r
+ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT = 8002\r
+ERROR_NAMING_CONVENTION_CHECK_IFNDEF_STATEMENT = 8003\r
+ERROR_NAMING_CONVENTION_CHECK_PATH_NAME = 8004\r
+ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME = 8005\r
+ERROR_NAMING_CONVENTION_CHECK_FUNCTION_NAME = 8006\r
+ERROR_NAMING_CONVENTION_CHECK_SINGLE_CHARACTER_VARIABLE = 8007\r
+\r
+ERROR_DOXYGEN_CHECK_ALL = 9000\r
+ERROR_DOXYGEN_CHECK_FILE_HEADER = 9001\r
+ERROR_DOXYGEN_CHECK_FUNCTION_HEADER = 9002\r
+ERROR_DOXYGEN_CHECK_COMMENT_DESCRIPTION = 9003\r
+ERROR_DOXYGEN_CHECK_COMMENT_FORMAT = 9004\r
+ERROR_DOXYGEN_CHECK_COMMAND = 9005\r
+\r
+ERROR_META_DATA_FILE_CHECK_ALL = 10000\r
+ERROR_META_DATA_FILE_CHECK_PATH_NAME = 10001\r
+ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE = 10002\r
+ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_DEPENDENT = 10003\r
+ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_ORDER = 10004\r
+ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE = 10005\r
+ERROR_META_DATA_FILE_CHECK_BINARY_INF_IN_FDF = 10006\r
+ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE = 10007\r
+ERROR_META_DATA_FILE_CHECK_PCD_FLASH = 10008\r
+ERROR_META_DATA_FILE_CHECK_PCD_NO_USE = 10009\r
+ERROR_META_DATA_FILE_CHECK_DUPLICATE_GUID = 10010\r
+ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL = 10011\r
+ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI = 10012\r
+\r
+ERROR_SPELLING_CHECK_ALL = 11000\r
+\r
+gEccErrorMessage = {\r
+    ERROR_GENERAL_CHECK_ALL : "",\r
+    ERROR_GENERAL_CHECK_NO_TAB : "",\r
+    ERROR_GENERAL_CHECK_INDENTATION : "",\r
+    ERROR_GENERAL_CHECK_LINE : "",\r
+    ERROR_GENERAL_CHECK_NO_ASM : "",\r
+    ERROR_GENERAL_CHECK_NO_PROGMA : "",\r
+    ERROR_GENERAL_CHECK_CARRIAGE_RETURN : "",\r
+    ERROR_GENERAL_CHECK_FILE_EXISTENCE : "",\r
+    \r
+    ERROR_SPACE_CHECK_ALL : "",\r
+    \r
+    ERROR_PREDICATE_EXPRESSION_CHECK_ALL : "",\r
+    ERROR_PREDICATE_EXPRESSION_CHECK_BOOLEAN_VALUE : "",\r
+    ERROR_PREDICATE_EXPRESSION_CHECK_NO_BOOLEAN_OPERATOR : "",\r
+    ERROR_PREDICATE_EXPRESSION_CHECK_COMPARISON_NULL_TYPE : "",\r
+    \r
+    ERROR_HEADER_CHECK_ALL : "",\r
+    ERROR_HEADER_CHECK_FILE : "",\r
+    ERROR_HEADER_CHECK_FUNCTION : "",\r
+    \r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_ALL : "",\r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_RETURN_TYPE : "",\r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_OPTIONAL_FUNCTIONAL_MODIFIER : "",\r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_NAME : "",\r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE : "",\r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_BODY : "",\r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_DATA_DECLARATION : "",\r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE : "",\r
+    ERROR_C_FUNCTION_LAYOUT_CHECK_NO_STATIC : "",\r
+    \r
+    ERROR_INCLUDE_FILE_CHECK_ALL : "",\r
+    ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT : "",\r
+    ERROR_INCLUDE_FILE_CHECK_DATA : "",\r
+    \r
+    ERROR_DECLARATION_DATA_TYPE_CHECK_ALL : "",\r
+    ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE : "",\r
+    ERROR_DECLARATION_DATA_TYPE_CHECK_IN_OUT_MODIFIER : "",\r
+    ERROR_DECLARATION_DATA_TYPE_CHECK_EFI_API_MODIFIER : "",\r
+    ERROR_DECLARATION_DATA_TYPE_CHECK_ENUMERATED_TYPE : "",\r
+    ERROR_DECLARATION_DATA_TYPE_CHECK_STRUCTURE_DECLARATION : "",\r
+    ERROR_DECLARATION_DATA_TYPE_CHECK_UNION_TYPE : "",\r
+    \r
+    ERROR_NAMING_CONVENTION_CHECK_ALL : "",\r
+    ERROR_NAMING_CONVENTION_CHECK_DEFINE_STATEMENT : "",\r
+    ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT : "",\r
+    ERROR_NAMING_CONVENTION_CHECK_IFNDEF_STATEMENT : "",\r
+    ERROR_NAMING_CONVENTION_CHECK_PATH_NAME : "",\r
+    ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME : "",\r
+    ERROR_NAMING_CONVENTION_CHECK_FUNCTION_NAME : "",\r
+    ERROR_NAMING_CONVENTION_CHECK_SINGLE_CHARACTER_VARIABLE : "",\r
+    \r
+    ERROR_DOXYGEN_CHECK_ALL : "",\r
+    ERROR_DOXYGEN_CHECK_FILE_HEADER : "",\r
+    ERROR_DOXYGEN_CHECK_FUNCTION_HEADER : "",\r
+    ERROR_DOXYGEN_CHECK_COMMENT_DESCRIPTION : "",\r
+    ERROR_DOXYGEN_CHECK_COMMENT_FORMAT : "",\r
+    ERROR_DOXYGEN_CHECK_COMMAND : "",\r
+    \r
+    ERROR_META_DATA_FILE_CHECK_ALL : "",\r
+    ERROR_META_DATA_FILE_CHECK_PATH_NAME : "",\r
+    ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE : "",\r
+    ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_DEPENDENT : "",\r
+    ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_ORDER : "",\r
+    ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE : "",\r
+    ERROR_META_DATA_FILE_CHECK_BINARY_INF_IN_FDF : "",\r
+    ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE : "",\r
+    ERROR_META_DATA_FILE_CHECK_PCD_FLASH : "",\r
+    ERROR_META_DATA_FILE_CHECK_PCD_NO_USE : "",\r
+    ERROR_META_DATA_FILE_CHECK_DUPLICATE_GUID : "",\r
+    ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL : "",\r
+    ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI : "",\r
+    \r
+    ERROR_SPELLING_CHECK_ALL : "",\r
+    }
\ No newline at end of file
index 6d73f2e..40c695c 100644 (file)
@@ -97,47 +97,47 @@ def GetIdentifierList():
     return IdList\r
 \r
 def GetParamList(FuncDeclarator, FuncNameLine = 0, FuncNameOffset = 0):\r
-        ParamIdList = []\r
-        DeclSplitList = FuncDeclarator.split('(')\r
-        if len(DeclSplitList) < 2:\r
-            return None\r
+    ParamIdList = []\r
+    DeclSplitList = FuncDeclarator.split('(')\r
+    if len(DeclSplitList) < 2:\r
+        return None\r
 #    FuncName = DeclSplitList[0]\r
-        ParamStr = DeclSplitList[1].rstrip(')')\r
-        LineSkipped = 0\r
+    ParamStr = DeclSplitList[1].rstrip(')')\r
+    LineSkipped = 0\r
+    OffsetSkipped = 0\r
+    Start = 0\r
+    while FuncName.find('\n', Start) != -1:\r
+        LineSkipped += 1\r
         OffsetSkipped = 0\r
+        Start += FuncName.find('\n', Start)\r
+        Start += 1       \r
+    OffsetSkipped += len(FuncName[Start:])\r
+    OffsetSkipped += 1 #skip '('\r
+    ParamBeginLine = FuncNameLine + LineSkipped\r
+    ParamBeginOffset = OffsetSkipped\r
+    for p in ParamStr.split(','):\r
+        ListP = p.split()\r
+        if len(ListP) == 0:\r
+            continue\r
+        ParamName = ListP[-1]\r
+        RightSpacePos = p.rfind(ParamName)\r
+        ParamModifier = p[0:RightSpacePos]\r
+        \r
         Start = 0\r
-        while FuncName.find('\n', Start) != -1:\r
+        while p.find('\n', Start) != -1:\r
             LineSkipped += 1\r
             OffsetSkipped = 0\r
-            Start += FuncName.find('\n', Start)\r
-            Start += 1       \r
-        OffsetSkipped += len(FuncName[Start:])\r
-        OffsetSkipped += 1 #skip '('\r
-        ParamBeginLine = FuncNameLine + LineSkipped\r
-        ParamBeginOffset = OffsetSkipped\r
-        for p in ParamStr.split(','):\r
-            ListP = p.split()\r
-            if len(ListP) == 0:\r
-                continue\r
-            ParamName = ListP[-1]\r
-            RightSpacePos = p.rfind(ParamName)\r
-            ParamModifier = p[0:RightSpacePos]\r
-            \r
-            Start = 0\r
-            while p.find('\n', Start) != -1:\r
-                LineSkipped += 1\r
-                OffsetSkipped = 0\r
-                Start += p.find('\n', Start)\r
-                Start += 1\r
-            OffsetSkipped += len(p[Start:])\r
-            \r
-            ParamEndLine = ParamBeginLine + LineSkipped\r
-            ParamEndOffset = OffsetSkipped\r
-            IdParam = DataClass.IdentifierClass(-1, ParamModifier, '', ParamName, '', DataClass.MODEL_IDENTIFIER_PARAMETER, -1, -1, ParamBeginLine, ParamBeginOffset, ParamEndLine, ParamEndOffset)\r
-            ParamIdList.append(IdParam)\r
-            ParamBeginLine = ParamEndLine\r
-            ParamBeginOffset = OffsetSkipped + 1 #skip ','\r
-            \r
+            Start += p.find('\n', Start)\r
+            Start += 1\r
+        OffsetSkipped += len(p[Start:])\r
+        \r
+        ParamEndLine = ParamBeginLine + LineSkipped\r
+        ParamEndOffset = OffsetSkipped\r
+        IdParam = DataClass.IdentifierClass(-1, ParamModifier, '', ParamName, '', DataClass.MODEL_IDENTIFIER_PARAMETER, -1, -1, ParamBeginLine, ParamBeginOffset, ParamEndLine, ParamEndOffset)\r
+        ParamIdList.append(IdParam)\r
+        ParamBeginLine = ParamEndLine\r
+        ParamBeginOffset = OffsetSkipped + 1 #skip ','\r
+        \r
     return ParamIdList\r
     \r
 def GetFunctionList():\r
index 3c85080..ad9787c 100644 (file)
@@ -160,7 +160,7 @@ NamingConventionCheckAll = 0
 NamingConventionCheckDefineStatement = 1\r
 # Check whether only capital letters are used for typedef declarations\r
 NamingConventionCheckTypedefStatement = 1\r
-# Check whether the #ifndef at the start of an include file uses both prefix and postfix underscore characters, ¡®_¡¯.\r
+# Check whether the #ifndef at the start of an include file uses both prefix and postfix underscore characters, '_'.\r
 NamingConventionCheckIfndefStatement = 1\r
 # Rule for path name, variable name and function name\r
 # 1. First character should be upper case\r
@@ -187,7 +187,7 @@ DoxygenCheckFunctionHeader = 1
 # 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
 DoxygenCheckCommentDescription = 1\r
-# Check whether comment lines with ¡®///< ¡­ text ¡­¡¯ format, if it is used, it should be after the code section.\r
+# Check whether comment lines with '///< ... text ...' format, if it is used, it should be after the code section.\r
 DoxygenCheckCommentFormat = 1\r
 # Check whether only Doxygen commands allowed to mark the code are @bug and @todo.\r
 DoxygenCheckCommand = 1\r
@@ -202,8 +202,8 @@ MetaDataFileCheckPathName = 1
 # Generate a list for all files defined in meta-data files\r
 MetaDataFileCheckGenerateFileList = 1\r
 # The path of log file\r
-MetaDataFileCheckPathOfGenerateFileList = C:\File.log\r
-# Check whether all Library Instances defined for a given module (or dependent library instance) match the module¡¯s type.  \r
+MetaDataFileCheckPathOfGenerateFileList = "C:\File.log"\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
 # and any module specifying the library instance must be one of the supported types.\r
 MetaDataFileCheckLibraryInstance = 1\r
@@ -215,13 +215,15 @@ MetaDataFileCheckLibraryInstanceOrder = 1
 MetaDataFileCheckLibraryNoUse = 1\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
 MetaDataFileCheckBinaryInfInFdf = 1\r
-Not to report error and warning related OS include file such as ¡°windows.h¡± and ¡°stdio.h¡±.\r
+# Not to report error and warning related OS include file such as "windows.h" and "stdio.h".\r
 # Check whether a PCD is set in a DSC file or the FDF file, but not in both.\r
 MetaDataFileCheckPcdDuplicate = 1\r
 # Check whether PCD settings in the FDF file can only be related to flash.\r
 MetaDataFileCheckPcdFlash = 1\r
 # Check whether PCDs used in INF files but not specified in DSC or FDF files\r
 MetaDataFileCheckPcdNoUse = 1\r
+# Check whether having duplicate guids defined for Guid/Protocol/Ppi\r
+MetaDataFileCheckGuidDuplicate = 1\r
 \r
 #\r
 # The check points in this section are reserved\r
diff --git a/Source/Python/Table/TableReport.py b/Source/Python/Table/TableReport.py
new file mode 100644 (file)
index 0000000..310177b
--- /dev/null
@@ -0,0 +1,89 @@
+## @file\r
+# This file is used to create/update/query/erase table for ECC reports\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
+from Table import Table\r
+\r
+## TableDsc\r
+#\r
+# This class defined a table used for data model\r
+# \r
+# @param object:       Inherited from object class\r
+#\r
+#\r
+class TableDsc(Table):\r
+    def __init__(self, Cursor):\r
+        Table.__init__(self, Cursor)\r
+        self.Table = 'Report'\r
+    \r
+    ## Create table\r
+    #\r
+    # Create table report\r
+    #\r
+    # @param ID:             ID of an Error\r
+    # @param ErrorID:        ID of an Error TypeModel of a Dsc item\r
+    # @param BelongsToItem:  The error belongs to which item\r
+    # @param BelongsToFile:  The error belongs to which file\r
+    # @param Enabled:        If this error enabled\r
+    # @param Corrected:      if this error corrected\r
+    #\r
+    def Create(self):\r
+        SqlCommand = """create table IF NOT EXISTS %s (ID INTEGER PRIMARY KEY,\r
+                                                       ErrorID INTEGER NOT NULL,\r
+                                                       BelongsToItem SINGLE NOT NULL,\r
+                                                       BelongsToFile SINGLE NOT NULL,\r
+                                                       Enabled INTEGER DEFAULT 0,\r
+                                                       Corrected INTEGER DEFAULT -1\r
+                                                      )""" % self.Table\r
+        Table.Create(self, SqlCommand)\r
+\r
+    ## Insert table\r
+    #\r
+    # Insert a record into table report\r
+    #\r
+    # @param ID:             ID of an Error\r
+    # @param ErrorID:        ID of an Error TypeModel of a Dsc item\r
+    # @param BelongsToItem:  The error belongs to which item\r
+    # @param BelongsToFile:  The error belongs to which file\r
+    # @param Enabled:        If this error enabled\r
+    # @param Corrected:      if this error corrected\r
+    #\r
+    def Insert(self, ErrorID, BelongsToItem, BelongsToFile, Enabled, Corrected):\r
+        self.ID = self.ID + 1\r
+        SqlCommand = """insert into %s values(%s, %s, %s, %s, %s, %s)""" \\r
+                     % (self.Table, self.ID, ErrorID, BelongsToItem, BelongsToFile, Enabled, Corrected)\r
+        Table.Insert(self, SqlCommand)\r
+        \r
+        return self.ID\r
+    \r
+    ## Query table\r
+    #\r
+    # @retval:       A recordSet of all found records \r
+    #\r
+    def Query(self):\r
+        SqlCommand = """select ID, ErrorID, BelongsToItem, BelongsToFile, Corrected from %s\r
+                        where Enabled > -1""" % (self.Table)\r
+        EdkLogger.debug(4, "SqlCommand: %s" % SqlCommand)\r
+        self.Cur.execute(SqlCommand)\r
+        return self.Cur.fetchall()\r
+\r
+    ## Convert to CSV\r
+    #\r
+    # @param Filename:  To filename to save the report content\r
+    #\r
+    #\r
+    def ToCSV(self, Filename = 'Report.csv'):\r
+        pass
\ No newline at end of file