]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaDataTable.py
BaseTools: Remove equality operator with None
[mirror_edk2.git] / BaseTools / Source / Python / Ecc / MetaFileWorkspace / MetaDataTable.py
CommitLineData
d0acc87a
LG
1## @file\r
2# This file is used to create/update/query/erase table for files\r
3#\r
1be2ed90 4# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
d0acc87a
LG
5# This program and the accompanying materials\r
6# are licensed and made available under the terms and conditions of the BSD License\r
7# which accompanies this distribution. The full text of the license may be found at\r
8# http://opensource.org/licenses/bsd-license.php\r
9#\r
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12#\r
13\r
14##\r
15# Import Modules\r
16#\r
1be2ed90 17import Common.LongFilePathOs as os\r
d0acc87a
LG
18\r
19import Common.EdkLogger as EdkLogger\r
20from CommonDataClass import DataClass\r
21from CommonDataClass.DataClass import FileClass\r
22\r
23## Convert to SQL required string format\r
24def ConvertToSqlString(StringList):\r
25 return map(lambda s: "'" + s.replace("'", "''") + "'", StringList)\r
26\r
27## TableFile\r
28#\r
29# This class defined a common table\r
30#\r
31# @param object: Inherited from object class\r
32#\r
33# @param Cursor: Cursor of the database\r
34# @param TableName: Name of the table\r
35#\r
36class Table(object):\r
37 _COLUMN_ = ''\r
38 _ID_STEP_ = 1\r
39 _ID_MAX_ = 0x80000000\r
40 _DUMMY_ = 0\r
41\r
42 def __init__(self, Cursor, Name='', IdBase=0, Temporary=False):\r
43 self.Cur = Cursor\r
44 self.Table = Name\r
45 self.IdBase = int(IdBase)\r
46 self.ID = int(IdBase)\r
47 self.Temporary = Temporary\r
48\r
49 def __str__(self):\r
50 return self.Table\r
51\r
52 ## Create table\r
53 #\r
54 # Create a table\r
55 #\r
56 def Create(self, NewTable=True):\r
57 if NewTable:\r
58 self.Drop()\r
59\r
60 if self.Temporary:\r
61 SqlCommand = """create temp table IF NOT EXISTS %s (%s)""" % (self.Table, self._COLUMN_)\r
62 else:\r
63 SqlCommand = """create table IF NOT EXISTS %s (%s)""" % (self.Table, self._COLUMN_)\r
64 EdkLogger.debug(EdkLogger.DEBUG_8, SqlCommand)\r
65 self.Cur.execute(SqlCommand)\r
66 self.ID = self.GetId()\r
67\r
68 ## Insert table\r
69 #\r
70 # Insert a record into a table\r
71 #\r
72 def Insert(self, *Args):\r
73 self.ID = self.ID + self._ID_STEP_\r
74 if self.ID >= (self.IdBase + self._ID_MAX_):\r
75 self.ID = self.IdBase + self._ID_STEP_\r
76 Values = ", ".join([str(Arg) for Arg in Args])\r
77 SqlCommand = "insert into %s values(%s, %s)" % (self.Table, self.ID, Values)\r
78 EdkLogger.debug(EdkLogger.DEBUG_5, SqlCommand)\r
79 self.Cur.execute(SqlCommand)\r
80 return self.ID\r
81\r
82 ## Query table\r
83 #\r
84 # Query all records of the table\r
85 #\r
86 def Query(self):\r
87 SqlCommand = """select * from %s""" % self.Table\r
88 self.Cur.execute(SqlCommand)\r
89 for Rs in self.Cur:\r
90 EdkLogger.verbose(str(Rs))\r
91 TotalCount = self.GetId()\r
92\r
93 ## Drop a table\r
94 #\r
95 # Drop the table\r
96 #\r
97 def Drop(self):\r
98 SqlCommand = """drop table IF EXISTS %s""" % self.Table\r
64b2609f
LG
99 try:\r
100 self.Cur.execute(SqlCommand)\r
b3d07ff8 101 except Exception, e:\r
64b2609f 102 print "An error occurred when Drop a table:", e.args[0]\r
d0acc87a
LG
103\r
104 ## Get count\r
105 #\r
106 # Get a count of all records of the table\r
107 #\r
108 # @retval Count: Total count of all records\r
109 #\r
110 def GetCount(self):\r
111 SqlCommand = """select count(ID) from %s""" % self.Table\r
112 Record = self.Cur.execute(SqlCommand).fetchall()\r
113 return Record[0][0]\r
114\r
115 def GetId(self):\r
116 SqlCommand = """select max(ID) from %s""" % self.Table\r
117 Record = self.Cur.execute(SqlCommand).fetchall()\r
118 Id = Record[0][0]\r
4231a819 119 if Id is None:\r
d0acc87a
LG
120 Id = self.IdBase\r
121 return Id\r
122\r
123 ## Init the ID of the table\r
124 #\r
125 # Init the ID of the table\r
126 #\r
127 def InitID(self):\r
128 self.ID = self.GetId()\r
129\r
130 ## Exec\r
131 #\r
132 # Exec Sql Command, return result\r
133 #\r
134 # @param SqlCommand: The SqlCommand to be executed\r
135 #\r
136 # @retval RecordSet: The result after executed\r
137 #\r
138 def Exec(self, SqlCommand):\r
139 EdkLogger.debug(EdkLogger.DEBUG_5, SqlCommand)\r
140 self.Cur.execute(SqlCommand)\r
141 RecordSet = self.Cur.fetchall()\r
142 return RecordSet\r
143\r
144 def SetEndFlag(self):\r
145 pass\r
146\r
147 def IsIntegral(self):\r
148 Result = self.Exec("select min(ID) from %s" % (self.Table))\r
149 if Result[0][0] != -1:\r
150 return False\r
151 return True\r
152\r
153 def GetAll(self):\r
154 return self.Exec("select * from %s where ID > 0 order by ID" % (self.Table))\r
155\r
156\r
157## TableDataModel\r
158#\r
159# This class defined a table used for data model\r
160#\r
161# @param object: Inherited from object class\r
162#\r
163#\r
164class TableDataModel(Table):\r
165 _COLUMN_ = """\r
166 ID INTEGER PRIMARY KEY,\r
167 CrossIndex INTEGER NOT NULL,\r
168 Name VARCHAR NOT NULL,\r
169 Description VARCHAR\r
170 """\r
171 def __init__(self, Cursor):\r
172 Table.__init__(self, Cursor, 'DataModel')\r
173\r
174 ## Insert table\r
175 #\r
176 # Insert a record into table DataModel\r
177 #\r
178 # @param ID: ID of a ModelType\r
179 # @param CrossIndex: CrossIndex of a ModelType\r
180 # @param Name: Name of a ModelType\r
181 # @param Description: Description of a ModelType\r
182 #\r
183 def Insert(self, CrossIndex, Name, Description):\r
184 (Name, Description) = ConvertToSqlString((Name, Description))\r
185 return Table.Insert(self, CrossIndex, Name, Description)\r
186\r
187 ## Init table\r
188 #\r
189 # Create all default records of table DataModel\r
190 #\r
191 def InitTable(self):\r
192 EdkLogger.verbose("\nInitialize table DataModel started ...")\r
193 Count = self.GetCount()\r
4231a819 194 if Count is not None and Count != 0:\r
d0acc87a
LG
195 return\r
196 for Item in DataClass.MODEL_LIST:\r
197 CrossIndex = Item[1]\r
198 Name = Item[0]\r
199 Description = Item[0]\r
200 self.Insert(CrossIndex, Name, Description)\r
201 EdkLogger.verbose("Initialize table DataModel ... DONE!")\r
202\r
203 ## Get CrossIndex\r
204 #\r
205 # Get a model's cross index from its name\r
206 #\r
207 # @param ModelName: Name of the model\r
208 # @retval CrossIndex: CrossIndex of the model\r
209 #\r
210 def GetCrossIndex(self, ModelName):\r
211 CrossIndex = -1\r
212 SqlCommand = """select CrossIndex from DataModel where name = '""" + ModelName + """'"""\r
213 self.Cur.execute(SqlCommand)\r
214 for Item in self.Cur:\r
215 CrossIndex = Item[0]\r
216\r
217 return CrossIndex\r
218\r