]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/Workspace/MetaDataTable.py
BaseTools: Remove equality operator with None
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / MetaDataTable.py
CommitLineData
30fdf114
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
40d841f6 5# This program and the accompanying materials\r
30fdf114
LG
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
30fdf114
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
99 self.Cur.execute(SqlCommand)\r
100\r
101 ## Get count\r
102 #\r
103 # Get a count of all records of the table\r
104 #\r
105 # @retval Count: Total count of all records\r
106 #\r
107 def GetCount(self):\r
108 SqlCommand = """select count(ID) from %s""" % self.Table\r
109 Record = self.Cur.execute(SqlCommand).fetchall()\r
110 return Record[0][0]\r
111\r
112 def GetId(self):\r
113 SqlCommand = """select max(ID) from %s""" % self.Table\r
114 Record = self.Cur.execute(SqlCommand).fetchall()\r
115 Id = Record[0][0]\r
4231a819 116 if Id is None:\r
30fdf114
LG
117 Id = self.IdBase\r
118 return Id\r
119\r
120 ## Init the ID of the table\r
121 #\r
122 # Init the ID of the table\r
123 #\r
124 def InitID(self):\r
125 self.ID = self.GetId()\r
126\r
127 ## Exec\r
128 #\r
129 # Exec Sql Command, return result\r
130 #\r
131 # @param SqlCommand: The SqlCommand to be executed\r
132 #\r
133 # @retval RecordSet: The result after executed\r
134 #\r
135 def Exec(self, SqlCommand):\r
136 EdkLogger.debug(EdkLogger.DEBUG_5, SqlCommand)\r
137 self.Cur.execute(SqlCommand)\r
138 RecordSet = self.Cur.fetchall()\r
139 return RecordSet\r
140\r
141 def SetEndFlag(self):\r
142 self.Exec("insert into %s values(%s)" % (self.Table, self._DUMMY_))\r
0d2711a6
LG
143 #\r
144 # Need to execution commit for table data changed.\r
145 #\r
146 self.Cur.connection.commit()\r
30fdf114
LG
147\r
148 def IsIntegral(self):\r
149 Result = self.Exec("select min(ID) from %s" % (self.Table))\r
150 if Result[0][0] != -1:\r
151 return False\r
152 return True\r
153\r
0d2711a6
LG
154 def GetAll(self):\r
155 return self.Exec("select * from %s where ID > 0 order by ID" % (self.Table))\r
156\r
30fdf114
LG
157## TableFile\r
158#\r
159# This class defined a table used for file\r
160#\r
161# @param object: Inherited from object class\r
162#\r
163class TableFile(Table):\r
164 _COLUMN_ = '''\r
165 ID INTEGER PRIMARY KEY,\r
166 Name VARCHAR NOT NULL,\r
167 ExtName VARCHAR,\r
168 Path VARCHAR,\r
169 FullPath VARCHAR NOT NULL,\r
170 Model INTEGER DEFAULT 0,\r
171 TimeStamp SINGLE NOT NULL\r
172 '''\r
173 def __init__(self, Cursor):\r
174 Table.__init__(self, Cursor, 'File')\r
175\r
176 ## Insert table\r
177 #\r
178 # Insert a record into table File\r
179 #\r
180 # @param Name: Name of a File\r
181 # @param ExtName: ExtName of a File\r
182 # @param Path: Path of a File\r
183 # @param FullPath: FullPath of a File\r
184 # @param Model: Model of a File\r
185 # @param TimeStamp: TimeStamp of a File\r
186 #\r
187 def Insert(self, Name, ExtName, Path, FullPath, Model, TimeStamp):\r
188 (Name, ExtName, Path, FullPath) = ConvertToSqlString((Name, ExtName, Path, FullPath))\r
189 return Table.Insert(\r
190 self,\r
191 Name,\r
192 ExtName,\r
193 Path,\r
194 FullPath,\r
195 Model,\r
196 TimeStamp\r
197 )\r
198\r
199 ## InsertFile\r
200 #\r
201 # Insert one file to table\r
202 #\r
203 # @param FileFullPath: The full path of the file\r
204 # @param Model: The model of the file\r
205 #\r
206 # @retval FileID: The ID after record is inserted\r
207 #\r
0d2711a6 208 def InsertFile(self, File, Model):\r
30fdf114 209 return self.Insert(\r
0d2711a6
LG
210 File.Name,\r
211 File.Ext,\r
212 File.Dir,\r
213 File.Path,\r
214 Model,\r
215 File.TimeStamp\r
216 )\r
30fdf114
LG
217\r
218 ## Get ID of a given file\r
219 #\r
220 # @param FilePath Path of file\r
221 #\r
222 # @retval ID ID value of given file in the table\r
223 #\r
0d2711a6
LG
224 def GetFileId(self, File):\r
225 QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, str(File))\r
30fdf114
LG
226 RecordList = self.Exec(QueryScript)\r
227 if len(RecordList) == 0:\r
228 return None\r
229 return RecordList[0][0]\r
230\r
231 ## Get type of a given file\r
232 #\r
233 # @param FileId ID of a file\r
234 #\r
235 # @retval file_type Model value of given file in the table\r
236 #\r
237 def GetFileType(self, FileId):\r
238 QueryScript = "select Model from %s where ID = '%s'" % (self.Table, FileId)\r
239 RecordList = self.Exec(QueryScript)\r
240 if len(RecordList) == 0:\r
241 return None\r
242 return RecordList[0][0]\r
243\r
244 ## Get file timestamp of a given file\r
245 #\r
246 # @param FileId ID of file\r
247 #\r
248 # @retval timestamp TimeStamp value of given file in the table\r
249 #\r
250 def GetFileTimeStamp(self, FileId):\r
251 QueryScript = "select TimeStamp from %s where ID = '%s'" % (self.Table, FileId)\r
252 RecordList = self.Exec(QueryScript)\r
253 if len(RecordList) == 0:\r
254 return None\r
255 return RecordList[0][0]\r
256\r
257 ## Update the timestamp of a given file\r
258 #\r
259 # @param FileId ID of file\r
260 # @param TimeStamp Time stamp of file\r
261 #\r
262 def SetFileTimeStamp(self, FileId, TimeStamp):\r
263 self.Exec("update %s set TimeStamp=%s where ID='%s'" % (self.Table, TimeStamp, FileId))\r
264\r
265 ## Get list of file with given type\r
266 #\r
267 # @param FileType Type value of file\r
268 #\r
269 # @retval file_list List of files with the given type\r
270 #\r
271 def GetFileList(self, FileType):\r
272 RecordList = self.Exec("select FullPath from %s where Model=%s" % (self.Table, FileType))\r
273 if len(RecordList) == 0:\r
274 return []\r
275 return [R[0] for R in RecordList]\r
276\r
277## TableDataModel\r
278#\r
279# This class defined a table used for data model\r
280#\r
281# @param object: Inherited from object class\r
282#\r
283#\r
284class TableDataModel(Table):\r
285 _COLUMN_ = """\r
286 ID INTEGER PRIMARY KEY,\r
287 CrossIndex INTEGER NOT NULL,\r
288 Name VARCHAR NOT NULL,\r
289 Description VARCHAR\r
290 """\r
291 def __init__(self, Cursor):\r
292 Table.__init__(self, Cursor, 'DataModel')\r
293\r
294 ## Insert table\r
295 #\r
296 # Insert a record into table DataModel\r
297 #\r
298 # @param ID: ID of a ModelType\r
299 # @param CrossIndex: CrossIndex of a ModelType\r
300 # @param Name: Name of a ModelType\r
301 # @param Description: Description of a ModelType\r
302 #\r
303 def Insert(self, CrossIndex, Name, Description):\r
304 (Name, Description) = ConvertToSqlString((Name, Description))\r
305 return Table.Insert(self, CrossIndex, Name, Description)\r
306\r
307 ## Init table\r
308 #\r
309 # Create all default records of table DataModel\r
310 #\r
311 def InitTable(self):\r
312 EdkLogger.verbose("\nInitialize table DataModel started ...")\r
313 Count = self.GetCount()\r
4231a819 314 if Count is not None and Count != 0:\r
30fdf114
LG
315 return\r
316 for Item in DataClass.MODEL_LIST:\r
317 CrossIndex = Item[1]\r
318 Name = Item[0]\r
319 Description = Item[0]\r
320 self.Insert(CrossIndex, Name, Description)\r
321 EdkLogger.verbose("Initialize table DataModel ... DONE!")\r
322\r
323 ## Get CrossIndex\r
324 #\r
325 # Get a model's cross index from its name\r
326 #\r
327 # @param ModelName: Name of the model\r
328 # @retval CrossIndex: CrossIndex of the model\r
329 #\r
330 def GetCrossIndex(self, ModelName):\r
331 CrossIndex = -1\r
332 SqlCommand = """select CrossIndex from DataModel where name = '""" + ModelName + """'"""\r
333 self.Cur.execute(SqlCommand)\r
334 for Item in self.Cur:\r
335 CrossIndex = Item[0]\r
336\r
337 return CrossIndex\r
338\r