Commit | Line | Data |
---|---|---|
6f33021d | 1 | /* |
5039dede | 2 | ** nxdbmgr - NetXMS database manager |
c908b63b | 3 | ** Copyright (C) 2004-2016 Victor Kirhenshtein |
5039dede AK |
4 | ** |
5 | ** This program is free software; you can redistribute it and/or modify | |
6 | ** it under the terms of the GNU General Public License as published by | |
7 | ** the Free Software Foundation; either version 2 of the License, or | |
8 | ** (at your option) any later version. | |
9 | ** | |
10 | ** This program is distributed in the hope that it will be useful, | |
11 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | ** GNU General Public License for more details. | |
14 | ** | |
15 | ** You should have received a copy of the GNU General Public License | |
16 | ** along with this program; if not, write to the Free Software | |
17 | ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
18 | ** | |
19 | ** File: upgrade.cpp | |
20 | ** | |
21 | **/ | |
22 | ||
23 | #include "nxdbmgr.h" | |
bf6fb6c3 | 24 | #include <nxevent.h> |
5039dede | 25 | |
4f50e45c VK |
26 | /** |
27 | * Externals | |
28 | */ | |
7a41a06e VK |
29 | BOOL MigrateMaps(); |
30 | ||
50963ced VK |
31 | /** |
32 | * Pre-defined GUID mapping for GenerateGUID | |
33 | */ | |
34 | struct GUID_MAPPING | |
35 | { | |
36 | UINT32 id; | |
37 | const TCHAR *guid; | |
38 | }; | |
39 | ||
271e3971 VK |
40 | /** |
41 | * Generate GUIDs | |
42 | */ | |
50963ced | 43 | static bool GenerateGUID(const TCHAR *table, const TCHAR *idColumn, const TCHAR *guidColumn, const GUID_MAPPING *mapping) |
271e3971 VK |
44 | { |
45 | TCHAR query[256]; | |
46 | _sntprintf(query, 256, _T("SELECT %s FROM %s"), idColumn, table); | |
47 | DB_RESULT hResult = SQLSelect(query); | |
48 | if (hResult == NULL) | |
49 | return false; | |
50 | ||
50963ced VK |
51 | uuid_t guid; |
52 | TCHAR buffer[64]; | |
53 | ||
271e3971 VK |
54 | int count = DBGetNumRows(hResult); |
55 | for(int i = 0; i < count; i++) | |
56 | { | |
50963ced VK |
57 | const TCHAR *guidText = NULL; |
58 | UINT32 id = DBGetFieldULong(hResult, i, 0); | |
59 | if (mapping != NULL) | |
60 | { | |
61 | for(int j = 0; mapping[j].guid != NULL; j++) | |
62 | if (mapping[j].id == id) | |
63 | { | |
64 | guidText = mapping[j].guid; | |
65 | break; | |
66 | } | |
67 | } | |
68 | if (guidText == NULL) | |
69 | { | |
70 | _uuid_generate(guid); | |
71 | guidText = _uuid_to_string(guid, buffer); | |
72 | } | |
73 | _sntprintf(query, 256, _T("UPDATE %s SET %s='%s' WHERE %s=%d"), table, guidColumn, guidText, idColumn, id); | |
271e3971 VK |
74 | if (!SQLQuery(query)) |
75 | { | |
76 | DBFreeResult(hResult); | |
77 | return false; | |
78 | } | |
79 | } | |
80 | DBFreeResult(hResult); | |
81 | return true; | |
82 | } | |
83 | ||
4f50e45c VK |
84 | /** |
85 | * Create table | |
86 | */ | |
c85c8ef2 | 87 | static bool CreateTable(const TCHAR *pszQuery) |
5039dede | 88 | { |
7618e362 | 89 | String query(pszQuery); |
5039dede | 90 | |
2a964810 VK |
91 | query.replace(_T("$SQL:TEXT"), g_pszSqlType[g_dbSyntax][SQL_TYPE_TEXT]); |
92 | query.replace(_T("$SQL:TXT4K"), g_pszSqlType[g_dbSyntax][SQL_TYPE_TEXT4K]); | |
93 | query.replace(_T("$SQL:INT64"), g_pszSqlType[g_dbSyntax][SQL_TYPE_INT64]); | |
94 | if (g_dbSyntax == DB_SYNTAX_MYSQL) | |
7618e362 | 95 | query += g_pszTableSuffix; |
c85c8ef2 | 96 | return SQLQuery(query); |
5039dede AK |
97 | } |
98 | ||
4f50e45c | 99 | /** |
c85c8ef2 | 100 | * Check if cnfiguration variable exist |
4f50e45c | 101 | */ |
c85c8ef2 | 102 | static bool IsConfigurationVariableExist(const TCHAR *name) |
5039dede | 103 | { |
c85c8ef2 VK |
104 | bool found = false; |
105 | TCHAR query[256]; | |
106 | _sntprintf(query, 256, _T("SELECT var_value FROM config WHERE var_name='%s'"), name); | |
107 | DB_RESULT hResult = DBSelect(g_hCoreDB, query); | |
5039dede AK |
108 | if (hResult != 0) |
109 | { | |
c85c8ef2 | 110 | found = (DBGetNumRows(hResult) > 0); |
5039dede AK |
111 | DBFreeResult(hResult); |
112 | } | |
c85c8ef2 VK |
113 | return found; |
114 | } | |
5039dede | 115 | |
c85c8ef2 VK |
116 | /** |
117 | * Create configuration parameter if it doesn't exist (unless bForceUpdate set to true) | |
118 | */ | |
119 | bool CreateConfigParam(const TCHAR *name, const TCHAR *value, const TCHAR *description, char dataType, bool isVisible, bool needRestart, bool isPublic, bool forceUpdate) | |
120 | { | |
121 | bool success = true; | |
2589cc10 | 122 | TCHAR szQuery[3024]; |
c85c8ef2 | 123 | if (!IsConfigurationVariableExist(name)) |
5039dede | 124 | { |
2589cc10 | 125 | _sntprintf(szQuery, 3024, _T("INSERT INTO config (var_name,var_value,is_visible,need_server_restart,is_public,data_type,description) VALUES (%s,%s,%d,%d,'%c','%c',%s)"), |
c85c8ef2 | 126 | (const TCHAR *)DBPrepareString(g_hCoreDB, name, 63), |
2589cc10 | 127 | (const TCHAR *)DBPrepareString(g_hCoreDB, value, 2000), isVisible ? 1 : 0, needRestart ? 1 : 0, |
c85c8ef2 VK |
128 | isPublic ? _T('Y') : _T('N'), dataType, (const TCHAR *)DBPrepareString(g_hCoreDB, description, 255)); |
129 | success = SQLQuery(szQuery); | |
5039dede | 130 | } |
c85c8ef2 | 131 | else if (forceUpdate) |
5039dede | 132 | { |
2589cc10 | 133 | _sntprintf(szQuery, 3024, _T("UPDATE config SET var_value=%s WHERE var_name=%s"), |
134 | (const TCHAR *)DBPrepareString(g_hCoreDB, value, 2000), (const TCHAR *)DBPrepareString(g_hCoreDB, name, 63)); | |
c85c8ef2 | 135 | success = SQLQuery(szQuery); |
5039dede | 136 | } |
c85c8ef2 VK |
137 | return success; |
138 | } | |
139 | ||
140 | /** | |
141 | * Create configuration parameter if it doesn't exist (unless bForceUpdate set to true) | |
142 | */ | |
143 | bool CreateConfigParam(const TCHAR *name, const TCHAR *value, bool isVisible, bool needRestart, bool forceUpdate) | |
144 | { | |
145 | bool success = true; | |
2589cc10 | 146 | TCHAR szQuery[3024]; |
c85c8ef2 VK |
147 | if (!IsConfigurationVariableExist(name)) |
148 | { | |
2589cc10 | 149 | _sntprintf(szQuery, 3024, _T("INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES (%s,%s,%d,%d)"), |
c85c8ef2 | 150 | (const TCHAR *)DBPrepareString(g_hCoreDB, name, 63), |
2589cc10 | 151 | (const TCHAR *)DBPrepareString(g_hCoreDB, value, 2000), isVisible ? 1 : 0, needRestart ? 1 : 0); |
c85c8ef2 VK |
152 | success = SQLQuery(szQuery); |
153 | } | |
154 | else if (forceUpdate) | |
155 | { | |
2589cc10 | 156 | _sntprintf(szQuery, 3024, _T("UPDATE config SET var_value=%s WHERE var_name=%s"), |
157 | (const TCHAR *)DBPrepareString(g_hCoreDB, value, 2000), (const TCHAR *)DBPrepareString(g_hCoreDB, name, 63)); | |
c85c8ef2 VK |
158 | success = SQLQuery(szQuery); |
159 | } | |
160 | return success; | |
5039dede AK |
161 | } |
162 | ||
4f50e45c VK |
163 | /** |
164 | * Set primary key constraint | |
165 | */ | |
5039dede AK |
166 | static BOOL SetPrimaryKey(const TCHAR *table, const TCHAR *key) |
167 | { | |
168 | TCHAR query[4096]; | |
169 | ||
2a964810 | 170 | if (g_dbSyntax == DB_SYNTAX_SQLITE) |
5039dede | 171 | return TRUE; // SQLite does not support adding constraints |
6f33021d | 172 | |
5039dede AK |
173 | _sntprintf(query, 4096, _T("ALTER TABLE %s ADD PRIMARY KEY (%s)"), table, key); |
174 | return SQLQuery(query); | |
175 | } | |
176 | ||
4f50e45c VK |
177 | /** |
178 | * Drop primary key from table | |
179 | */ | |
9bfc9a6b VK |
180 | static BOOL DropPrimaryKey(const TCHAR *table) |
181 | { | |
182 | TCHAR query[1024]; | |
183 | DB_RESULT hResult; | |
184 | BOOL success; | |
185 | ||
2a964810 | 186 | switch(g_dbSyntax) |
9bfc9a6b | 187 | { |
c849da55 VK |
188 | case DB_SYNTAX_DB2: |
189 | case DB_SYNTAX_INFORMIX: | |
9bfc9a6b | 190 | case DB_SYNTAX_MYSQL: |
c849da55 | 191 | case DB_SYNTAX_ORACLE: |
9bfc9a6b VK |
192 | _sntprintf(query, 1024, _T("ALTER TABLE %s DROP PRIMARY KEY"), table); |
193 | success = SQLQuery(query); | |
194 | break; | |
195 | case DB_SYNTAX_PGSQL: | |
196 | _sntprintf(query, 1024, _T("ALTER TABLE %s DROP CONSTRAINT %s_pkey"), table, table); | |
197 | success = SQLQuery(query); | |
198 | break; | |
199 | case DB_SYNTAX_MSSQL: | |
200 | success = FALSE; | |
201 | _sntprintf(query, 1024, _T("SELECT name FROM sysobjects WHERE xtype='PK' AND parent_obj=OBJECT_ID('%s')"), table); | |
202 | hResult = SQLSelect(query); | |
203 | if (hResult != NULL) | |
204 | { | |
205 | if (DBGetNumRows(hResult) > 0) | |
206 | { | |
207 | TCHAR objName[512]; | |
208 | ||
209 | DBGetField(hResult, 0, 0, objName, 512); | |
210 | _sntprintf(query, 1024, _T("ALTER TABLE %s DROP CONSTRAINT %s"), table, objName); | |
211 | success = SQLQuery(query); | |
212 | } | |
213 | DBFreeResult(hResult); | |
214 | } | |
215 | break; | |
216 | default: // Unsupported DB engine | |
217 | success = FALSE; | |
218 | break; | |
219 | } | |
c849da55 VK |
220 | |
221 | if ((g_dbSyntax == DB_SYNTAX_DB2) && success) | |
222 | { | |
223 | _sntprintf(query, 1024, _T("CALL Sysproc.admin_cmd('REORG TABLE %s')"), table); | |
224 | success = SQLQuery(query); | |
225 | } | |
9bfc9a6b VK |
226 | return success; |
227 | } | |
228 | ||
4f50e45c VK |
229 | /** |
230 | * Convert strings from # encoded form to normal form | |
231 | */ | |
d6bf58f9 | 232 | static BOOL ConvertStrings(const TCHAR *table, const TCHAR *idColumn, const TCHAR *idColumn2, const TCHAR *column, bool isStringId) |
643c9dcb VK |
233 | { |
234 | DB_RESULT hResult; | |
235 | TCHAR *query; | |
4e0e77e6 | 236 | size_t queryLen = 512; |
643c9dcb VK |
237 | BOOL success = FALSE; |
238 | ||
c29fb885 | 239 | query = (TCHAR *)malloc(queryLen * sizeof(TCHAR)); |
fe12a1ea | 240 | |
2a964810 | 241 | switch(g_dbSyntax) |
a4743a0f VK |
242 | { |
243 | case DB_SYNTAX_MSSQL: | |
9f6712bc | 244 | _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE CAST(%s AS nvarchar(4000))=N'#00'"), table, column, column); |
a4743a0f VK |
245 | break; |
246 | case DB_SYNTAX_ORACLE: | |
247 | _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE to_char(%s)='#00'"), table, column, column); | |
248 | break; | |
249 | default: | |
250 | _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE %s='#00'"), table, column, column); | |
251 | break; | |
252 | } | |
fe12a1ea VK |
253 | if (!SQLQuery(query)) |
254 | { | |
255 | free(query); | |
256 | return FALSE; | |
257 | } | |
258 | ||
6f33021d | 259 | _sntprintf(query, queryLen, _T("SELECT %s,%s%s%s FROM %s WHERE %s LIKE '%%#%%'"), |
98cd01bb | 260 | idColumn, column, (idColumn2 != NULL) ? _T(",") : _T(""), (idColumn2 != NULL) ? idColumn2 : _T(""), table, column); |
643c9dcb VK |
261 | hResult = SQLSelect(query); |
262 | if (hResult == NULL) | |
263 | { | |
264 | free(query); | |
265 | return FALSE; | |
266 | } | |
267 | ||
268 | int count = DBGetNumRows(hResult); | |
269 | for(int i = 0; i < count; i++) | |
270 | { | |
643c9dcb | 271 | TCHAR *value = DBGetField(hResult, i, 1, NULL, 0); |
035a4d73 | 272 | if (_tcschr(value, _T('#')) != NULL) |
643c9dcb | 273 | { |
035a4d73 VK |
274 | DecodeSQLString(value); |
275 | String newValue = DBPrepareString(g_hCoreDB, value); | |
4e0e77e6 | 276 | if (newValue.length() + 256 > queryLen) |
035a4d73 | 277 | { |
4e0e77e6 | 278 | queryLen = newValue.length() + 256; |
c29fb885 | 279 | query = (TCHAR *)realloc(query, queryLen * sizeof(TCHAR)); |
035a4d73 | 280 | } |
d6bf58f9 | 281 | if (isStringId) |
98cd01bb | 282 | { |
d6bf58f9 VK |
283 | TCHAR *id = DBGetField(hResult, i, 0, NULL, 0); |
284 | if (idColumn2 != NULL) | |
285 | { | |
286 | TCHAR *id2 = DBGetField(hResult, i, 2, NULL, 0); | |
287 | _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=%s AND %s=%s"), | |
288 | table, column, (const TCHAR *)newValue, | |
6f33021d | 289 | idColumn, (const TCHAR *)DBPrepareString(g_hCoreDB, id), |
d6bf58f9 VK |
290 | idColumn2, (const TCHAR *)DBPrepareString(g_hCoreDB, id2)); |
291 | } | |
292 | else | |
293 | { | |
294 | _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=%s"), table, column, | |
295 | (const TCHAR *)newValue, idColumn, (const TCHAR *)DBPrepareString(g_hCoreDB, id)); | |
296 | } | |
297 | free(id); | |
98cd01bb VK |
298 | } |
299 | else | |
300 | { | |
d6bf58f9 VK |
301 | INT64 id = DBGetFieldInt64(hResult, i, 0); |
302 | if (idColumn2 != NULL) | |
303 | { | |
304 | INT64 id2 = DBGetFieldInt64(hResult, i, 2); | |
6f33021d | 305 | _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=") INT64_FMT _T(" AND %s=") INT64_FMT, |
d6bf58f9 VK |
306 | table, column, (const TCHAR *)newValue, idColumn, id, idColumn2, id2); |
307 | } | |
308 | else | |
309 | { | |
310 | _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=") INT64_FMT, table, column, | |
311 | (const TCHAR *)newValue, idColumn, id); | |
312 | } | |
98cd01bb | 313 | } |
035a4d73 VK |
314 | if (!SQLQuery(query)) |
315 | goto cleanup; | |
643c9dcb | 316 | } |
643c9dcb VK |
317 | } |
318 | success = TRUE; | |
319 | ||
320 | cleanup: | |
321 | DBFreeResult(hResult); | |
a4743a0f | 322 | free(query); |
643c9dcb VK |
323 | return success; |
324 | } | |
325 | ||
98cd01bb VK |
326 | static BOOL ConvertStrings(const TCHAR *table, const TCHAR *idColumn, const TCHAR *column) |
327 | { | |
d6bf58f9 | 328 | return ConvertStrings(table, idColumn, NULL, column, false); |
98cd01bb VK |
329 | } |
330 | ||
4f50e45c | 331 | /** |
241541f4 | 332 | * Remove NOT NULL constraint from column |
4f50e45c | 333 | */ |
241541f4 | 334 | static bool RemoveNotNullConstraint(const TCHAR *table, const TCHAR *column) |
1024e962 VK |
335 | { |
336 | TCHAR query[1024] = _T(""); | |
337 | ||
2a964810 | 338 | switch(g_dbSyntax) |
1024e962 VK |
339 | { |
340 | case DB_SYNTAX_ORACLE: | |
341 | _sntprintf(query, 1024, _T("DECLARE already_null EXCEPTION; ") | |
342 | _T("PRAGMA EXCEPTION_INIT(already_null, -1451); ") | |
f57209fd VK |
343 | _T("BEGIN EXECUTE IMMEDIATE 'ALTER TABLE %s MODIFY %s null'; ") |
344 | _T("EXCEPTION WHEN already_null THEN null; END;"), table, column); | |
1024e962 | 345 | break; |
480e036b VK |
346 | case DB_SYNTAX_PGSQL: |
347 | _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s DROP NOT NULL"), table, column); | |
348 | break; | |
1024e962 VK |
349 | default: |
350 | break; | |
351 | } | |
352 | ||
241541f4 VK |
353 | return (query[0] != 0) ? SQLQuery(query) : true; |
354 | } | |
355 | ||
356 | /** | |
357 | * Set NOT NULL constraint on column | |
358 | */ | |
359 | static bool SetNotNullConstraint(const TCHAR *table, const TCHAR *column) | |
360 | { | |
361 | TCHAR query[1024] = _T(""); | |
362 | ||
363 | switch(g_dbSyntax) | |
364 | { | |
365 | case DB_SYNTAX_ORACLE: | |
366 | _sntprintf(query, 1024, _T("DECLARE already_not_null EXCEPTION; ") | |
367 | _T("PRAGMA EXCEPTION_INIT(already_not_null, -1442); ") | |
368 | _T("BEGIN EXECUTE IMMEDIATE 'ALTER TABLE %s MODIFY %s NOT NULL'; ") | |
369 | _T("EXCEPTION WHEN already_not_null THEN null; END;"), table, column); | |
370 | break; | |
371 | case DB_SYNTAX_PGSQL: | |
372 | _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s SET NOT NULL"), table, column); | |
373 | break; | |
374 | default: | |
375 | break; | |
376 | } | |
377 | ||
378 | return (query[0] != 0) ? SQLQuery(query) : true; | |
1024e962 VK |
379 | } |
380 | ||
480e036b VK |
381 | /** |
382 | * Resize varchar column | |
383 | */ | |
b69710b9 | 384 | static BOOL ResizeColumn(const TCHAR *table, const TCHAR *column, int newSize, bool nullable) |
480e036b VK |
385 | { |
386 | TCHAR query[1024]; | |
387 | ||
2a964810 | 388 | switch(g_dbSyntax) |
480e036b VK |
389 | { |
390 | case DB_SYNTAX_DB2: | |
391 | _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s SET DATA TYPE varchar(%d)"), table, column, newSize); | |
392 | break; | |
393 | case DB_SYNTAX_MSSQL: | |
b69710b9 | 394 | _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s varchar(%d) %s NULL"), table, column, newSize, nullable ? _T("") : _T("NOT")); |
480e036b VK |
395 | break; |
396 | case DB_SYNTAX_PGSQL: | |
397 | _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s TYPE varchar(%d)"), table, column, newSize); | |
398 | break; | |
399 | case DB_SYNTAX_SQLITE: | |
400 | /* TODO: add SQLite support */ | |
401 | query[0] = 0; | |
402 | break; | |
403 | default: | |
404 | _sntprintf(query, 1024, _T("ALTER TABLE %s MODIFY %s varchar(%d)"), table, column, newSize); | |
405 | break; | |
406 | } | |
407 | ||
408 | return (query[0] != 0) ? SQLQuery(query) : TRUE; | |
409 | } | |
410 | ||
4f50e45c VK |
411 | /** |
412 | * Create new event template | |
413 | */ | |
3da098f7 | 414 | static BOOL CreateEventTemplate(int code, const TCHAR *name, int severity, int flags, const TCHAR *guid, const TCHAR *message, const TCHAR *description) |
aa16f82b | 415 | { |
480e036b | 416 | TCHAR query[4096]; |
aa16f82b | 417 | |
3da098f7 VK |
418 | if (guid != NULL) |
419 | { | |
420 | _sntprintf(query, 4096, _T("INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description,guid) VALUES (%d,'%s',%d,%d,%s,%s,'%s')"), | |
421 | code, name, severity, flags, (const TCHAR *)DBPrepareString(g_hCoreDB, message), | |
422 | (const TCHAR *)DBPrepareString(g_hCoreDB, description), guid); | |
423 | } | |
424 | else | |
425 | { | |
426 | _sntprintf(query, 4096, _T("INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description) VALUES (%d,'%s',%d,%d,%s,%s)"), | |
427 | code, name, severity, flags, (const TCHAR *)DBPrepareString(g_hCoreDB, message), | |
428 | (const TCHAR *)DBPrepareString(g_hCoreDB, description)); | |
429 | } | |
aa16f82b VK |
430 | return SQLQuery(query); |
431 | } | |
432 | ||
22aaa779 VK |
433 | /** |
434 | * Re-create TDATA tables | |
435 | */ | |
2f1bc68b | 436 | static BOOL RecreateTData(const TCHAR *className, bool multipleTables, bool indexFix) |
22aaa779 | 437 | { |
1d4f7890 | 438 | TCHAR query[1024]; |
22aaa779 VK |
439 | _sntprintf(query, 256, _T("SELECT id FROM %s"), className); |
440 | DB_RESULT hResult = SQLSelect(query); | |
441 | if (hResult != NULL) | |
442 | { | |
443 | int count = DBGetNumRows(hResult); | |
444 | for(int i = 0; i < count; i++) | |
445 | { | |
2f1bc68b | 446 | bool recreateTables = true; |
22aaa779 VK |
447 | DWORD id = DBGetFieldULong(hResult, i, 0); |
448 | ||
2f1bc68b | 449 | if (indexFix) |
1d4f7890 | 450 | { |
2f1bc68b VK |
451 | _sntprintf(query, 256, _T("SELECT count(*) FROM dc_tables WHERE node_id=%d"), id); |
452 | DB_RESULT hResultCount = SQLSelect(query); | |
453 | if (hResultCount != NULL) | |
22aaa779 | 454 | { |
7d4f8ace | 455 | recreateTables = (DBGetFieldLong(hResultCount, 0, 0) == 0); |
2f1bc68b VK |
456 | DBFreeResult(hResultCount); |
457 | } | |
458 | ||
459 | if (!recreateTables) | |
460 | { | |
a9f5aa55 | 461 | _sntprintf(query, 256, _T("CREATE INDEX idx_tdata_rec_%d_id ON tdata_records_%d(record_id)"), id, id); |
2f1bc68b VK |
462 | if (!SQLQuery(query)) |
463 | { | |
464 | if (!g_bIgnoreErrors) | |
465 | { | |
466 | DBFreeResult(hResult); | |
467 | return FALSE; | |
468 | } | |
469 | } | |
22aaa779 VK |
470 | } |
471 | } | |
472 | ||
2f1bc68b | 473 | if (recreateTables) |
22aaa779 | 474 | { |
2f1bc68b | 475 | if (multipleTables) |
22aaa779 | 476 | { |
2f1bc68b VK |
477 | _sntprintf(query, 1024, _T("DROP TABLE tdata_rows_%d\nDROP TABLE tdata_records_%d\nDROP TABLE tdata_%d\n<END>"), id, id, id); |
478 | } | |
479 | else | |
480 | { | |
481 | _sntprintf(query, 256, _T("DROP TABLE tdata_%d\n<END>"), id); | |
482 | } | |
483 | if (!SQLBatch(query)) | |
484 | { | |
485 | if (!g_bIgnoreErrors) | |
486 | { | |
487 | DBFreeResult(hResult); | |
488 | return FALSE; | |
489 | } | |
490 | } | |
491 | ||
492 | if (!CreateTDataTables(id)) | |
493 | { | |
494 | if (!g_bIgnoreErrors) | |
495 | { | |
496 | DBFreeResult(hResult); | |
497 | return FALSE; | |
498 | } | |
22aaa779 VK |
499 | } |
500 | } | |
501 | } | |
502 | DBFreeResult(hResult); | |
503 | } | |
504 | else | |
505 | { | |
506 | if (!g_bIgnoreErrors) | |
507 | return FALSE; | |
508 | } | |
385b1f20 | 509 | return TRUE; |
510 | } | |
511 | ||
c75e9ee4 VK |
512 | /** |
513 | * Convert network masks from dotted decimal format to number of bits | |
514 | */ | |
515 | static BOOL ConvertNetMasks(const TCHAR *table, const TCHAR *column, const TCHAR *idColumn, const TCHAR *idColumn2 = NULL, const TCHAR *condition = NULL) | |
516 | { | |
517 | TCHAR query[256]; | |
fcf91b2e | 518 | |
c75e9ee4 VK |
519 | if (idColumn2 != NULL) |
520 | _sntprintf(query, 256, _T("SELECT %s,%s,%s FROM %s"), idColumn, column, idColumn2, table); | |
521 | else | |
522 | _sntprintf(query, 256, _T("SELECT %s,%s FROM %s"), idColumn, column, table); | |
523 | DB_RESULT hResult = SQLSelect(query); | |
524 | if (hResult == NULL) | |
525 | return FALSE; | |
526 | ||
a19fa589 | 527 | BOOL success = SQLDropColumn(table, column); |
fcf91b2e | 528 | |
c75e9ee4 VK |
529 | if (success) |
530 | { | |
531 | _sntprintf(query, 256, _T("ALTER TABLE %s ADD %s integer"), table, column); | |
532 | success = SQLQuery(query); | |
533 | } | |
534 | ||
535 | if (success) | |
536 | { | |
537 | int count = DBGetNumRows(hResult); | |
538 | for(int i = 0; (i < count) && success; i++) | |
539 | { | |
540 | if (idColumn2 != NULL) | |
541 | { | |
542 | TCHAR id2[256]; | |
fcf91b2e | 543 | _sntprintf(query, 256, _T("UPDATE %s SET %s=%d WHERE %s=%d AND %s='%s'"), |
c75e9ee4 VK |
544 | table, column, BitsInMask(DBGetFieldIPAddr(hResult, i, 1)), idColumn, DBGetFieldLong(hResult, i, 0), |
545 | idColumn2, DBGetField(hResult, i, 2, id2, 256)); | |
546 | } | |
547 | else | |
548 | { | |
fcf91b2e | 549 | _sntprintf(query, 256, _T("UPDATE %s SET %s=%d WHERE %s=%d"), |
c75e9ee4 VK |
550 | table, column, BitsInMask(DBGetFieldIPAddr(hResult, i, 1)), idColumn, DBGetFieldLong(hResult, i, 0)); |
551 | } | |
552 | success = SQLQuery(query); | |
553 | } | |
554 | } | |
555 | ||
556 | DBFreeResult(hResult); | |
557 | return success; | |
558 | } | |
559 | ||
b2a15edc VK |
560 | /** |
561 | * Convert object tool macros to new format | |
562 | */ | |
563 | static bool ConvertObjectToolMacros(UINT32 id, const TCHAR *text, const TCHAR *column) | |
564 | { | |
565 | if (_tcschr(text, _T('%')) == NULL) | |
566 | return true; // nothing to convert | |
567 | ||
568 | String s; | |
569 | for(const TCHAR *p = text; *p != 0; p++) | |
570 | { | |
571 | if (*p == _T('%')) | |
572 | { | |
573 | TCHAR name[256]; | |
574 | int i = 0; | |
575 | for(p++; (*p != _T('%')) && (*p != 0); p++) | |
576 | { | |
577 | if (i < 255) | |
578 | name[i++] = *p; | |
579 | } | |
580 | if (*p == 0) | |
581 | break; // malformed string | |
582 | name[i] = 0; | |
583 | if (!_tcscmp(name, _T("ALARM_ID"))) | |
584 | { | |
585 | s.append(_T("%Y")); | |
586 | } | |
587 | else if (!_tcscmp(name, _T("ALARM_MESSAGE"))) | |
588 | { | |
589 | s.append(_T("%A")); | |
590 | } | |
591 | else if (!_tcscmp(name, _T("ALARM_SEVERITY"))) | |
592 | { | |
593 | s.append(_T("%s")); | |
594 | } | |
595 | else if (!_tcscmp(name, _T("ALARM_SEVERITY_TEXT"))) | |
596 | { | |
597 | s.append(_T("%S")); | |
598 | } | |
599 | else if (!_tcscmp(name, _T("ALARM_STATE"))) | |
600 | { | |
601 | s.append(_T("%y")); | |
602 | } | |
603 | else if (!_tcscmp(name, _T("OBJECT_ID"))) | |
604 | { | |
605 | s.append(_T("%I")); | |
606 | } | |
607 | else if (!_tcscmp(name, _T("OBJECT_IP_ADDR"))) | |
608 | { | |
609 | s.append(_T("%a")); | |
610 | } | |
611 | else if (!_tcscmp(name, _T("OBJECT_NAME"))) | |
612 | { | |
613 | s.append(_T("%n")); | |
614 | } | |
615 | else if (!_tcscmp(name, _T("USERNAME"))) | |
616 | { | |
617 | s.append(_T("%U")); | |
618 | } | |
619 | else | |
620 | { | |
621 | s.append(_T("%{")); | |
622 | s.append(name); | |
623 | s.append(_T('}')); | |
624 | } | |
625 | } | |
626 | else | |
627 | { | |
628 | s.append(*p); | |
629 | } | |
630 | } | |
631 | ||
632 | String query = _T("UPDATE object_tools SET "); | |
633 | query.append(column); | |
634 | query.append(_T('=')); | |
635 | query.append(DBPrepareString(g_hCoreDB, s)); | |
636 | query.append(_T(" WHERE tool_id=")); | |
637 | query.append(id); | |
638 | return SQLQuery(query); | |
639 | } | |
8a1519ce | 640 | |
83aa5ebd VK |
641 | /** |
642 | * Create library script | |
643 | */ | |
644 | static bool CreateLibraryScript(UINT32 id, const TCHAR *name, const TCHAR *code) | |
645 | { | |
646 | // Check if script exists | |
647 | TCHAR query[256]; | |
648 | _sntprintf(query, 256, _T("SELECT script_id FROM script_library WHERE script_id=%d OR script_name=%s"), | |
649 | id, (const TCHAR *)DBPrepareString(g_hCoreDB, name)); | |
650 | DB_RESULT hResult = SQLSelect(query); | |
651 | if (hResult == NULL) | |
652 | return false; | |
653 | bool exist = (DBGetNumRows(hResult) > 0); | |
654 | DBFreeResult(hResult); | |
655 | if (exist) | |
656 | return true; | |
657 | ||
658 | DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("INSERT INTO script_library (script_id,script_name,script_code) VALUES (?,?,?)")); | |
659 | if (hStmt == NULL) | |
660 | return false; | |
661 | ||
662 | DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, id); | |
663 | DBBind(hStmt, 2, DB_SQLTYPE_VARCHAR, name, DB_BIND_STATIC); | |
664 | DBBind(hStmt, 3, DB_SQLTYPE_TEXT, code, DB_BIND_STATIC); | |
665 | ||
666 | bool success = SQLExecute(hStmt); | |
667 | DBFreeStatement(hStmt); | |
668 | return success; | |
669 | } | |
670 | ||
e2a9c5fc VK |
671 | /** |
672 | * Check if an event pair is handled by any EPP rules | |
673 | */ | |
674 | static bool IsEventPairInUse(UINT32 code1, UINT32 code2) | |
675 | { | |
676 | TCHAR query[256]; | |
677 | _sntprintf(query, 256, _T("SELECT count(*) FROM policy_event_list WHERE event_code=%d OR event_code=%d"), code1, code2); | |
678 | DB_RESULT hResult = SQLSelect(query); | |
679 | if (hResult == NULL) | |
680 | return false; | |
681 | bool inUse = (DBGetFieldLong(hResult, 0, 0) > 0); | |
682 | DBFreeResult(hResult); | |
683 | return inUse; | |
684 | } | |
685 | ||
686 | /** | |
687 | * Return the next free EPP rule ID | |
688 | */ | |
689 | static int NextFreeEPPruleID() | |
690 | { | |
691 | int ruleId = 1; | |
692 | DB_RESULT hResult = SQLSelect(_T("SELECT max(rule_id) FROM event_policy")); | |
693 | if (hResult != NULL) | |
694 | { | |
695 | ruleId = DBGetFieldLong(hResult, 0, 0) + 1; | |
696 | DBFreeResult(hResult); | |
697 | } | |
698 | return ruleId; | |
699 | } | |
700 | ||
e4926628 VK |
701 | /** |
702 | * Set schema version | |
703 | */ | |
704 | static bool SetSchemaVersion(int version) | |
705 | { | |
706 | TCHAR query[256]; | |
707 | _sntprintf(query, 256, _T("UPDATE metadata SET var_value='%d' WHERE var_name='SchemaVersion'"), version); | |
708 | return SQLQuery(query); | |
709 | } | |
710 | ||
241541f4 VK |
711 | /** |
712 | * Upgrade from V409 to V410 | |
713 | */ | |
714 | static BOOL H_UpgradeFromV409(int currVersion, int newVersion) | |
715 | { | |
716 | static const TCHAR *batch = | |
717 | _T("ALTER TABLE zones ADD ssh_proxy integer\n") | |
718 | _T("UPDATE zones SET ssh_proxy=0\n") | |
719 | _T("ALTER TABLE nodes ADD ssh_login varchar(63)\n") | |
720 | _T("ALTER TABLE nodes ADD ssh_password varchar(63)\n") | |
721 | _T("ALTER TABLE nodes ADD ssh_proxy integer\n") | |
722 | _T("UPDATE nodes SET ssh_proxy=0\n") | |
723 | _T("<END>"); | |
724 | CHK_EXEC(SQLBatch(batch)); | |
725 | ||
726 | CHK_EXEC(SetNotNullConstraint(_T("nodes"), _T("ssh_proxy"))); | |
727 | CHK_EXEC(SetNotNullConstraint(_T("zones"), _T("ssh_proxy"))); | |
728 | ||
729 | CHK_EXEC(SetSchemaVersion(410)); | |
730 | return TRUE; | |
731 | } | |
732 | ||
e980db40 VK |
733 | /** |
734 | * Upgrade from V408 to V409 | |
735 | */ | |
736 | static BOOL H_UpgradeFromV408(int currVersion, int newVersion) | |
737 | { | |
738 | static const TCHAR *batch = | |
739 | _T("ALTER TABLE nodes ADD node_type integer\n") | |
740 | _T("ALTER TABLE nodes ADD node_subtype varchar(127)\n") | |
741 | _T("UPDATE nodes SET node_type=0\n") | |
742 | _T("<END>"); | |
743 | CHK_EXEC(SQLBatch(batch)); | |
744 | ||
241541f4 VK |
745 | CHK_EXEC(SetNotNullConstraint(_T("nodes"), _T("node_type"))); |
746 | ||
e980db40 VK |
747 | CHK_EXEC(SetSchemaVersion(409)); |
748 | return TRUE; | |
749 | } | |
750 | ||
e4926628 VK |
751 | /** |
752 | * Upgrade from V407 to V408 | |
753 | */ | |
754 | static BOOL H_UpgradeFromV407(int currVersion, int newVersion) | |
755 | { | |
756 | CHK_EXEC(CreateTable( | |
757 | _T("CREATE TABLE chassis (") | |
758 | _T(" id integer not null,") | |
32a400d9 | 759 | _T(" flags integer not null,") |
e4926628 VK |
760 | _T(" controller_id integer not null,") |
761 | _T(" rack_id integer not null,") | |
762 | _T(" rack_image varchar(36) null,") | |
763 | _T(" rack_position integer not null,") | |
764 | _T(" rack_height integer not null,") | |
765 | _T(" PRIMARY KEY(id))") | |
766 | )); | |
767 | ||
768 | static const TCHAR *batch = | |
769 | _T("ALTER TABLE nodes ADD chassis_id integer\n") | |
770 | _T("UPDATE nodes SET chassis_id=0\n") | |
771 | _T("<END>"); | |
772 | CHK_EXEC(SQLBatch(batch)); | |
773 | ||
241541f4 VK |
774 | CHK_EXEC(SetNotNullConstraint(_T("nodes"), _T("chassis_id"))); |
775 | ||
e4926628 VK |
776 | CHK_EXEC(SetSchemaVersion(408)); |
777 | return TRUE; | |
778 | } | |
779 | ||
8498228c | 780 | /** |
781 | * Upgrade from V406 to V407 | |
782 | */ | |
783 | static BOOL H_UpgradeFromV406(int currVersion, int newVersion) | |
784 | { | |
785 | ResizeColumn(_T("user_groups"), _T("ldap_unique_id"), 64, true); | |
e4926628 | 786 | CHK_EXEC(SetSchemaVersion(407)); |
8498228c | 787 | return TRUE; |
788 | } | |
789 | ||
ba756b1a VK |
790 | /** |
791 | * Upgrade from V405 to V406 | |
792 | */ | |
793 | static BOOL H_UpgradeFromV405(int currVersion, int newVersion) | |
794 | { | |
795 | static const TCHAR *batch = | |
796 | _T("ALTER TABLE nodes ADD syslog_msg_count $SQL:INT64\n") | |
797 | _T("ALTER TABLE nodes ADD snmp_trap_count $SQL:INT64\n") | |
798 | _T("UPDATE nodes SET syslog_msg_count=0,snmp_trap_count=0\n") | |
799 | _T("<END>"); | |
800 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 801 | CHK_EXEC(SetSchemaVersion(406)); |
ba756b1a VK |
802 | return TRUE; |
803 | } | |
804 | ||
b123ecb3 | 805 | /** |
806 | * Upgrade from V404 to V405 | |
807 | */ | |
808 | static BOOL H_UpgradeFromV404(int currVersion, int newVersion) | |
809 | { | |
7b30e5ae | 810 | CHK_EXEC(CreateEventTemplate(EVENT_AGENT_LOG_PROBLEM, _T("SYS_AGENT_LOG_PROBLEM"), |
b123ecb3 | 811 | SEVERITY_MAJOR, EF_LOG, _T("262057ca-357a-4a4d-9b78-42ae96e490a1"), |
812 | _T("Problem with agent log: %2"), | |
7b30e5ae | 813 | _T("Generated on status poll if agent reports problem with log file.\r\n") |
b123ecb3 | 814 | _T("Parameters:\r\n") |
7b30e5ae | 815 | _T(" 1) Status code\r\n") |
b123ecb3 | 816 | _T(" 2) Description"))); |
7b30e5ae | 817 | CHK_EXEC(CreateEventTemplate(EVENT_AGENT_LOCAL_DATABASE_PROBLEM, _T("SYS_AGENT_LOCAL_DATABASE_PROBLEM"), |
b123ecb3 | 818 | SEVERITY_MAJOR, EF_LOG, _T("d02b63f1-1151-429e-adb9-1dfbb3a31b32"), |
819 | _T("Problem with agent local database: %2"), | |
7b30e5ae | 820 | _T("Generated on status poll if agent reports local database problem.\r\n") |
b123ecb3 | 821 | _T("Parameters:\r\n") |
7b30e5ae | 822 | _T(" 1) Status code\r\n") |
b123ecb3 | 823 | _T(" 2) Description"))); |
824 | ||
825 | int ruleId = NextFreeEPPruleID(); | |
826 | TCHAR query[1024]; | |
827 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) ") | |
7b30e5ae | 828 | _T("VALUES (%d,'19bd89ba-8bb2-4915-8546-a1ecc650dedd',7944,'Generate an alarm when there is problem with agent log','%%m',5,'SYS_AGENT_LOG_PROBLEM_%%i','',0,%d,0,'')"), |
b123ecb3 | 829 | ruleId, EVENT_ALARM_TIMEOUT); |
830 | CHK_EXEC(SQLQuery(query)); | |
7b30e5ae | 831 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_AGENT_LOG_PROBLEM); |
b123ecb3 | 832 | CHK_EXEC(SQLQuery(query)); |
7b30e5ae VK |
833 | |
834 | ruleId = NextFreeEPPruleID(); | |
b123ecb3 | 835 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) ") |
7b30e5ae | 836 | _T("VALUES (%d,'cff7fe6b-2ad1-4c18-8a8f-4d397d44fe04',7944,'Generate an alarm when there is problem with agent local database','%%m',5,'SYS_AGENT_LOCAL_DATABASE_PROBLEM_%%i','',0,%d,0,'')"), |
b123ecb3 | 837 | ruleId, EVENT_ALARM_TIMEOUT); |
838 | CHK_EXEC(SQLQuery(query)); | |
7b30e5ae | 839 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_AGENT_LOCAL_DATABASE_PROBLEM); |
b123ecb3 | 840 | CHK_EXEC(SQLQuery(query)); |
841 | ||
e4926628 | 842 | CHK_EXEC(SetSchemaVersion(405)); |
b123ecb3 | 843 | return TRUE; |
844 | } | |
845 | ||
b8c8a8a7 VK |
846 | /** |
847 | * Upgrade from V403 to V404 | |
848 | */ | |
849 | static BOOL H_UpgradeFromV403(int currVersion, int newVersion) | |
850 | { | |
851 | CHK_EXEC(CreateConfigParam(_T("SyslogIgnoreMessageTimestamp"), _T("0"), | |
852 | _T("Ignore timestamp received in syslog messages and always use server time"), | |
853 | 'B', true, false, false, false)); | |
e4926628 | 854 | CHK_EXEC(SetSchemaVersion(404)); |
b8c8a8a7 VK |
855 | return TRUE; |
856 | } | |
857 | ||
a18687b9 VK |
858 | /** |
859 | * Upgrade from V402 to V403 | |
860 | */ | |
861 | static BOOL H_UpgradeFromV402(int currVersion, int newVersion) | |
862 | { | |
863 | CHK_EXEC(SQLQuery(_T("DROP TABLE policy_time_range_list"))); | |
864 | CHK_EXEC(SQLQuery(_T("DROP TABLE time_ranges"))); | |
e4926628 | 865 | CHK_EXEC(SetSchemaVersion(403)); |
a18687b9 VK |
866 | return TRUE; |
867 | } | |
868 | ||
ed0a9e41 VK |
869 | /** |
870 | * Upgrade from V401 to V402 | |
871 | */ | |
872 | static BOOL H_UpgradeFromV401(int currVersion, int newVersion) | |
873 | { | |
874 | CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_event_log_source ON event_log(event_source)"))); | |
e4926628 | 875 | CHK_EXEC(SetSchemaVersion(402)); |
ed0a9e41 VK |
876 | return TRUE; |
877 | } | |
878 | ||
bad2c02e | 879 | /** |
880 | * Upgrade from V400 to V401 | |
881 | */ | |
882 | static BOOL H_UpgradeFromV400(int currVersion, int newVersion) | |
883 | { | |
3da098f7 VK |
884 | CHK_EXEC(CreateEventTemplate(EVENT_LDAP_SYNC_ERROR, _T("SYS_LDAP_SYNC_ERROR"), |
885 | SEVERITY_MAJOR, EF_LOG, _T("f7e8508d-1503-4736-854b-1e5b8b0ad1f2"), | |
886 | _T("LDAP sync error: %5"), | |
bad2c02e | 887 | _T("Generated when LDAP synchronization error occurs.\r\n") |
888 | _T("Parameters:\r\n") | |
889 | _T(" 1) User ID\r\n") | |
890 | _T(" 2) User GUID\r\n") | |
891 | _T(" 3) User LDAP DN\r\n") | |
892 | _T(" 4) User name\r\n") | |
893 | _T(" 5) Problem description"))); | |
355aa002 | 894 | |
3da098f7 | 895 | int ruleId = NextFreeEPPruleID(); |
bad2c02e | 896 | TCHAR query[1024]; |
3da098f7 | 897 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'417648af-5361-49a5-9471-6ef31e857b2d',7944,'Generate an alarm when error occurred during LDAP synchronization','%%m',5,'SYS_LDAP_SYNC_ERROR_%%2','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); |
bad2c02e | 898 | CHK_EXEC(SQLQuery(query)); |
50e319a2 | 899 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_LDAP_SYNC_ERROR); |
bad2c02e | 900 | CHK_EXEC(SQLQuery(query)); |
901 | ||
902 | CHK_EXEC(SQLQuery(_T("ALTER TABLE users ADD ldap_unique_id varchar(64)"))); | |
903 | CHK_EXEC(SQLQuery(_T("ALTER TABLE user_groups ADD ldap_unique_id varchar(64)"))); | |
904 | CHK_EXEC(CreateConfigParam(_T("LdapUserUniqueId"), _T(""), true, false, false)); | |
905 | CHK_EXEC(CreateConfigParam(_T("LdapGroupUniqueId"), _T(""), true, false, false)); | |
906 | ||
e4926628 | 907 | CHK_EXEC(SetSchemaVersion(401)); |
bad2c02e | 908 | return TRUE; |
909 | } | |
355aa002 | 910 | |
8e6e8ef1 | 911 | /** |
355aa002 TD |
912 | * Upgrade from V399 to V400 |
913 | */ | |
914 | static BOOL H_UpgradeFromV399(int currVersion, int newVersion) | |
915 | { | |
916 | CHK_EXEC(CreateConfigParam(_T("JobRetryCount"), _T("5"), _T("Maximum mumber of job execution retrys"), 'I', true, false, false, false)); | |
e4926628 | 917 | CHK_EXEC(SetSchemaVersion(400)); |
355aa002 TD |
918 | return TRUE; |
919 | } | |
920 | ||
921 | /** | |
922 | * Upgrade from V398 to V399 | |
8e6e8ef1 VK |
923 | */ |
924 | static BOOL H_UpgradeFromV398(int currVersion, int newVersion) | |
925 | { | |
926 | CHK_EXEC(CreateTable( | |
927 | _T("CREATE TABLE config_repositories (") | |
928 | _T(" id integer not null,") | |
929 | _T(" url varchar(1023) not null,") | |
930 | _T(" auth_token varchar(63) null,") | |
931 | _T(" description varchar(1023) null,") | |
932 | _T(" PRIMARY KEY(id))") | |
933 | )); | |
934 | ||
e4926628 | 935 | CHK_EXEC(SetSchemaVersion(399)); |
8e6e8ef1 VK |
936 | return TRUE; |
937 | } | |
938 | ||
0de31ec3 VK |
939 | /** |
940 | * Upgrade from V397 to V398 | |
941 | */ | |
942 | static BOOL H_UpgradeFromV397(int currVersion, int newVersion) | |
943 | { | |
944 | CHK_EXEC(CreateTable( | |
945 | _T("CREATE TABLE currency_codes (") | |
946 | _T(" numeric_code char(3) not null,") | |
947 | _T(" alpha_code char(3) not null,") | |
a27a303e | 948 | _T(" description varchar(127) not null,") |
0de31ec3 VK |
949 | _T(" exponent integer not null,") |
950 | _T(" PRIMARY KEY(numeric_code))") | |
951 | )); | |
952 | ||
953 | CHK_EXEC(CreateTable( | |
954 | _T("CREATE TABLE country_codes (") | |
955 | _T(" numeric_code char(3) not null,") | |
956 | _T(" alpha_code char(2) not null,") | |
957 | _T(" alpha3_code char(3) not null,") | |
a27a303e | 958 | _T(" name varchar(127) not null,") |
0de31ec3 VK |
959 | _T(" PRIMARY KEY(numeric_code))") |
960 | )); | |
961 | ||
dc4472a5 | 962 | static const TCHAR *batch1 = |
0de31ec3 VK |
963 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('008', 'ALL', 'Lek', 2)\n") |
964 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('012', 'DZD', 'Algerian Dinar', 2)\n") | |
965 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('031', 'AZM', 'Azerbaijanian Manat', 0)\n") | |
966 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('032', 'ARS', 'Argentine Peso', 2)\n") | |
967 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('036', 'AUD', 'Australian Dollar', 2)\n") | |
968 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('044', 'BSD', 'Bahamian Dollar', 2)\n") | |
969 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('048', 'BHD', 'Bahraini Dinar', 3)\n") | |
970 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('050', 'BDT', 'Taka', 2)\n") | |
971 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('051', 'AMD', 'Armenian Dram', 2)\n") | |
972 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('052', 'BBD', 'Barbados Dollar', 2)\n") | |
973 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('060', 'BMD', 'Bermudian Dollar', 2)\n") | |
974 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('064', 'BTN', 'Ngultrum', 2)\n") | |
975 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('068', 'BOB', 'Boliviano', 2)\n") | |
976 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('072', 'BWP', 'Pula', 2)\n") | |
977 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('084', 'BZD', 'Belize Dollar', 2)\n") | |
978 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('090', 'SBD', 'Solomon Islands Dollar', 2)\n") | |
979 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('096', 'BND', 'Brunei Dollar', 2)\n") | |
980 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('100', 'BGL', 'Lev', 0)\n") | |
981 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('104', 'MMK', 'Kyat', 2)\n") | |
982 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('108', 'BIF', 'Burundi Franc', 0)\n") | |
983 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('116', 'KHR', 'Riel', 2)\n") | |
984 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('124', 'CAD', 'Canadian Dollar', 2)\n") | |
985 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('132', 'CVE', 'Cape Verde Escudo', 2)\n") | |
986 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('136', 'KYD', 'Cayman Islands Dollar', 2)\n") | |
987 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('144', 'LKR', 'Sri Lanka Rupee', 2)\n") | |
988 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('152', 'CLP', 'Chilean Peso', 0)\n") | |
989 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('156', 'CNY', 'Yuan Renminbi', 2)\n") | |
990 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('170', 'COP', 'Colombian Peso', 2)\n") | |
991 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('174', 'KMF', 'Comoro Franc', 0)\n") | |
992 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('188', 'CRC', 'Costa Rican Colon', 2)\n") | |
993 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('191', 'HRK', 'Croatian Kuna', 2)\n") | |
994 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('192', 'CUP', 'Cuban Peso', 2)\n") | |
995 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('196', 'CYP', 'Cyprus Pound', 0)\n") | |
996 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('203', 'CZK', 'Czech Koruna', 2)\n") | |
997 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('208', 'DKK', 'Danish Krone', 2)\n") | |
998 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('214', 'DOP', 'Dominican Peso', 2)\n") | |
999 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('222', 'SVC', 'El Salvador Colon', 2)\n") | |
1000 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('230', 'ETB', 'Ethiopian Birr', 2)\n") | |
1001 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('232', 'ERN', 'Nakfa', 2)\n") | |
1002 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('233', 'EEK', 'Estonian Kroon', 0)\n") | |
1003 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('238', 'FKP', 'Falkland Islands Pound', 2)\n") | |
1004 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('242', 'FJD', 'Fiji Dollar', 2)\n") | |
1005 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('262', 'DJF', 'Djibouti Franc', 0)\n") | |
1006 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('270', 'GMD', 'Dalasi', 2)\n") | |
1007 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('288', 'GHC', 'Cedi', 0)\n") | |
1008 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('292', 'GIP', 'Gibraltar Pound', 2)\n") | |
1009 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('320', 'GTQ', 'Quetzal', 2)\n") | |
1010 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('324', 'GNF', 'Guinea Franc', 0)\n") | |
1011 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('328', 'GYD', 'Guyana Dollar', 2)\n") | |
1012 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('332', 'HTG', 'Gourde', 2)\n") | |
1013 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('340', 'HNL', 'Lempira', 2)\n") | |
1014 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('344', 'HKD', 'Hong Kong Dollar', 2)\n") | |
1015 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('348', 'HUF', 'Forint', 2)\n") | |
1016 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('352', 'ISK', 'Iceland Krona', 0)\n") | |
1017 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('356', 'INR', 'Indian Rupee', 2)\n") | |
1018 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('360', 'IDR', 'Rupiah', 2)\n") | |
1019 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('364', 'IRR', 'Iranian Rial', 2)\n") | |
1020 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('368', 'IQD', 'Iraqi Dinar', 3)\n") | |
1021 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('376', 'ILS', 'New Israeli Sheqel', 2)\n") | |
1022 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('388', 'JMD', 'Jamaican Dollar', 2)\n") | |
1023 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('392', 'JPY', 'Yen', 0)\n") | |
1024 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('398', 'KZT', 'Tenge', 2)\n") | |
1025 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('400', 'JOD', 'Jordanian Dinar', 3)\n") | |
1026 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('404', 'KES', 'Kenyan Shilling', 2)\n") | |
1027 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('408', 'KPW', 'North Korean Won', 2)\n") | |
1028 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('410', 'KRW', 'Won', 0)\n") | |
1029 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('414', 'KWD', 'Kuwaiti Dinar', 3)\n") | |
1030 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('417', 'KGS', 'Som', 2)\n") | |
1031 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('418', 'LAK', 'Kip', 2)\n") | |
1032 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('422', 'LBP', 'Lebanese Pound', 2)\n") | |
1033 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('426', 'LSL', 'Lesotho Loti', 2)\n") | |
1034 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('428', 'LVL', 'Latvian Lats', 2)\n") | |
1035 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('430', 'LRD', 'Liberian Dollar', 2)\n") | |
1036 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('434', 'LYD', 'Lybian Dinar', 3)\n") | |
1037 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('440', 'LTL', 'Lithuanian Litas', 2)\n") | |
1038 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('446', 'MOP', 'Pataca', 2)\n") | |
1039 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('450', 'MGF', 'Malagasy Franc', 0)\n") | |
1040 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('454', 'MWK', 'Kwacha', 2)\n") | |
1041 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('458', 'MYR', 'Malaysian Ringgit', 2)\n") | |
1042 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('462', 'MVR', 'Rufiyaa', 2)\n") | |
1043 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('470', 'MTL', 'Maltese Lira', 0)\n") | |
1044 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('478', 'MRO', 'Ouguiya', 2)\n") | |
1045 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('480', 'MUR', 'Mauritius Rupee', 2)\n") | |
1046 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('484', 'MXN', 'Mexican Peso', 2)\n") | |
1047 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('496', 'MNT', 'Tugrik', 2)\n") | |
1048 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('498', 'MDL', 'Moldovan Leu', 2)\n") | |
1049 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('504', 'MAD', 'Moroccan Dirham', 2)\n") | |
1050 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('508', 'MZM', 'Metical', 0)\n") | |
1051 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('512', 'OMR', 'Rial Omani', 3)\n") | |
1052 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('516', 'NAD', 'Namibia Dollar', 2)\n") | |
1053 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('524', 'NPR', 'Nepalese Rupee', 2)\n") | |
1054 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('532', 'ANG', 'Netherlands Antillan Guilder', 2)\n") | |
1055 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('533', 'AWG', 'Aruban Guilder', 2)\n") | |
1056 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('548', 'VUV', 'Vatu', 0)\n") | |
1057 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('554', 'NZD', 'New Zealand Dollar', 2)\n") | |
1058 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('558', 'NIO', 'Cordoba Oro', 2)\n") | |
1059 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('566', 'NGN', 'Naira', 2)\n") | |
1060 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('578', 'NOK', 'Norvegian Krone', 2)\n") | |
1061 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('586', 'PKR', 'Pakistan Rupee', 2)\n") | |
1062 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('590', 'PAB', 'Balboa', 2)\n") | |
1063 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('598', 'PGK', 'Kina', 2)\n") | |
1064 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('600', 'PYG', 'Guarani', 0)\n") | |
1065 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('604', 'PEN', 'Nuevo Sol', 2)\n") | |
1066 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('608', 'PHP', 'Philippine Peso', 2)\n") | |
1067 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('624', 'GWP', 'Guinea-Bissau Peso', 0)\n") | |
1068 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('634', 'QAR', 'Qatari Rial', 2)\n") | |
1069 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('642', 'ROL', 'Leu', 0)\n") | |
1070 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('643', 'RUB', 'Russian Ruble', 2)\n") | |
1071 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('646', 'RWF', 'Rwanda Franc', 0)\n") | |
1072 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('654', 'SHP', 'Saint Helena Pound', 2)\n") | |
1073 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('678', 'STD', 'Dobra', 2)\n") | |
1074 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('682', 'SAR', 'Saudi Riyal', 2)\n") | |
1075 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('690', 'SCR', 'Seychelles Rupee', 2)\n") | |
1076 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('694', 'SLL', 'Leone', 2)\n") | |
1077 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('702', 'SGD', 'Singapore Dollar', 2)\n") | |
1078 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('703', 'SKK', 'Slovak Koruna', 0)\n") | |
1079 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('704', 'VND', 'Dong', 0)\n") | |
1080 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('706', 'SOS', 'Somali Shilling', 2)\n") | |
1081 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('710', 'ZAR', 'Rand', 2)\n") | |
1082 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('716', 'ZWD', 'Zimbabwe Dollar', 0)\n") | |
1083 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('728', 'SSP', 'South Sudanese pound', 2)\n") | |
1084 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('740', 'SRG', 'Suriname Guilder', 0)\n") | |
1085 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('748', 'SZL', 'Lilangeni', 2)\n") | |
1086 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('752', 'SEK', 'Swedish Krona', 2)\n") | |
1087 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('756', 'CHF', 'Swiss Franc', 2)\n") | |
1088 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('760', 'SYP', 'Syrian Pound', 2)\n") | |
1089 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('764', 'THB', 'Baht', 2)\n") | |
1090 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('776', 'TOP', 'Paanga', 2)\n") | |
1091 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('780', 'TTD', 'Trinidad and Tobago Dollar', 2)\n") | |
1092 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('784', 'AED', 'UAE Dirham', 2)\n") | |
1093 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('788', 'TND', 'Tunisian Dinar', 3)\n") | |
1094 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('795', 'TMM', 'Manat', 0)\n") | |
1095 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('800', 'UGX', 'Uganda Shilling', 2)\n") | |
1096 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('807', 'MKD', 'Denar', 2)\n") | |
1097 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('810', 'RUR', 'Russian Ruble', 0)\n") | |
1098 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('818', 'EGP', 'Egyptian Pound', 2)\n") | |
1099 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('826', 'GBP', 'Pound Sterling', 2)\n") | |
1100 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('834', 'TZS', 'Tanzanian Shilling', 2)\n") | |
1101 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('840', 'USD', 'US Dollar', 2)\n") | |
1102 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('858', 'UYU', 'Peso Uruguayo', 2)\n") | |
1103 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('860', 'UZS', 'Uzbekistan Sum', 2)\n") | |
1104 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('862', 'VEB', 'Bolivar', 0)\n") | |
1105 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('882', 'WST', 'Tala', 2)\n") | |
1106 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('886', 'YER', 'Yemeni Rial', 2)\n") | |
1107 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('891', 'CSD', 'Serbian Dinar', 0)\n") | |
1108 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('894', 'ZMK', 'Kwacha', 2)\n") | |
1109 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('901', 'TWD', 'New Taiwan Dollar', 2)\n") | |
1110 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('933', 'BYN', 'Belarussian New Ruble', 2)\n") | |
1111 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('934', 'TMT', 'Turkmenistani Manat', 2)\n") | |
1112 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('937', 'VEF', 'Venezuelan Bolivar', 2)\n") | |
1113 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('938', 'SDG', 'Sudanese Pound', 2)\n") | |
1114 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('941', 'RSD', 'Serbian Dinar', 2)\n") | |
1115 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('943', 'MZN', 'Mozambican Metical', 2)\n") | |
1116 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('944', 'AZN', 'Azerbaijani Manat', 2)\n") | |
1117 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('946', 'RON', 'New Romanian Leu', 2)\n") | |
1118 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('949', 'TRY', 'New Turkish Lira', 2)\n") | |
1119 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('950', 'XAF', 'CFA Franc BEAC', 0)\n") | |
1120 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('951', 'XCD', 'East Carribbean Dollar', 2)\n") | |
1121 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('952', 'XOF', 'CFA Franc BCEAO', 0)\n") | |
1122 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('953', 'XPF', 'CFP Franc', 0)\n") | |
1123 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('967', 'ZMW', 'Zambian Kwacha', 2)\n") | |
1124 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('968', 'SRD', 'Surinamese Dollar', 2)\n") | |
1125 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('969', 'MGA', 'Malagasy Ariary', 2)\n") | |
1126 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('971', 'AFN', 'Afghani', 2)\n") | |
1127 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('972', 'TJS', 'Somoni', 2)\n") | |
1128 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('973', 'AOA', 'Kwanza', 2)\n") | |
1129 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('974', 'BYR', 'Belarussian Ruble', 0)\n") | |
1130 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('975', 'BGN', 'Bulgarian Lev', 2)\n") | |
1131 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('976', 'CDF', 'Franc Congolais', 2)\n") | |
1132 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('977', 'BAM', 'Convertible Marks', 2)\n") | |
1133 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('978', 'EUR', 'Euro', 2)\n") | |
1134 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('979', 'MXV', 'Mexican Unidad de Inversion (UDI)', 2)\n") | |
1135 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('980', 'UAH', 'Hryvnia', 2)\n") | |
1136 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('981', 'GEL', 'Lari', 2)\n") | |
1137 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('984', 'BOV', 'Mvdol', 2)\n") | |
1138 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('985', 'PLN', 'Zloty', 2)\n") | |
1139 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('986', 'BRL', 'Brazilian Real', 2)\n") | |
1140 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('990', 'CLF', 'Unidades de Fomento', 0)\n") | |
1141 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('997', 'USN', 'US dollar (next day funds code)', 2)\n") | |
1142 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('998', 'USS', 'US dollar (same day funds code)', 2)\n") | |
1143 | _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('999', 'XXX', 'No currency', 0)\n") | |
dc4472a5 VK |
1144 | _T("<END>"); |
1145 | static const TCHAR *batch2 = | |
0de31ec3 VK |
1146 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AD','AND','020','Andorra')\n") |
1147 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AE','ARE','784','United Arab Emirates')\n") | |
1148 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AF','AFG','004','Afghanistan')\n") | |
1149 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AG','ATG','028','Antigua and Barbuda')\n") | |
1150 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AI','AIA','660','Anguilla')\n") | |
1151 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AL','ALB','008','Albania')\n") | |
1152 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AM','ARM','051','Armenia')\n") | |
1153 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AN','ANT','530','Netherlands Antilles')\n") | |
1154 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AO','AGO','024','Angola')\n") | |
1155 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AQ','ATA','010','Antarctica')\n") | |
1156 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AR','ARG','032','Argentina')\n") | |
1157 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AS','ASM','016','American Samoa')\n") | |
1158 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AT','AUT','040','Austria')\n") | |
1159 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AU','AUS','036','Australia')\n") | |
1160 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AW','ABW','533','Aruba')\n") | |
1161 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AX','ALA','248','Aland Islands')\n") | |
1162 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AZ','AZE','031','Azerbaijan')\n") | |
1163 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BA','BIH','070','Bosnia and Herzegovina')\n") | |
1164 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BB','BRB','052','Barbados')\n") | |
1165 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BD','BGD','050','Bangladesh')\n") | |
1166 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BE','BEL','056','Belgium')\n") | |
1167 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BF','BFA','854','Burkina Faso')\n") | |
1168 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BG','BGR','100','Bulgaria')\n") | |
1169 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BH','BHR','048','Bahrain')\n") | |
1170 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BI','BDI','108','Burundi')\n") | |
1171 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BJ','BEN','204','Benin')\n") | |
1172 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BL','BLM','652','Saint-Barthelemy')\n") | |
1173 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BM','BMU','060','Bermuda')\n") | |
1174 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BN','BRN','096','Brunei Darussalam')\n") | |
1175 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BO','BOL','068','Bolivia')\n") | |
1176 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BQ','BES','535','Bonaire, Sint Eustatius and Saba')\n") | |
1177 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BR','BRA','076','Brazil')\n") | |
1178 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BS','BHS','044','Bahamas')\n") | |
1179 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BT','BTN','064','Bhutan')\n") | |
1180 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BV','BVT','074','Bouvet Island')\n") | |
1181 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BW','BWA','072','Botswana')\n") | |
1182 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BY','BLR','112','Belarus')\n") | |
1183 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BZ','BLZ','084','Belize')\n") | |
1184 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CA','CAN','124','Canada')\n") | |
1185 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CC','CCK','166','Cocos (Keeling) Islands')\n") | |
1186 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CD','COD','180','Congo, Democratic Republic of the')\n") | |
1187 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CF','CAF','140','Central African Republic')\n") | |
1188 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CG','COG','178','Congo (Brazzaville)')\n") | |
1189 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CH','CHE','756','Switzerland')\n") | |
1190 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CI','CIV','384','Cote d''Ivoire')\n") | |
1191 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CK','COK','184','Cook Islands')\n") | |
1192 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CL','CHL','152','Chile')\n") | |
1193 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CM','CMR','120','Cameroon')\n") | |
1194 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CN','CHN','156','China')\n") | |
1195 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CO','COL','170','Colombia')\n") | |
1196 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CR','CRI','188','Costa Rica')\n") | |
1197 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CU','CUB','192','Cuba')\n") | |
1198 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CV','CPV','132','Cape Verde')\n") | |
1199 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CW','CUW','531','Curacao')\n") | |
1200 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CX','CXR','162','Christmas Island')\n") | |
1201 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CY','CYP','196','Cyprus')\n") | |
1202 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CZ','CZE','203','Czech Republic')\n") | |
1203 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DE','DEU','276','Germany')\n") | |
1204 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DJ','DJI','262','Djibouti')\n") | |
1205 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DK','DNK','208','Denmark')\n") | |
1206 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DM','DMA','212','Dominica')\n") | |
1207 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DO','DOM','214','Dominican Republic')\n") | |
1208 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DZ','DZA','012','Algeria')\n") | |
1209 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('EC','ECU','218','Ecuador')\n") | |
1210 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('EE','EST','233','Estonia')\n") | |
1211 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('EG','EGY','818','Egypt')\n") | |
1212 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('EH','ESH','732','Western Sahara')\n") | |
1213 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ER','ERI','232','Eritrea')\n") | |
1214 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ES','ESP','724','Spain')\n") | |
1215 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ET','ETH','231','Ethiopia')\n") | |
1216 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FI','FIN','246','Finland')\n") | |
1217 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FJ','FJI','242','Fiji')\n") | |
1218 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FK','FLK','238','Falkland Islands (Malvinas)')\n") | |
1219 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FM','FSM','583','Micronesia, Federated States of')\n") | |
1220 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FO','FRO','234','Faroe Islands')\n") | |
1221 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FR','FRA','250','France')\n") | |
1222 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GA','GAB','266','Gabon')\n") | |
1223 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GB','GBR','826','United Kingdom')\n") | |
1224 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GD','GRD','308','Grenada')\n") | |
1225 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GE','GEO','268','Georgia')\n") | |
1226 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GF','GUF','254','French Guiana')\n") | |
1227 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GG','GGY','831','Guernsey')\n") | |
1228 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GH','GHA','288','Ghana')\n") | |
1229 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GI','GIB','292','Gibraltar')\n") | |
1230 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GL','GRL','304','Greenland')\n") | |
1231 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GM','GMB','270','Gambia')\n") | |
1232 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GN','GIN','324','Guinea')\n") | |
1233 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GP','GLP','312','Guadeloupe')\n") | |
1234 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GQ','GNQ','226','Equatorial Guinea')\n") | |
1235 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GR','GRC','300','Greece')\n") | |
1236 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GS','SGS','239','South Georgia and the South Sandwich Islands')\n") | |
1237 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GT','GTM','320','Guatemala')\n") | |
1238 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GU','GUM','316','Guam')\n") | |
1239 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GW','GNB','624','Guinea-Bissau')\n") | |
1240 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GY','GUY','328','Guyana')\n") | |
1241 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HK','HKG','344','Hong Kong, Special Administrative Region of China')\n") | |
1242 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HM','HMD','334','Heard Island and Mcdonald Islands')\n") | |
1243 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HN','HND','340','Honduras')\n") | |
1244 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HR','HRV','191','Croatia')\n") | |
1245 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HT','HTI','332','Haiti')\n") | |
1246 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HU','HUN','348','Hungary')\n") | |
1247 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ID','IDN','360','Indonesia')\n") | |
1248 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IE','IRL','372','Ireland')\n") | |
1249 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IL','ISR','376','Israel')\n") | |
1250 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IM','IMN','833','Isle of Man')\n") | |
1251 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IN','IND','356','India')\n") | |
1252 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IO','IOT','086','British Indian Ocean Territory')\n") | |
1253 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IQ','IRQ','368','Iraq')\n") | |
1254 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IR','IRN','364','Iran, Islamic Republic of')\n") | |
1255 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IS','ISL','352','Iceland')\n") | |
1256 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IT','ITA','380','Italy')\n") | |
1257 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('JE','JEY','832','Jersey')\n") | |
1258 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('JM','JAM','388','Jamaica')\n") | |
1259 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('JO','JOR','400','Jordan')\n") | |
1260 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('JP','JPN','392','Japan')\n") | |
1261 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KE','KEN','404','Kenya')\n") | |
1262 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KG','KGZ','417','Kyrgyzstan')\n") | |
1263 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KH','KHM','116','Cambodia')\n") | |
1264 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KI','KIR','296','Kiribati')\n") | |
1265 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KM','COM','174','Comoros')\n") | |
1266 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KN','KNA','659','Saint Kitts and Nevis')\n") | |
1267 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KP','PRK','408','Korea, Democratic People''s Republic of')\n") | |
1268 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KR','KOR','410','Korea, Republic of')\n") | |
1269 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KW','KWT','414','Kuwait')\n") | |
1270 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KY','CYM','136','Cayman Islands')\n") | |
1271 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KZ','KAZ','398','Kazakhstan')\n") | |
1272 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LA','LAO','418','Lao PDR')\n") | |
1273 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LB','LBN','422','Lebanon')\n") | |
1274 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LC','LCA','662','Saint Lucia')\n") | |
1275 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LI','LIE','438','Liechtenstein')\n") | |
1276 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LK','LKA','144','Sri Lanka')\n") | |
1277 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LR','LBR','430','Liberia')\n") | |
1278 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LS','LSO','426','Lesotho')\n") | |
1279 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LT','LTU','440','Lithuania')\n") | |
1280 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LU','LUX','442','Luxembourg')\n") | |
1281 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LV','LVA','428','Latvia')\n") | |
1282 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LY','LBY','434','Libya')\n") | |
1283 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MA','MAR','504','Morocco')\n") | |
1284 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MC','MCO','492','Monaco')\n") | |
1285 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MD','MDA','498','Moldova')\n") | |
1286 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ME','MNE','499','Montenegro')\n") | |
1287 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MF','MAF','663','Saint-Martin (French part)')\n") | |
1288 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MG','MDG','450','Madagascar')\n") | |
1289 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MH','MHL','584','Marshall Islands')\n") | |
1290 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MK','MKD','807','Macedonia, Republic of')\n") | |
1291 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ML','MLI','466','Mali')\n") | |
1292 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MM','MMR','104','Myanmar')\n") | |
1293 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MN','MNG','496','Mongolia')\n") | |
1294 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MO','MAC','446','Macao, Special Administrative Region of China')\n") | |
1295 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MP','MNP','580','Northern Mariana Islands')\n") | |
1296 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MQ','MTQ','474','Martinique')\n") | |
1297 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MR','MRT','478','Mauritania')\n") | |
1298 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MS','MSR','500','Montserrat')\n") | |
1299 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MT','MLT','470','Malta')\n") | |
1300 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MU','MUS','480','Mauritius')\n") | |
1301 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MV','MDV','462','Maldives')\n") | |
1302 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MW','MWI','454','Malawi')\n") | |
1303 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MX','MEX','484','Mexico')\n") | |
1304 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MY','MYS','458','Malaysia')\n") | |
1305 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MZ','MOZ','508','Mozambique')\n") | |
1306 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NA','NAM','516','Namibia')\n") | |
1307 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NC','NCL','540','New Caledonia')\n") | |
1308 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NE','NER','562','Niger')\n") | |
1309 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NF','NFK','574','Norfolk Island')\n") | |
1310 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NG','NGA','566','Nigeria')\n") | |
1311 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NI','NIC','558','Nicaragua')\n") | |
1312 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NL','NLD','528','Netherlands')\n") | |
1313 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NO','NOR','578','Norway')\n") | |
1314 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NP','NPL','524','Nepal')\n") | |
1315 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NR','NRU','520','Nauru')\n") | |
1316 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NU','NIU','570','Niue')\n") | |
1317 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NZ','NZL','554','New Zealand')\n") | |
1318 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('OM','OMN','512','Oman')\n") | |
1319 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PA','PAN','591','Panama')\n") | |
1320 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PE','PER','604','Peru')\n") | |
1321 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PF','PYF','258','French Polynesia')\n") | |
1322 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PG','PNG','598','Papua New Guinea')\n") | |
1323 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PH','PHL','608','Philippines')\n") | |
1324 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PK','PAK','586','Pakistan')\n") | |
1325 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PL','POL','616','Poland')\n") | |
1326 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PM','SPM','666','Saint Pierre and Miquelon')\n") | |
1327 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PN','PCN','612','Pitcairn')\n") | |
1328 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PR','PRI','630','Puerto Rico')\n") | |
1329 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PS','PSE','275','Palestinian Territory, Occupied')\n") | |
1330 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PT','PRT','620','Portugal')\n") | |
1331 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PW','PLW','585','Palau')\n") | |
1332 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PY','PRY','600','Paraguay')\n") | |
1333 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('QA','QAT','634','Qatar')\n") | |
1334 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RE','REU','638','Reunion')\n") | |
1335 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RO','ROU','642','Romania')\n") | |
1336 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RS','SRB','688','Serbia')\n") | |
1337 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RU','RUS','643','Russian Federation')\n") | |
1338 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RW','RWA','646','Rwanda')\n") | |
1339 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SA','SAU','682','Saudi Arabia')\n") | |
1340 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SB','SLB','090','Solomon Islands')\n") | |
1341 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SC','SYC','690','Seychelles')\n") | |
1342 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SD','SDN','729','Sudan')\n") | |
1343 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SE','SWE','752','Sweden')\n") | |
1344 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SG','SGP','702','Singapore')\n") | |
1345 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SH','SHN','654','Saint Helena')\n") | |
1346 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SI','SVN','705','Slovenia')\n") | |
1347 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SJ','SJM','744','Svalbard and Jan Mayen Islands')\n") | |
1348 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SK','SVK','703','Slovakia')\n") | |
1349 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SL','SLE','694','Sierra Leone')\n") | |
1350 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SM','SMR','674','San Marino')\n") | |
1351 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SN','SEN','686','Senegal')\n") | |
1352 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SO','SOM','706','Somalia')\n") | |
1353 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SR','SUR','740','Suriname')\n") | |
1354 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SS','SSD','728','South Sudan')\n") | |
1355 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ST','STP','678','Sao Tome and Principe')\n") | |
1356 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SV','SLV','222','El Salvador')\n") | |
1357 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SX','SXM','534','Sint Maarten (Dutch part)')\n") | |
1358 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SY','SYR','760','Syrian Arab Republic (Syria)')\n") | |
1359 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SZ','SWZ','748','Swaziland')\n") | |
1360 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TC','TCA','796','Turks and Caicos Islands')\n") | |
1361 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TD','TCD','148','Chad')\n") | |
1362 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TF','ATF','260','French Southern Territories')\n") | |
1363 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TG','TGO','768','Togo')\n") | |
1364 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TH','THA','764','Thailand')\n") | |
1365 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TJ','TJK','762','Tajikistan')\n") | |
1366 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TK','TKL','772','Tokelau')\n") | |
1367 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TL','TLS','626','Timor-Leste')\n") | |
1368 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TM','TKM','795','Turkmenistan')\n") | |
1369 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TN','TUN','788','Tunisia')\n") | |
1370 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TO','TON','776','Tonga')\n") | |
1371 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TR','TUR','792','Turkey')\n") | |
1372 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TT','TTO','780','Trinidad and Tobago')\n") | |
1373 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TV','TUV','798','Tuvalu')\n") | |
1374 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TW','TWN','158','Taiwan')\n") | |
1375 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TZ','TZA','834','Tanzania')\n") | |
1376 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UA','UKR','804','Ukraine')\n") | |
1377 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UG','UGA','800','Uganda')\n") | |
1378 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UM','UMI','581','United States Minor Outlying Islands')\n") | |
1379 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('US','USA','840','United States of America')\n") | |
1380 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UY','URY','858','Uruguay')\n") | |
1381 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UZ','UZB','860','Uzbekistan')\n") | |
1382 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VA','VAT','336','Holy See (Vatican City State)')\n") | |
1383 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VC','VCT','670','Saint Vincent and Grenadines')\n") | |
1384 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VE','VEN','862','Venezuela')\n") | |
1385 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VG','VGB','092','British Virgin Islands')\n") | |
1386 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VI','VIR','850','Virgin Islands, US')\n") | |
1387 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VN','VNM','704','Viet Nam')\n") | |
1388 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VU','VUT','548','Vanuatu')\n") | |
1389 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('WF','WLF','876','Wallis and Futuna Islands')\n") | |
1390 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('WS','WSM','882','Samoa')\n") | |
1391 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('YE','YEM','887','Yemen')\n") | |
1392 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('YT','MYT','175','Mayotte')\n") | |
1393 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ZA','ZAF','710','South Africa')\n") | |
1394 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ZM','ZMB','894','Zambia')\n") | |
1395 | _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ZW','ZWE','716','Zimbabwe')\n") | |
1396 | _T("<END>"); | |
dc4472a5 VK |
1397 | CHK_EXEC(SQLBatch(batch1)); |
1398 | CHK_EXEC(SQLBatch(batch2)); | |
0de31ec3 | 1399 | |
e4926628 | 1400 | CHK_EXEC(SetSchemaVersion(398)); |
0de31ec3 VK |
1401 | return TRUE; |
1402 | } | |
1403 | ||
50963ced VK |
1404 | /** |
1405 | * Upgrade from V396 to V397 | |
1406 | */ | |
1407 | static BOOL H_UpgradeFromV396(int currVersion, int newVersion) | |
1408 | { | |
1409 | static GUID_MAPPING eventGuidMapping[] = { | |
1410 | { EVENT_NODE_ADDED, _T("8d34acfd-dad6-4f6e-b6a8-1189683591ef") }, | |
1411 | { EVENT_SUBNET_ADDED, _T("75fc3f8b-768f-46b4-bf44-72949436a679") }, | |
1412 | { EVENT_INTERFACE_ADDED, _T("33cb8f9c-9427-459c-8a71-45c73f5cc183") }, | |
1413 | { EVENT_INTERFACE_UP, _T("09ee209a-0e75-434f-b8c8-399d93305d7b") }, | |
1414 | { EVENT_INTERFACE_DOWN, _T("d9a6d46d-97f8-48eb-a86a-2c0f6b150d0d") }, | |
1415 | { EVENT_INTERFACE_UNKNOWN, _T("ecb47be1-f911-4c1f-9b00-d0d21694071d") }, | |
1416 | { EVENT_INTERFACE_DISABLED, _T("2f3123a2-425f-47db-9c6b-9bc05a7fba2d") }, | |
1417 | { EVENT_INTERFACE_TESTING, _T("eb500e5c-3560-4394-8f5f-80aa67036f13") }, | |
1418 | { EVENT_INTERFACE_UNEXPECTED_UP, _T("ff21a165-9253-4ecc-929a-ffd1e388d504") }, | |
1419 | { EVENT_INTERFACE_EXPECTED_DOWN, _T("911358f4-d2a1-4465-94d7-ce4bc5c38860") }, | |
1420 | { EVENT_NODE_NORMAL, _T("03bc11c0-ec20-43be-be45-e60846f744dc") }, | |
1421 | { EVENT_NODE_WARNING, _T("1c80deab-aafb-43a7-93a7-1330dd563b47") }, | |
1422 | { EVENT_NODE_MINOR, _T("84eaea00-4ed7-41eb-9079-b783e5c60651") }, | |
1423 | { EVENT_NODE_MAJOR, _T("27035c88-c27a-4c16-97b3-4658d34a5f63") }, | |
1424 | { EVENT_NODE_CRITICAL, _T("8f2e98f8-1cd4-4e12-b41f-48b5c60ebe8e") }, | |
1425 | { EVENT_NODE_UNKNOWN, _T("6933cce0-fe1f-4123-817f-af1fb9f0eab4") }, | |
1426 | { EVENT_NODE_UNMANAGED, _T("a8356ba7-51b7-4487-b74e-d12132db233c") }, | |
1427 | { EVENT_NODE_FLAGS_CHANGED, _T("b04e39f5-d3a7-4d9a-b594-37132f5eaf34") }, | |
1428 | { EVENT_SNMP_FAIL, _T("d2fc3b0c-1215-4a92-b8f3-47df5d753602") }, | |
1429 | { EVENT_AGENT_FAIL, _T("ba484457-3594-418e-a72a-65336055d025") }, | |
1430 | { EVENT_INTERFACE_DELETED, _T("ad7e9856-e361-4095-9361-ccc462d93624") }, | |
1431 | { EVENT_THRESHOLD_REACHED, _T("05161c3d-7ceb-406f-af0a-af5c77f324a5") }, | |
1432 | { EVENT_THRESHOLD_REARMED, _T("25eef3a7-6158-4c5e-b4e3-8a7aa7ade73c") }, | |
1433 | { EVENT_SUBNET_DELETED, _T("af188eb3-e84f-4fd9-aecf-f1ba934a9f1a") }, | |
1434 | { EVENT_THREAD_HANGS, _T("df247d13-a63a-43fe-bb02-cb41718ee387") }, | |
1435 | { EVENT_THREAD_RUNNING, _T("5589f6ce-7133-44db-8e7a-e1452d636a9a") }, | |
1436 | { EVENT_SMTP_FAILURE, _T("1e376009-0d26-4b86-87a2-f4715a02fb38") }, | |
1437 | { EVENT_MAC_ADDR_CHANGED, _T("61916ef0-1eee-4df7-a95b-150928d47962") }, | |
1438 | { EVENT_INCORRECT_NETMASK, _T("86c08c55-416e-4ac4-bf2b-302b5fddbd68") }, | |
1439 | { EVENT_NODE_DOWN, _T("ce34f0d0-5b21-48c2-8788-8ed5ee547023") }, | |
1440 | { EVENT_NODE_UP, _T("05f180b6-62e7-4bc4-8a8d-34540214254b") }, | |
1441 | { EVENT_SERVICE_DOWN, _T("89caacb5-d2cf-493b-862f-cddbfecac5b6") }, | |
1442 | { EVENT_SERVICE_UP, _T("ab35e7c7-2428-44db-ad43-57fe551bb8cc") }, | |
1443 | { EVENT_SERVICE_UNKNOWN, _T("d891adae-49fe-4442-a8f3-0ca37ca8820a") }, | |
1444 | { EVENT_SMS_FAILURE, _T("c349bf75-458a-4d43-9c27-f71ea4bb06e2") }, | |
1445 | { EVENT_SNMP_OK, _T("a821086b-1595-40db-9148-8d770d30a54b") }, | |
1446 | { EVENT_AGENT_OK, _T("9c15299a-f2e3-4440-84c5-b17dea87ae2a") }, | |
1447 | { EVENT_SCRIPT_ERROR, _T("2cc78efe-357a-4278-932f-91e36754c775") }, | |
1448 | { EVENT_CONDITION_ACTIVATED, _T("16a86780-b73a-4601-929c-0c503bd06401") }, | |
1449 | { EVENT_CONDITION_DEACTIVATED, _T("926d15d2-9761-4bb6-a1ce-64175303796f") }, | |
1450 | { EVENT_DB_CONNECTION_LOST, _T("0311e9c8-8dcf-4a5b-9036-8cff034409ff") }, | |
1451 | { EVENT_DB_CONNECTION_RESTORED, _T("d36259a7-5f6b-4e3c-bb6f-17d1f8ac950d") }, | |
1452 | { EVENT_CLUSTER_RESOURCE_MOVED, _T("44abe5f3-a7c9-4fbd-8d10-53be172eae83") }, | |
1453 | { EVENT_CLUSTER_RESOURCE_DOWN, _T("c3b1d4b5-2e41-4a2f-b379-9d74ebba3a25") }, | |
1454 | { EVENT_CLUSTER_RESOURCE_UP, _T("ef6fff96-0cbb-4030-aeba-2473a80c6568") }, | |
1455 | { EVENT_CLUSTER_DOWN, _T("8f14d0f7-08d4-4422-92f4-469e5eef93ef") }, | |
1456 | { EVENT_CLUSTER_UP, _T("4a9cdb65-aa44-42f2-99b0-1e302aec10f6") }, | |
1457 | { EVENT_ALARM_TIMEOUT, _T("4ae4f601-327b-4ef8-9740-8600a1ba2acd") }, | |
1458 | { EVENT_LOG_RECORD_MATCHED, _T("d9326159-5c60-410f-990e-fae88df7fdd4") }, | |
1459 | { EVENT_EVENT_STORM_DETECTED, _T("c98d8575-d134-4044-ba67-75c5f5d0f6e0") }, | |
1460 | { EVENT_EVENT_STORM_ENDED, _T("dfd5e3ba-3182-4deb-bc32-9e6b8c1c6546") }, | |
1461 | { EVENT_NETWORK_CONNECTION_LOST, _T("3cb0921a-87a1-46e4-8be1-82ad2dda0015") }, | |
1462 | { EVENT_NETWORK_CONNECTION_RESTORED, _T("1c61b3e0-389a-47ac-8469-932a907392bc") }, | |
1463 | { EVENT_DB_QUERY_FAILED, _T("5f35d646-63b6-4dcd-b94a-e2ccd060686a") }, | |
1464 | { EVENT_DCI_UNSUPPORTED, _T("28367b5b-1541-4526-8cbe-91a17ed31ba4") }, | |
1465 | { EVENT_DCI_DISABLED, _T("50196042-0619-4420-9471-16b7c25c0213") }, | |
1466 | { EVENT_DCI_ACTIVE, _T("740b6810-b355-46f4-a921-65118504af18") }, | |
1467 | { EVENT_IP_ADDRESS_CHANGED, _T("517b6d2a-f5c6-46aa-969d-48e62e05e3bf") }, | |
1468 | { EVENT_CONTAINER_AUTOBIND, _T("611133e2-1f76-446f-b278-9d500a823611") }, | |
1469 | { EVENT_CONTAINER_AUTOUNBIND, _T("e57603be-0d81-41aa-b07c-12d08640561c") }, | |
1470 | { EVENT_TEMPLATE_AUTOAPPLY, _T("bf084945-f928-4428-8c6c-d2965addc832") }, | |
1471 | { EVENT_TEMPLATE_AUTOREMOVE, _T("8f7a4b4a-d0a2-4404-9b66-fdbc029f42cf") }, | |
1472 | { EVENT_NODE_UNREACHABLE, _T("47bba2ce-c795-4e56-ad44-cbf05741e1ff") }, | |
1473 | { EVENT_TABLE_THRESHOLD_ACTIVATED, _T("c08a1cfe-3128-40c2-99cc-378e7ef91f79") }, | |
1474 | { EVENT_TABLE_THRESHOLD_DEACTIVATED, _T("479085e7-e1d1-4f2a-9d96-1d522f51b26a") }, | |
1475 | { EVENT_IF_PEER_CHANGED, _T("a3a5c1df-9d96-4e98-9e06-b3157dbf39f0") }, | |
1476 | { EVENT_AP_ADOPTED, _T("5aaee261-0c5d-44e0-b2f0-223bbba5297d") }, | |
1477 | { EVENT_AP_UNADOPTED, _T("846a3581-aad1-4e17-9c55-9bd2e6b1247b") }, | |
1478 | { EVENT_AP_DOWN, _T("2c8c6208-d3ab-4b8c-926a-872f4d8abcee") }, | |
1479 | { EVENT_IF_MASK_CHANGED, _T("f800e593-057e-4aec-9e47-be0f7718c5c4") }, | |
1480 | { EVENT_IF_IPADDR_ADDED, _T("475bdca6-543e-410b-9aff-c217599e0fe6") }, | |
1481 | { EVENT_IF_IPADDR_DELETED, _T("ef477387-eb50-4a1a-bf90-717502b9873c") }, | |
1482 | { EVENT_MAINTENANCE_MODE_ENTERED, _T("5f6c8b1c-f162-413e-8028-80e7ad2c362d") }, | |
1483 | { EVENT_MAINTENANCE_MODE_LEFT, _T("cab06848-a622-430d-8b4c-addeea732657") }, | |
1484 | { EVENT_SNMP_UNMATCHED_TRAP, _T("fc3613f7-d151-4221-9acd-d28b6f804335") }, | |
1485 | { EVENT_SNMP_COLD_START, _T("39920e99-97bd-4d61-a462-43f89ba6fbdf") }, | |
1486 | { EVENT_SNMP_WARM_START, _T("0aa888c1-eba6-4fe7-a37a-b85f2b373bdc") }, | |
1487 | { EVENT_SNMP_LINK_DOWN, _T("b71338cc-137d-473c-a0f1-6b131086af56") }, | |
1488 | { EVENT_SNMP_LINK_UP, _T("03da14a7-e39c-4a46-a7cb-4bf77ec7936c") }, | |
1489 | { EVENT_SNMP_AUTH_FAILURE, _T("37020cb0-dde7-487b-9cfb-0d5ee771aa13") }, | |
1490 | { EVENT_SNMP_EGP_NL, _T("aecf5fa4-390c-4125-be10-df8b0e669fe1") }, | |
1491 | { 0, NULL } | |
1492 | }; | |
1493 | ||
1494 | CHK_EXEC(SQLQuery(_T("ALTER TABLE event_cfg ADD guid varchar(36)"))); | |
1495 | CHK_EXEC(GenerateGUID(_T("event_cfg"), _T("event_code"), _T("guid"), eventGuidMapping)); | |
e4926628 | 1496 | CHK_EXEC(SetSchemaVersion(397)); |
50963ced VK |
1497 | return TRUE; |
1498 | } | |
1499 | ||
3df8bccd Z |
1500 | /** |
1501 | * Upgrade from V395 to V396 | |
1502 | */ | |
1503 | static BOOL H_UpgradeFromV395(int currVersion, int newVersion) | |
1504 | { | |
1505 | CHK_EXEC(CreateTable( | |
1506 | _T("CREATE TABLE ap_log_parser (") | |
1507 | _T(" policy_id integer not null,") | |
1508 | _T(" file_content $SQL:TEXT null,") | |
1509 | _T(" PRIMARY KEY(policy_id))"))); | |
1510 | ||
e4926628 | 1511 | CHK_EXEC(SetSchemaVersion(396)); |
3df8bccd Z |
1512 | return TRUE; |
1513 | } | |
1514 | ||
fdef3439 Z |
1515 | /** |
1516 | * Upgrade from V394 to V395 | |
1517 | */ | |
1518 | static BOOL H_UpgradeFromV394(int currVersion, int newVersion) | |
1519 | { | |
f6456d80 | 1520 | CHK_EXEC(SQLQuery(_T("UPDATE config SET need_server_restart='1' WHERE var_name='OfflineDataRelevanceTime'"))); |
e4926628 | 1521 | CHK_EXEC(SetSchemaVersion(395)); |
fdef3439 Z |
1522 | return TRUE; |
1523 | } | |
1524 | ||
7f418694 Z |
1525 | /** |
1526 | * Upgrade from V393 to V394 | |
1527 | */ | |
1528 | static BOOL H_UpgradeFromV393(int currVersion, int newVersion) | |
1529 | { | |
c0e0623b | 1530 | CHK_EXEC(CreateConfigParam(_T("OfflineDataRelevanceTime"), _T("86400"), _T("Time period in seconds within which received offline data still relevant for threshold validation"), 'I', true, false, false, false)); |
e4926628 | 1531 | CHK_EXEC(SetSchemaVersion(394)); |
7f418694 Z |
1532 | return TRUE; |
1533 | } | |
1534 | ||
c908b63b VK |
1535 | /** |
1536 | * Upgrade from V392 to V393 | |
1537 | */ | |
1538 | static BOOL H_UpgradeFromV392(int currVersion, int newVersion) | |
1539 | { | |
1540 | CHK_EXEC(CreateConfigParam(_T("DefaultInterfaceExpectedState"), _T("0"), _T("Default expected state for new interface objects"), 'C', true, false, false, false)); | |
e4926628 | 1541 | CHK_EXEC(SetSchemaVersion(393)); |
c908b63b VK |
1542 | return TRUE; |
1543 | } | |
1544 | ||
1545 | /** | |
03b96461 VK |
1546 | * Upgrade from V391 to V392 |
1547 | */ | |
1548 | static BOOL H_UpgradeFromV391(int currVersion, int newVersion) | |
1549 | { | |
1550 | CHK_EXEC(CreateConfigParam(_T("ImportConfigurationOnStartup"), _T("0"), _T("Import configuration from local files on server startup"), 'B', true, true, false, false)); | |
e4926628 | 1551 | CHK_EXEC(SetSchemaVersion(392)); |
03b96461 VK |
1552 | return TRUE; |
1553 | } | |
1554 | ||
c908b63b | 1555 | /** |
f61f151c AK |
1556 | * Upgrade from V390 to V391 |
1557 | */ | |
1558 | static BOOL H_UpgradeFromV390(int currVersion, int newVersion) | |
1559 | { | |
03b96461 VK |
1560 | CHK_EXEC(CreateTable( |
1561 | _T("CREATE TABLE zmq_subscription (") | |
1562 | _T(" object_id integer not null,") | |
1563 | _T(" subscription_type char(1) not null,") | |
1564 | _T(" ignore_items integer not null,") | |
1565 | _T(" items $SQL:TEXT,") | |
1566 | _T(" PRIMARY KEY(object_id, subscription_type))"))); | |
f61f151c | 1567 | |
e4926628 | 1568 | CHK_EXEC(SetSchemaVersion(391)); |
f61f151c AK |
1569 | return TRUE; |
1570 | } | |
1571 | ||
23464115 VK |
1572 | /** |
1573 | * Upgrade from V389 to V390 | |
1574 | */ | |
1575 | static BOOL H_UpgradeFromV389(int currVersion, int newVersion) | |
1576 | { | |
1577 | CHK_EXEC(CreateTable( | |
1578 | _T("CREATE TABLE object_containers (") | |
1579 | _T(" id integer not null,") | |
1580 | _T(" object_class integer not null,") | |
1581 | _T(" flags integer not null,") | |
1582 | _T(" auto_bind_filter $SQL:TEXT null,") | |
1583 | _T(" PRIMARY KEY(id))"))); | |
1584 | ||
1585 | DB_RESULT hResult = SQLSelect(_T("SELECT id,object_class,flags,auto_bind_filter FROM containers")); | |
1586 | if (hResult != NULL) | |
1587 | { | |
1588 | int count = DBGetNumRows(hResult); | |
1589 | if (count > 0) | |
1590 | { | |
1591 | DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("INSERT INTO object_containers (id,object_class,flags,auto_bind_filter) VALUES (?,?,?,?)")); | |
1592 | if (hStmt != NULL) | |
1593 | { | |
1594 | for(int i = 0; i < count; i++) | |
1595 | { | |
1596 | DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0)); | |
1597 | DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, DBGetFieldLong(hResult, i, 1)); | |
1598 | DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 2)); | |
1599 | DBBind(hStmt, 4, DB_SQLTYPE_TEXT, DBGetField(hResult, i, 3, NULL, 0), DB_BIND_DYNAMIC); | |
1600 | if (!SQLExecute(hStmt)) | |
1601 | { | |
1602 | if (!g_bIgnoreErrors) | |
1603 | { | |
1604 | DBFreeStatement(hStmt); | |
1605 | DBFreeResult(hResult); | |
1606 | return FALSE; | |
1607 | } | |
1608 | } | |
1609 | } | |
1610 | DBFreeStatement(hStmt); | |
1611 | } | |
1612 | else if (!g_bIgnoreErrors) | |
1613 | { | |
1614 | DBFreeResult(hResult); | |
1615 | return FALSE; | |
1616 | } | |
1617 | } | |
1618 | DBFreeResult(hResult); | |
1619 | } | |
1620 | else | |
1621 | { | |
1622 | if (!g_bIgnoreErrors) | |
1623 | return FALSE; | |
1624 | } | |
1625 | ||
1626 | CHK_EXEC(SQLQuery(_T("DROP TABLE containers"))); | |
1627 | CHK_EXEC(SQLQuery(_T("DROP TABLE container_categories"))); | |
e4926628 | 1628 | CHK_EXEC(SetSchemaVersion(390)); |
23464115 VK |
1629 | return TRUE; |
1630 | } | |
1631 | ||
b120cd0f VK |
1632 | /** |
1633 | * Upgrade from V388 to V389 | |
1634 | */ | |
1635 | static BOOL H_UpgradeFromV388(int currVersion, int newVersion) | |
1636 | { | |
1637 | static TCHAR batch[] = | |
1638 | _T("ALTER TABLE racks ADD top_bottom_num char(1)\n") | |
1639 | _T("UPDATE racks SET top_bottom_num='0'\n") | |
1640 | _T("<END>"); | |
1641 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 1642 | CHK_EXEC(SetSchemaVersion(389)); |
b120cd0f VK |
1643 | return TRUE; |
1644 | } | |
1645 | ||
65ce7452 VK |
1646 | /** |
1647 | * Upgrade from V387 to V388 | |
1648 | */ | |
1649 | static BOOL H_UpgradeFromV387(int currVersion, int newVersion) | |
1650 | { | |
1651 | static TCHAR batch[] = | |
1652 | _T("ALTER TABLE alarms ADD dci_id integer\n") | |
1653 | _T("UPDATE alarms SET dci_id=0\n") | |
1654 | _T("ALTER TABLE event_log ADD dci_id integer\n") | |
1655 | _T("UPDATE event_log SET dci_id=0\n") | |
1656 | _T("<END>"); | |
1657 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 1658 | CHK_EXEC(SetSchemaVersion(388)); |
65ce7452 VK |
1659 | return TRUE; |
1660 | } | |
1661 | ||
53e39123 VK |
1662 | /** |
1663 | * Upgrade from V386 to V387 | |
1664 | */ | |
1665 | static BOOL H_UpgradeFromV386(int currVersion, int newVersion) | |
1666 | { | |
1667 | DB_RESULT hResult = SQLSelect(_T("SELECT id,flags,filter FROM network_maps WHERE filter IS NOT NULL")); | |
1668 | if (hResult != NULL) | |
1669 | { | |
1670 | int count = DBGetNumRows(hResult); | |
1671 | for(int i = 0; i < count; i++) | |
1672 | { | |
1673 | TCHAR *filter = DBGetField(hResult, i, 2, NULL, 0); | |
1674 | if ((filter != NULL) && (filter[0] != 0)) | |
1675 | { | |
1676 | TCHAR query[256]; | |
1677 | _sntprintf(query, 256, _T("UPDATE network_maps SET flags=%d WHERE id=%d"), | |
1678 | DBGetFieldULong(hResult, i, 1) | MF_FILTER_OBJECTS, DBGetFieldULong(hResult, i, 0)); | |
1679 | CHK_EXEC(SQLQuery(query)); | |
1680 | } | |
1681 | free(filter); | |
1682 | } | |
1683 | DBFreeResult(hResult); | |
1684 | } | |
1685 | else | |
1686 | { | |
1687 | if (!g_bIgnoreErrors) | |
1688 | return FALSE; | |
1689 | } | |
e4926628 | 1690 | CHK_EXEC(SetSchemaVersion(387)); |
53e39123 VK |
1691 | return TRUE; |
1692 | } | |
1693 | ||
e2a9c5fc VK |
1694 | /** |
1695 | * Upgrade from V385 to V386 | |
1696 | */ | |
1697 | static BOOL H_UpgradeFromV385(int currVersion, int newVersion) | |
1698 | { | |
1699 | TCHAR query[1024]; | |
1700 | int ruleId = NextFreeEPPruleID(); | |
1701 | ||
1702 | if (!IsEventPairInUse(EVENT_THREAD_HANGS, EVENT_THREAD_RUNNING)) | |
1703 | { | |
1704 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'ea1dee96-b42e-499c-a992-0b0f9e4874b9',7944,'Generate an alarm when one of the system threads hangs or stops unexpectedly','%%m',5,'SYS_THREAD_HANG_%%1','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); | |
1705 | CHK_EXEC(SQLQuery(query)); | |
1706 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_THREAD_HANGS); | |
1707 | CHK_EXEC(SQLQuery(query)); | |
1708 | ruleId++; | |
1709 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'f0c5a6b2-7427-45e5-8333-7d60d2b408e6',7944,'Terminate the alarm when one of the system threads which previously hanged or stopped unexpectedly returned to the running state','%%m',6,'SYS_THREAD_HANG_%%1','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); | |
1710 | CHK_EXEC(SQLQuery(query)); | |
1711 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_THREAD_RUNNING); | |
1712 | CHK_EXEC(SQLQuery(query)); | |
1713 | ruleId++; | |
1714 | } | |
1715 | ||
1716 | if (!IsEventPairInUse(EVENT_MAINTENANCE_MODE_ENTERED, EVENT_MAINTENANCE_MODE_LEFT)) | |
1717 | { | |
1718 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'ed3397a8-a496-4534-839b-5a6fc77c167c',7944,'Generate an alarm when the object enters the maintenance mode','%%m',5,'MAINTENANCE_MODE_%%i','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); | |
1719 | CHK_EXEC(SQLQuery(query)); | |
1720 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_MAINTENANCE_MODE_ENTERED); | |
1721 | CHK_EXEC(SQLQuery(query)); | |
1722 | ruleId++; | |
1723 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'20a0f4a5-d90e-4961-ba88-a65b9ee45d07',7944,'Terminate the alarm when the object leaves the maintenance mode','%%m',6,'MAINTENANCE_MODE_%%i','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); | |
1724 | CHK_EXEC(SQLQuery(query)); | |
1725 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_MAINTENANCE_MODE_LEFT); | |
1726 | CHK_EXEC(SQLQuery(query)); | |
1727 | ruleId++; | |
1728 | } | |
1729 | ||
1730 | if (!IsEventPairInUse(EVENT_AGENT_FAIL, EVENT_AGENT_OK)) | |
1731 | { | |
1732 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'c6f66840-4758-420f-a27d-7bbf7b66a511',7944,'Generate an alarm if the NetXMS agent on the node stops responding','%%m',5,'AGENT_UNREACHABLE_%%i','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); | |
1733 | CHK_EXEC(SQLQuery(query)); | |
1734 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_AGENT_FAIL); | |
1735 | CHK_EXEC(SQLQuery(query)); | |
1736 | ruleId++; | |
1737 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'9fa60260-c2ec-4371-b4e4-f5346b1d8400',7944,'Terminate the alarm if the NetXMS agent on the node start responding again','%%m',6,'AGENT_UNREACHABLE_%%i','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); | |
1738 | CHK_EXEC(SQLQuery(query)); | |
1739 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_AGENT_OK); | |
1740 | CHK_EXEC(SQLQuery(query)); | |
1741 | ruleId++; | |
1742 | } | |
1743 | ||
1744 | if (!IsEventPairInUse(EVENT_SNMP_FAIL, EVENT_SNMP_OK)) | |
1745 | { | |
1746 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'20ef861f-b8e4-4e04-898e-e57d13863661',7944,'Generate an alarm if the SNMP agent on the node stops responding','%%m',5,'SNMP_UNREACHABLE_%%i','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); | |
1747 | CHK_EXEC(SQLQuery(query)); | |
1748 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_SNMP_FAIL); | |
1749 | CHK_EXEC(SQLQuery(query)); | |
1750 | ruleId++; | |
1751 | _sntprintf(query, 1024, _T("INSERT INTO event_policy (rule_id,rule_guid,flags,comments,alarm_message,alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES (%d,'33f6193a-e103-4f5f-8bee-870bbcc08066',7944,'Terminate the alarm if the SNMP agent on the node start responding again','%%m',6,'SNMP_UNREACHABLE_%%i','',0,%d,0,'')"), ruleId, EVENT_ALARM_TIMEOUT); | |
1752 | CHK_EXEC(SQLQuery(query)); | |
1753 | _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_SNMP_OK); | |
1754 | CHK_EXEC(SQLQuery(query)); | |
1755 | ruleId++; | |
1756 | } | |
1757 | ||
1758 | CHK_EXEC(SQLQuery(_T("UPDATE event_cfg SET severity='3' WHERE event_code=14 OR event_code=15"))); | |
e4926628 | 1759 | CHK_EXEC(SetSchemaVersion(386)); |
e2a9c5fc VK |
1760 | return TRUE; |
1761 | } | |
1762 | ||
4e7ebbb4 VK |
1763 | /** |
1764 | * Upgrade from V384 to V385 | |
1765 | */ | |
1766 | static BOOL H_UpgradeFromV384(int currVersion, int newVersion) | |
1767 | { | |
1768 | CHK_EXEC(SQLQuery(_T("UPDATE config SET is_visible=1,need_server_restart=0 WHERE var_name='SNMPPorts'"))); | |
e4926628 | 1769 | CHK_EXEC(SetSchemaVersion(385)); |
4e7ebbb4 VK |
1770 | return TRUE; |
1771 | } | |
1772 | ||
aed41472 | 1773 | /** |
7bae90f4 | 1774 | * Upgrade from V383 to V384 |
aed41472 | 1775 | */ |
1776 | static BOOL H_UpgradeFromV383(int currVersion, int newVersion) | |
1777 | { | |
1778 | CHK_EXEC(ConvertStrings(_T("graphs"), _T("graph_id"), _T("config"))); | |
1779 | static TCHAR batch[] = | |
1780 | _T("ALTER TABLE graphs ADD flags integer\n") | |
1781 | _T("ALTER TABLE graphs ADD filters $SQL:TEXT\n") | |
1782 | _T("<END>"); | |
1783 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 1784 | CHK_EXEC(SetSchemaVersion(384)); |
aed41472 | 1785 | return TRUE; |
1786 | } | |
1787 | ||
55f6cb79 VK |
1788 | /** |
1789 | * Upgrade from V382 to V383 | |
1790 | */ | |
1791 | static BOOL H_UpgradeFromV382(int currVersion, int newVersion) | |
1792 | { | |
1793 | CHK_EXEC(ResizeColumn(_T("nodes"), _T("primary_ip"), 48, false)); | |
e4926628 | 1794 | CHK_EXEC(SetSchemaVersion(383)); |
55f6cb79 VK |
1795 | return TRUE; |
1796 | } | |
1797 | ||
83aa5ebd VK |
1798 | /** |
1799 | * Upgrade from V381 to V382 | |
1800 | */ | |
1801 | static BOOL H_UpgradeFromV381(int currVersion, int newVersion) | |
1802 | { | |
7bae90f4 VK |
1803 | CHK_EXEC(CreateLibraryScript(11, _T("Hook::StatusPoll"), _T("/* Available global variables:\r\n * $node - current node, object of 'Node' type\r\n *\r\n * Expected return value:\r\n * none - returned value is ignored\r\n */\r\n"))); |
1804 | CHK_EXEC(CreateLibraryScript(12, _T("Hook::ConfigurationPoll"), _T("/* Available global variables:\r\n * $node - current node, object of 'Node' type\r\n *\r\n * Expected return value:\r\n * none - returned value is ignored\r\n */\r\n"))); | |
1805 | CHK_EXEC(CreateLibraryScript(13, _T("Hook::InstancePoll"), _T("/* Available global variables:\r\n * $node - current node, object of 'Node' type\r\n *\r\n * Expected return value:\r\n * none - returned value is ignored\r\n */\r\n"))); | |
1806 | CHK_EXEC(CreateLibraryScript(14, _T("Hook::TopologyPoll"), _T("/* Available global variables:\r\n * $node - current node, object of 'Node' type\r\n *\r\n * Expected return value:\r\n * none - returned value is ignored\r\n */\r\n"))); | |
1807 | CHK_EXEC(CreateLibraryScript(15, _T("Hook::CreateInterface"), _T("/* Available global variables:\r\n * $node - current node, object of 'Node' type\r\n * $1 - current interface, object of 'Interface' type\r\n *\r\n * Expected return value:\r\n * true/false - boolean - whether interface should be created\r\n */\r\nreturn true;\r\n"))); | |
1808 | CHK_EXEC(CreateLibraryScript(16, _T("Hook::AcceptNewNode"), _T("/* Available global variables:\r\n * $ipAddr - IP address of the node being processed\r\n * $ipNetMask - netmask of the node being processed\r\n * $macAddr - MAC address of the node being processed\r\n * $zoneId - zone ID of the node being processed\r\n *\r\n * Expected return value:\r\n * true/false - boolean - whether node should be created\r\n */\r\nreturn true;\r\n"))); | |
e4926628 | 1809 | CHK_EXEC(SetSchemaVersion(382)); |
83aa5ebd VK |
1810 | return TRUE; |
1811 | } | |
1812 | ||
98ef8e4a VK |
1813 | /** |
1814 | * Upgrade from V380 to V381 | |
1815 | */ | |
1816 | static BOOL H_UpgradeFromV380(int currVersion, int newVersion) | |
1817 | { | |
1818 | static TCHAR batch[] = | |
1819 | _T("ALTER TABLE items ADD guid varchar(36)\n") | |
1820 | _T("ALTER TABLE dc_tables ADD guid varchar(36)\n") | |
1821 | _T("<END>"); | |
1822 | CHK_EXEC(SQLBatch(batch)); | |
50963ced VK |
1823 | CHK_EXEC(GenerateGUID(_T("items"), _T("item_id"), _T("guid"), NULL)); |
1824 | CHK_EXEC(GenerateGUID(_T("dc_tables"), _T("item_id"), _T("guid"), NULL)); | |
e4926628 | 1825 | CHK_EXEC(SetSchemaVersion(381)); |
98ef8e4a VK |
1826 | return TRUE; |
1827 | } | |
1828 | ||
9b4a2a0e VK |
1829 | /** |
1830 | * Upgrade from V379 to V380 | |
1831 | */ | |
1832 | static BOOL H_UpgradeFromV379(int currVersion, int newVersion) | |
1833 | { | |
1834 | static TCHAR batch[] = | |
1835 | _T("UPDATE object_properties SET maint_event_id=0 WHERE maint_event_id IS NULL\n") | |
1836 | _T("UPDATE nodes SET last_agent_comm_time=0 WHERE last_agent_comm_time IS NULL\n") | |
1837 | _T("<END>"); | |
1838 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 1839 | CHK_EXEC(SetSchemaVersion(380)); |
9b4a2a0e VK |
1840 | return TRUE; |
1841 | } | |
1842 | ||
ec5829b2 VK |
1843 | /** |
1844 | * Upgrade from V378 to V379 | |
1845 | */ | |
1846 | static BOOL H_UpgradeFromV378(int currVersion, int newVersion) | |
1847 | { | |
1848 | CHK_EXEC(SQLQuery(_T("DELETE FROM config WHERE var_name='NumberOfDatabaseWriters'"))); | |
e4926628 | 1849 | CHK_EXEC(SetSchemaVersion(379)); |
ec5829b2 VK |
1850 | return TRUE; |
1851 | } | |
1852 | ||
9bd1bace VK |
1853 | /** |
1854 | * Upgrade from V377 to V378 | |
1855 | */ | |
1856 | static BOOL H_UpgradeFromV377(int currVersion, int newVersion) | |
1857 | { | |
1858 | static TCHAR batch[] = | |
1859 | _T("DELETE FROM config WHERE var_name='EnableMultipleDBConnections'\n") | |
1860 | _T("UPDATE config SET var_name='DBConnectionPoolBaseSize' WHERE var_name='ConnectionPoolBaseSize'\n") | |
1861 | _T("UPDATE config SET var_name='DBConnectionPoolMaxSize' WHERE var_name='ConnectionPoolMaxSize'\n") | |
1862 | _T("UPDATE config SET var_name='DBConnectionPoolCooldownTime' WHERE var_name='ConnectionPoolCooldownTime'\n") | |
1863 | _T("UPDATE config SET var_name='DBConnectionPoolMaxLifetime' WHERE var_name='ConnectionPoolMaxLifetime'\n") | |
1864 | _T("<END>"); | |
1865 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 1866 | CHK_EXEC(SetSchemaVersion(378)); |
9bd1bace VK |
1867 | return TRUE; |
1868 | } | |
1869 | ||
9d7771b8 VK |
1870 | /** |
1871 | * Upgrade from V376 to V377 | |
1872 | */ | |
1873 | static BOOL H_UpgradeFromV376(int currVersion, int newVersion) | |
1874 | { | |
1875 | CHK_EXEC(CreateConfigParam(_T("DefaultSubnetMaskIPv4"), _T("24"), _T("Default mask for synthetic IPv4 subnets"), 'I', true, false, false, false)); | |
1876 | CHK_EXEC(CreateConfigParam(_T("DefaultSubnetMaskIPv6"), _T("64"), _T("Default mask for synthetic IPv6 subnets"), 'I', true, false, false, false)); | |
e4926628 | 1877 | CHK_EXEC(SetSchemaVersion(377)); |
9d7771b8 VK |
1878 | return TRUE; |
1879 | } | |
1880 | ||
4e3133ee | 1881 | /** |
1882 | * Upgrade from V375 to V376 | |
1883 | */ | |
1884 | static BOOL H_UpgradeFromV375(int currVersion, int newVersion) | |
1885 | { | |
1886 | static TCHAR batch[] = | |
1887 | _T("ALTER TABLE nodes ADD last_agent_comm_time integer\n") | |
9b4a2a0e | 1888 | _T("UPDATE nodes SET last_agent_comm_time=0\n") |
4e3133ee | 1889 | _T("<END>"); |
1890 | CHK_EXEC(SQLBatch(batch)); | |
1891 | ||
e4926628 | 1892 | CHK_EXEC(SetSchemaVersion(376)); |
4e3133ee | 1893 | return TRUE; |
1894 | } | |
1895 | ||
203cb23c VK |
1896 | /** |
1897 | * Upgrade from V374 to V375 | |
1898 | */ | |
1899 | static BOOL H_UpgradeFromV374(int currVersion, int newVersion) | |
1900 | { | |
1901 | static TCHAR batch[] = | |
1902 | _T("ALTER TABLE object_tools_input_fields ADD sequence_num integer\n") | |
1903 | _T("UPDATE object_tools_input_fields SET sequence_num=-1\n") | |
1904 | _T("<END>"); | |
1905 | CHK_EXEC(SQLBatch(batch)); | |
1906 | ||
e4926628 | 1907 | CHK_EXEC(SetSchemaVersion(375)); |
203cb23c VK |
1908 | return TRUE; |
1909 | } | |
1910 | ||
97afcb6e VK |
1911 | /** |
1912 | * Upgrade from V373 to V374 | |
1913 | */ | |
1914 | static BOOL H_UpgradeFromV373(int currVersion, int newVersion) | |
1915 | { | |
1916 | static TCHAR batch[] = | |
1917 | _T("ALTER TABLE object_properties ADD maint_event_id $SQL:INT64\n") | |
9b4a2a0e | 1918 | _T("UPDATE object_properties SET maint_mode='0',maint_event_id=0\n") |
97afcb6e VK |
1919 | _T("<END>"); |
1920 | CHK_EXEC(SQLBatch(batch)); | |
1921 | ||
3da098f7 | 1922 | CHK_EXEC(CreateEventTemplate(EVENT_MAINTENANCE_MODE_ENTERED, _T("SYS_MAINTENANCE_MODE_ENTERED"), SEVERITY_NORMAL, EF_LOG, NULL, |
97afcb6e VK |
1923 | _T("Entered maintenance mode"), |
1924 | _T("Generated when node, cluster, or mobile device enters maintenance mode."))); | |
1925 | ||
3da098f7 | 1926 | CHK_EXEC(CreateEventTemplate(EVENT_MAINTENANCE_MODE_LEFT, _T("SYS_MAINTENANCE_MODE_LEFT"), SEVERITY_NORMAL, EF_LOG, NULL, |
97afcb6e VK |
1927 | _T("Left maintenance mode"), |
1928 | _T("Generated when node, cluster, or mobile device leaves maintenance mode."))); | |
1929 | ||
e4926628 | 1930 | CHK_EXEC(SetSchemaVersion(374)); |
97afcb6e VK |
1931 | return TRUE; |
1932 | } | |
1933 | ||
b3beb7f4 | 1934 | /** |
1935 | * Upgrade from V372 to V373 | |
1936 | */ | |
1937 | static BOOL H_UpgradeFromV372(int currVersion, int newVersion) | |
1938 | { | |
1939 | CHK_EXEC(SQLQuery(_T("ALTER TABLE scheduled_tasks ADD object_id integer"))); | |
e4926628 | 1940 | CHK_EXEC(SetSchemaVersion(373)); |
b3beb7f4 | 1941 | return TRUE; |
1942 | } | |
1943 | ||
89fd6fa4 VK |
1944 | /** |
1945 | * Upgrade from V371 to V372 | |
1946 | */ | |
1947 | static BOOL H_UpgradeFromV371(int currVersion, int newVersion) | |
1948 | { | |
1949 | static TCHAR batch[] = | |
1950 | _T("ALTER TABLE object_properties ADD maint_mode char(1)\n") | |
1951 | _T("UPDATE object_properties SET maint_mode='0'\n") | |
1952 | _T("<END>"); | |
1953 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 1954 | CHK_EXEC(SetSchemaVersion(372)); |
89fd6fa4 VK |
1955 | return TRUE; |
1956 | } | |
1957 | ||
90e3031f VK |
1958 | /** |
1959 | * Upgrade from V370 to V371 | |
1960 | */ | |
1961 | static BOOL H_UpgradeFromV370(int currVersion, int newVersion) | |
1962 | { | |
1963 | int defaultPollingInterval = ConfigReadInt(_T("DefaultDCIPollingInterval"), 60); | |
1964 | int defaultRetentionTime = ConfigReadInt(_T("DefaultDCIRetentionTime"), 30); | |
1965 | ||
1966 | TCHAR query[256]; | |
1967 | _sntprintf(query, 256, _T("UPDATE items SET polling_interval=0 WHERE polling_interval=%d"), defaultPollingInterval); | |
1968 | CHK_EXEC(SQLQuery(query)); | |
1969 | ||
1970 | _sntprintf(query, 256, _T("UPDATE items SET retention_time=0 WHERE retention_time=%d"), defaultRetentionTime); | |
1971 | CHK_EXEC(SQLQuery(query)); | |
1972 | ||
1973 | _sntprintf(query, 256, _T("UPDATE dc_tables SET polling_interval=0 WHERE polling_interval=%d"), defaultPollingInterval); | |
1974 | CHK_EXEC(SQLQuery(query)); | |
1975 | ||
1976 | _sntprintf(query, 256, _T("UPDATE dc_tables SET retention_time=0 WHERE retention_time=%d"), defaultRetentionTime); | |
1977 | CHK_EXEC(SQLQuery(query)); | |
1978 | ||
e4926628 | 1979 | CHK_EXEC(SetSchemaVersion(371)); |
90e3031f VK |
1980 | return TRUE; |
1981 | } | |
1982 | ||
8bdd26dc VK |
1983 | /** |
1984 | * Upgrade from V369 to V370 | |
1985 | */ | |
1986 | static BOOL H_UpgradeFromV369(int currVersion, int newVersion) | |
1987 | { | |
1988 | CHK_EXEC(CreateTable( | |
1989 | _T("CREATE TABLE dashboard_associations (") | |
1990 | _T(" object_id integer not null,") | |
1991 | _T(" dashboard_id integer not null,") | |
1992 | _T(" PRIMARY KEY(object_id,dashboard_id))"))); | |
e4926628 | 1993 | CHK_EXEC(SetSchemaVersion(370)); |
8bdd26dc VK |
1994 | return TRUE; |
1995 | } | |
1996 | ||
0a145c10 | 1997 | /** |
1998 | * Upgrade from V368 to V369 | |
1999 | */ | |
2000 | static BOOL H_UpgradeFromV368(int currVersion, int newVersion) | |
2001 | { | |
2002 | CHK_EXEC(CreateTable( | |
c6e191d2 | 2003 | _T("CREATE TABLE scheduled_tasks (") |
0a145c10 | 2004 | _T(" id integer not null,") |
2005 | _T(" taskId varchar(255) null,") | |
c6e191d2 | 2006 | _T(" schedule varchar(127) null,") |
0a145c10 | 2007 | _T(" params varchar(1023) null,") |
2008 | _T(" execution_time integer not null,") | |
2009 | _T(" last_execution_time integer not null,") | |
2010 | _T(" flags integer not null,") | |
c6e191d2 | 2011 | _T(" owner integer not null,") |
0a145c10 | 2012 | _T(" PRIMARY KEY(id))"))); |
e4926628 | 2013 | CHK_EXEC(SetSchemaVersion(369)); |
0a145c10 | 2014 | return TRUE; |
2015 | } | |
2016 | ||
de674bb6 VK |
2017 | /** |
2018 | * Upgrade from V367 to V368 | |
2019 | */ | |
2020 | static BOOL H_UpgradeFromV367(int currVersion, int newVersion) | |
2021 | { | |
2022 | static TCHAR batch[] = | |
2023 | _T("ALTER TABLE nodes ADD rack_height integer\n") | |
2024 | _T("UPDATE nodes SET rack_height=1\n") | |
2025 | _T("<END>"); | |
2026 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 2027 | CHK_EXEC(SetSchemaVersion(368)); |
de674bb6 VK |
2028 | return TRUE; |
2029 | } | |
2030 | ||
cf38357f VK |
2031 | /** |
2032 | * Upgrade from V366 to V367 | |
2033 | */ | |
2034 | static BOOL H_UpgradeFromV366(int currVersion, int newVersion) | |
2035 | { | |
cd071c26 | 2036 | CHK_EXEC(CreateConfigParam(_T("TrapSourcesInAllZones"), _T("0"), _T("Search all zones to match trap/syslog source address to node"), 'B', true, true, false, false)); |
cf38357f VK |
2037 | |
2038 | CHK_EXEC(SQLQuery(_T("ALTER TABLE nodes ADD snmp_sys_contact varchar(127)"))); | |
2039 | CHK_EXEC(SQLQuery(_T("ALTER TABLE nodes ADD snmp_sys_location varchar(127)"))); | |
2040 | ||
e4926628 | 2041 | CHK_EXEC(SetSchemaVersion(367)); |
cf38357f VK |
2042 | return TRUE; |
2043 | } | |
2044 | ||
48905317 VK |
2045 | /** |
2046 | * Upgrade from V365 to V366 | |
2047 | */ | |
2048 | static BOOL H_UpgradeFromV365(int currVersion, int newVersion) | |
2049 | { | |
b3643ffe | 2050 | CHK_EXEC(CreateConfigParam(_T("ServerCommandOutputTimeout"), _T("60"), true, false)); |
48905317 | 2051 | |
e4926628 | 2052 | CHK_EXEC(SetSchemaVersion(366)); |
48905317 VK |
2053 | return TRUE; |
2054 | } | |
2055 | ||
d0a2ada6 | 2056 | /** |
2057 | * Upgrade from V364 to V365 | |
2058 | */ | |
2059 | static BOOL H_UpgradeFromV364(int currVersion, int newVersion) | |
2060 | { | |
4e7ebbb4 | 2061 | CHK_EXEC(CreateConfigParam(_T("SNMPPorts"), _T("161"), true, false)); |
e4926628 | 2062 | CHK_EXEC(SetSchemaVersion(365)); |
d0a2ada6 | 2063 | return TRUE; |
2064 | } | |
2065 | ||
3d37f7bf VK |
2066 | /** |
2067 | * Upgrade from V363 to V364 | |
2068 | */ | |
2069 | static BOOL H_UpgradeFromV363(int currVersion, int newVersion) | |
2070 | { | |
2071 | static TCHAR batch[] = | |
2072 | _T("ALTER TABLE interfaces ADD speed $SQL:INT64\n") | |
2073 | _T("ALTER TABLE interfaces ADD iftable_suffix varchar(127)\n") | |
2074 | _T("UPDATE interfaces SET speed=0\n") | |
2075 | _T("<END>"); | |
2076 | CHK_EXEC(SQLBatch(batch)); | |
2077 | ||
e4926628 | 2078 | CHK_EXEC(SetSchemaVersion(364)); |
3d37f7bf VK |
2079 | return TRUE; |
2080 | } | |
2081 | ||
2589cc10 | 2082 | /** |
2083 | * Upgrade from V362 to V363 | |
2084 | */ | |
2085 | static BOOL H_UpgradeFromV362(int currVersion, int newVersion) | |
2086 | { | |
2087 | ResizeColumn(_T("config"), _T("var_value"), 2000, true); | |
e4926628 | 2088 | CHK_EXEC(SetSchemaVersion(363)); |
2589cc10 | 2089 | return TRUE; |
2090 | } | |
2091 | ||
8a1519ce VK |
2092 | /** |
2093 | * Upgrade from V361 to V362 | |
2094 | */ | |
2095 | static BOOL H_UpgradeFromV361(int currVersion, int newVersion) | |
2096 | { | |
2097 | CHK_EXEC(CreateConfigParam(_T("CaseInsensitiveLoginNames"), _T("0"), _T("Enable/disable case insensitive login names"), 'B', true, true, false)); | |
e4926628 | 2098 | CHK_EXEC(SetSchemaVersion(362)); |
8a1519ce VK |
2099 | return TRUE; |
2100 | } | |
2101 | ||
b576249a VK |
2102 | /** |
2103 | * Upgrade from V360 to V361 | |
2104 | */ | |
2105 | static BOOL H_UpgradeFromV360(int currVersion, int newVersion) | |
2106 | { | |
2107 | CHK_EXEC(CreateTable( | |
2108 | _T("CREATE TABLE object_tools_input_fields (") | |
2109 | _T(" tool_id integer not null,") | |
2110 | _T(" name varchar(31) not null,") | |
2111 | _T(" input_type char(1) not null,") | |
2112 | _T(" display_name varchar(127) null,") | |
2113 | _T(" config $SQL:TEXT null,") | |
2114 | _T(" PRIMARY KEY(tool_id,name))"))); | |
2115 | ||
e4926628 | 2116 | CHK_EXEC(SetSchemaVersion(361)); |
b576249a VK |
2117 | return TRUE; |
2118 | } | |
2119 | ||
b2a15edc VK |
2120 | /** |
2121 | * Upgrade from V359 to V360 | |
2122 | */ | |
2123 | static BOOL H_UpgradeFromV359(int currVersion, int newVersion) | |
2124 | { | |
2125 | DB_RESULT hResult = SQLSelect(_T("SELECT tool_id,tool_type,tool_data,confirmation_text FROM object_tools")); | |
2126 | if (hResult != NULL) | |
2127 | { | |
2128 | int count = DBGetNumRows(hResult); | |
2129 | for(int i = 0; i < count; i++) | |
2130 | { | |
2131 | UINT32 id = DBGetFieldULong(hResult, i, 0); | |
2589cc10 | 2132 | |
b2a15edc VK |
2133 | TCHAR *text = DBGetField(hResult, i, 3, NULL, 0); |
2134 | if (text != NULL) | |
2135 | { | |
2136 | ConvertObjectToolMacros(id, text, _T("confirmation_text")); | |
2137 | free(text); | |
2138 | } | |
2589cc10 | 2139 | |
b2a15edc VK |
2140 | int type = DBGetFieldLong(hResult, i, 1); |
2141 | if ((type == 1) || (type == 4) || (type == 5)) | |
2142 | { | |
2143 | text = DBGetField(hResult, i, 2, NULL, 0); | |
2144 | if (text != NULL) | |
2145 | { | |
2146 | ConvertObjectToolMacros(id, text, _T("tool_data")); | |
2147 | free(text); | |
2148 | } | |
2149 | } | |
2150 | } | |
2151 | DBFreeResult(hResult); | |
2152 | } | |
2153 | else | |
2154 | { | |
2155 | if (!g_bIgnoreErrors) | |
2156 | return FALSE; | |
2157 | } | |
e4926628 | 2158 | CHK_EXEC(SetSchemaVersion(360)); |
b2a15edc VK |
2159 | return TRUE; |
2160 | } | |
2161 | ||
7a8aa001 VK |
2162 | /** |
2163 | * Upgrade from V358 to V359 | |
2164 | */ | |
2165 | static BOOL H_UpgradeFromV358(int currVersion, int newVersion) | |
2166 | { | |
2167 | static TCHAR batch[] = | |
2168 | _T("ALTER TABLE network_maps ADD object_display_mode integer\n") | |
2169 | _T("UPDATE network_maps SET object_display_mode=0\n") | |
2170 | _T("<END>"); | |
2171 | CHK_EXEC(SQLBatch(batch)); | |
2172 | ||
e4926628 | 2173 | CHK_EXEC(SetSchemaVersion(359)); |
7a8aa001 VK |
2174 | return TRUE; |
2175 | } | |
2176 | ||
c85c8ef2 VK |
2177 | /** |
2178 | * Upgrade from V357 to V358 | |
2179 | */ | |
2180 | static BOOL H_UpgradeFromV357(int currVersion, int newVersion) | |
2181 | { | |
2182 | static TCHAR batch[] = | |
2183 | _T("ALTER TABLE config ADD data_type char(1) not null default 'S'\n") | |
2184 | _T("ALTER TABLE config ADD is_public char(1) not null default 'N'\n") | |
2185 | _T("ALTER TABLE config ADD description varchar(255)\n") | |
2186 | _T("ALTER TABLE config ADD possible_values $SQL:TEXT\n") | |
2187 | _T("<END>"); | |
2188 | static TCHAR batchOracle[] = | |
2189 | _T("ALTER TABLE config ADD data_type char(1) default 'S' not null\n") | |
2190 | _T("ALTER TABLE config ADD is_public char(1) default 'N' not null\n") | |
2191 | _T("ALTER TABLE config ADD description varchar(255)\n") | |
2192 | _T("ALTER TABLE config ADD possible_values $SQL:TEXT\n") | |
2193 | _T("<END>"); | |
2194 | CHK_EXEC(SQLBatch((g_dbSyntax == DB_SYNTAX_ORACLE) ? batchOracle : batch)); | |
2195 | ||
2196 | CHK_EXEC(CreateConfigParam(_T("DashboardDataExportEnableInterpolation"), _T("1"), _T("Enable/disable data interpolation in dashboard data export"), 'B', true, false, true)); | |
2197 | ||
e4926628 | 2198 | CHK_EXEC(SetSchemaVersion(358)); |
c85c8ef2 VK |
2199 | return TRUE; |
2200 | } | |
2201 | ||
9db92307 | 2202 | /** |
2203 | * Upgrade from V356 to V357 | |
2204 | */ | |
2205 | static BOOL H_UpgradeFromV356(int currVersion, int newVersion) | |
2206 | { | |
2207 | TCHAR comunityString[256]; | |
2208 | comunityString[0] = 0; | |
2209 | DB_RESULT hResult = SQLSelect(_T("SELECT var_value FROM config WHERE var_name='DefaultCommunityString'")); | |
2210 | if (hResult != NULL) | |
2211 | { | |
2212 | if(DBGetNumRows(hResult) > 0) | |
2213 | { | |
2214 | DBGetField(hResult, 0, 0, comunityString, 256); | |
2215 | } | |
2216 | DBFreeResult(hResult); | |
2217 | } | |
2218 | ||
c85c8ef2 | 2219 | if (comunityString[0] != 0) |
9db92307 | 2220 | { |
2221 | DB_RESULT hResult = SQLSelect(_T("SELECT id, community FROM snmp_communities")); | |
2222 | if (hResult != NULL) | |
2223 | { | |
2224 | CHK_EXEC(SQLQuery(_T("DELETE FROM snmp_communities"))); | |
2225 | ||
2226 | TCHAR query[1024]; | |
2227 | _sntprintf(query, 1024, _T("INSERT INTO snmp_communities (id,community) VALUES(%d,'%s')"), 1, comunityString); | |
2228 | CHK_EXEC(SQLQuery(query)); | |
2229 | ||
2230 | int count = DBGetNumRows(hResult); | |
2231 | for(int i = 0; i < count; i++) | |
2232 | { | |
2233 | _sntprintf(query, 1024, _T("INSERT INTO snmp_communities (id,community) VALUES(%d,'%s')"), i + 2, DBGetField(hResult, i, 1, comunityString, 256)); | |
2234 | CHK_EXEC(SQLQuery(query)); | |
2235 | } | |
2236 | } | |
2237 | } | |
2238 | ||
2239 | CHK_EXEC(SQLQuery(_T("DELETE FROM config WHERE var_name='DefaultCommunityString'"))); | |
2240 | ||
e4926628 | 2241 | CHK_EXEC(SetSchemaVersion(357)); |
9db92307 | 2242 | return TRUE; |
2243 | } | |
2244 | ||
e1d2050f VK |
2245 | /** |
2246 | * Upgrade from V355 to V356 | |
2247 | */ | |
2248 | static BOOL H_UpgradeFromV355(int currVersion, int newVersion) | |
2249 | { | |
2250 | static TCHAR batch[] = | |
2251 | _T("DELETE FROM config WHERE var_name='NumberOfBusinessServicePollers'\n") | |
2252 | _T("DELETE FROM config WHERE var_name='NumberOfConditionPollers'\n") | |
2253 | _T("DELETE FROM config WHERE var_name='NumberOfConfigurationPollers'\n") | |
2254 | _T("DELETE FROM config WHERE var_name='NumberOfDiscoveryPollers'\n") | |
2255 | _T("DELETE FROM config WHERE var_name='NumberOfInstancePollers'\n") | |
2256 | _T("DELETE FROM config WHERE var_name='NumberOfRoutingTablePollers'\n") | |
2257 | _T("DELETE FROM config WHERE var_name='NumberOfStatusPollers'\n") | |
2258 | _T("DELETE FROM config WHERE var_name='NumberOfTopologyTablePollers'\n") | |
2259 | _T("<END>"); | |
2260 | CHK_EXEC(SQLBatch(batch)); | |
2261 | ||
c85c8ef2 VK |
2262 | CHK_EXEC(CreateConfigParam(_T("PollerThreadPoolBaseSize"), _T("10"), true, true)); |
2263 | CHK_EXEC(CreateConfigParam(_T("PollerThreadPoolMaxSize"), _T("250"), true, true)); | |
e1d2050f | 2264 | |
e4926628 | 2265 | CHK_EXEC(SetSchemaVersion(356)); |
e1d2050f VK |
2266 | return TRUE; |
2267 | } | |
2268 | ||
9708eff4 VK |
2269 | /** |
2270 | * Upgrade from V354 to V355 | |
2271 | */ | |
2272 | static BOOL H_UpgradeFromV354(int currVersion, int newVersion) | |
2273 | { | |
2274 | static TCHAR batch[] = | |
2275 | _T("ALTER TABLE nodes ADD agent_cache_mode char(1)\n") | |
55d81770 | 2276 | _T("UPDATE nodes SET agent_cache_mode='0'\n") |
e9902466 | 2277 | _T("DELETE FROM config WHERE var_name='ServerID'\n") |
9708eff4 VK |
2278 | _T("<END>"); |
2279 | CHK_EXEC(SQLBatch(batch)); | |
2280 | ||
c85c8ef2 | 2281 | CHK_EXEC(CreateConfigParam(_T("DefaultAgentCacheMode"), _T("2"), true, true)); |
9708eff4 | 2282 | |
e4926628 | 2283 | CHK_EXEC(SetSchemaVersion(355)); |
9708eff4 VK |
2284 | return TRUE; |
2285 | } | |
2286 | ||
981d246a VK |
2287 | /** |
2288 | * Upgrade from V353 to V354 | |
2289 | */ | |
2290 | static BOOL H_UpgradeFromV353(int currVersion, int newVersion) | |
2291 | { | |
2292 | CHK_EXEC(ResizeColumn(_T("users"), _T("password"), 127, false)); | |
e4926628 | 2293 | CHK_EXEC(SetSchemaVersion(354)); |
981d246a VK |
2294 | return TRUE; |
2295 | } | |
2296 | ||
2096c8f0 VK |
2297 | /** |
2298 | * Upgrade from V352 to V353 | |
2299 | */ | |
2300 | static BOOL H_UpgradeFromV352(int currVersion, int newVersion) | |
2301 | { | |
2302 | CHK_EXEC(SQLQuery(_T("ALTER TABLE dci_summary_tables ADD guid varchar(36)"))); | |
50963ced | 2303 | CHK_EXEC(GenerateGUID(_T("dci_summary_tables"), _T("id"), _T("guid"), NULL)); |
e4926628 | 2304 | CHK_EXEC(SetSchemaVersion(353)); |
2096c8f0 VK |
2305 | return TRUE; |
2306 | } | |
2307 | ||
271e3971 VK |
2308 | /** |
2309 | * Upgrade from V351 to V352 | |
2310 | */ | |
2311 | static BOOL H_UpgradeFromV351(int currVersion, int newVersion) | |
2312 | { | |
2313 | CHK_EXEC(SQLQuery(_T("ALTER TABLE object_tools ADD guid varchar(36)"))); | |
50963ced | 2314 | CHK_EXEC(GenerateGUID(_T("object_tools"), _T("tool_id"), _T("guid"), NULL)); |
e4926628 | 2315 | CHK_EXEC(SetSchemaVersion(352)); |
271e3971 VK |
2316 | return TRUE; |
2317 | } | |
2318 | ||
ac58ffe9 VK |
2319 | /** |
2320 | * Upgrade from V350 to V351 | |
2321 | */ | |
2322 | static BOOL H_UpgradeFromV350(int currVersion, int newVersion) | |
2323 | { | |
2324 | static TCHAR batch[] = | |
2325 | _T("ALTER TABLE access_points ADD ap_index integer\n") | |
2326 | _T("UPDATE access_points SET ap_index=0\n") | |
2327 | _T("<END>"); | |
2328 | CHK_EXEC(SQLBatch(batch)); | |
2329 | ||
e4926628 | 2330 | CHK_EXEC(SetSchemaVersion(351)); |
ac58ffe9 VK |
2331 | return TRUE; |
2332 | } | |
2333 | ||
fcf91b2e | 2334 | /** |
2335 | * Upgrade from V349 to V350 | |
2336 | */ | |
2337 | static BOOL H_UpgradeFromV349(int currVersion, int newVersion) | |
2338 | { | |
2339 | switch(g_dbSyntax) | |
2340 | { | |
2341 | case DB_SYNTAX_ORACLE: | |
a8a0793d VK |
2342 | CHK_EXEC(SQLQuery(_T("UPDATE object_properties SET comments = comments || chr(13) || chr(10) || (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id) WHERE EXISTS (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id AND description IS NOT NULL)"))); |
2343 | break; | |
fcf91b2e | 2344 | case DB_SYNTAX_DB2: |
a8a0793d VK |
2345 | CHK_EXEC(SQLQuery(_T("UPDATE object_properties SET comments = comments || chr(13) || chr(10) || (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id) WHERE EXISTS (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id AND description IS NOT NULL AND description <> '')"))); |
2346 | break; | |
96e03924 | 2347 | case DB_SYNTAX_MSSQL: |
b69710b9 | 2348 | CHK_EXEC(SQLQuery(_T("UPDATE object_properties SET comments = CAST(comments AS varchar(4000)) + char(13) + char(10) + CAST((SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id) AS varchar(4000)) WHERE EXISTS (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id AND description IS NOT NULL AND datalength(description) <> 0)"))); |
fcf91b2e | 2349 | break; |
2350 | case DB_SYNTAX_PGSQL: | |
a8a0793d | 2351 | CHK_EXEC(SQLQuery(_T("UPDATE object_properties SET comments = comments || '\\015\\012' || (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id) WHERE EXISTS (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id AND description IS NOT NULL AND description <> '')"))); |
fcf91b2e | 2352 | break; |
2353 | case DB_SYNTAX_SQLITE: | |
a8a0793d | 2354 | CHK_EXEC(SQLQuery(_T("UPDATE object_properties SET comments = comments || char(13,10) || (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id) WHERE EXISTS (SELECT description FROM ap_common WHERE ap_common.id = object_properties.object_id AND description IS NOT NULL AND description <> '')"))); |
fcf91b2e | 2355 | break; |
2356 | case DB_SYNTAX_MYSQL: | |
a8a0793d | 2357 | CHK_EXEC(SQLQuery(_T("UPDATE object_properties, ap_common SET object_properties.comments=CONCAT(object_properties.comments, '\\r\\n', ap_common.description) WHERE object_properties.object_id=ap_common.id AND (ap_common.description!='' AND ap_common.description IS NOT NULL)"))); |
fcf91b2e | 2358 | break; |
2359 | default: | |
96e03924 | 2360 | break; |
fcf91b2e | 2361 | } |
2362 | ||
3f543e56 | 2363 | CHK_EXEC(SQLDropColumn(_T("ap_common"), _T("description"))); |
e4926628 | 2364 | CHK_EXEC(SetSchemaVersion(350)); |
fcf91b2e | 2365 | return TRUE; |
2366 | } | |
2367 | ||
b06ae508 VK |
2368 | /** |
2369 | * Upgrade from V348 to V349 | |
2370 | */ | |
2371 | static BOOL H_UpgradeFromV348(int currVersion, int newVersion) | |
2372 | { | |
2373 | CHK_EXEC(SQLQuery(_T("DELETE FROM config WHERE var_name='HouseKeepingInterval'"))); | |
c85c8ef2 | 2374 | CHK_EXEC(CreateConfigParam(_T("HousekeeperStartTime"), _T("02:00"), true, true)); |
e4926628 | 2375 | CHK_EXEC(SetSchemaVersion(349)); |
b06ae508 VK |
2376 | return TRUE; |
2377 | } | |
2378 | ||
c30c0c0f VK |
2379 | /** |
2380 | * Upgrade from V347 to V348 | |
2381 | */ | |
2382 | static BOOL H_UpgradeFromV347(int currVersion, int newVersion) | |
2383 | { | |
3da098f7 | 2384 | CHK_EXEC(CreateEventTemplate(EVENT_IF_IPADDR_ADDED, _T("SYS_IF_IPADDR_ADDED"), SEVERITY_NORMAL, EF_LOG, NULL, |
c30c0c0f VK |
2385 | _T("IP address %3/%4 added to interface \"%2\""), |
2386 | _T("Generated when IP address added to interface.\r\n") | |
2387 | _T("Parameters:\r\n") | |
2388 | _T(" 1) Interface object ID\r\n") | |
2389 | _T(" 2) Interface name\r\n") | |
2390 | _T(" 3) IP address\r\n") | |
2391 | _T(" 4) Network mask\r\n") | |
2392 | _T(" 5) Interface index"))); | |
2393 | ||
3da098f7 | 2394 | CHK_EXEC(CreateEventTemplate(EVENT_IF_IPADDR_DELETED, _T("SYS_IF_IPADDR_DELETED"), SEVERITY_NORMAL, EF_LOG, NULL, |
c30c0c0f VK |
2395 | _T("IP address %3/%4 deleted from interface \"%2\""), |
2396 | _T("Generated when IP address deleted from interface.\r\n") | |
2397 | _T("Parameters:\r\n") | |
2398 | _T(" 1) Interface object ID\r\n") | |
2399 | _T(" 2) Interface name\r\n") | |
2400 | _T(" 3) IP address\r\n") | |
2401 | _T(" 4) Network mask\r\n") | |
2402 | _T(" 5) Interface index"))); | |
2403 | ||
e4926628 | 2404 | CHK_EXEC(SetSchemaVersion(348)); |
c30c0c0f VK |
2405 | return TRUE; |
2406 | } | |
2407 | ||
2408 | /** | |
2409 | * Upgrade from V346 to V347 | |
2410 | */ | |
2411 | static BOOL H_UpgradeFromV346(int currVersion, int newVersion) | |
2412 | { | |
2413 | CHK_EXEC(CreateTable( | |
2414 | _T("CREATE TABLE interface_address_list (") | |
2415 | _T(" iface_id integer not null,") | |
2416 | _T(" ip_addr varchar(48) not null,") | |
2417 | _T(" ip_netmask integer not null,") | |
2418 | _T(" PRIMARY KEY(iface_id,ip_addr))"))); | |
2419 | ||
2420 | DB_RESULT hResult = SQLSelect(_T("SELECT id,ip_addr,ip_netmask FROM interfaces WHERE ip_addr<>'0.0.0.0'")); | |
2421 | if (hResult != NULL) | |
2422 | { | |
2423 | int count = DBGetNumRows(hResult); | |
2424 | for(int i = 0; i < count; i++) | |
2425 | { | |
2426 | TCHAR query[256], addr[64]; | |
2427 | _sntprintf(query, 256, _T("INSERT INTO interface_address_list (iface_id,ip_addr,ip_netmask) VALUES (%d,'%s',%d)"), | |
2428 | DBGetFieldLong(hResult, i, 0), DBGetField(hResult, i, 1, addr, 64), DBGetFieldLong(hResult, i, 2)); | |
2429 | CHK_EXEC(SQLQuery(query)); | |
2430 | } | |
2431 | DBFreeResult(hResult); | |
2432 | } | |
2433 | else | |
2434 | { | |
2435 | if (!g_bIgnoreErrors) | |
2436 | return FALSE; | |
2437 | } | |
2438 | ||
2439 | static TCHAR batch[] = | |
2440 | _T("ALTER TABLE interfaces DROP COLUMN ip_addr\n") | |
2441 | _T("ALTER TABLE interfaces DROP COLUMN ip_netmask\n") | |
2442 | _T("<END>"); | |
2443 | CHK_EXEC(SQLBatch(batch)); | |
2444 | ||
e4926628 | 2445 | CHK_EXEC(SetSchemaVersion(347)); |
c30c0c0f VK |
2446 | return TRUE; |
2447 | } | |
2448 | ||
c75e9ee4 VK |
2449 | /** |
2450 | * Upgrade from V345 to V346 | |
2451 | */ | |
2452 | static BOOL H_UpgradeFromV345(int currVersion, int newVersion) | |
2453 | { | |
b69710b9 VK |
2454 | if (g_dbSyntax == DB_SYNTAX_MSSQL) |
2455 | { | |
2456 | CHK_EXEC(DropPrimaryKey(_T("cluster_sync_subnets"))); | |
2457 | CHK_EXEC(DropPrimaryKey(_T("address_lists"))); | |
2458 | CHK_EXEC(DropPrimaryKey(_T("vpn_connector_networks"))); | |
2459 | } | |
2460 | ||
2461 | CHK_EXEC(ResizeColumn(_T("cluster_sync_subnets"), _T("subnet_addr"), 48, false)); | |
2462 | CHK_EXEC(ResizeColumn(_T("cluster_resources"), _T("ip_addr"), 48, false)); | |
2463 | CHK_EXEC(ResizeColumn(_T("subnets"), _T("ip_addr"), 48, false)); | |
2464 | CHK_EXEC(ResizeColumn(_T("interfaces"), _T("ip_addr"), 48, false)); | |
2465 | CHK_EXEC(ResizeColumn(_T("network_services"), _T("ip_bind_addr"), 48, false)); | |
2466 | CHK_EXEC(ResizeColumn(_T("vpn_connector_networks"), _T("ip_addr"), 48, false)); | |
2467 | CHK_EXEC(ResizeColumn(_T("snmp_trap_log"), _T("ip_addr"), 48, false)); | |
2468 | CHK_EXEC(ResizeColumn(_T("address_lists"), _T("addr1"), 48, false)); | |
2469 | CHK_EXEC(ResizeColumn(_T("address_lists"), _T("addr2"), 48, false)); | |
2470 | CHK_EXEC(ResizeColumn(_T("nodes"), _T("primary_ip"), 48, false)); | |
c75e9ee4 VK |
2471 | |
2472 | CHK_EXEC(ConvertNetMasks(_T("cluster_sync_subnets"), _T("subnet_mask"), _T("cluster_id"))); | |
2473 | CHK_EXEC(ConvertNetMasks(_T("subnets"), _T("ip_netmask"), _T("id"))); | |
2474 | CHK_EXEC(ConvertNetMasks(_T("interfaces"), _T("ip_netmask"), _T("id"))); | |
2475 | CHK_EXEC(ConvertNetMasks(_T("vpn_connector_networks"), _T("ip_netmask"), _T("vpn_id"), _T("ip_addr"))); | |
2476 | ||
ba889094 | 2477 | DB_RESULT hResult = SQLSelect(_T("SELECT community_id,list_type,addr1,addr2 FROM address_lists WHERE addr_type=0")); |
c75e9ee4 VK |
2478 | if (hResult != NULL) |
2479 | { | |
2480 | int count = DBGetNumRows(hResult); | |
2481 | if (count > 0) | |
2482 | { | |
ba889094 | 2483 | CHK_EXEC(SQLQuery(_T("DELETE FROM address_lists WHERE addr_type=0"))); |
c75e9ee4 VK |
2484 | |
2485 | for(int i = 0; i < count; i++) | |
2486 | { | |
2487 | TCHAR query[256], addr[64]; | |
ba889094 | 2488 | _sntprintf(query, 256, _T("INSERT INTO address_lists (addr_type,community_id,list_type,addr1,addr2) VALUES (0,%d,%d,'%s','%d')"), |
c75e9ee4 VK |
2489 | DBGetFieldLong(hResult, i, 0), DBGetFieldLong(hResult, i, 1), DBGetField(hResult, i, 2, addr, 64), |
2490 | BitsInMask(DBGetFieldIPAddr(hResult, i, 3))); | |
2491 | CHK_EXEC(SQLQuery(query)); | |
2492 | } | |
2493 | } | |
2494 | DBFreeResult(hResult); | |
2495 | } | |
2496 | else | |
2497 | { | |
2498 | if (!g_bIgnoreErrors) | |
2499 | return FALSE; | |
2500 | } | |
2501 | ||
b69710b9 VK |
2502 | if (g_dbSyntax == DB_SYNTAX_MSSQL) |
2503 | { | |
2504 | CHK_EXEC(SQLQuery(_T("ALTER TABLE cluster_sync_subnets ADD CONSTRAINT pk_cluster_sync_subnets PRIMARY KEY (cluster_id,subnet_addr)"))); | |
2505 | CHK_EXEC(SQLQuery(_T("ALTER TABLE address_lists ADD CONSTRAINT pk_address_lists PRIMARY KEY (list_type,community_id,addr_type,addr1,addr2)"))); | |
2506 | CHK_EXEC(SQLQuery(_T("ALTER TABLE vpn_connector_networks ADD CONSTRAINT pk_vpn_connector_networks PRIMARY KEY (vpn_id,ip_addr)"))); | |
2507 | } | |
2508 | ||
e4926628 | 2509 | CHK_EXEC(SetSchemaVersion(346)); |
c75e9ee4 VK |
2510 | return TRUE; |
2511 | } | |
2512 | ||
805171de VK |
2513 | /** |
2514 | * Upgrade from V344 to V345 | |
2515 | */ | |
2516 | static BOOL H_UpgradeFromV344(int currVersion, int newVersion) | |
2517 | { | |
2518 | CHK_EXEC(CreateConfigParam(_T("NumberOfInstancePollers"), _T("10"), 1, 1)); | |
2519 | CHK_EXEC(CreateConfigParam(_T("InstancePollingInterval"), _T("600"), 1, 1)); | |
e4926628 | 2520 | CHK_EXEC(SetSchemaVersion(345)); |
805171de VK |
2521 | return TRUE; |
2522 | } | |
2523 | ||
e95680e5 VK |
2524 | /** |
2525 | * Upgrade from V343 to V344 | |
2526 | */ | |
2527 | static BOOL H_UpgradeFromV343(int currVersion, int newVersion) | |
2528 | { | |
c30c0c0f | 2529 | static TCHAR batch[] = |
e95680e5 VK |
2530 | _T("ALTER TABLE interfaces ADD mtu integer\n") |
2531 | _T("ALTER TABLE interfaces ADD alias varchar(255)\n") | |
2532 | _T("UPDATE interfaces SET mtu=0\n") | |
2533 | _T("<END>"); | |
2534 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 2535 | CHK_EXEC(SetSchemaVersion(344)); |
e95680e5 VK |
2536 | return TRUE; |
2537 | } | |
2538 | ||
d140955e VK |
2539 | /** |
2540 | * Upgrade from V342 to V343 | |
2541 | */ | |
2542 | static BOOL H_UpgradeFromV342(int currVersion, int newVersion) | |
2543 | { | |
2544 | if (g_dbSyntax != DB_SYNTAX_MSSQL) | |
2545 | { | |
2546 | CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='CREATE INDEX idx_idata_%d_id_timestamp ON idata_%d(item_id,idata_timestamp DESC)' WHERE var_name='IDataIndexCreationCommand_0'"))); | |
5096f5a5 | 2547 | CHK_EXEC(DBCommit(g_hCoreDB)); // do reindexing outside current transaction |
d140955e | 2548 | ReindexIData(); |
5096f5a5 | 2549 | CHK_EXEC(DBBegin(g_hCoreDB)); |
d140955e | 2550 | } |
e4926628 | 2551 | CHK_EXEC(SetSchemaVersion(343)); |
d140955e VK |
2552 | return TRUE; |
2553 | } | |
2554 | ||
4b70cb26 | 2555 | /** |
2556 | * Upgrade from V341 to V342 | |
2557 | */ | |
2558 | static BOOL H_UpgradeFromV341(int currVersion, int newVersion) | |
2559 | { | |
d140955e | 2560 | CHK_EXEC(SQLQuery(_T("ALTER TABLE object_tools ADD tool_filter $SQL:TEXT"))); |
4b70cb26 | 2561 | DB_RESULT hResult = SQLSelect(_T("SELECT tool_id, matching_oid FROM object_tools")); |
2562 | if (hResult != NULL) | |
2563 | { | |
2564 | int count = DBGetNumRows(hResult); | |
2565 | for(int i = 0; i < count; i++) | |
2566 | { | |
2567 | TCHAR *oid = DBGetField(hResult, i, 1, NULL, 0); | |
2568 | if (oid == NULL || !_tcscmp(oid, _T(" "))) | |
2569 | { | |
2570 | oid = _tcsdup(_T("")); | |
2571 | } | |
2572 | else | |
2573 | { | |
2574 | TCHAR *newConfig = (TCHAR *)malloc((_tcslen(oid) + 512) * sizeof(TCHAR)); | |
2575 | _tcscpy(newConfig, _T("<objectToolFilter>")); | |
2576 | _tcscat(newConfig, _T("<snmpOid>")); | |
2577 | _tcscat(newConfig, oid); | |
2578 | _tcscat(newConfig, _T("</snmpOid>")); | |
2579 | _tcscat(newConfig, _T("</objectToolFilter>")); | |
2580 | ||
2581 | DB_STATEMENT statment = DBPrepare(g_hCoreDB, _T("UPDATE object_tools SET tool_filter=? WHERE tool_id=?")); | |
2582 | if (statment != NULL) | |
2583 | { | |
2584 | DBBind(statment, 1, DB_SQLTYPE_TEXT, newConfig, DB_BIND_STATIC); | |
2585 | DBBind(statment, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0)); | |
2586 | CHK_EXEC(DBExecute(statment)); | |
2587 | DBFreeStatement(statment); | |
2588 | } | |
2589 | else | |
2590 | { | |
2591 | if (!g_bIgnoreErrors) | |
2592 | return FALSE; | |
2593 | } | |
2594 | } | |
2595 | } | |
2596 | } | |
a19fa589 | 2597 | CHK_EXEC(SQLDropColumn(_T("object_tools"), _T("matching_oid"))); //delete old column |
e4926628 | 2598 | CHK_EXEC(SetSchemaVersion(342)); |
4b70cb26 | 2599 | return TRUE; |
2600 | } | |
2601 | ||
56fa1092 VK |
2602 | /** |
2603 | * Upgrade from V340 to V341 | |
2604 | */ | |
2605 | static BOOL H_UpgradeFromV340(int currVersion, int newVersion) | |
2606 | { | |
2607 | static TCHAR batch[] = | |
2608 | _T("ALTER TABLE object_properties ADD country varchar(63)\n") | |
2609 | _T("ALTER TABLE object_properties ADD city varchar(63)\n") | |
2610 | _T("ALTER TABLE object_properties ADD street_address varchar(255)\n") | |
2611 | _T("ALTER TABLE object_properties ADD postcode varchar(31)\n") | |
2612 | _T("<END>"); | |
2613 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 2614 | CHK_EXEC(SetSchemaVersion(341)); |
56fa1092 VK |
2615 | return TRUE; |
2616 | } | |
2617 | ||
b00236dd | 2618 | /** |
2619 | * Upgrade from V339 to V340 | |
2620 | */ | |
2621 | static BOOL H_UpgradeFromV339(int currVersion, int newVersion) | |
2622 | { | |
2623 | CHK_EXEC(CreateConfigParam(_T("LdapPageSize"), _T("1000"), 1, 0)); | |
2624 | CHK_EXEC(SQLQuery(_T("UPDATE config SET var_value='1' WHERE var_name='LdapUserDeleteAction'"))); | |
e4926628 | 2625 | CHK_EXEC(SetSchemaVersion(340)); |
b00236dd | 2626 | return TRUE; |
2627 | } | |
2628 | ||
815638fe VK |
2629 | /** |
2630 | * Upgrade from V338 to V339 | |
2631 | */ | |
2632 | static BOOL H_UpgradeFromV338(int currVersion, int newVersion) | |
2633 | { | |
2634 | CHK_EXEC(CreateConfigParam(_T("EscapeLocalCommands"), _T("0"), 1, 0)); | |
e4926628 | 2635 | CHK_EXEC(SetSchemaVersion(339)); |
815638fe VK |
2636 | return TRUE; |
2637 | } | |
2638 | ||
9208c84b VK |
2639 | /** |
2640 | * Upgrade from V337 to V338 | |
2641 | */ | |
2642 | static BOOL H_UpgradeFromV337(int currVersion, int newVersion) | |
2643 | { | |
2644 | static TCHAR batch[] = | |
2645 | _T("ALTER TABLE nodes ADD icmp_proxy integer\n") | |
2646 | _T("UPDATE nodes SET icmp_proxy=0\n") | |
2647 | _T("<END>"); | |
2648 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 2649 | CHK_EXEC(SetSchemaVersion(338)); |
9208c84b VK |
2650 | return TRUE; |
2651 | } | |
2652 | ||
d368074d VK |
2653 | /** |
2654 | * Upgrade from V336 to V337 | |
2655 | */ | |
2656 | static BOOL H_UpgradeFromV336(int currVersion, int newVersion) | |
2657 | { | |
2658 | CHK_EXEC(CreateConfigParam(_T("SyslogNodeMatchingPolicy"), _T("0"), 1, 1)); | |
e4926628 | 2659 | CHK_EXEC(SetSchemaVersion(337)); |
d368074d VK |
2660 | return TRUE; |
2661 | } | |
2662 | ||
2b01f47c | 2663 | /** |
2664 | * Upgrade from V335 to V336 | |
2665 | */ | |
2666 | static BOOL H_UpgradeFromV335(int currVersion, int newVersion) | |
2667 | { | |
b69710b9 VK |
2668 | CHK_EXEC(ResizeColumn(_T("network_map_links"), _T("connector_name1"), 255, true)); |
2669 | CHK_EXEC(ResizeColumn(_T("network_map_links"), _T("connector_name2"), 255, true)); | |
e4926628 | 2670 | CHK_EXEC(SetSchemaVersion(336)); |
2b01f47c | 2671 | return TRUE; |
2672 | } | |
2673 | ||
b30bb1bc | 2674 | /** |
2675 | * Upgrade from V334 to V335 | |
2676 | */ | |
2677 | static BOOL H_UpgradeFromV334(int currVersion, int newVersion) | |
2678 | { | |
3da098f7 | 2679 | CHK_EXEC(CreateEventTemplate(EVENT_IF_MASK_CHANGED, _T("SYS_IF_MASK_CHANGED"), SEVERITY_NORMAL, EF_LOG, NULL, |
17b15353 VK |
2680 | _T("Interface \"%2\" changed mask from %6 to %4 (IP Addr: %3/%4, IfIndex: %5)"), |
2681 | _T("Generated when when network mask on interface is changed.\r\n") | |
2682 | _T("Parameters:\r\n") | |
2683 | _T(" 1) Interface object ID\r\n") | |
2684 | _T(" 2) Interface name\r\n") | |
2685 | _T(" 3) IP address\r\n") | |
2686 | _T(" 4) New network mask\r\n") | |
2687 | _T(" 5) Interface index\r\n") | |
2688 | _T(" 6) Old network mask"))); | |
e4926628 | 2689 | CHK_EXEC(SetSchemaVersion(335)); |
b30bb1bc | 2690 | return TRUE; |
2691 | } | |
2692 | ||
39e60274 AK |
2693 | /** |
2694 | * Upgrade from V333 to V334 | |
2695 | */ | |
2696 | static BOOL H_UpgradeFromV333(int currVersion, int newVersion) | |
2697 | { | |
241541f4 | 2698 | CHK_EXEC(RemoveNotNullConstraint(_T("user_groups"), _T("description"))); |
e4926628 | 2699 | CHK_EXEC(SetSchemaVersion(334)); |
39e60274 AK |
2700 | return TRUE; |
2701 | } | |
2702 | ||
4899db4d | 2703 | /** |
2704 | * Upgrade from V332 to V333 | |
2705 | */ | |
2706 | static BOOL H_UpgradeFromV332(int currVersion, int newVersion) | |
2707 | { | |
2708 | static TCHAR batch[] = | |
2709 | _T("INSERT INTO metadata (var_name,var_value)") | |
2710 | _T(" VALUES ('LocationHistory','CREATE TABLE gps_history_%d (latitude varchar(20), longitude varchar(20), accuracy integer not null, start_timestamp integer not null, end_timestamp integer not null, PRIMARY KEY(start_timestamp))')\n") | |
2711 | _T("<END>"); | |
2712 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 2713 | CHK_EXEC(SetSchemaVersion(333)); |
4899db4d | 2714 | return TRUE; |
2715 | } | |
2716 | ||
a6312bd6 VK |
2717 | /** |
2718 | * Upgrade from V331 to V332 | |
2719 | */ | |
2720 | static BOOL H_UpgradeFromV331(int currVersion, int newVersion) | |
2721 | { | |
2722 | CHK_EXEC(SQLQuery(_T("UPDATE items SET instd_data=instance WHERE node_id=template_id AND instd_method=0"))); | |
e4926628 | 2723 | CHK_EXEC(SetSchemaVersion(332)); |
a6312bd6 VK |
2724 | return TRUE; |
2725 | } | |
2726 | ||
2a964810 VK |
2727 | /** |
2728 | * Upgrade from V330 to V331 | |
2729 | */ | |
2730 | static BOOL H_UpgradeFromV330(int currVersion, int newVersion) | |
2731 | { | |
2732 | if (g_dbSyntax == DB_SYNTAX_ORACLE) | |
2733 | { | |
2734 | CHK_EXEC(SQLQuery(_T("ALTER TABLE audit_log ADD session_id integer DEFAULT 0 NOT NULL"))); | |
2735 | } | |
2736 | else | |
2737 | { | |
2738 | CHK_EXEC(SQLQuery(_T("ALTER TABLE audit_log ADD session_id integer NOT NULL DEFAULT 0"))); | |
2739 | } | |
e4926628 | 2740 | CHK_EXEC(SetSchemaVersion(331)); |
2a964810 VK |
2741 | return TRUE; |
2742 | } | |
2743 | ||
b66098ac VK |
2744 | /** |
2745 | * Upgrade from V329 to V330 | |
2746 | */ | |
2747 | static BOOL H_UpgradeFromV329(int currVersion, int newVersion) | |
2748 | { | |
2749 | CHK_EXEC(CreateConfigParam(_T("AlarmListDisplayLimit"), _T("4096"), 1, 0)); | |
e4926628 | 2750 | CHK_EXEC(SetSchemaVersion(330)); |
b66098ac VK |
2751 | return TRUE; |
2752 | } | |
2753 | ||
4016c0df | 2754 | /** |
2755 | * Upgrade from V328 to V329 | |
2756 | */ | |
2757 | static BOOL H_UpgradeFromV328(int currVersion, int newVersion) | |
2758 | { | |
b6005694 VK |
2759 | CHK_EXEC(SQLQuery(_T("ALTER TABLE items ADD comments $SQL:TEXT"))); |
2760 | CHK_EXEC(SQLQuery(_T("ALTER TABLE dc_tables ADD comments $SQL:TEXT"))); | |
e4926628 | 2761 | CHK_EXEC(SetSchemaVersion(329)); |
4016c0df | 2762 | return TRUE; |
2763 | } | |
2764 | ||
385b1f20 | 2765 | /** |
2766 | * Upgrade from V327 to V328 | |
2767 | */ | |
2768 | static BOOL H_UpgradeFromV327(int currVersion, int newVersion) | |
2769 | { | |
d368074d | 2770 | CHK_EXEC(CreateConfigParam(_T("ResolveDNSToIPOnStatusPoll"), _T("0"), 1, 1)); |
e4926628 | 2771 | CHK_EXEC(SetSchemaVersion(328)); |
385b1f20 | 2772 | return TRUE; |
2773 | } | |
173c189d VK |
2774 | |
2775 | /** | |
2776 | * Upgrade from V326 to V327 | |
2777 | */ | |
2778 | static BOOL H_UpgradeFromV326(int currVersion, int newVersion) | |
2779 | { | |
3fa5e14a VK |
2780 | CHK_EXEC(DropPrimaryKey(_T("network_map_links"))); |
2781 | CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_network_map_links_map_id ON network_map_links(map_id)"))); | |
e4926628 | 2782 | CHK_EXEC(SetSchemaVersion(327)); |
22aaa779 VK |
2783 | return TRUE; |
2784 | } | |
2785 | ||
ade20a86 | 2786 | /** |
2787 | * Upgrade from V325 to V326 | |
2788 | */ | |
2789 | static BOOL H_UpgradeFromV325(int currVersion, int newVersion) | |
2790 | { | |
ade20a86 | 2791 | static TCHAR batch[] = |
2792 | _T("ALTER TABLE network_map_links DROP COLUMN color\n") | |
2793 | _T("ALTER TABLE network_map_links DROP COLUMN status_object\n") | |
2794 | _T("ALTER TABLE network_map_links DROP COLUMN routing\n") | |
2795 | _T("ALTER TABLE network_map_links DROP COLUMN bend_points\n") | |
2796 | _T("<END>"); | |
2797 | CHK_EXEC(SQLBatch(batch)); | |
2798 | ||
c849da55 VK |
2799 | if (g_dbSyntax == DB_SYNTAX_DB2) |
2800 | { | |
2801 | CHK_EXEC(SQLQuery(_T("CALL Sysproc.admin_cmd('REORG TABLE network_map_links')"))); | |
2802 | } | |
2803 | ||
e4926628 | 2804 | CHK_EXEC(SetSchemaVersion(326)); |
ade20a86 | 2805 | return TRUE; |
2806 | } | |
2807 | ||
2808 | /** | |
2809 | * Upgrade from V324 to V325 | |
2810 | */ | |
2811 | static BOOL H_UpgradeFromV324(int currVersion, int newVersion) | |
2812 | { | |
2813 | //move map link configuration to xml | |
2814 | ||
2815 | DB_RESULT hResult = SQLSelect(_T("SELECT map_id, element1, element2, element_data, color, status_object, routing, bend_points FROM network_map_links")); | |
2816 | if (hResult != NULL) | |
2817 | { | |
2818 | int count = DBGetNumRows(hResult); | |
2819 | for(int i = 0; i < count; i++) | |
2820 | { | |
c55ab1c2 VK |
2821 | TCHAR *config = DBGetField(hResult, i, 3, NULL, 0); |
2822 | if (config == NULL) | |
2823 | config = _tcsdup(_T("")); | |
ade20a86 | 2824 | UINT32 color = DBGetFieldULong(hResult, i, 4); |
2825 | UINT32 statusObject = DBGetFieldULong(hResult, i, 5); | |
2826 | UINT32 routing = DBGetFieldULong(hResult, i, 6); | |
2827 | TCHAR bendPoints[1024]; | |
2828 | DBGetField(hResult, i, 7, bendPoints, 1024); | |
2829 | ||
c55ab1c2 | 2830 | TCHAR *newConfig = (TCHAR *)malloc((_tcslen(config) + 4096) * sizeof(TCHAR)); |
ade20a86 | 2831 | _tcscpy(newConfig, _T("<config>")); |
2832 | TCHAR* c1 = _tcsstr(config, _T("<dciList")); | |
2833 | TCHAR* c2 = _tcsstr(config, _T("</dciList>")); | |
2834 | if(c1 != NULL && c2!= NULL) | |
2835 | { | |
2836 | *c2 = 0; | |
2837 | _tcscat(newConfig, c1); | |
2838 | _tcscat(newConfig, _T("</dciList>")); | |
2839 | } | |
2840 | ||
2841 | TCHAR tmp[2048]; | |
2842 | _sntprintf(tmp, 2048, _T("<color>%d</color>"), color), | |
2843 | _tcscat(newConfig, tmp); | |
2844 | ||
c55ab1c2 | 2845 | if (statusObject != 0) |
ade20a86 | 2846 | { |
2847 | _sntprintf(tmp, 2048, _T("<objectStatusList length=\"1\"><long>%d</long></objectStatusList>"), statusObject); | |
2848 | _tcscat(newConfig, tmp); | |
2849 | } | |
2850 | ||
2851 | _sntprintf(tmp, 2048, _T("<routing>%d</routing>"), routing); | |
2852 | _tcscat(newConfig, tmp); | |
2853 | ||
c55ab1c2 | 2854 | if (routing == 3 && bendPoints[0] != 0) |
ade20a86 | 2855 | { |
2856 | count = 1; | |
30b86580 | 2857 | for(size_t j = 0; j < _tcslen(bendPoints); j++) |
ade20a86 | 2858 | { |
c55ab1c2 | 2859 | if (bendPoints[j] == _T(',')) |
ade20a86 | 2860 | count++; |
2861 | } | |
2862 | _sntprintf(tmp, 2048, _T("<bendPoints length=\"%d\">%s</bendPoints>"), count, bendPoints); | |
2863 | _tcscat(newConfig, tmp); | |
2864 | } | |
2865 | _tcscat(newConfig, _T("</config>")); | |
2866 | ||
7833a69f | 2867 | free(config); |
ade20a86 | 2868 | DB_STATEMENT statment = DBPrepare(g_hCoreDB, _T("UPDATE network_map_links SET element_data=? WHERE map_id=? AND element1=? AND element2=?")); |
e196e5d8 VK |
2869 | if (statment != NULL) |
2870 | { | |
2871 | DBBind(statment, 1, DB_SQLTYPE_TEXT, newConfig, DB_BIND_STATIC); | |
2872 | DBBind(statment, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0)); | |
2873 | DBBind(statment, 3, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 1)); | |
2874 | DBBind(statment, 4, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 2)); | |
2875 | CHK_EXEC(DBExecute(statment)); | |
2876 | DBFreeStatement(statment); | |
2877 | } | |
2878 | else | |
2879 | { | |
2880 | if (!g_bIgnoreErrors) | |
7833a69f | 2881 | return false; |
e196e5d8 | 2882 | } |
7833a69f | 2883 | free(newConfig); |
ade20a86 | 2884 | } |
2885 | DBFreeResult(hResult); | |
2886 | } | |
2887 | ||
e4926628 | 2888 | CHK_EXEC(SetSchemaVersion(325)); |
ade20a86 | 2889 | return TRUE; |
2890 | } | |
2891 | ||
2f1bc68b VK |
2892 | /** |
2893 | * Upgrade from V323 to V324 | |
2894 | */ | |
2895 | static BOOL H_UpgradeFromV323(int currVersion, int newVersion) | |
2896 | { | |
a9f5aa55 | 2897 | if (!MetaDataReadInt(_T("ValidTDataIndex"), 0)) // check if schema is already correct |
2f1bc68b VK |
2898 | { |
2899 | TCHAR query[1024]; | |
ade20a86 | 2900 | _sntprintf(query, 1024, |
66717659 | 2901 | _T("UPDATE metadata SET var_value='CREATE TABLE tdata_records_%%d (record_id %s not null,row_id %s not null,instance varchar(255) null,PRIMARY KEY(row_id),FOREIGN KEY (record_id) REFERENCES tdata_%%d(record_id) ON DELETE CASCADE)' WHERE var_name='TDataTableCreationCommand_1'"), |
2a964810 | 2902 | g_pszSqlType[g_dbSyntax][SQL_TYPE_INT64], g_pszSqlType[g_dbSyntax][SQL_TYPE_INT64]); |
2f1bc68b VK |
2903 | CHK_EXEC(SQLQuery(query)); |
2904 | ||
2905 | RecreateTData(_T("nodes"), true, true); | |
2906 | RecreateTData(_T("clusters"), true, true); | |
2907 | RecreateTData(_T("mobile_devices"), true, true); | |
2908 | } | |
2909 | ||
a9f5aa55 | 2910 | CHK_EXEC(SQLQuery(_T("DELETE FROM metadata WHERE var_name='ValidTDataIndex'"))); |
e4926628 | 2911 | CHK_EXEC(SetSchemaVersion(324)); |
2f1bc68b VK |
2912 | return TRUE; |
2913 | } | |
2914 | ||
c8076b19 VK |
2915 | /** |
2916 | * Upgrade from V322 to V323 | |
2917 | */ | |
2918 | static BOOL H_UpgradeFromV322(int currVersion, int newVersion) | |
2919 | { | |
2920 | CHK_EXEC(CreateConfigParam(_T("ProcessTrapsFromUnmanagedNodes"), _T("0"), 1, 1)); | |
e4926628 | 2921 | CHK_EXEC(SetSchemaVersion(323)); |
c8076b19 VK |
2922 | return TRUE; |
2923 | } | |
2924 | ||
f4d8fe18 | 2925 | /** |
2926 | * Upgrade from V321 to V322 | |
2927 | */ | |
2928 | static BOOL H_UpgradeFromV321(int currVersion, int newVersion) | |
2929 | { | |
2a964810 | 2930 | switch(g_dbSyntax) |
f4d8fe18 | 2931 | { |
2932 | case DB_SYNTAX_DB2: | |
87104c6a VK |
2933 | CHK_EXEC(SQLBatch( |
2934 | _T("ALTER TABLE users ALTER COLUMN system_access SET DATA TYPE $SQL:INT64\n") | |
2935 | _T("ALTER TABLE user_groups ALTER COLUMN system_access SET DATA TYPE $SQL:INT64\n") | |
2936 | _T("<END>"))); | |
f4d8fe18 | 2937 | break; |
2938 | case DB_SYNTAX_MSSQL: | |
87104c6a VK |
2939 | CHK_EXEC(SQLBatch( |
2940 | _T("ALTER TABLE users ALTER COLUMN system_access $SQL:INT64\n") | |
2941 | _T("ALTER TABLE user_groups ALTER COLUMN system_access $SQL:INT64\n") | |
2942 | _T("<END>"))); | |
f4d8fe18 | 2943 | break; |
2944 | case DB_SYNTAX_PGSQL: | |
87104c6a | 2945 | CHK_EXEC(SQLBatch( |
d27fb10d VK |
2946 | _T("ALTER TABLE users ALTER COLUMN system_access TYPE $SQL:INT64\n") |
2947 | _T("ALTER TABLE user_groups ALTER COLUMN system_access TYPE $SQL:INT64\n") | |
87104c6a | 2948 | _T("<END>"))); |
f4d8fe18 | 2949 | break; |
2950 | case DB_SYNTAX_SQLITE: | |
87104c6a VK |
2951 | CHK_EXEC(SQLBatch( |
2952 | _T("CREATE TABLE temp_users AS SELECT * FROM users\n") | |
2953 | _T("DROP TABLE users\n") | |
2954 | _T("CREATE TABLE users (id integer not null, guid varchar(36) not null, name varchar(63) not null, password varchar(48) not null, system_access $SQL:INT64 not null, flags integer not null,") | |
2955 | _T(" full_name varchar(127) null, description varchar(255) null, grace_logins integer not null, auth_method integer not null, cert_mapping_method integer not null, cert_mapping_data $SQL:TEXT null,") | |
2956 | _T(" auth_failures integer not null, last_passwd_change integer not null, min_passwd_length integer not null, disabled_until integer not null, last_login integer not null, password_history $SQL:TEXT null,") | |
2957 | _T(" xmpp_id varchar(127) null, ldap_dn $SQL:TEXT null, PRIMARY KEY(id))\n") | |
2958 | _T("INSERT INTO users SELECT * FROM temp_users\n") | |
2959 | _T("DROP TABLE temp_users\n") | |
2960 | _T("CREATE TABLE temp_user_groups AS SELECT * FROM user_groups\n") | |
2961 | _T("DROP TABLE user_groups\n") | |
2962 | _T("CREATE TABLE user_groups (id integer not null, guid varchar(36) not null, name varchar(63) not null, system_access $SQL:INT64 not null, flags integer not null,") | |
2963 | _T(" description varchar(255) not null, ldap_dn $SQL:TEXT null, PRIMARY KEY(id))\n") | |
2964 | _T("INSERT INTO user_groups SELECT * FROM temp_user_groups\n") | |
2965 | _T("DROP TABLE temp_user_groups\n") | |
2966 | _T("<END>"))); | |
f4d8fe18 | 2967 | break; |
52162395 VK |
2968 | case DB_SYNTAX_ORACLE: |
2969 | // no changes needed | |
2970 | break; | |
f4d8fe18 | 2971 | default: |
87104c6a VK |
2972 | CHK_EXEC(SQLBatch( |
2973 | _T("ALTER TABLE users MODIFY system_access $SQL:INT64\n") | |
2974 | _T("ALTER TABLE user_groups MODIFY system_access $SQL:INT64\n") | |
2975 | _T("<END>"))); | |
f4d8fe18 | 2976 | break; |
2977 | } | |
2978 | ||
e4926628 | 2979 | CHK_EXEC(SetSchemaVersion(322)); |
f4d8fe18 | 2980 | return TRUE; |
2981 | } | |
2982 | ||
2983 | /** | |
d4ce93a2 VK |
2984 | * Upgrade from V320 to V321 |
2985 | */ | |
2986 | static BOOL H_UpgradeFromV320(int currVersion, int newVersion) | |
2987 | { | |
2988 | static TCHAR batch[] = | |
2989 | _T("ALTER TABLE object_tools ADD command_short_name varchar(31)\n") | |
2990 | _T("UPDATE object_tools SET command_short_name='Shutdown' WHERE tool_id=1\n") | |
2991 | _T("UPDATE object_tools SET command_short_name='Restart' WHERE tool_id=2\n") | |
2992 | _T("UPDATE object_tools SET command_short_name='Wakeup' WHERE tool_id=3\n") | |
2993 | _T("<END>"); | |
2994 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 2995 | CHK_EXEC(SetSchemaVersion(321)); |
d4ce93a2 VK |
2996 | return TRUE; |
2997 | } | |
2998 | ||
ac14e3e6 | 2999 | /** |
d4ce93a2 | 3000 | * Upgrade from V319 to V320 |
d9177dd1 | 3001 | */ |
3002 | static BOOL H_UpgradeFromV319(int currVersion, int newVersion) | |
3003 | { | |
6c352bb5 | 3004 | CHK_EXEC(CreateConfigParam(_T("LdapConnectionString"), _T("ldap://localhost:389"), 1, 0)); |
d9177dd1 | 3005 | CHK_EXEC(CreateConfigParam(_T("LdapSyncUser"), _T(""), 1, 0)); |
3006 | CHK_EXEC(CreateConfigParam(_T("LdapSyncUserPassword"), _T(""), 1, 0)); | |
3007 | CHK_EXEC(CreateConfigParam(_T("LdapSearchBase"), _T(""), 1, 0)); | |
3008 | CHK_EXEC(CreateConfigParam(_T("LdapSearchFilter"), _T(""), 1, 0)); | |
3009 | CHK_EXEC(CreateConfigParam(_T("LdapUserDeleteAction"), _T("1"), 1, 0)); | |
f70a8b3c | 3010 | CHK_EXEC(CreateConfigParam(_T("LdapMappingName"), _T(""), 1, 0)); |
d9177dd1 | 3011 | CHK_EXEC(CreateConfigParam(_T("LdapMappingFullName"), _T("displayName"), 1, 0)); |
2575f149 | 3012 | CHK_EXEC(CreateConfigParam(_T("LdapMappingDescription"), _T(""), 1, 0)); |
d9177dd1 | 3013 | CHK_EXEC(CreateConfigParam(_T("LdapGroupClass"), _T(""), 1, 0)); |
3014 | CHK_EXEC(CreateConfigParam(_T("LdapUserClass"), _T(""), 1, 0)); | |
3015 | CHK_EXEC(CreateConfigParam(_T("LdapSyncInterval"), _T("0"), 1, 0)); | |
3016 | ||
3017 | static TCHAR batch[] = | |
3018 | _T("ALTER TABLE users ADD ldap_dn $SQL:TEXT\n") | |
3019 | _T("ALTER TABLE user_groups ADD ldap_dn $SQL:TEXT\n") | |
3020 | _T("<END>"); | |
3021 | CHK_EXEC(SQLBatch(batch)); | |
3022 | ||
e4926628 | 3023 | CHK_EXEC(SetSchemaVersion(320)); |
d9177dd1 | 3024 | return TRUE; |
3025 | } | |
d4ce93a2 | 3026 | |
d9177dd1 | 3027 | /* |
ac14e3e6 VK |
3028 | * Upgrade from V318 to V319 |
3029 | */ | |
3030 | static BOOL H_UpgradeFromV318(int currVersion, int newVersion) | |
3031 | { | |
3032 | static TCHAR batch[] = | |
3033 | _T("ALTER TABLE object_tools ADD icon $SQL:TEXT\n") | |
3034 | _T("ALTER TABLE object_tools ADD command_name varchar(255)\n") | |
3035 | _T("UPDATE object_tools SET flags=74,command_name='Shutdown system',icon='89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000473424954080808087c086488000002bf49444154388d95933f689c7518c73fbf3f7779efaede995c137369d54123ba4843070b1204c10ed24db182939b90c1c1e2eee05871e8d0d2b98a8ba0c52ee2d0cb622acd99222dd1084d9a18cd3597f7bd6bdebbdffbfbe7701d82e8e0071ebec303dfe7e1e1fb883fea7542aba54c080dac153c261ed1a30540b51a8f359bd9c9e565afedd4943ab6b4f4d56873f38d5014ff6af04f95950aaad5fa7e7d7dfdbcee1d1c3cd95d59395b5a5c7c82ffc1fd4ee7acc9f349fd683090b1db15499ae2013b3f8f1c0e296f6f539c380140796707333747a856296d6ca081d1e1a138cc73a95d8cc28f468834459f3ecd7367cee0b38ccd7bf7787e711180dfaf5ee599850544a3c1760898d5556c51e06314d2c5288be150186b995d58404bc9eef5ebb87e86140229257690b17be33b4a4a3173ea14236b71d60a17a3901684b59652b34952ab31dcda6470f76794c9b0b6c0160665320eefae317ab04552ad529e9ec6c78003292dc861bf2f4408e369fb7b948a8cb2cd7085c115868998936887eb75514a617a3db66eb68505211d30f86b97dde536420844a341b17e8bf8db0a21ed12d23ddcda0ff46f7e4dac24482939b8b386b3060f4207206a457afb16be9f519f7f91f22baf52f9e91bfca7ef00829a4fb1af9fa3fed2cbf8419f6c75054a0a0fc800a025f151cafdcb17514af3ecc79f939fbf40d69c259d9ca1ffd687cc7d7411a5145b573e230e52d0120f68ffd8400ad8b97685c9934f31f9ee07b4de5e227ff37d8c311c4f12aad50afb5f5c62e7da65a400519204408f37108408de471e5cfa04fbe3b74c9d7b8ff2d32f1042805f7e25bdf1257fdeee103c8408528d53afa356c85a42b107d6812920bdd3c16f7448cae3d81a0b837cdc2b1c380f724203445d8ff161767cb66df1afe5380a0d3d05ca8d0f148110c02bb035b013109b1a17747b06baa20d3c84897dc93420feeb0b8f22203603dd19307f037f0665861328b32e0000000049454e44ae426082' WHERE tool_id=1\n") | |
3036 | _T("UPDATE object_tools SET flags=74,command_name='Restart system',icon='89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000473424954080808087c0864880000029849444154388d85934d8b1c5514869f73eeadaaae6ea77bda388999882241fc5c0e09ae4484c4857b4177fa0b5474256edcfa075cbacbc23f6074a12332a0a2200a2189e8c468a23d93e99e9eaeaaae7beb1e1733f9902c7ce06c0ebc2f2fe7f0ca5fe311fdd71e77d93332922e08b749dcc5fe3bc9f72d5d1fcf861f7dd6f9f295353778ebdd0b71ff977374ad60f7888e1003bbb3379ceb930f4e7fbe7be5a7573da7f65697db17cf2ff2e757fe6e06a00e1141040aab59ebb5dc47076efbdb739cacc63edc9aabee4f64796248efb10dbcf738e750556268e97eff14b937ce6d1607126e55eae33c4956d5f4f72f21ae40d6cfe0bc4755c9f39cd4ccc0d27d7a695ae23c896fe7a645d5482c26340f0d19e639beb9811463c85788610a29c1d11d4284cc416a82848589861a49754bab390fac3f4ba69174f963ba7040d745249f4136033f63efd859769f78933a792c244265ea436d9a9a99e86895bc28b0e90fc03632bd88e463acb787580696f3e0fa299ade09e275a5feed2b09b5898f4ba35bdc40bb6b0034f5357cda4277bec354400d0b0d5d75406a5e42caa751d90596c425e22d00aa48771933a3c99e6230a8d1b241dcd1eb03a4a2c4563600f07615bc622da80510149aefa1b982ef3dc24d7d071b7afc71f0c781d58c83d107e48347d1f62a1a7f44f4d0c0130c4c4196d89fefa1273f215f7d9d4b379fa4dfdf22cb32bc7f99b5f533c45893edbc4fe75a8c0116c05b008b408434fd9a327f031b7d08c73670ee2c65595296259afe20fbe76de2fc9ba39e1cd6c6a7e4b0ae87d5200a4cbea4acce3318bd8865cfe1a283dd9fe9a65f901615a982d400c96360be9eda4ebbfdf0a6ec752f741ac11f1a89db02d9ba5bc8d483ae877587e2f0abdfac2b26b209488fa218b07627d7ff636dc524d52cff0513e53f37235ac3190000000049454e44ae426082' WHERE tool_id=2\n") | |
3037 | _T("UPDATE object_tools SET flags=64,command_name='Wakeup node using Wake-On-LAN',icon='89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000473424954080808087c086488000000097048597300000dd700000dd70142289b780000001974455874536f667477617265007777772e696e6b73636170652e6f72679bee3c1a0000023649444154388d8d924f48545114c67ff7bd37ff7cf9071bc70a4d47271ca15c848d448185b40a89204890362d8568eb2270d7a2762d5cb7711504d1ae10c195218895a488528e4e06a653d338de7bdfbcf75ac84ce38c901f9ccdb9e7fbce39f77c627ce6872df6dd71f01f781e1d9c00866003215efaf99de7d6763afb1078721262053a800908ed5a5aa9b1e3bb0802a600c0717d3cdf3fae6cccd24a25abb302a80b990c265a009859d941299763249296d6b2a6732468d25a1f24156f00e0cbd62e9b5a71a0dd9a490cad14a570b4266c780cf546797cab1b1317139747435ddcec69266c78385a53c9b1b45265b548d022d51563f45a9c778b69ce35850058de928c0cb4933fd04c7ffece812e9639e5158480865098ebc9181fbfeef07a6e9dc68805c0af8243f45480ab174e33bb9426e7484a9b942710020c3b40e24c236f3facb1bd9b634d3a00d8e100ab992cb7af7421bc225aa9b280a195a414524972054d5f679488e5a394442949d8f4b8d4d14caea09115f55a490cad155a2b9452ecfdcef37e619ddef6287706ba89c76ce2319be1fe4e926d51663e6d90cdeda3d42147ebaa4fcc161da6a61739df52cfe88d8b0ca712f8be871d0e31bb94666a7a916c2e8feb7aff3cd33ef2f4c8612dd3a0a5d1a6bfa78d544f1bbeef33bf9a617e65939fb902c50a328068bd3bb10c1c71a3210401cb24143cbc82d2459c62ad8980154b2b3909bca87e91c09fea642d26ad67f7fb32afe6bebd5958dd1c2c48ddf45f8a10d87591bdcb89b3b3f7063a337f01f30f1c1c580292640000000049454e44ae426082' WHERE tool_id=3\n") | |
3038 | _T("<END>"); | |
3039 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 3040 | CHK_EXEC(SetSchemaVersion(319)); |
ac14e3e6 VK |
3041 | return TRUE; |
3042 | } | |
3043 | ||
56d5289b VK |
3044 | /** |
3045 | * Upgrade from V317 to V318 | |
3046 | */ | |
3047 | static BOOL H_UpgradeFromV317(int currVersion, int newVersion) | |
3048 | { | |
3da098f7 | 3049 | CHK_EXEC(CreateEventTemplate(EVENT_AP_DOWN, _T("SYS_AP_DOWN"), SEVERITY_CRITICAL, EF_LOG, NULL, |
56d5289b VK |
3050 | _T("Access point %2 changed state to DOWN"), |
3051 | _T("Generated when access point state changes to DOWN.\r\n") | |
3052 | _T("Parameters:\r\n") | |
3053 | _T(" 1) Access point object ID\r\n") | |
3054 | _T(" 2) Access point name\r\n") | |
3055 | _T(" 3) Access point MAC address\r\n") | |
3056 | _T(" 4) Access point IP address\r\n") | |
3057 | _T(" 5) Access point vendor name\r\n") | |
3058 | _T(" 6) Access point model\r\n") | |
3059 | _T(" 7) Access point serial number"))); | |
3060 | ||
e4926628 | 3061 | CHK_EXEC(SetSchemaVersion(318)); |
56d5289b VK |
3062 | return TRUE; |
3063 | } | |
3064 | ||
8deadd79 VK |
3065 | /** |
3066 | * Upgrade from V316 to V317 | |
3067 | */ | |
3068 | static BOOL H_UpgradeFromV316(int currVersion, int newVersion) | |
3069 | { | |
3070 | CHK_EXEC(CreateConfigParam(_T("MinViewRefreshInterval"), _T("1000"), 1, 0)); | |
e4926628 | 3071 | CHK_EXEC(SetSchemaVersion(317)); |
8deadd79 VK |
3072 | return TRUE; |
3073 | } | |
3074 | ||
23ed00c4 VK |
3075 | /** |
3076 | * Upgrade from V315 to V316 | |
3077 | */ | |
3078 | static BOOL H_UpgradeFromV315(int currVersion, int newVersion) | |
3079 | { | |
3080 | static TCHAR batch[] = | |
3081 | _T("ALTER TABLE access_points ADD ap_state integer\n") | |
3082 | _T("UPDATE access_points SET ap_state=0\n") | |
3083 | _T("<END>"); | |
3084 | CHK_EXEC(SQLBatch(batch)); | |
3085 | ||
3da098f7 | 3086 | CHK_EXEC(CreateEventTemplate(EVENT_AP_ADOPTED, _T("SYS_AP_ADOPTED"), SEVERITY_NORMAL, EF_LOG, NULL, |
23ed00c4 VK |
3087 | _T("Access point %2 changed state to ADOPTED"), |
3088 | _T("Generated when access point state changes to ADOPTED.\r\n") | |
3089 | _T("Parameters:\r\n") | |
3090 | _T(" 1) Access point object ID\r\n") | |
3091 | _T(" 2) Access point name\r\n") | |
3092 | _T(" 3) Access point MAC address\r\n") | |
3093 | _T(" 4) Access point IP address\r\n") | |
3094 | _T(" 5) Access point vendor name\r\n") | |
3095 | _T(" 6) Access point model\r\n") | |
3096 | _T(" 7) Access point serial number"))); | |
3097 | ||
3da098f7 | 3098 | CHK_EXEC(CreateEventTemplate(EVENT_AP_UNADOPTED, _T("SYS_AP_UNADOPTED"), SEVERITY_MAJOR, EF_LOG, NULL, |
23ed00c4 VK |
3099 | _T("Access point %2 changed state to UNADOPTED"), |
3100 | _T("Generated when access point state changes to UNADOPTED.\r\n") | |
3101 | _T("Parameters:\r\n") | |
3102 | _T(" 1) Access point object ID\r\n") | |
3103 | _T(" 2) Access point name\r\n") | |
3104 | _T(" 3) Access point MAC address\r\n") | |
3105 | _T(" 4) Access point IP address\r\n") | |
3106 | _T(" 5) Access point vendor name\r\n") | |
3107 | _T(" 6) Access point model\r\n") | |
3108 | _T(" 7) Access point serial number"))); | |
3109 | ||
e4926628 | 3110 | CHK_EXEC(SetSchemaVersion(316)); |
23ed00c4 VK |
3111 | return TRUE; |
3112 | } | |
3113 | ||
b2042b58 VK |
3114 | /** |
3115 | * Upgrade from V314 to V315 | |
3116 | */ | |
3117 | static BOOL H_UpgradeFromV314(int currVersion, int newVersion) | |
3118 | { | |
3119 | static TCHAR batch[] = | |
3120 | _T("ALTER TABLE thresholds ADD match_count integer\n") | |
3121 | _T("UPDATE thresholds SET match_count=0 WHERE current_state=0\n") | |
3122 | _T("UPDATE thresholds SET match_count=1 WHERE current_state<>0\n") | |
3123 | _T("<END>"); | |
3124 | CHK_EXEC(SQLBatch(batch)); | |
e4926628 | 3125 | CHK_EXEC(SetSchemaVersion(315)); |
b2042b58 VK |
3126 | return TRUE; |
3127 | } | |
3128 | ||
2d7ee2e0 | 3129 | /** |
3130 | * Upgrade from V313 to V314 | |
3131 | */ | |
3132 | static BOOL H_UpgradeFromV313(int currVersion, int newVersion) | |
3133 | { | |
b2042b58 | 3134 | // Replace double backslash with single backslash in all "file download" (code 7) object tools |
2d7ee2e0 | 3135 | DB_RESULT hResult = SQLSelect(_T("SELECT tool_id, tool_data FROM object_tools WHERE tool_type=7")); |
3136 | if (hResult != NULL) | |
3137 | { | |
3138 | int count = DBGetNumRows(hResult); | |
3139 | for(int i = 0; i < count; i++) | |
3140 | { | |
3141 | TCHAR* toolData = DBGetField(hResult, i, 1, NULL, 0); | |
3142 | TranslateStr(toolData, _T("\\\\"), _T("\\")); | |
3143 | ||
3144 | DB_STATEMENT statment = DBPrepare(g_hCoreDB, _T("UPDATE object_tools SET tool_data=? WHERE tool_id=?")); | |
3145 | if (statment == NULL) | |
3146 | return FALSE; | |
3147 | DBBind(statment, 1, DB_SQLTYPE_TEXT, toolData, DB_BIND_DYNAMIC); | |
3148 | DBBind(statment, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0)); | |
3149 | if(!DBExecute(statment)) | |
3150 | return FALSE; | |
3151 | DBFreeStatement(statment); | |
3152 | } | |
3153 | DBFreeResult(hResult); | |
3154 | } | |
3155 | ||
e4926628 | 3156 | CHK_EXEC(SetSchemaVersion(314)); |
2d7ee2e0 | 3157 | return TRUE; |
3158 | } | |
3159 | ||
3160 | /** | |
3161 | * Upgrade from V312 to V313 | |
3162 | */ | |
3163 | static BOOL H_UpgradeFromV312(int currVersion, int newVersion) | |
3164 | { | |
241541f4 VK |
3165 | CHK_EXEC(RemoveNotNullConstraint(_T("object_tools"), _T("tool_name"))); |
3166 | CHK_EXEC(RemoveNotNullConstraint(_T("object_tools"), _T("tool_data"))); | |
3167 | CHK_EXEC(RemoveNotNullConstraint(_T("object_tools"), _T("description"))); | |
3168 | CHK_EXEC(RemoveNotNullConstraint(_T("object_tools"), _T("confirmation_text"))); | |
3169 | CHK_EXEC(RemoveNotNullConstraint(_T("object_tools"), _T("matching_oid"))); | |
3170 | CHK_EXEC(RemoveNotNullConstraint(_T("object_tools_table_columns"), _T("col_name"))); | |
2d7ee2e0 | 3171 | CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("tool_name"))); |
3172 | CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("tool_data"))); | |
3173 | CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("description"))); | |
3174 | CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("confirmation_text"))); | |
3175 | CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("matching_oid"))); | |
3176 | CHK_EXEC(ConvertStrings(_T("object_tools_table_columns"), _T("tool_id"), _T("col_number"), _T("col_name"), false)); | |
e4926628 | 3177 | CHK_EXEC(SetSchemaVersion(313)); |
2d7ee2e0 | 3178 | return TRUE; |
3179 | } | |
3180 | ||
6498e05a VK |
3181 | /** |
3182 | * Upgrade from V311 to V312 | |
3183 | */ | |
3184 | static BOOL H_UpgradeFromV311(int currVersion, int newVersion) | |
3185 | { | |
3186 | CHK_EXEC(CreateConfigParam(_T("EnableReportingServer"), _T("0"), 1, 1)); | |
3187 | CHK_EXEC(CreateConfigParam(_T("ReportingServerHostname"), _T("localhost"), 1, 1)); | |
3188 | CHK_EXEC(CreateConfigParam(_T("ReportingServerPort"), _T("4710"), 1, 1)); | |
e4926628 | 3189 | CHK_EXEC(SetSchemaVersion(312)); |
6498e05a VK |
3190 | return TRUE; |
3191 | } | |
3192 | ||
9262b092 VK |
3193 | /** |
3194 | * Upgrade from V310 to V311 | |
3195 | */ | |
3196 | static BOOL H_UpgradeFromV310(int currVersion, int newVersion) | |
3197 | { | |
3198 | IntegerArray<UINT32> deleteList; | |
3199 | ||
3200 | // reports | |
3201 | DB_RESULT hResult = SQLSelect(_T("SELECT id FROM reports")); | |
3202 | if (hResult != NULL) | |
3203 | { | |
3204 | int count = DBGetNumRows(hResult); | |
3205 | for(int i = 0; i < count; i++) | |
3206 | deleteList.add(DBGetFieldULong(hResult, i, 0)); | |
3207 | DBFreeResult(hResult); | |
3208 | } | |
3209 | ||
3210 | // report groups | |
3211 | hResult = SQLSelect(_T("SELECT id FROM containers WHERE object_class=25")); | |
3212 | if (hResult != NULL) | |
3213 | { | |
3214 | int count = DBGetNumRows(hResult); | |
3215 | for(int i = 0; i < count; i++) | |
3216 | deleteList.add(DBGetFieldULong(hResult, i, 0)); | |
3217 | DBFreeResult(hResult); | |
3218 | } | |
3219 | ||
3220 | for(int i = 0; i < deleteList.size(); i++) | |
3221 | { | |
3222 | TCHAR query[256]; | |