Added conditional statement support for DSC file
[people/mcb30/basetools.git] / Source / Python / Workspace / MetaFileTable.py
1 ## @file\r
2 # This file is used to create/update/query/erase a common table\r
3 #\r
4 # Copyright (c) 2008, Intel Corporation\r
5 # All rights reserved. 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
17 import Common.EdkLogger as EdkLogger\r
18 from MetaDataTable import Table\r
19 from MetaDataTable import ConvertToSqlString\r
20 \r
21 class ModuleTable(Table):\r
22     _ID_STEP_ = 0.00000001\r
23     _ID_MAX_  = 0.99999999\r
24     _COLUMN_ = '''\r
25         ID REAL PRIMARY KEY,\r
26         Model INTEGER NOT NULL,\r
27         Value1 TEXT NOT NULL,\r
28         Value2 TEXT,\r
29         Value3 TEXT,\r
30         Scope1 TEXT,\r
31         Scope2 TEXT,\r
32         BelongsToItem REAL NOT NULL,\r
33         StartLine INTEGER NOT NULL,\r
34         StartColumn INTEGER NOT NULL,\r
35         EndLine INTEGER NOT NULL,\r
36         EndColumn INTEGER NOT NULL,\r
37         Enabled INTEGER DEFAULT 0\r
38         '''\r
39     _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1"\r
40 \r
41     def __init__(self, Cursor, Name='Inf', IdBase=0, Temporary=False):\r
42         Table.__init__(self, Cursor, Name, IdBase, Temporary)\r
43 \r
44     #\r
45     # Insert a record into table Inf\r
46     #\r
47     # @param Model:          Model of a Inf item\r
48     # @param Value1:         Value1 of a Inf item\r
49     # @param Value2:         Value2 of a Inf item\r
50     # @param Value3:         Value3 of a Inf item\r
51     # @param Value4:         Value4 of a Inf item\r
52     # @param Value5:         Value5 of a Inf item\r
53     # @param Arch:           Arch of a Inf item\r
54     # @param BelongsToItem:  The item belongs to which another item\r
55     # @param BelongsToFile:  The item belongs to which dsc file\r
56     # @param StartLine:      StartLine of a Inf item\r
57     # @param StartColumn:    StartColumn of a Inf item\r
58     # @param EndLine:        EndLine of a Inf item\r
59     # @param EndColumn:      EndColumn of a Inf item\r
60     # @param Enabled:        If this item enabled\r
61     #\r
62     def Insert(self, Model, Value1, Value2, Value3, Scope1='COMMON', Scope2='COMMON',\r
63                BelongsToItem=-1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=0):\r
64         (Value1, Value2, Value3, Scope1, Scope2) = ConvertToSqlString((Value1, Value2, Value3, Scope1, Scope2))\r
65         return Table.Insert(\r
66                         self, \r
67                         Model, \r
68                         Value1, \r
69                         Value2, \r
70                         Value3, \r
71                         Scope1, \r
72                         Scope2,\r
73                         BelongsToItem, \r
74                         StartLine, \r
75                         StartColumn, \r
76                         EndLine, \r
77                         EndColumn, \r
78                         Enabled\r
79                         )\r
80 \r
81     ## Query table\r
82     #\r
83     # @param Model:  The Model of Record \r
84     #\r
85     # @retval:       A recordSet of all found records \r
86     #\r
87     def Query(self, Model, Value1=None, Arch=None, Platform=None):\r
88         ConditionString = "Model=%s AND Enabled>=0" % Model\r
89         if Value1 == None:\r
90             ValueString = "Value1,Value2,Value3,Scope1,Scope2,ID,StartLine"\r
91         else:\r
92             ValueString = "Value2,Value3,Scope1,Scope2,ID,StartLine"\r
93             ConditionString = "Value1='%s'" % Value1\r
94 \r
95         if Arch != None and Arch != 'COMMON':\r
96             ConditionString += " AND (Scope1='%s' OR Scope1='COMMON')" % Arch\r
97         if Platform != None and Platform != 'COMMON':\r
98             ConditionString += " AND (Scope2='%s' OR Scope2='COMMON' OR Scope2='DEFAULT')" % Platform\r
99 \r
100         SqlCommand = "SELECT %s FROM %s WHERE %s" % (ValueString, self.Table, ConditionString)\r
101         return self.Exec(SqlCommand)\r
102 \r
103 class PackageTable(Table):\r
104     _ID_STEP_ = 0.00000001\r
105     _ID_MAX_ = 1\r
106     _COLUMN_ = '''\r
107         ID REAL PRIMARY KEY,\r
108         Model INTEGER NOT NULL,\r
109         Value1 TEXT NOT NULL,\r
110         Value2 TEXT,\r
111         Value3 TEXT,\r
112         Scope1 TEXT,\r
113         Scope2 TEXT,\r
114         BelongsToItem REAL NOT NULL,\r
115         StartLine INTEGER NOT NULL,\r
116         StartColumn INTEGER NOT NULL,\r
117         EndLine INTEGER NOT NULL,\r
118         EndColumn INTEGER NOT NULL,\r
119         Enabled INTEGER DEFAULT 0\r
120         '''\r
121     _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1"\r
122     def __init__(self, Cursor, Name='Dec', IdBase=0, Temporary=False):\r
123         Table.__init__(self, Cursor, Name, IdBase, Temporary)\r
124 \r
125     ## Insert table\r
126     #\r
127     # Insert a record into table Dec\r
128     #\r
129     # @param Model:          Model of a Dec item\r
130     # @param Value1:         Value1 of a Dec item\r
131     # @param Value2:         Value2 of a Dec item\r
132     # @param Value3:         Value3 of a Dec item\r
133     # @param Arch:           Arch of a Dec item\r
134     # @param BelongsToItem:  The item belongs to which another item\r
135     # @param BelongsToFile:  The item belongs to which dsc file\r
136     # @param StartLine:      StartLine of a Dec item\r
137     # @param StartColumn:    StartColumn of a Dec item\r
138     # @param EndLine:        EndLine of a Dec item\r
139     # @param EndColumn:      EndColumn of a Dec item\r
140     # @param Enabled:        If this item enabled\r
141     #\r
142     def Insert(self, Model, Value1, Value2, Value3, Scope1='COMMON', Scope2='COMMON',\r
143                BelongsToItem=-1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=0):\r
144         (Value1, Value2, Value3, Scope1, Scope2) = ConvertToSqlString((Value1, Value2, Value3, Scope1, Scope2))\r
145         return Table.Insert(\r
146                         self, \r
147                         Model, \r
148                         Value1, \r
149                         Value2, \r
150                         Value3, \r
151                         Scope1, \r
152                         Scope2,\r
153                         BelongsToItem, \r
154                         StartLine, \r
155                         StartColumn, \r
156                         EndLine, \r
157                         EndColumn, \r
158                         Enabled\r
159                         )\r
160 \r
161     ## Query table\r
162     #\r
163     # @param Model:  The Model of Record \r
164     #\r
165     # @retval:       A recordSet of all found records \r
166     #\r
167     def Query(self, Model, Value1=None, Arch=None):\r
168         ConditionString = "Model=%s AND Enabled>=0" % Model\r
169         if Value1 == None:\r
170             ValueString = "Value1,Value2,Value3,Scope1,ID,StartLine"\r
171         else:\r
172             ValueString = "Value2,Value3,Scope1,ID,StartLine"\r
173             ConditionString = "Value1='%s'" % Value1\r
174 \r
175         if Arch != None and Arch != 'COMMON':\r
176             ConditionString += " AND (Scope1='%s' OR Scope1='COMMON')" % Arch\r
177 \r
178         SqlCommand = "SELECT %s FROM %s WHERE %s" % (ValueString, self.Table, ConditionString)\r
179         return self.Exec(SqlCommand)\r
180 \r
181 class PlatformTable(Table):\r
182     _ID_STEP_ = 0.00000001\r
183     _ID_MAX_ = 1\r
184     _COLUMN_ = '''\r
185         ID REAL PRIMARY KEY,\r
186         Model INTEGER NOT NULL,\r
187         Value1 TEXT NOT NULL,\r
188         Value2 TEXT,\r
189         Value3 TEXT,\r
190         Scope1 TEXT,\r
191         Scope2 TEXT,\r
192         BelongsToItem REAL NOT NULL,\r
193         FromItem REAL NOT NULL,\r
194         StartLine INTEGER NOT NULL,\r
195         StartColumn INTEGER NOT NULL,\r
196         EndLine INTEGER NOT NULL,\r
197         EndColumn INTEGER NOT NULL,\r
198         Enabled INTEGER DEFAULT 0\r
199         '''\r
200     _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1, -1"\r
201     def __init__(self, Cursor, Name='Dsc', IdBase=0, Temporary=False):\r
202         Table.__init__(self, Cursor, Name, IdBase, Temporary)\r
203 \r
204     ## Insert table\r
205     #\r
206     # Insert a record into table Dsc\r
207     #\r
208     # @param Model:          Model of a Dsc item\r
209     # @param Value1:         Value1 of a Dsc item\r
210     # @param Value2:         Value2 of a Dsc item\r
211     # @param Value3:         Value3 of a Dsc item\r
212     # @param Arch:           Arch of a Dsc item\r
213     # @param BelongsToItem:  The item belongs to which another item\r
214     # @param BelongsToFile:  The item belongs to which dsc file\r
215     # @param StartLine:      StartLine of a Dsc item\r
216     # @param StartColumn:    StartColumn of a Dsc item\r
217     # @param EndLine:        EndLine of a Dsc item\r
218     # @param EndColumn:      EndColumn of a Dsc item\r
219     # @param Enabled:        If this item enabled\r
220     #\r
221     def Insert(self, Model, Value1, Value2, Value3, Scope1='COMMON', Scope2='COMMON', BelongsToItem=-1, \r
222                FromItem=-1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=1):\r
223         (Value1, Value2, Value3, Scope1, Scope2) = ConvertToSqlString((Value1, Value2, Value3, Scope1, Scope2))\r
224         return Table.Insert(\r
225                         self, \r
226                         Model, \r
227                         Value1, \r
228                         Value2, \r
229                         Value3, \r
230                         Scope1, \r
231                         Scope2,\r
232                         BelongsToItem, \r
233                         FromItem,\r
234                         StartLine, \r
235                         StartColumn, \r
236                         EndLine, \r
237                         EndColumn, \r
238                         Enabled\r
239                         )\r
240 \r
241     ## Query table\r
242     #\r
243     # @param Model:  The Model of Record \r
244     #\r
245     # @retval:       A recordSet of all found records \r
246     #\r
247     def Query(self, Model, Value1=None, Scope1=None, Scope2=None, BelongsToItem=None, FromItem=None):\r
248         ConditionString = "Model=%s AND Enabled>=0" % Model\r
249         if Value1 == None:\r
250             ValueString = "Value1,Value2,Value3,Scope1,Scope2,ID,StartLine"\r
251         else:\r
252             ValueString = "Value2,Value3,Scope1,Scope2,ID,StartLine"\r
253             ConditionString = "Value1='%s'" % Value1\r
254 \r
255         if Scope1 != None and Scope1 != 'COMMON':\r
256             ConditionString += " AND (Scope1='%s' OR Scope1='COMMON')" % Scope1\r
257         if Scope2 != None and Scope2 != 'COMMON':\r
258             ConditionString += " AND (Scope2='%s' OR Scope2='COMMON' OR Scope2='DEFAULT')" % Scope2\r
259 \r
260         if BelongsToItem != None:\r
261             ConditionString += " AND BelongsToItem=%s" % BelongsToItem\r
262         else:\r
263             ConditionString += " AND BelongsToItem<0"\r
264 \r
265         if FromItem != None:\r
266             ConditionString += " AND FromItem=%s" % FromItem\r
267 \r
268         SqlCommand = "SELECT %s FROM %s WHERE %s" % (ValueString, self.Table, ConditionString)\r
269         #print SqlCommand\r
270         return self.Exec(SqlCommand)\r
271 \r
272 \r