]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaDataTable.py
2 # This file is used to create/update/query/erase table for files
4 # Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>
5 # This program and the accompanying materials
6 # are licensed and made available under the terms and conditions of the BSD License
7 # which accompanies this distribution. The full text of the license may be found at
8 # http://opensource.org/licenses/bsd-license.php
10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 import Common
.LongFilePathOs
as os
19 import Common
.EdkLogger
as EdkLogger
20 from CommonDataClass
import DataClass
21 from CommonDataClass
.DataClass
import FileClass
23 ## Convert to SQL required string format
24 def ConvertToSqlString(StringList
):
25 return map(lambda s
: "'" + s
.replace("'", "''") + "'", StringList
)
29 # This class defined a common table
31 # @param object: Inherited from object class
33 # @param Cursor: Cursor of the database
34 # @param TableName: Name of the table
42 def __init__(self
, Cursor
, Name
='', IdBase
=0, Temporary
=False):
45 self
.IdBase
= int(IdBase
)
47 self
.Temporary
= Temporary
56 def Create(self
, NewTable
=True):
61 SqlCommand
= """create temp table IF NOT EXISTS %s (%s)""" % (self
.Table
, self
._COLUMN
_)
63 SqlCommand
= """create table IF NOT EXISTS %s (%s)""" % (self
.Table
, self
._COLUMN
_)
64 EdkLogger
.debug(EdkLogger
.DEBUG_8
, SqlCommand
)
65 self
.Cur
.execute(SqlCommand
)
66 self
.ID
= self
.GetId()
70 # Insert a record into a table
72 def Insert(self
, *Args
):
73 self
.ID
= self
.ID
+ self
._ID
_STEP
_
74 if self
.ID
>= (self
.IdBase
+ self
._ID
_MAX
_):
75 self
.ID
= self
.IdBase
+ self
._ID
_STEP
_
76 Values
= ", ".join([str(Arg
) for Arg
in Args
])
77 SqlCommand
= "insert into %s values(%s, %s)" % (self
.Table
, self
.ID
, Values
)
78 EdkLogger
.debug(EdkLogger
.DEBUG_5
, SqlCommand
)
79 self
.Cur
.execute(SqlCommand
)
84 # Query all records of the table
87 SqlCommand
= """select * from %s""" % self
.Table
88 self
.Cur
.execute(SqlCommand
)
90 EdkLogger
.verbose(str(Rs
))
91 TotalCount
= self
.GetId()
98 SqlCommand
= """drop table IF EXISTS %s""" % self
.Table
100 self
.Cur
.execute(SqlCommand
)
102 print "An error occurred when Drop a table:", e
.args
[0]
106 # Get a count of all records of the table
108 # @retval Count: Total count of all records
111 SqlCommand
= """select count(ID) from %s""" % self
.Table
112 Record
= self
.Cur
.execute(SqlCommand
).fetchall()
116 SqlCommand
= """select max(ID) from %s""" % self
.Table
117 Record
= self
.Cur
.execute(SqlCommand
).fetchall()
123 ## Init the ID of the table
125 # Init the ID of the table
128 self
.ID
= self
.GetId()
132 # Exec Sql Command, return result
134 # @param SqlCommand: The SqlCommand to be executed
136 # @retval RecordSet: The result after executed
138 def Exec(self
, SqlCommand
):
139 EdkLogger
.debug(EdkLogger
.DEBUG_5
, SqlCommand
)
140 self
.Cur
.execute(SqlCommand
)
141 RecordSet
= self
.Cur
.fetchall()
144 def SetEndFlag(self
):
147 def IsIntegral(self
):
148 Result
= self
.Exec("select min(ID) from %s" % (self
.Table
))
149 if Result
[0][0] != -1:
154 return self
.Exec("select * from %s where ID > 0 order by ID" % (self
.Table
))
159 # This class defined a table used for data model
161 # @param object: Inherited from object class
164 class TableDataModel(Table
):
166 ID INTEGER PRIMARY KEY,
167 CrossIndex INTEGER NOT NULL,
168 Name VARCHAR NOT NULL,
171 def __init__(self
, Cursor
):
172 Table
.__init
__(self
, Cursor
, 'DataModel')
176 # Insert a record into table DataModel
178 # @param ID: ID of a ModelType
179 # @param CrossIndex: CrossIndex of a ModelType
180 # @param Name: Name of a ModelType
181 # @param Description: Description of a ModelType
183 def Insert(self
, CrossIndex
, Name
, Description
):
184 (Name
, Description
) = ConvertToSqlString((Name
, Description
))
185 return Table
.Insert(self
, CrossIndex
, Name
, Description
)
189 # Create all default records of table DataModel
192 EdkLogger
.verbose("\nInitialize table DataModel started ...")
193 Count
= self
.GetCount()
194 if Count
!= None and Count
!= 0:
196 for Item
in DataClass
.MODEL_LIST
:
199 Description
= Item
[0]
200 self
.Insert(CrossIndex
, Name
, Description
)
201 EdkLogger
.verbose("Initialize table DataModel ... DONE!")
205 # Get a model's cross index from its name
207 # @param ModelName: Name of the model
208 # @retval CrossIndex: CrossIndex of the model
210 def GetCrossIndex(self
, ModelName
):
212 SqlCommand
= """select CrossIndex from DataModel where name = '""" + ModelName
+ """'"""
213 self
.Cur
.execute(SqlCommand
)
214 for Item
in self
.Cur
: