fixed NPE in NXCSession receiver thread on disconnect
[public/netxms.git] / src / server / tools / nxdbmgr / upgrade.cpp
CommitLineData
6f33021d 1/*
5039dede 2** nxdbmgr - NetXMS database manager
221826d9 3** Copyright (C) 2004-2017 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 29BOOL MigrateMaps();
63604cda 30bool ConvertTDataTables();
7a41a06e 31
50963ced
VK
32/**
33 * Pre-defined GUID mapping for GenerateGUID
34 */
35struct GUID_MAPPING
36{
37 UINT32 id;
38 const TCHAR *guid;
39};
40
271e3971
VK
41/**
42 * Generate GUIDs
43 */
50963ced 44static bool GenerateGUID(const TCHAR *table, const TCHAR *idColumn, const TCHAR *guidColumn, const GUID_MAPPING *mapping)
271e3971
VK
45{
46 TCHAR query[256];
47 _sntprintf(query, 256, _T("SELECT %s FROM %s"), idColumn, table);
48 DB_RESULT hResult = SQLSelect(query);
49 if (hResult == NULL)
50 return false;
51
50963ced
VK
52 uuid_t guid;
53 TCHAR buffer[64];
54
271e3971
VK
55 int count = DBGetNumRows(hResult);
56 for(int i = 0; i < count; i++)
57 {
50963ced
VK
58 const TCHAR *guidText = NULL;
59 UINT32 id = DBGetFieldULong(hResult, i, 0);
60 if (mapping != NULL)
61 {
62 for(int j = 0; mapping[j].guid != NULL; j++)
63 if (mapping[j].id == id)
64 {
65 guidText = mapping[j].guid;
66 break;
67 }
68 }
69 if (guidText == NULL)
70 {
71 _uuid_generate(guid);
72 guidText = _uuid_to_string(guid, buffer);
73 }
74 _sntprintf(query, 256, _T("UPDATE %s SET %s='%s' WHERE %s=%d"), table, guidColumn, guidText, idColumn, id);
271e3971
VK
75 if (!SQLQuery(query))
76 {
77 DBFreeResult(hResult);
78 return false;
79 }
80 }
81 DBFreeResult(hResult);
82 return true;
83}
84
4f50e45c
VK
85/**
86 * Create table
87 */
c85c8ef2 88static bool CreateTable(const TCHAR *pszQuery)
5039dede 89{
7618e362 90 String query(pszQuery);
5039dede 91
2a964810
VK
92 query.replace(_T("$SQL:TEXT"), g_pszSqlType[g_dbSyntax][SQL_TYPE_TEXT]);
93 query.replace(_T("$SQL:TXT4K"), g_pszSqlType[g_dbSyntax][SQL_TYPE_TEXT4K]);
94 query.replace(_T("$SQL:INT64"), g_pszSqlType[g_dbSyntax][SQL_TYPE_INT64]);
95 if (g_dbSyntax == DB_SYNTAX_MYSQL)
7618e362 96 query += g_pszTableSuffix;
c85c8ef2 97 return SQLQuery(query);
5039dede
AK
98}
99
4f50e45c 100/**
6a6b96c0 101 * Check if configuration variable exist
4f50e45c 102 */
c85c8ef2 103static bool IsConfigurationVariableExist(const TCHAR *name)
5039dede 104{
c85c8ef2
VK
105 bool found = false;
106 TCHAR query[256];
107 _sntprintf(query, 256, _T("SELECT var_value FROM config WHERE var_name='%s'"), name);
108 DB_RESULT hResult = DBSelect(g_hCoreDB, query);
5039dede
AK
109 if (hResult != 0)
110 {
c85c8ef2 111 found = (DBGetNumRows(hResult) > 0);
5039dede
AK
112 DBFreeResult(hResult);
113 }
c85c8ef2
VK
114 return found;
115}
5039dede 116
c85c8ef2 117/**
6a6b96c0 118 * Create configuration parameter if it doesn`t exist (unless bForceUpdate set to true)
c85c8ef2
VK
119 */
120bool CreateConfigParam(const TCHAR *name, const TCHAR *value, const TCHAR *description, char dataType, bool isVisible, bool needRestart, bool isPublic, bool forceUpdate)
121{
122 bool success = true;
2589cc10 123 TCHAR szQuery[3024];
c85c8ef2 124 if (!IsConfigurationVariableExist(name))
5039dede 125 {
2589cc10 126 _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 127 (const TCHAR *)DBPrepareString(g_hCoreDB, name, 63),
2589cc10 128 (const TCHAR *)DBPrepareString(g_hCoreDB, value, 2000), isVisible ? 1 : 0, needRestart ? 1 : 0,
c85c8ef2
VK
129 isPublic ? _T('Y') : _T('N'), dataType, (const TCHAR *)DBPrepareString(g_hCoreDB, description, 255));
130 success = SQLQuery(szQuery);
5039dede 131 }
c85c8ef2 132 else if (forceUpdate)
5039dede 133 {
2589cc10 134 _sntprintf(szQuery, 3024, _T("UPDATE config SET var_value=%s WHERE var_name=%s"),
135 (const TCHAR *)DBPrepareString(g_hCoreDB, value, 2000), (const TCHAR *)DBPrepareString(g_hCoreDB, name, 63));
c85c8ef2 136 success = SQLQuery(szQuery);
5039dede 137 }
c85c8ef2
VK
138 return success;
139}
140
141/**
142 * Create configuration parameter if it doesn't exist (unless bForceUpdate set to true)
143 */
144bool CreateConfigParam(const TCHAR *name, const TCHAR *value, bool isVisible, bool needRestart, bool forceUpdate)
145{
146 bool success = true;
2589cc10 147 TCHAR szQuery[3024];
c85c8ef2
VK
148 if (!IsConfigurationVariableExist(name))
149 {
2589cc10 150 _sntprintf(szQuery, 3024, _T("INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES (%s,%s,%d,%d)"),
c85c8ef2 151 (const TCHAR *)DBPrepareString(g_hCoreDB, name, 63),
2589cc10 152 (const TCHAR *)DBPrepareString(g_hCoreDB, value, 2000), isVisible ? 1 : 0, needRestart ? 1 : 0);
c85c8ef2
VK
153 success = SQLQuery(szQuery);
154 }
155 else if (forceUpdate)
156 {
2589cc10 157 _sntprintf(szQuery, 3024, _T("UPDATE config SET var_value=%s WHERE var_name=%s"),
158 (const TCHAR *)DBPrepareString(g_hCoreDB, value, 2000), (const TCHAR *)DBPrepareString(g_hCoreDB, name, 63));
c85c8ef2
VK
159 success = SQLQuery(szQuery);
160 }
161 return success;
5039dede
AK
162}
163
63604cda
VK
164/**
165 * Rename table
166 */
167bool RenameDatabaseTable(const TCHAR *oldName, const TCHAR *newName)
168{
169 TCHAR query[1024];
170 switch(g_dbSyntax)
171 {
172 case DB_SYNTAX_DB2:
173 case DB_SYNTAX_INFORMIX:
174 case DB_SYNTAX_MYSQL:
175 _sntprintf(query, 1024, _T("RENAME TABLE %s TO %s"), oldName, newName);
176 break;
177 case DB_SYNTAX_ORACLE:
178 case DB_SYNTAX_PGSQL:
179 _sntprintf(query, 1024, _T("ALTER TABLE %s RENAME TO %s"), oldName, newName);
180 break;
181 case DB_SYNTAX_MSSQL:
182 _sntprintf(query, 1024, _T("EXEC sp_rename '%s','%s'"), oldName, newName);
183 break;
184 default: // Unsupported DB engine
185 return false;
186 }
187 return SQLQuery(query);
188}
189
4f50e45c
VK
190/**
191 * Drop primary key from table
192 */
9bfc9a6b
VK
193static BOOL DropPrimaryKey(const TCHAR *table)
194{
195 TCHAR query[1024];
196 DB_RESULT hResult;
197 BOOL success;
198
2a964810 199 switch(g_dbSyntax)
9bfc9a6b 200 {
c849da55
VK
201 case DB_SYNTAX_DB2:
202 case DB_SYNTAX_INFORMIX:
9bfc9a6b 203 case DB_SYNTAX_MYSQL:
c849da55 204 case DB_SYNTAX_ORACLE:
9bfc9a6b
VK
205 _sntprintf(query, 1024, _T("ALTER TABLE %s DROP PRIMARY KEY"), table);
206 success = SQLQuery(query);
207 break;
208 case DB_SYNTAX_PGSQL:
209 _sntprintf(query, 1024, _T("ALTER TABLE %s DROP CONSTRAINT %s_pkey"), table, table);
210 success = SQLQuery(query);
211 break;
212 case DB_SYNTAX_MSSQL:
213 success = FALSE;
214 _sntprintf(query, 1024, _T("SELECT name FROM sysobjects WHERE xtype='PK' AND parent_obj=OBJECT_ID('%s')"), table);
215 hResult = SQLSelect(query);
216 if (hResult != NULL)
217 {
218 if (DBGetNumRows(hResult) > 0)
219 {
220 TCHAR objName[512];
221
222 DBGetField(hResult, 0, 0, objName, 512);
223 _sntprintf(query, 1024, _T("ALTER TABLE %s DROP CONSTRAINT %s"), table, objName);
224 success = SQLQuery(query);
225 }
0b112a22
VK
226 else
227 {
228 success = TRUE; // No PK to drop
229 }
9bfc9a6b
VK
230 DBFreeResult(hResult);
231 }
232 break;
233 default: // Unsupported DB engine
234 success = FALSE;
235 break;
236 }
c849da55
VK
237
238 if ((g_dbSyntax == DB_SYNTAX_DB2) && success)
239 {
240 _sntprintf(query, 1024, _T("CALL Sysproc.admin_cmd('REORG TABLE %s')"), table);
241 success = SQLQuery(query);
242 }
9bfc9a6b
VK
243 return success;
244}
245
4f50e45c
VK
246/**
247 * Convert strings from # encoded form to normal form
248 */
d6bf58f9 249static BOOL ConvertStrings(const TCHAR *table, const TCHAR *idColumn, const TCHAR *idColumn2, const TCHAR *column, bool isStringId)
643c9dcb
VK
250{
251 DB_RESULT hResult;
252 TCHAR *query;
4e0e77e6 253 size_t queryLen = 512;
643c9dcb
VK
254 BOOL success = FALSE;
255
c29fb885 256 query = (TCHAR *)malloc(queryLen * sizeof(TCHAR));
fe12a1ea 257
2a964810 258 switch(g_dbSyntax)
a4743a0f
VK
259 {
260 case DB_SYNTAX_MSSQL:
9f6712bc 261 _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE CAST(%s AS nvarchar(4000))=N'#00'"), table, column, column);
a4743a0f
VK
262 break;
263 case DB_SYNTAX_ORACLE:
264 _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE to_char(%s)='#00'"), table, column, column);
265 break;
266 default:
267 _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE %s='#00'"), table, column, column);
268 break;
269 }
fe12a1ea
VK
270 if (!SQLQuery(query))
271 {
272 free(query);
273 return FALSE;
274 }
275
6f33021d 276 _sntprintf(query, queryLen, _T("SELECT %s,%s%s%s FROM %s WHERE %s LIKE '%%#%%'"),
98cd01bb 277 idColumn, column, (idColumn2 != NULL) ? _T(",") : _T(""), (idColumn2 != NULL) ? idColumn2 : _T(""), table, column);
643c9dcb
VK
278 hResult = SQLSelect(query);
279 if (hResult == NULL)
280 {
281 free(query);
282 return FALSE;
283 }
284
285 int count = DBGetNumRows(hResult);
286 for(int i = 0; i < count; i++)
287 {
643c9dcb 288 TCHAR *value = DBGetField(hResult, i, 1, NULL, 0);
035a4d73 289 if (_tcschr(value, _T('#')) != NULL)
643c9dcb 290 {
035a4d73
VK
291 DecodeSQLString(value);
292 String newValue = DBPrepareString(g_hCoreDB, value);
4e0e77e6 293 if (newValue.length() + 256 > queryLen)
035a4d73 294 {
4e0e77e6 295 queryLen = newValue.length() + 256;
c29fb885 296 query = (TCHAR *)realloc(query, queryLen * sizeof(TCHAR));
035a4d73 297 }
d6bf58f9 298 if (isStringId)
98cd01bb 299 {
d6bf58f9
VK
300 TCHAR *id = DBGetField(hResult, i, 0, NULL, 0);
301 if (idColumn2 != NULL)
302 {
303 TCHAR *id2 = DBGetField(hResult, i, 2, NULL, 0);
304 _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=%s AND %s=%s"),
305 table, column, (const TCHAR *)newValue,
6f33021d 306 idColumn, (const TCHAR *)DBPrepareString(g_hCoreDB, id),
d6bf58f9
VK
307 idColumn2, (const TCHAR *)DBPrepareString(g_hCoreDB, id2));
308 }
309 else
310 {
311 _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=%s"), table, column,
312 (const TCHAR *)newValue, idColumn, (const TCHAR *)DBPrepareString(g_hCoreDB, id));
313 }
314 free(id);
98cd01bb
VK
315 }
316 else
317 {
d6bf58f9
VK
318 INT64 id = DBGetFieldInt64(hResult, i, 0);
319 if (idColumn2 != NULL)
320 {
321 INT64 id2 = DBGetFieldInt64(hResult, i, 2);
6f33021d 322 _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=") INT64_FMT _T(" AND %s=") INT64_FMT,
d6bf58f9
VK
323 table, column, (const TCHAR *)newValue, idColumn, id, idColumn2, id2);
324 }
325 else
326 {
327 _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=") INT64_FMT, table, column,
328 (const TCHAR *)newValue, idColumn, id);
329 }
98cd01bb 330 }
035a4d73
VK
331 if (!SQLQuery(query))
332 goto cleanup;
643c9dcb 333 }
643c9dcb
VK
334 }
335 success = TRUE;
336
337cleanup:
338 DBFreeResult(hResult);
a4743a0f 339 free(query);
643c9dcb
VK
340 return success;
341}
342
98cd01bb
VK
343static BOOL ConvertStrings(const TCHAR *table, const TCHAR *idColumn, const TCHAR *column)
344{
d6bf58f9 345 return ConvertStrings(table, idColumn, NULL, column, false);
98cd01bb
VK
346}
347
4f50e45c 348/**
241541f4 349 * Remove NOT NULL constraint from column
4f50e45c 350 */
241541f4 351static bool RemoveNotNullConstraint(const TCHAR *table, const TCHAR *column)
1024e962
VK
352{
353 TCHAR query[1024] = _T("");
354
2a964810 355 switch(g_dbSyntax)
1024e962
VK
356 {
357 case DB_SYNTAX_ORACLE:
358 _sntprintf(query, 1024, _T("DECLARE already_null EXCEPTION; ")
359 _T("PRAGMA EXCEPTION_INIT(already_null, -1451); ")
f57209fd
VK
360 _T("BEGIN EXECUTE IMMEDIATE 'ALTER TABLE %s MODIFY %s null'; ")
361 _T("EXCEPTION WHEN already_null THEN null; END;"), table, column);
1024e962 362 break;
480e036b
VK
363 case DB_SYNTAX_PGSQL:
364 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s DROP NOT NULL"), table, column);
365 break;
1024e962
VK
366 default:
367 break;
368 }
369
241541f4
VK
370 return (query[0] != 0) ? SQLQuery(query) : true;
371}
372
373/**
374 * Set NOT NULL constraint on column
375 */
376static bool SetNotNullConstraint(const TCHAR *table, const TCHAR *column)
377{
378 TCHAR query[1024] = _T("");
379
380 switch(g_dbSyntax)
381 {
382 case DB_SYNTAX_ORACLE:
383 _sntprintf(query, 1024, _T("DECLARE already_not_null EXCEPTION; ")
384 _T("PRAGMA EXCEPTION_INIT(already_not_null, -1442); ")
385 _T("BEGIN EXECUTE IMMEDIATE 'ALTER TABLE %s MODIFY %s NOT NULL'; ")
386 _T("EXCEPTION WHEN already_not_null THEN null; END;"), table, column);
387 break;
388 case DB_SYNTAX_PGSQL:
389 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s SET NOT NULL"), table, column);
390 break;
391 default:
392 break;
393 }
394
395 return (query[0] != 0) ? SQLQuery(query) : true;
1024e962
VK
396}
397
480e036b
VK
398/**
399 * Resize varchar column
400 */
c48843a5 401static bool ResizeColumn(const TCHAR *table, const TCHAR *column, int newSize, bool nullable)
480e036b
VK
402{
403 TCHAR query[1024];
404
2a964810 405 switch(g_dbSyntax)
480e036b
VK
406 {
407 case DB_SYNTAX_DB2:
408 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s SET DATA TYPE varchar(%d)"), table, column, newSize);
409 break;
410 case DB_SYNTAX_MSSQL:
b69710b9 411 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s varchar(%d) %s NULL"), table, column, newSize, nullable ? _T("") : _T("NOT"));
480e036b
VK
412 break;
413 case DB_SYNTAX_PGSQL:
414 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s TYPE varchar(%d)"), table, column, newSize);
415 break;
416 case DB_SYNTAX_SQLITE:
417 /* TODO: add SQLite support */
418 query[0] = 0;
419 break;
420 default:
421 _sntprintf(query, 1024, _T("ALTER TABLE %s MODIFY %s varchar(%d)"), table, column, newSize);
422 break;
423 }
424
c48843a5 425 return (query[0] != 0) ? SQLQuery(query) : true;
480e036b
VK
426}
427
4f50e45c
VK
428/**
429 * Create new event template
430 */
3da098f7 431static BOOL CreateEventTemplate(int code, const TCHAR *name, int severity, int flags, const TCHAR *guid, const TCHAR *message, const TCHAR *description)
aa16f82b 432{
480e036b 433 TCHAR query[4096];
aa16f82b 434
3da098f7
VK
435 if (guid != NULL)
436 {
437 _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')"),
438 code, name, severity, flags, (const TCHAR *)DBPrepareString(g_hCoreDB, message),
439 (const TCHAR *)DBPrepareString(g_hCoreDB, description), guid);
440 }
441 else
442 {
443 _sntprintf(query, 4096, _T("INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description) VALUES (%d,'%s',%d,%d,%s,%s)"),
444 code, name, severity, flags, (const TCHAR *)DBPrepareString(g_hCoreDB, message),
445 (const TCHAR *)DBPrepareString(g_hCoreDB, description));
446 }
aa16f82b
VK
447 return SQLQuery(query);
448}
449
22aaa779
VK
450/**
451 * Re-create TDATA tables
452 */
2f1bc68b 453static BOOL RecreateTData(const TCHAR *className, bool multipleTables, bool indexFix)
22aaa779 454{
1d4f7890 455 TCHAR query[1024];
22aaa779
VK
456 _sntprintf(query, 256, _T("SELECT id FROM %s"), className);
457 DB_RESULT hResult = SQLSelect(query);
458 if (hResult != NULL)
459 {
460 int count = DBGetNumRows(hResult);
461 for(int i = 0; i < count; i++)
462 {
2f1bc68b 463 bool recreateTables = true;
22aaa779
VK
464 DWORD id = DBGetFieldULong(hResult, i, 0);
465
2f1bc68b 466 if (indexFix)
1d4f7890 467 {
2f1bc68b
VK
468 _sntprintf(query, 256, _T("SELECT count(*) FROM dc_tables WHERE node_id=%d"), id);
469 DB_RESULT hResultCount = SQLSelect(query);
470 if (hResultCount != NULL)
22aaa779 471 {
7d4f8ace 472 recreateTables = (DBGetFieldLong(hResultCount, 0, 0) == 0);
2f1bc68b
VK
473 DBFreeResult(hResultCount);
474 }
475
476 if (!recreateTables)
477 {
a9f5aa55 478 _sntprintf(query, 256, _T("CREATE INDEX idx_tdata_rec_%d_id ON tdata_records_%d(record_id)"), id, id);
2f1bc68b
VK
479 if (!SQLQuery(query))
480 {
481 if (!g_bIgnoreErrors)
482 {
483 DBFreeResult(hResult);
484 return FALSE;
485 }
486 }
22aaa779
VK
487 }
488 }
489
2f1bc68b 490 if (recreateTables)
22aaa779 491 {
2f1bc68b 492 if (multipleTables)
22aaa779 493 {
2f1bc68b
VK
494 _sntprintf(query, 1024, _T("DROP TABLE tdata_rows_%d\nDROP TABLE tdata_records_%d\nDROP TABLE tdata_%d\n<END>"), id, id, id);
495 }
496 else
497 {
498 _sntprintf(query, 256, _T("DROP TABLE tdata_%d\n<END>"), id);
499 }
500 if (!SQLBatch(query))
501 {
502 if (!g_bIgnoreErrors)
503 {
504 DBFreeResult(hResult);
505 return FALSE;
506 }
507 }
508
63604cda 509 if (!CreateTDataTable(id))
2f1bc68b
VK
510 {
511 if (!g_bIgnoreErrors)
512 {
513 DBFreeResult(hResult);
514 return FALSE;
515 }
22aaa779
VK
516 }
517 }
518 }
519 DBFreeResult(hResult);
520 }
521 else
522 {
523 if (!g_bIgnoreErrors)
524 return FALSE;
525 }
385b1f20 526 return TRUE;
527}
528
c75e9ee4
VK
529/**
530 * Convert network masks from dotted decimal format to number of bits
531 */
532static BOOL ConvertNetMasks(const TCHAR *table, const TCHAR *column, const TCHAR *idColumn, const TCHAR *idColumn2 = NULL, const TCHAR *condition = NULL)
533{
534 TCHAR query[256];
fcf91b2e 535
c75e9ee4
VK
536 if (idColumn2 != NULL)
537 _sntprintf(query, 256, _T("SELECT %s,%s,%s FROM %s"), idColumn, column, idColumn2, table);
538 else
539 _sntprintf(query, 256, _T("SELECT %s,%s FROM %s"), idColumn, column, table);
540 DB_RESULT hResult = SQLSelect(query);
541 if (hResult == NULL)
542 return FALSE;
543
a19fa589 544 BOOL success = SQLDropColumn(table, column);
fcf91b2e 545
c75e9ee4
VK
546 if (success)
547 {
548 _sntprintf(query, 256, _T("ALTER TABLE %s ADD %s integer"), table, column);
549 success = SQLQuery(query);
550 }
551
552 if (success)
553 {
554 int count = DBGetNumRows(hResult);
555 for(int i = 0; (i < count) && success; i++)
556 {
557 if (idColumn2 != NULL)
558 {
559 TCHAR id2[256];
fcf91b2e 560 _sntprintf(query, 256, _T("UPDATE %s SET %s=%d WHERE %s=%d AND %s='%s'"),
c75e9ee4
VK
561 table, column, BitsInMask(DBGetFieldIPAddr(hResult, i, 1)), idColumn, DBGetFieldLong(hResult, i, 0),
562 idColumn2, DBGetField(hResult, i, 2, id2, 256));
563 }
564 else
565 {
fcf91b2e 566 _sntprintf(query, 256, _T("UPDATE %s SET %s=%d WHERE %s=%d"),
c75e9ee4
VK
567 table, column, BitsInMask(DBGetFieldIPAddr(hResult, i, 1)), idColumn, DBGetFieldLong(hResult, i, 0));
568 }
569 success = SQLQuery(query);
570 }
571 }
572
573 DBFreeResult(hResult);
574 return success;
575}
576
b2a15edc
VK
577/**
578 * Convert object tool macros to new format
579 */
580static bool ConvertObjectToolMacros(UINT32 id, const TCHAR *text, const TCHAR *column)
581{
582 if (_tcschr(text, _T('%')) == NULL)
583 return true; // nothing to convert
584
585 String s;
586 for(const TCHAR *p = text; *p != 0; p++)
587 {
588 if (*p == _T('%'))
589 {
590 TCHAR name[256];
591 int i = 0;
592 for(p++; (*p != _T('%')) && (*p != 0); p++)
593 {
594 if (i < 255)
595 name[i++] = *p;
596 }
597 if (*p == 0)
598 break; // malformed string
599 name[i] = 0;
600 if (!_tcscmp(name, _T("ALARM_ID")))
601 {
602 s.append(_T("%Y"));
603 }
604 else if (!_tcscmp(name, _T("ALARM_MESSAGE")))
605 {
606 s.append(_T("%A"));
607 }
608 else if (!_tcscmp(name, _T("ALARM_SEVERITY")))
609 {
610 s.append(_T("%s"));
611 }
612 else if (!_tcscmp(name, _T("ALARM_SEVERITY_TEXT")))
613 {
614 s.append(_T("%S"));
615 }
616 else if (!_tcscmp(name, _T("ALARM_STATE")))
617 {
618 s.append(_T("%y"));
619 }
620 else if (!_tcscmp(name, _T("OBJECT_ID")))
621 {
622 s.append(_T("%I"));
623 }
624 else if (!_tcscmp(name, _T("OBJECT_IP_ADDR")))
625 {
626 s.append(_T("%a"));
627 }
628 else if (!_tcscmp(name, _T("OBJECT_NAME")))
629 {
630 s.append(_T("%n"));
631 }
632 else if (!_tcscmp(name, _T("USERNAME")))
633 {
634 s.append(_T("%U"));
635 }
636 else
637 {
638 s.append(_T("%{"));
639 s.append(name);
640 s.append(_T('}'));
641 }
642 }
643 else
644 {
645 s.append(*p);
646 }
647 }
648
649 String query = _T("UPDATE object_tools SET ");
650 query.append(column);
651 query.append(_T('='));
652 query.append(DBPrepareString(g_hCoreDB, s));
653 query.append(_T(" WHERE tool_id="));
654 query.append(id);
655 return SQLQuery(query);
656}
8a1519ce 657
83aa5ebd
VK
658/**
659 * Create library script
660 */
661static bool CreateLibraryScript(UINT32 id, const TCHAR *name, const TCHAR *code)
662{
663 // Check if script exists
664 TCHAR query[256];
665 _sntprintf(query, 256, _T("SELECT script_id FROM script_library WHERE script_id=%d OR script_name=%s"),
666 id, (const TCHAR *)DBPrepareString(g_hCoreDB, name));
667 DB_RESULT hResult = SQLSelect(query);
668 if (hResult == NULL)
669 return false;
670 bool exist = (DBGetNumRows(hResult) > 0);
671 DBFreeResult(hResult);
672 if (exist)
673 return true;
674
675 DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("INSERT INTO script_library (script_id,script_name,script_code) VALUES (?,?,?)"));
676 if (hStmt == NULL)
677 return false;
678
679 DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, id);
680 DBBind(hStmt, 2, DB_SQLTYPE_VARCHAR, name, DB_BIND_STATIC);
681 DBBind(hStmt, 3, DB_SQLTYPE_TEXT, code, DB_BIND_STATIC);
682
683 bool success = SQLExecute(hStmt);
684 DBFreeStatement(hStmt);
685 return success;
686}
687
e2a9c5fc
VK
688/**
689 * Check if an event pair is handled by any EPP rules
690 */
691static bool IsEventPairInUse(UINT32 code1, UINT32 code2)
692{
693 TCHAR query[256];
694 _sntprintf(query, 256, _T("SELECT count(*) FROM policy_event_list WHERE event_code=%d OR event_code=%d"), code1, code2);
695 DB_RESULT hResult = SQLSelect(query);
696 if (hResult == NULL)
697 return false;
698 bool inUse = (DBGetFieldLong(hResult, 0, 0) > 0);
699 DBFreeResult(hResult);
700 return inUse;
701}
702
703/**
704 * Return the next free EPP rule ID
705 */
706static int NextFreeEPPruleID()
707{
708 int ruleId = 1;
709 DB_RESULT hResult = SQLSelect(_T("SELECT max(rule_id) FROM event_policy"));
710 if (hResult != NULL)
711 {
712 ruleId = DBGetFieldLong(hResult, 0, 0) + 1;
713 DBFreeResult(hResult);
714 }
715 return ruleId;
716}
717
de1be1b5
VK
718/**
719 * Add event to EPP rule by rule GUID
720 */
721static bool AddEventToEPPRule(const TCHAR *guid, UINT32 eventCode)
722{
723 TCHAR query[256];
724 _sntprintf(query, 256, _T("SELECT rule_id FROM event_policy WHERE rule_guid='%s'"), guid);
725 DB_RESULT hResult = SQLSelect(query);
726 if (hResult == NULL)
727 return false;
728
729 bool success = true;
730 if (DBGetNumRows(hResult) > 0)
731 {
732 _sntprintf(query, 256, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), DBGetFieldLong(hResult, 0, 0), eventCode);
733 success = SQLQuery(query);
734 }
735 DBFreeResult(hResult);
736 return success;
737}
738
e4926628
VK
739/**
740 * Set schema version
741 */
742static bool SetSchemaVersion(int version)
743{
744 TCHAR query[256];
745 _sntprintf(query, 256, _T("UPDATE metadata SET var_value='%d' WHERE var_name='SchemaVersion'"), version);
746 return SQLQuery(query);
747}
748
3c37ab80
VK
749/**
750 * Upgrade from V452 to V453
751 */
752static BOOL H_UpgradeFromV452(int currVersion, int newVersion)
753{
754 static const TCHAR *batch =
755 _T("ALTER TABLE audit_log ADD value_diff $SQL:TEXT\n")
756 _T("<END>");
757 CHK_EXEC(SQLBatch(batch));
758 CHK_EXEC(SetSchemaVersion(453));
759 return TRUE;
760}
761
dbb49f94
VK
762/**
763 * Upgrade from V451 to V452
764 */
765static BOOL H_UpgradeFromV451(int currVersion, int newVersion)
766{
767 static const TCHAR *batch =
768 _T("ALTER TABLE audit_log ADD old_value $SQL:TEXT\n")
769 _T("ALTER TABLE audit_log ADD new_value $SQL:TEXT\n")
770 _T("<END>");
771 CHK_EXEC(SQLBatch(batch));
772 CHK_EXEC(SetSchemaVersion(452));
773 return TRUE;
774}
775
542627ea
VK
776/**
777 * Upgrade from V450 to V451
778 */
779static BOOL H_UpgradeFromV450(int currVersion, int newVersion)
780{
781 CHK_EXEC(CreateTable(
782 _T("CREATE TABLE object_access_snapshot (")
783 _T(" user_id integer not null,")
784 _T(" object_id integer not null,")
785 _T(" access_rights integer not null,")
786 _T("PRIMARY KEY(user_id,object_id))")));
787
788 CHK_EXEC(SetSchemaVersion(451));
789 return TRUE;
790}
791
4ca9d9c0
VK
792/**
793 * Upgrade from V449 to V450
794 */
795static BOOL H_UpgradeFromV449(int currVersion, int newVersion)
796{
797 static const TCHAR *batch =
798 _T("ALTER TABLE dct_thresholds ADD sample_count integer\n")
799 _T("UPDATE dct_thresholds SET sample_count=1\n")
800 _T("<END>");
801 CHK_EXEC(SQLBatch(batch));
802 SetNotNullConstraint(_T("dct_thresholds"), _T("sample_count"));
803
804 CHK_EXEC(CreateTable(
805 _T("CREATE TABLE dct_threshold_instances (")
806 _T(" threshold_id integer not null,")
8aaa2784 807 _T(" instance varchar(255) not null,")
4ca9d9c0
VK
808 _T(" match_count integer not null,")
809 _T(" is_active char(1) not null,")
810 _T("PRIMARY KEY(threshold_id,instance))")));
811
812 CHK_EXEC(SetSchemaVersion(450));
813 return TRUE;
814}
815
0d2c73ec
VK
816/**
817 * Upgrade from V448 to V449
818 */
819static BOOL H_UpgradeFromV448(int currVersion, int newVersion)
820{
821 CHK_EXEC(CreateConfigParam(_T("SMTPPort"), _T("25"), _T("Port used by SMTP server"), 'I', true, false, false, false));
822 CHK_EXEC(SetSchemaVersion(449));
823 return TRUE;
824}
825
b723bbb3
VK
826/**
827 * Upgrade from V447 to V448
828 */
829static BOOL H_UpgradeFromV447(int currVersion, int newVersion)
830{
831 CHK_EXEC(SQLQuery(_T("ALTER TABLE nodes ADD lldp_id varchar(63)")));
832 CHK_EXEC(SetSchemaVersion(448));
833 return TRUE;
834}
835
fa9c1a51
VK
836/**
837 * Upgrade from V446 to V447
838 */
839static BOOL H_UpgradeFromV446(int currVersion, int newVersion)
840{
841 CHK_EXEC(CreateTable(
842 _T("CREATE TABLE port_layouts (")
843 _T(" device_oid varchar(255) not null,")
844 _T(" numbering_scheme char(1) not null,")
845 _T(" row_count char(1) not null,")
846 _T(" layout_data varchar(4000) null,")
847 _T("PRIMARY KEY(device_oid))")));
848
849 CHK_EXEC(SetSchemaVersion(447));
850 return TRUE;
851}
852
3e883888
EJ
853/**
854 * Upgrade from V445 to V446
855 */
856static BOOL H_UpgradeFromV445(int currVersion, int newVersion)
857{
858 CHK_EXEC(CreateTable(
859 _T("CREATE TABLE network_map_seed_nodes (")
860 _T(" map_id integer not null,")
861 _T(" seed_node_id integer not null,")
862 _T("PRIMARY KEY(map_id,seed_node_id))")));
863
864 DB_RESULT hResult = DBSelect(g_hCoreDB, _T("SELECT id,seed FROM network_maps"));
865 DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("INSERT INTO network_map_seed_nodes (map_id,seed_node_id) VALUES (?,?)"));
866 if (hResult != NULL)
867 {
868 if (hStmt != NULL)
869 {
870 int nRows = DBGetNumRows(hResult);
871 for(int i = 0; i < nRows; i++)
872 {
873 DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0));
874 DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 1));
875
876 if (!SQLExecute(hStmt))
877 {
878 if (!g_bIgnoreErrors)
879 {
880 DBFreeStatement(hStmt);
881 DBFreeResult(hResult);
882 return FALSE;
883 }
884 }
885 }
886
887 CHK_EXEC(SQLDropColumn(_T("network_maps"), _T("seed")));
888 DBFreeStatement(hStmt);
889 }
890 DBFreeResult(hResult);
891 }
892
3e883888
EJ
893 CHK_EXEC(SetSchemaVersion(446));
894 return TRUE;
895}
896
c48843a5
VK
897/**
898 * Upgrade from V444 to V445
899 */
900static BOOL H_UpgradeFromV444(int currVersion, int newVersion)
901{
902 CHK_EXEC(SQLQuery(_T("ALTER TABLE nodes ADD tunnel_id varchar(36) null")));
903 CHK_EXEC(SetSchemaVersion(445));
904 return TRUE;
905}
906
80d9447b 907/**
908 * Upgrade from V443 to V444
909 */
910static BOOL H_UpgradeFromV443(int currVersion, int newVersion)
911{
d888bc1c 912 CHK_EXEC(CreateConfigParam(_T("GraceLoginCount"), _T("5"), _T("User's grace login count"), 'I', true, false, false, false));
80d9447b 913 CHK_EXEC(SetSchemaVersion(444));
914 return TRUE;
915}
916
917/**
e9c75749
EJ
918 * Upgrade from V442 to V443
919 */
920static BOOL H_UpgradeFromV442(int currVersion, int newVersion)
921{
922 static const TCHAR *batch =
923 _T("ALTER TABLE dc_tables ADD instance varchar(255) null\n")
924 _T("ALTER TABLE dc_tables ADD instd_method integer null\n")
925 _T("UPDATE dc_tables SET instd_method=0\n")
926 _T("ALTER TABLE dc_tables ADD instd_data varchar(255) null\n")
927 _T("ALTER TABLE dc_tables ADD instd_filter $SQL:TEXT null\n")
928 _T("<END>");
929 CHK_EXEC(SQLBatch(batch));
930 SetNotNullConstraint(_T("dc_tables"), _T("instd_method"));
931 CHK_EXEC(SetSchemaVersion(443));
932 return TRUE;
933}
934
d1c4701c
VK
935/**
936 * Upgrade from V441 to V442
937 */
938static BOOL H_UpgradeFromV441(int currVersion, int newVersion)
939{
940 CHK_EXEC(CreateTable(
941 _T("CREATE TABLE object_urls (")
942 _T(" object_id integer not null,")
943 _T(" url_id integer not null,")
944 _T(" url varchar(2000) null,")
945 _T(" description varchar(2000) null,")
946 _T(" PRIMARY KEY(object_id,url_id))")));
947 CHK_EXEC(SetSchemaVersion(442));
948 return TRUE;
949}
950
c8ad9b5b
VK
951/**
952 * Upgrade from V440 to V441
953 */
954static BOOL H_UpgradeFromV440(int currVersion, int newVersion)
955{
956 CHK_EXEC(CreateConfigParam(_T("TopologyPollingInterval"), _T("1800"), _T("Interval in seconds between topology polls"), 'I', true, true, false, false));
957 CHK_EXEC(SetSchemaVersion(441));
958 return TRUE;
959}
960
c29cf4bf
VK
961/**
962 * Upgrade from V439 to V440
963 */
964static BOOL H_UpgradeFromV439(int currVersion, int newVersion)
965{
966 static const TCHAR *batch =
967 _T("UPDATE config SET description='Enable/disable automatic deletion of subnet objects without any nodes within.' WHERE var_name='DeleteEmptySubnets'\n")
968 _T("UPDATE config SET description='Instance polling interval (in seconds).' WHERE var_name='InstancePollingInterval'\n")
969 _T("<END>");
970 CHK_EXEC(SQLBatch(batch));
971 CHK_EXEC(SetSchemaVersion(440));
972 return TRUE;
973}
974
776d2ca4
EJ
975/**
976 * Upgrade from V438 to V439
977 */
978static BOOL H_UpgradeFromV438(int currVersion, int newVersion)
979{
980 static const TCHAR *batch =
981 _T("UPDATE config SET data_type='S' WHERE var_name='LdapUserUniqueId'\n")
c29cf4bf 982 _T("UPDATE config SET data_type='S' WHERE var_name='LdapGroupUniqueId'\n")
776d2ca4
EJ
983 _T("<END>");
984 CHK_EXEC(SQLBatch(batch));
985 CHK_EXEC(SetSchemaVersion(439));
986 return TRUE;
987}
988
0207b7dd
EJ
989/**
990 * Upgrade from V437 to V438
991 */
992static BOOL H_UpgradeFromV437(int currVersion, int newVersion)
993{
994 static const TCHAR *batch =
995 _T("ALTER TABLE snmp_trap_cfg ADD guid varchar(36)\n")
996 _T("UPDATE snmp_trap_cfg SET guid='5d01e7e5-edbb-46ce-b53c-f7f64d1bf8ff' WHERE trap_id=1\n")
997 _T("UPDATE snmp_trap_cfg SET guid='c5464919-fd76-4624-9c21-b6ab73d9df80' WHERE trap_id=2\n")
998 _T("UPDATE snmp_trap_cfg SET guid='44d3b32e-33c5-4a39-b2ad-990a1120155d' WHERE trap_id=3\n")
999 _T("UPDATE snmp_trap_cfg SET guid='c9660f48-a4b3-41c8-b3f9-e9a6a8129db5' WHERE trap_id=4\n")
1000 _T("UPDATE snmp_trap_cfg SET guid='4b422ba6-4b45-4881-931a-ed38dc798f9f' WHERE trap_id=5\n")
1001 _T("UPDATE snmp_trap_cfg SET guid='bd8b6971-a3e4-4cad-9c70-3a33e61e0913' WHERE trap_id=6\n")
1002 _T("ALTER TABLE script_library ADD guid varchar(36)\n")
1003 _T("UPDATE script_library SET guid='3b7bddce-3505-42ff-ac60-6a48a64bd0ae' WHERE script_id=1\n")
1004 _T("UPDATE script_library SET guid='2fb9212b-97e6-40e7-b434-2df4f7e8f6aa' WHERE script_id=2\n")
1005 _T("UPDATE script_library SET guid='38696a00-c519-438c-8cbd-4b3a0cba4af1' WHERE script_id=3\n")
1006 _T("UPDATE script_library SET guid='efe50915-47b2-43d8-b4f4-2c09a44970c3' WHERE script_id=4\n")
1007 _T("UPDATE script_library SET guid='7837580c-4054-40f2-981f-7185797fe7d7' WHERE script_id=11\n")
1008 _T("UPDATE script_library SET guid='f7d1bc7e-4046-4ee4-adb2-718f7361984d' WHERE script_id=12\n")
1009 _T("UPDATE script_library SET guid='048fcf32-765b-4702-9c70-f012f62d5a90' WHERE script_id=13\n")
1010 _T("UPDATE script_library SET guid='d515c10f-a5c9-4f41-afcd-9ddc8845f288' WHERE script_id=14\n")
1011 _T("UPDATE script_library SET guid='7cd1c471-2f14-4fae-8743-8899fed64d18' WHERE script_id=15\n")
1012 _T("UPDATE script_library SET guid='befdb083-ac68-481d-a7b7-127e11c3fae0' WHERE script_id=16\n")
1013 _T("<END>");
1014 CHK_EXEC(SQLBatch(batch));
1015
0207b7dd 1016 DB_RESULT hResult = DBSelect(g_hCoreDB, _T("SELECT trap_id FROM snmp_trap_cfg WHERE guid IS NULL"));
0207b7dd
EJ
1017 if (hResult != NULL)
1018 {
49b0df1a 1019 DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("UPDATE snmp_trap_cfg SET guid=? WHERE trap_id=?"));
0207b7dd
EJ
1020 if (hStmt != NULL)
1021 {
48f34e00 1022 int numRows = DBGetNumRows(hResult);
0207b7dd
EJ
1023 for(int i = 0; i < numRows; i++)
1024 {
49b0df1a 1025 uuid guid = uuid::generate();
0207b7dd
EJ
1026 DBBind(hStmt, 1, DB_SQLTYPE_VARCHAR, guid);
1027 DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0));
1028
1029 if (!SQLExecute(hStmt))
1030 {
1031 if (!g_bIgnoreErrors)
1032 {
1033 DBFreeStatement(hStmt);
1034 DBFreeResult(hResult);
1035 return FALSE;
1036 }
1037 }
1038 }
1039 DBFreeStatement(hStmt);
1040 }
1041 DBFreeResult(hResult);
1042 }
1043
1044 hResult = DBSelect(g_hCoreDB, _T("SELECT guid,script_id FROM script_library WHERE guid IS NULL"));
0207b7dd
EJ
1045 if (hResult != NULL)
1046 {
49b0df1a 1047 DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("UPDATE script_library SET guid=? WHERE script_id=?"));
0207b7dd
EJ
1048 if (hStmt != NULL)
1049 {
48f34e00 1050 int numRows = DBGetNumRows(hResult);
0207b7dd
EJ
1051 for(int i = 0; i < numRows; i++)
1052 {
49b0df1a 1053 uuid guid = uuid::generate();
0207b7dd
EJ
1054 DBBind(hStmt, 1, DB_SQLTYPE_VARCHAR, guid);
1055 DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 1));
1056 if (!SQLExecute(hStmt))
1057 {
1058 if (!g_bIgnoreErrors)
1059 {
1060 DBFreeStatement(hStmt);
1061 DBFreeResult(hResult);
1062 return FALSE;
1063 }
1064 }
1065 }
1066 DBFreeStatement(hStmt);
1067 }
1068 DBFreeResult(hResult);
1069 }
1070
1071 CHK_EXEC(SetNotNullConstraint(_T("snmp_trap_cfg"), _T("guid")));
1072 CHK_EXEC(SetNotNullConstraint(_T("script_library"), _T("guid")));
1073 CHK_EXEC(SetSchemaVersion(438));
1074 return TRUE;
1075}
1076
f4b2ebd3
VK
1077/**
1078 * Upgrade from V436 to V437
1079 */
1080static BOOL H_UpgradeFromV436(int currVersion, int newVersion)
1081{
1082 CHK_EXEC(
1083 CreateEventTemplate(EVENT_ROUTING_LOOP_DETECTED, _T("SYS_ROUTING_LOOP_DETECTED"),
1084 SEVERITY_MAJOR, EF_LOG, _T("98276f42-dc85-41a5-b449-6ba83d1a71b7"),
1085 _T("Routing loop detected for destination %3 (selected route %6/%7 via %9)"),
1086 _T("Generated when server detects routing loop during network path trace.\r\n")
1087 _T("Source of the event is node which routes packet back to already passed hop.\r\n")
1088 _T("Parameters:\r\n")
1089 _T(" 1) Protocol (IPv4 or IPv6)\r\n")
1090 _T(" 2) Path trace destination node ID\r\n")
1091 _T(" 3) Path trace destination address\r\n")
1092 _T(" 4) Path trace source node ID\r\n")
1093 _T(" 5) Path trace source node address\r\n")
1094 _T(" 6) Routing prefix (subnet address)\r\n")
1095 _T(" 7) Routing prefix length (subnet mask length)\r\n")
1096 _T(" 8) Next hop node ID\r\n")
1097 _T(" 9) Next hop address"))
1098 );
1099 CHK_EXEC(SetSchemaVersion(437));
1100 return TRUE;
1101}
1102
55d99dce
VK
1103/**
1104 * Upgrade from V435 to V436
1105 */
1106static BOOL H_UpgradeFromV435(int currVersion, int newVersion)
1107{
1108 static const TCHAR *batch =
1109 _T("ALTER TABLE nodes ADD agent_comp_mode char(1)\n")
1110 _T("UPDATE nodes SET agent_comp_mode='0'\n")
1111 _T("<END>");
1112 CHK_EXEC(SQLBatch(batch));
1113 CHK_EXEC(SetNotNullConstraint(_T("nodes"), _T("agent_comp_mode")));
1114 CHK_EXEC(SetSchemaVersion(436));
1115 return TRUE;
1116}
1117
9674aefa
VK
1118/**
1119 * Upgrade from V434 to V435
1120 */
1121static BOOL H_UpgradeFromV434(int currVersion, int newVersion)
1122{
1123 CHK_EXEC(CreateConfigParam(_T("DefaultAgentProtocolCompressionMode"), _T("1"), _T("Default agent protocol compression mode"), 'C', true, false, false, false));
1124 static const TCHAR *batch =
1125 _T("UPDATE config SET data_type='C',description='Default agent cache mode' WHERE var_name='DefaultAgentCacheMode'\n")
1126 _T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultAgentCacheMode','1','On')\n")
1127 _T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultAgentCacheMode','2','Off')\n")
1128 _T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultAgentProtocolCompressionMode','1','Enabled')\n")
1129 _T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultAgentProtocolCompressionMode','2','Disabled')\n")
1130 _T("<END>");
1131 CHK_EXEC(SQLBatch(batch));
1132 CHK_EXEC(SetSchemaVersion(435));
1133 return TRUE;
1134}
1135
de1be1b5
VK
1136/**
1137 * Upgrade from V433 to V434
1138 */
1139static BOOL H_UpgradeFromV433(int currVersion, int newVersion)
1140{
1141 CHK_EXEC(
1142 CreateEventTemplate(EVENT_IF_EXPECTED_STATE_UP, _T("SYS_IF_EXPECTED_STATE_UP"),
1143 SEVERITY_NORMAL, EF_LOG, _T("4997c3f5-b332-4077-8e99-983142f0e193"),
1144 _T("Expected state for interface \"%2\" set to UP"),
1145 _T("Generated when interface expected state set to UP.\r\n")
1146 _T("Please note that source of event is node, not an interface itself.\r\n")
1147 _T("Parameters:\r\n")
f4b2ebd3
VK
1148 _T(" 1) Interface index\r\n")
1149 _T(" 2) Interface name"))
de1be1b5
VK
1150 );
1151
1152 CHK_EXEC(
1153 CreateEventTemplate(EVENT_IF_EXPECTED_STATE_DOWN, _T("SYS_IF_EXPECTED_STATE_DOWN"),
1154 SEVERITY_NORMAL, EF_LOG, _T("75de536c-4861-4f19-ba56-c43d814431d7"),
1155 _T("Expected state for interface \"%2\" set to DOWN"),
1156 _T("Generated when interface expected state set to DOWN.\r\n")
1157 _T("Please note that source of event is node, not an interface itself.\r\n")
1158 _T("Parameters:\r\n")
f4b2ebd3
VK
1159 _T(" 1) Interface index\r\n")
1160 _T(" 2) Interface name"))
de1be1b5
VK
1161 );
1162
1163 CHK_EXEC(
1164 CreateEventTemplate(EVENT_IF_EXPECTED_STATE_IGNORE, _T("SYS_IF_EXPECTED_STATE_IGNORE"),
1165 SEVERITY_NORMAL, EF_LOG, _T("0e488c0e-3340-4e02-ad96-b999b8392e55"),
1166 _T("Expected state for interface \"%2\" set to IGNORE"),
1167 _T("Generated when interface expected state set to IGNORE.\r\n")
1168 _T("Please note that source of event is node, not an interface itself.\r\n")
1169 _T("Parameters:\r\n")
f4b2ebd3
VK
1170 _T(" 1) Interface index\r\n")
1171 _T(" 2) Interface name"))
de1be1b5
VK
1172 );
1173
1174 CHK_EXEC(AddEventToEPPRule(_T("6f46d451-ee66-4563-8747-d129877df24d"), EVENT_IF_EXPECTED_STATE_DOWN));
1175 CHK_EXEC(AddEventToEPPRule(_T("6f46d451-ee66-4563-8747-d129877df24d"), EVENT_IF_EXPECTED_STATE_IGNORE));
1176 CHK_EXEC(AddEventToEPPRule(_T("ecc3fb57-672d-489d-a0ef-4214ea896e0f"), EVENT_IF_EXPECTED_STATE_UP));
1177 CHK_EXEC(AddEventToEPPRule(_T("ecc3fb57-672d-489d-a0ef-4214ea896e0f"), EVENT_IF_EXPECTED_STATE_IGNORE));
1178
1179 CHK_EXEC(SetSchemaVersion(434));
1180 return TRUE;
1181}
1182
1183/**
727b90ff
VK
1184 * Upgrade from V432 to V433
1185 */
1186static BOOL H_UpgradeFromV432(int currVersion, int newVersion)
1187{
1188 CHK_EXEC(CreateConfigParam(_T("UseSyslogForDiscovery"), _T("0"), _T("Use syslog messages for new node discovery."), 'B', true, false, false, false));
1189 CHK_EXEC(SetSchemaVersion(433));
1190 return TRUE;
1191}
1192
de1be1b5 1193/**
3c76ed34
VK
1194 * Upgrade from V431 to V432
1195 */
1196static BOOL H_UpgradeFromV431(int currVersion, int newVersion)
95111e00 1197{
3c76ed34
VK
1198 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_syslog_source ON syslog(source_object_id)")));
1199 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_snmp_trap_log_oid ON snmp_trap_log(object_id)")));
1200 CHK_EXEC(SetSchemaVersion(432));
1201 return TRUE;
1202}
1203
de1be1b5 1204/**
3c4dc19b
EJ
1205 * Upgrade from V430 to V431
1206 */
1207static BOOL H_UpgradeFromV430(int currVersion, int newVersion)
95111e00 1208{
3c76ed34
VK
1209 CHK_EXEC(SQLQuery(_T("DELETE FROM config_values WHERE var_name='SNMPPorts'")));
1210 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Comma separated list of UDP ports used by SNMP capable devices.' WHERE var_name='SNMPPorts'")));
1211 CHK_EXEC(SetSchemaVersion(431));
3c4dc19b
EJ
1212 return TRUE;
1213}
00420032 1214
de1be1b5
VK
1215/**
1216 * Upgrade from V429 to V430
00420032 1217 */
1218static BOOL H_UpgradeFromV429(int currVersion, int newVersion)
1219{
1220 CHK_EXEC(CreateTable(
1221 _T("CREATE TABLE policy_pstorage_actions (")
1222 _T("rule_id integer not null,")
1223 _T("ps_key varchar(255) not null,")
1224 _T("value varchar(2000) null,")
1225 _T("action integer not null,")
1226 _T("PRIMARY KEY(rule_id,ps_key,action))")));
1227
1228 CHK_EXEC(CreateTable(
1229 _T("CREATE TABLE persistent_storage (")
1230 _T("entry_key varchar(256) not null,")
1231 _T("value varchar(2000) null,")
1232 _T("PRIMARY KEY(entry_key))")));
1233
00420032 1234 //Move previous attrs form situations to pstorage
1235 DB_RESULT hResult = SQLSelect(_T("SELECT event_policy.rule_id,situations.name,event_policy.situation_instance,")
1236 _T("policy_situation_attr_list.attr_name,policy_situation_attr_list.attr_value ")
1237 _T("FROM event_policy,situations,policy_situation_attr_list ")
1238 _T("WHERE event_policy.rule_id=policy_situation_attr_list.rule_id ")
1239 _T("AND situations.id=policy_situation_attr_list.situation_id"));
1240 if (hResult != NULL)
1241 {
1242 int count = DBGetNumRows(hResult);
1243 DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("INSERT INTO policy_pstorage_actions (rule_id,ps_key,value,action) VALUES (?,?,?,1)"));
1244 if (hStmt != NULL)
1245 {
76d77587 1246 String key;
00420032 1247 for(int i = 0; i < count; i++)
1248 {
00420032 1249 TCHAR tmp[256];
1250 DBGetField(hResult, i, 1, tmp, 256);
2bf8ce90 1251 key.append(tmp);
00420032 1252 DBGetField(hResult, i, 2, tmp, 256);
2bf8ce90 1253 key.append(_T("."));
1254 key.append(tmp);
00420032 1255 DBGetField(hResult, i, 3, tmp, 256);
2bf8ce90 1256 key.append(_T("."));
1257 key.append(tmp);
00420032 1258 DBGetField(hResult, i, 4, tmp, 256);
1259
1260 DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, DBGetFieldLong(hResult, i, 0));
2bf8ce90 1261 DBBind(hStmt, 2, DB_SQLTYPE_TEXT, key, DB_BIND_STATIC, 512);
00420032 1262 DBBind(hStmt, 3, DB_SQLTYPE_TEXT, tmp, DB_BIND_STATIC);
1263 if (!SQLExecute(hStmt))
1264 {
1265 if (!g_bIgnoreErrors)
1266 {
1267 DBFreeStatement(hStmt);
1268 DBFreeResult(hResult);
1269 return FALSE;
1270 }
1271 }
76d77587 1272 key.clear();
00420032 1273 }
1274 DBFreeStatement(hStmt);
1275 }
1276 else if (!g_bIgnoreErrors)
1277 {
1278 DBFreeStatement(hStmt);
1279 DBFreeResult(hResult);
1280 return FALSE;
1281 }
1282 DBFreeResult(hResult);
1283 }
1284 else
1285 {
1286 if (!g_bIgnoreErrors)
1287 return false;
1288 }
1289
1290 CHK_EXEC(SQLQuery(_T("DROP TABLE situations")));
1291 CHK_EXEC(SQLQuery(_T("DROP TABLE policy_situation_attr_list")));
31e68b3b
VK
1292 CHK_EXEC(SQLDropColumn(_T("event_policy"), _T("situation_id")));
1293 CHK_EXEC(SQLDropColumn(_T("event_policy"), _T("situation_instance")));
00420032 1294 CHK_EXEC(SetSchemaVersion(430));
1295 return TRUE;
1296}
1297
e11eade2
EJ
1298/**
1299 * Upgrade from V428 to V429
1300 */
1301static BOOL H_UpgradeFromV428(int currVersion, int newVersion)
1302{
2bf8ce90 1303 CHK_EXEC(ResizeColumn(_T("config"), _T("description"), 450, true));
e11eade2
EJ
1304 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in seconds between active network discovery polls.' WHERE var_name='ActiveDiscoveryInterval'")));
1305 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable active network discovery. This setting is change by Network Discovery GUI' WHERE var_name='ActiveNetworkDiscovery'")));
1306 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Timeout in milliseconds for commands sent to agent. If agent did not respond to command within given number of seconds, \ncommand considered as failed.' WHERE var_name='AgentCommandTimeout'")));
1307 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='String that will be used as a shared secret in case if agent will required authentication.' WHERE var_name='AgentDefaultSharedSecret'")));
1308 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Maximum wait time in seconds for agent restart after upgrade. If agent cannot be contacted after this time period, \nupgrade process is considered as failed.' WHERE var_name='AgentUpgradeWaitTime'")));
1309 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='A number of days the server keeps an alarm history in the database.' WHERE var_name='AlarmHistoryRetentionTime'")));
1310 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Maximum alarm count that will be displayed on Alarm Browser page. Alarms that exceed this count will not be shown.' WHERE var_name='AlarmListDisplayLimit'")));
1311 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='A semicolon separated list of alarm summary e-mail recipient addresses.' WHERE var_name='AlarmSummaryEmailRecipients'")));
1312 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Schedule for sending alarm summary e-mails in cron format' WHERE var_name='AlarmSummaryEmailSchedule'")));
1313 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Allow/disallow sending of SMS via NetXMS server using nxsms utility.' WHERE var_name='AllowDirectSMS'")));
1314 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='A bitmask for encryption algorithms allowed in the server(sum the values to allow multiple algorithms at once): \n\t*1 - AES256 \n\t*2 - Blowfish-256 \n\t*4 - IDEA \n\t*8 - 3DES\n\t*16 - AES128\n\t*32 - Blowfish-128' WHERE var_name='AllowedCiphers'")));
1315 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='AllowTrapVarbindsConversion'")));
1316 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='AnonymousFileAccess'")));
1317 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable applying all DCIs from a template to the node, including disabled ones.' WHERE var_name='ApplyDCIFromTemplateToDisabledDCI'")));
1318 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Retention time in days for the records in audit log. All records older than specified will be deleted by housekeeping process.' WHERE var_name='AuditLogRetentionTime'")));
1319 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Comma-separated list of hosts to be used as beacons for checking NetXMS server network connectivity. Either DNS names \nor IP addresses can be used. This list is pinged by NetXMS server and if none of the hosts have responded, server considers that connection \nwith network is lost and generates specific event.' WHERE var_name='BeaconHosts'")));
1320 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in milliseconds between beacon hosts polls.' WHERE var_name='BeaconPollingInterval'")));
1321 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Timeout in milliseconds to consider beacon host unreachable.' WHERE var_name='BeaconTimeout'")));
1322 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='BlockInactiveUserAccounts'")));
1323 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='CapabilityExpirationTime'")));
1324 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable case insensitive login names' WHERE var_name='CaseInsensitiveLoginNames'")));
1325 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable trusted nodes check' WHERE var_name='CheckTrustedNodes'")));
1326 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The server port for incoming client connections (such as management console).' WHERE var_name='ClientListenerPort'")));
1327 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable container auto binding for clusters.' WHERE var_name='ClusterContainerAutoBind'")));
1328 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable template auto apply for clusters.' WHERE var_name='ClusterTemplateAutoApply'")));
1329 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in seconds between polling (re-evaluating) of condition objects.' WHERE var_name='ConditionPollingInterval'")));
1330 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in seconds between configuration polls.' WHERE var_name='ConfigurationPollingInterval'")));
1331 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable data interpolation in dashboard data export.' WHERE var_name='DashboardDataExportEnableInterpolation'")));
1332 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='A number of connections to the database created on server startup.' WHERE var_name='DBConnectionPoolBaseSize'")));
1333 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='DBConnectionPoolCooldownTime'")));
1334 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='DBConnectionPoolMaxLifetime'")));
1335 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='A maximum number of connections in the connection pool.' WHERE var_name='DBConnectionPoolMaxSize'")));
1336 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='' WHERE var_name='DBLockInfo'")));
1337 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='DBLockPID'")));
1338 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='' WHERE var_name='DBLockStatus'")));
1339 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='DefaultAgentCacheMode'")));
f42d62e0
VK
1340 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Default date display format for GUI.' WHERE var_name='DefaultConsoleDateFormat'")));
1341 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Default short time display format for GUI.' WHERE var_name='DefaultConsoleShortTimeFormat'")));
1342 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Default long time display format for GUI.' WHERE var_name='DefaultConsoleTimeFormat'")));
e11eade2
EJ
1343 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Default polling interval for newly created DCI (in seconds).' WHERE var_name='DefaultDCIPollingInterval'")));
1344 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Default retention time for newly created DCI (in days).' WHERE var_name='DefaultDCIRetentionTime'")));
1345 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='C',description='Set the default encryption policy for communications with agents.' WHERE var_name='DefaultEncryptionPolicy'")));
1346 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='C',description='Default expected state for new interface objects.' WHERE var_name='DefaultInterfaceExpectedState'")));
1347 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='H',description='Default background color for new network map objects.' WHERE var_name='DefaultMapBackgroundColor'")));
1348 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Default mask for synthetic IPv4 subnets.' WHERE var_name='DefaultSubnetMaskIPv4'")));
1349 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Default mask for synthetic IPv6 subnets.' WHERE var_name='DefaultSubnetMaskIPv6'")));
1350 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable automatic alarm removal of an object when it is deleted' WHERE var_name='DeleteAlarmsOfDeletedObject'")));
1351 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable automatic deletion of subnet objects without any nodes within. When enabled, empty subnets will be deleted \nby housekeeping process.' WHERE var_name='DeleteEmptySubnets'")));
1352 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable automatic event removal of an object when it is deleted.' WHERE var_name='DeleteEventsOfDeletedObject'")));
1353 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Delete nodes which were unreachable for a number of days specified by this parameter.' WHERE var_name='DeleteUnreachableNodesPeriod'")));
1354 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='' WHERE var_name='DiscoveryFilter'")));
1355 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='DiscoveryFilterFlags'")));
1356 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in seconds between passive network discovery polls.' WHERE var_name='DiscoveryPollingInterval'")));
1357 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='EnableAdminInterface'")));
1358 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable agent self-registration' WHERE var_name='EnableAgentRegistration'")));
1359 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable audit log.' WHERE var_name='EnableAuditLog'")));
1360 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='EnableCheckPointSNMP'")));
1361 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='EnableReportingServer'")));
1362 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='EnableEventStormDetection'")));
1363 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable Inter-Server Communications Listener.' WHERE var_name='EnableISCListener'")));
1364 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable server-side NXSL functions for container management (such as CreateContainer, RemoveContainer, BindObject, \nUnbindObject).' WHERE var_name='EnableNXSLContainerFunctions.'")));
1365 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='EnableObjectTransactions'")));
1366 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable SNMP trap processing.' WHERE var_name='EnableSNMPTraps'")));
1367 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable alarm summary e-mails.' WHERE var_name='EnableAlarmSummaryEmails'")));
1368 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable receiving of syslog messages.' WHERE var_name='EnableSyslogReceiver'")));
1369 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='EnableTimedAlarmAck'")));
1370 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable XMPP connector (required to enable XMPP message sending).' WHERE var_name='EnableXMPPConnector'")));
1371 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable zoning support' WHERE var_name='EnableZoning'")));
1372 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='EscapeLocalCommands'")));
1373 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The retention time of event logs' WHERE var_name='EventLogRetentionTime'")));
1374 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='EventStormDuration'")));
1375 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Event storm events per second' WHERE var_name='EventStormEventsPerSecond'")));
1376 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable extended access control in log queries.' WHERE var_name='ExtendedLogQueryAccessControl'")));
1377 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Syslog facility to be used in audit log records sent to external server.' WHERE var_name='ExternalAuditFacility'")));
1378 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='UDP port of external syslog server to send audit records to.' WHERE var_name='ExternalAuditPort'")));
1379 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='External syslog server to send audit records to. If set to ‘’none’‘, external audit logging is disabled.' WHERE var_name='ExternalAuditServer'")));
1380 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Syslog severity to be used in audit log records sent to external server.' WHERE var_name='ExternalAuditSeverity'")));
1381 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Syslog tag to be used in audit log records sent to external server.' WHERE var_name='ExternalAuditTag'")));
1382 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='FirstFreeObjectId'")));
1383 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='FixedStatusValue'")));
1384 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='' WHERE var_name='HelpDeskLink'")));
1385 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Time when housekeeper starts. Housekeeper deletes old log lines, old DCI data, cleans removed objects and does VACUUM for \nPostgreSQL.' WHERE var_name='HousekeeperStartTime'")));
1386 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Size of ICMP packets (in bytes, excluding IP header size) used for status polls.' WHERE var_name='IcmpPingSize'")));
1387 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Timeout for ICMP ping used for status polls (in milliseconds).' WHERE var_name='IcmpPingTimeout'")));
1388 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Import configuration from local files on server startup.' WHERE var_name='ImportConfigurationOnStartup'")));
1389 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Instance polling interval (in milliseconds).' WHERE var_name='InstancePollingInterval'")));
1390 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable internal certificate authority.' WHERE var_name='InternalCA'")));
1391 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='IntruderLockoutThreshold'")));
1392 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='IntruderLockoutTime'")));
1393 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='' WHERE var_name='JiraIssueType'")));
1394 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Jira login name.' WHERE var_name='JiraLogin'")));
1395 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Jira password' WHERE var_name='JiraPassword'")));
1396 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Jira project code' WHERE var_name='JiraProjectCode'")));
1397 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='' WHERE var_name='JiraProjectComponent'")));
1398 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The URL of the Jira server' WHERE var_name='JiraServerURL'")));
1399 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='JobHistoryRetentionTime'")));
1400 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Maximum mumber of job execution retrys.' WHERE var_name='JobRetryCount'")));
1401 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in seconds between sending keep alive packets to connected clients.' WHERE var_name='KeepAliveInterval'")));
1402 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Specifies which object class represents group objects. If the found entry is not of user or group class, it will be ignored.' WHERE var_name='LdapGroupClass'")));
1403 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='LdapGroupUniqueId'")));
1404 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The LdapConnectionString configuration parameter may be a comma- or whitespace-separated list of URIs containing only the \nschema, the host, and the port fields. Format: schema://host:port.' WHERE var_name='LdapConnectionString'")));
1405 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The name of an attribute whose value will be used as a user`s description.' WHERE var_name='LdapMappingDescription'")));
1406 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The name of an attribute whose value will be used as a user`s full name.' WHERE var_name='LdapMappingFullName'")));
1407 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The name of an attribute whose value will be used as a user`s login name.' WHERE var_name='LdapMappingName'")));
1408 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The maximum amount of records that can be returned in one search page.' WHERE var_name='LdapPageSize'")));
1409 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The DN of the entry at which to start the search.' WHERE var_name='LdapSearchBase'")));
1410 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='A string representation of the filter to apply in the search.' WHERE var_name='LdapSearchFilter'")));
1411 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The synchronization interval (in minutes) between the NetXMS server and the LDAP server. If the parameter is set to 0, no \nsynchronization will take place.' WHERE var_name='LdapSyncInterval'")));
1412 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='User login for LDAP synchronization.' WHERE var_name='LdapSyncUser'")));
1413 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='User password for LDAP synchronization.' WHERE var_name='LdapSyncUserPassword'")));
1414 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The object class which represents user objects. If the found entry is not of user or group class, it will be ignored.' WHERE var_name='LdapUserClass'")));
1415 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='C',description='This parameter specifies what should be done while synchronizing with a deleted user/group from LDAP.' WHERE var_name='LdapUserDeleteAction'")));
1416 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='LdapUserUniqueId'")));
1417 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='LockTimeout'")));
1418 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Log all SNMP traps.' WHERE var_name='LogAllSNMPTraps'")));
1419 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Encoding for e-mails generated by NetXMS server.' WHERE var_name='MailEncoding'")));
1420 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Message to be shown when a user logs into the console.' WHERE var_name='MessageOfTheDay'")));
1421 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Default minimum password length for a NetXMS user. The default applied only if per-user setting is not defined.' WHERE var_name='MinPasswordLength'")));
1422 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='MinViewRefreshInterval'")));
1423 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='MobileDeviceListenerPort'")));
1424 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The number of threads used for data collection.' WHERE var_name='NumberOfDataCollectors'")));
1425 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The number of threads used to perform agent upgrades (i.e. maximum number of parallel upgrades).' WHERE var_name='NumberOfUpgradeThreads'")));
1426 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Time period in seconds within which received offline data still relevant for threshold validation.' WHERE var_name='OfflineDataRelevanceTime'")));
1427 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Set of flags to enforce password complexity.' WHERE var_name='PasswordComplexity'")));
1428 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Password expiration time in days. If set to 0, password expiration is disabled.' WHERE var_name='PasswordExpiration'")));
1429 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Number of previous passwords to keep. Users are not allowed to set password if it matches one from previous passwords list.' WHERE var_name='PasswordHistoryLength'")));
1430 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The number of consecutive unsuccessful polls required to declare interface as down.' WHERE var_name='PollCountForStatusChange'")));
1431 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The base thread pool size.' WHERE var_name='PollerThreadPoolBaseSize'")));
1432 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Maximum thread pool size.' WHERE var_name='PollerThreadPoolMaxSize'")));
1433 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='RADIUS authentication method to be used (PAP, CHAP, MS-CHAPv1, MS-CHAPv2).' WHERE var_name='RADIUSAuthMethod'")));
1434 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The number of retries for RADIUS authentication.' WHERE var_name='RADIUSNumRetries'")));
1435 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Port number used for connection to primary RADIUS server.' WHERE var_name='RADIUSPort'")));
1436 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Port number used for connection to secondary RADIUS server.' WHERE var_name='RADIUSSecondaryPort'")));
1437 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Shared secret used for communication with secondary RADIUS server.' WHERE var_name='RADIUSSecondarySecret'")));
1438 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Host name or IP address of secondary RADIUS server.' WHERE var_name='RADIUSSecondaryServer'")));
1439 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Shared secret used for communication with primary RADIUS server.' WHERE var_name='RADIUSSecret'")));
1440 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Host name or IP address of primary RADIUS server.' WHERE var_name='RADIUSServer'")));
1441 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Timeout in seconds for requests to RADIUS server.' WHERE var_name='RADIUSTimeout'")));
1442 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable reception of events forwarded by another NetXMS server. Please note that for external event reception ISC listener \nshould be enabled as well.' WHERE var_name='ReceiveForwardedEvents'")));
1443 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The hostname of the reporting server.' WHERE var_name='ReportingServerHostname'")));
1444 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The port of the reporting server.' WHERE var_name='ReportingServerPort'")));
1445 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Resolve DNS to IP on status poll.' WHERE var_name='ResolveDNSToIPOnStatusPoll'")));
1446 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='' WHERE var_name='ResolveNodeNames'")));
1447 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in seconds between reading routing table from node.' WHERE var_name='RoutingTableUpdateInterval'")));
1448 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable automatic network discovery process. *This setting is changed by Network Discovery in the GUI*.' WHERE var_name='RunNetworkDiscovery'")));
1449 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='H',description='Identification color for this server' WHERE var_name='ServerColor'")));
1450 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='ServerCommandOutputTimeout'")));
1451 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Name of this server' WHERE var_name='ServerName'")));
1452 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Mobile phone driver to be used for sending SMS.' WHERE var_name='SMSDriver'")));
1453 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='SMS driver parameters. For ‘’generic’’ driver, it should be the name of COM port device.' WHERE var_name='SMSDrvConfig'")));
1454 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The address used for sending mail from.' WHERE var_name='SMTPFromAddr'")));
1455 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The name used as the sender.' WHERE var_name='SMTPFromName'")));
1456 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Number of retries for sending mail.' WHERE var_name='SMTPRetryCount'")));
1457 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='TCP port for SMTP server.' WHERE var_name='SNMPPorts'")));
1458 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='An SMTP server used for sending mail.' WHERE var_name='SMTPServer'")));
1459 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Timeout in milliseconds for SNMP requests sent by NetXMS server.' WHERE var_name='SNMPRequestTimeout'")));
1460 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='The time how long SNMP trap logs are retained.' WHERE var_name='SNMPTrapLogRetentionTime'")));
1461 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Port used for SNMP traps.' WHERE var_name='SNMPTrapPort'")));
1462 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='StatusCalculationAlgorithm'")));
1463 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in seconds between status polls.' WHERE var_name='StatusPollingInterval'")));
1464 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='C',description='Algorithm for status propagation (how object’s status affects its child object statuses).' WHERE var_name='StatusPropagationAlgorithm'")));
1465 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='StatusShift'")));
1466 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='StatusSingleThreshold'")));
1467 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='' WHERE var_name='StatusThresholds'")));
1468 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='' WHERE var_name='StatusTranslation'")));
1469 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable strict alarm status flow (alarm can be terminated only after it has been resolved).' WHERE var_name='StrictAlarmStatusFlow'")));
1470 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Interval in seconds between writing object changes to the database.' WHERE var_name='SyncInterval'")));
1471 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable synchronization of node names with DNS on each configuration poll.' WHERE var_name='SyncNodeNamesWithDNS'")));
1472 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Ignore timestamp received in syslog messages and always use server time.' WHERE var_name='SyslogIgnoreMessageTimestamp'")));
1473 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='UDP port used by built-in syslog server.' WHERE var_name='SyslogListenPort'")));
1474 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='C',description='Node matching policy for built-in syslog daemon.' WHERE var_name='SyslogNodeMatchingPolicy'")));
1475 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='Retention time in days for records in syslog. All records older than specified will be deleted by housekeeping process.' WHERE var_name='SyslogRetentionTime'")));
1476 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='System-wide interval in seconds for resending threshold violation events. Value of 0 disables event resending.' WHERE var_name='ThresholdRepeatInterval'")));
1477 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='The URL for the Tile server.' WHERE var_name='TileServerURL'")));
1478 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='TopologyDiscoveryRadius'")));
1479 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='' WHERE var_name='TopologyExpirationTime'")));
1480 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Search all zones to match trap/syslog source address to node.' WHERE var_name='TrapSourcesInAllZones'")));
1481 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable the use of DNS name instead of IP address as primary name for newly discovered nodes.' WHERE var_name='UseDNSNameForDiscoveredNodes'")));
1482 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable the use of fully qualified domain names as primary names for newly discovered nodes.' WHERE var_name='UseFQDNForNodeNames'")));
1483 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Enable/disable the use of SNMP ifXTable instead of ifTable for interface configuration polling.' WHERE var_name='UseIfXTable'")));
1484 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='C',description='Control usage of interface aliases (or descriptions).' WHERE var_name='UseInterfaceAliases'")));
727b90ff 1485 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='B',description='Use SNMP trap information for new node discovery.' WHERE var_name='UseSNMPTrapsForDiscovery'")));
e11eade2
EJ
1486 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Login name that will be used to authentication on XMPP server.' WHERE var_name='XMPPLogin'")));
1487 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='Password that will be used to authentication on XMPP server.' WHERE var_name='XMPPPassword'")));
1488 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='I',description='XMPP connection port.' WHERE var_name='XMPPPort'")));
1489 CHK_EXEC(SQLQuery(_T("UPDATE config SET data_type='S',description='XMPP connection server.' WHERE var_name='XMPPServer'")));
1490
1491 CHK_EXEC(CreateTable(
1492 _T("CREATE TABLE config_values (")
1493 _T("var_name varchar(63) not null,")
76d77587 1494 _T("var_value varchar(15) not null,")
1495 _T("var_description varchar(255) null,")
1496 _T("PRIMARY KEY(var_name,var_value))")));
e11eade2
EJ
1497
1498 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('ClientListenerPort','65535')")));
1499 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('ExternalAuditPort','65535')")));
1500 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('MobileDeviceListenerPort','65535')")));
1501 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('RADIUSPort','65535')")));
1502 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('RADIUSSecondaryPort','65535')")));
1503 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('ReportingServerPort','65535')")));
1504 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('SNMPPorts','65535')")));
1505 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('SNMPTrapPort','65535')")));
1506 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('SyslogListenPort','65535')")));
1507 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('XMPPPort','65535')")));
1508 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value) VALUES ('AllowedCiphers','63')")));
1509 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultInterfaceExpectedState','0','UP')")));
1510 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultInterfaceExpectedState','1','DOWN')")));
1511 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultInterfaceExpectedState','2','IGNORE')")));
1512 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultEncryptionPolicy','0','Disabled')")));
1513 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultEncryptionPolicy','1','Allowed')")));
1514 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultEncryptionPolicy','2','Preferred')")));
1515 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('DefaultEncryptionPolicy','3','Required')")));
1516 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('StatusPropagationAlgorithm','0','Default')")));
1517 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('StatusPropagationAlgorithm','1','Unchanged')")));
1518 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('StatusPropagationAlgorithm','2','Fixed')")));
1519 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('StatusPropagationAlgorithm','3','Relative')")));
1520 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('StatusPropagationAlgorithm','4','Translated')")));
1521 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('UseInterfaceAliases','0','Don`t use aliases')")));
1522 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('UseInterfaceAliases','1','Use aliases when possible')")));
1523 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('UseInterfaceAliases','2','Concatenate alias and name')")));
1524 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('UseInterfaceAliases','3','Concatenate name and alias')")));
1525 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('SyslogNodeMatchingPolicy','0','IP, then hostname')")));
1526 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('SyslogNodeMatchingPolicy','1','Hostname, then IP')")));
1527 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('LdapUserDeleteAction','0','Delete user')")));
1528 CHK_EXEC(SQLQuery(_T("INSERT INTO config_values (var_name,var_value,var_description) VALUES ('LdapUserDeleteAction','1','Disable user')")));
1529
e11eade2
EJ
1530 CHK_EXEC(SetSchemaVersion(429));
1531 return TRUE;
1532}
1533
f14e669f 1534/**
de1be1b5 1535 * Upgrade from V427 to V428
221826d9
VK
1536 */
1537static BOOL H_UpgradeFromV427(int currVersion, int newVersion)
1538{
1539 CHK_EXEC(CreateConfigParam(_T("ClusterContainerAutoBind"), _T("0"), _T("Enable/disable container auto binding for clusters"), 'B', true, false, false, false));
1540 CHK_EXEC(CreateConfigParam(_T("ClusterTemplateAutoApply"), _T("0"), _T("Enable/disable template auto apply for clusters"), 'B', true, false, false, false));
1541 CHK_EXEC(SetSchemaVersion(428));
1542 return TRUE;
1543}
1544
1545/**
de1be1b5 1546 * Upgrade from V426 to V427
f14e669f 1547 */
61854771 1548static BOOL H_UpgradeFromV426(int currVersion, int newVersion)
f14e669f 1549{
5f18cc16
VK
1550 CHK_EXEC(SQLQuery(_T("ALTER TABLE nodes ADD port_rows integer")));
1551 CHK_EXEC(SQLQuery(_T("ALTER TABLE nodes ADD port_numbering_scheme integer")));
61854771 1552 CHK_EXEC(SetSchemaVersion(427));
f14e669f
EJ
1553 return TRUE;
1554}
1555
291644e3 1556/**
de1be1b5 1557 * Upgrade from V425 to V426
291644e3
EJ
1558 */
1559static BOOL H_UpgradeFromV425(int currVersion, int newVersion)
1560{
5f18cc16
VK
1561 CHK_EXEC(CreateConfigParam(_T("EnableAlarmSummaryEmails"), _T(""), _T("Enable alarm summary e-mails"), 'I', true, false, false, false));
1562 CHK_EXEC(CreateConfigParam(_T("AlarmSummaryEmailSchedule"), _T(""), _T("Schedule for sending alarm summary e-mails in cron format"), 'S', true, false, false, false));
1563 CHK_EXEC(CreateConfigParam(_T("AlarmSummaryEmailRecipients"), _T(""), _T("A semicolon separated list of alarm summary e-mail recipient addresses"), 'S', true, false, false, false));
291644e3
EJ
1564 CHK_EXEC(SetSchemaVersion(426));
1565 return TRUE;
1566}
1567
b52e8ddd 1568/**
de1be1b5 1569 * Upgrade from V424 to V425
b52e8ddd
EJ
1570 */
1571static BOOL H_UpgradeFromV424(int currVersion, int newVersion)
1572{
1573 CHK_EXEC(SQLQuery(_T("ALTER TABLE scheduled_tasks ADD comments varchar(255)")));
1574 CHK_EXEC(SetSchemaVersion(425));
1575 return TRUE;
1576}
1577
8b75662b 1578/**
de1be1b5 1579 * Upgrade from V423 to V424
8b75662b
EJ
1580 */
1581static BOOL H_UpgradeFromV423(int currVersion, int newVersion)
1582{
1583 CHK_EXEC(CreateConfigParam(_T("MessageOfTheDay"), _T(""), _T("Message to be shown when a user logs into the console"), 'S', true, false, false, false));
1584 CHK_EXEC(SetSchemaVersion(424));
1585 return TRUE;
1586}
1587
88072662 1588/**
de1be1b5 1589 * Upgrade from V422 to V423
b2ecde3b
VK
1590 */
1591static BOOL H_UpgradeFromV422(int currVersion, int newVersion)
1592{
1593 CHK_EXEC(CreateConfigParam(_T("RADIUSAuthMethod"), _T("PAP"), _T("RADIUS authentication method to be used (PAP, CHAP, MS-CHAPv1, MS-CHAPv2)"), 'S', true, false, false, false));
1594 CHK_EXEC(SetSchemaVersion(423));
1595 return TRUE;
1596}
1597
1598/**
1599 * Upgrade from V421 to V422
1600 */
88072662
VK
1601static BOOL H_UpgradeFromV421(int currVersion, int newVersion)
1602{
1603 CHK_EXEC(CreateConfigParam(_T("ServerColor"), _T(""), _T("Identification color for this server"), 'S', true, false, false, false));
1604 CHK_EXEC(CreateConfigParam(_T("ServerName"), _T(""), _T("Name of this server"), 'S', true, false, false, false));
1605 CHK_EXEC(SetSchemaVersion(422));
1606 return TRUE;
1607}
1608
b97ddf57 1609/**
de1be1b5 1610 * Upgrade from V420 to V421
b2ecde3b 1611 */
d38a36c6 1612static BOOL H_UpgradeFromV420(int currVersion, int newVersion)
b97ddf57
EJ
1613{
1614 DB_RESULT hResult = SQLSelect(_T("SELECT access_rights,user_id,object_id FROM acl"));
b97ddf57
EJ
1615 if (hResult != NULL)
1616 {
1617 UINT32 rights;
4c34f2c2
EJ
1618 DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("UPDATE acl SET access_rights=? WHERE user_id=? AND object_id=?"));
1619 if (hStmt != NULL)
b97ddf57 1620 {
4c34f2c2 1621 for(int i = 0; i < DBGetNumRows(hResult); i++)
b97ddf57 1622 {
4c34f2c2
EJ
1623 rights = DBGetFieldULong(hResult, i, 0);
1624 if ((rights & 0x2) == 0x2)
b97ddf57 1625 {
4c34f2c2 1626 rights = rights | 0x8000; // Add Manage maintenance access right to all users which have Modify object access right
b97ddf57
EJ
1627 DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, rights);
1628 DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 1));
1629 DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 2));
1630 SQLExecute(hStmt);
b97ddf57
EJ
1631 }
1632 }
a6baa9d2
VK
1633 DBFreeStatement(hStmt);
1634 }
1635 else
1636 {
1637 if (!g_bIgnoreErrors)
1638 {
1639 DBFreeResult(hResult);
1640 return FALSE;
1641 }
b97ddf57 1642 }
b97ddf57
EJ
1643 DBFreeResult(hResult);
1644 }
1645 else
a6baa9d2
VK
1646 {
1647 if (!g_bIgnoreErrors)
1648 return FALSE;
1649 }
b97ddf57 1650
d38a36c6
EJ
1651 CHK_EXEC(SetSchemaVersion(421));
1652 return TRUE;
1653}
1654
de1be1b5 1655/**
d38a36c6
EJ
1656 * Upgrade from V419 to V420
1657 */
1658static BOOL H_UpgradeFromV419(int currVersion, int newVersion)
1659{
1660 CHK_EXEC(CreateConfigParam(_T("EnableReportingServer"), _T("0"), 1, 1));
1661 CHK_EXEC(CreateConfigParam(_T("ReportingServerHostname"), _T("localhost"), 1, 1));
1662 CHK_EXEC(CreateConfigParam(_T("ReportingServerPort"), _T("4710"), 1, 1));
b97ddf57
EJ
1663 CHK_EXEC(SetSchemaVersion(420));
1664 return TRUE;
1665}
1666
288a0046 1667/**
b2ecde3b
VK
1668 * Upgrade from V418 to V419
1669 */
288a0046
VK
1670static BOOL H_UpgradeFromV418(int currVersion, int newVersion)
1671{
1672 CHK_EXEC(SQLQuery(_T("ALTER TABLE items ADD npe_name varchar(15)")));
1673 CHK_EXEC(SetSchemaVersion(419));
1674 return TRUE;
1675}
1676
7ac735ef 1677/**
de1be1b5 1678 * Upgrade from V417 to V418
b2ecde3b 1679 */
7ac735ef 1680static BOOL H_UpgradeFromV417(int currVersion, int newVersion)
1681{
288a0046
VK
1682 // Update in object tools objectToolFilter objectMenuFilter
1683 // move object tool flags to filter structure
7ac735ef 1684 DB_RESULT hResult = SQLSelect(_T("SELECT tool_id,flags,tool_filter FROM object_tools"));
1685 if (hResult != NULL)
1686 {
1687 int count = DBGetNumRows(hResult);
1688 for(int i = 0; i < count; i++)
1689 {
1690 int filteringFlag = 0;
1691 int objectToolFlag = DBGetFieldLong(hResult, i, 1);
7ac735ef 1692
a13cb1ac
VK
1693 // Separate and reorder flags for filter and for object tools
1694 for(int j = 1; j < 5; j = j << 1) //REQUIRES_SNMP 0x01, REQUIRES_AGENT 0x02, REQUIRES_OID_MATCH 0x04
7ac735ef 1695 {
a13cb1ac 1696 if ((objectToolFlag & j) != 0)
7ac735ef 1697 {
1698 objectToolFlag = objectToolFlag & ~j;
1699 filteringFlag = filteringFlag | j;
1700 }
1701 }
a13cb1ac
VK
1702
1703 if ((objectToolFlag & 0x08) != 0) //ASK_CONFIRMATION
7ac735ef 1704 {
1705 objectToolFlag = objectToolFlag & ~0x08;
1706 objectToolFlag = objectToolFlag | 0x01;
1707 }
a13cb1ac
VK
1708
1709 if ((objectToolFlag & 0x10) != 0) //GENERATES_OUTPUT
7ac735ef 1710 {
1711 objectToolFlag = objectToolFlag & ~0x10;
1712 objectToolFlag = objectToolFlag | 0x02;
1713 }
a13cb1ac
VK
1714
1715 if ((objectToolFlag & 0x20) != 0) //DISABLED
7ac735ef 1716 {
1717 objectToolFlag = objectToolFlag & ~0x20;
1718 objectToolFlag = objectToolFlag | 0x04;
1719 }
a13cb1ac
VK
1720
1721 if ((objectToolFlag & 0x40) != 0) //SHOW_IN_COMMANDS
7ac735ef 1722 {
1723 objectToolFlag = objectToolFlag & ~0x40;
1724 objectToolFlag = objectToolFlag | 0x08;
1725 }
a13cb1ac
VK
1726
1727 if ((objectToolFlag & 0x80) != 0) //REQUIRES_NODE_OS_MATCH
7ac735ef 1728 {
1729 objectToolFlag = objectToolFlag & ~0x80;
1730 filteringFlag = filteringFlag | 0x08;
1731 }
a13cb1ac
VK
1732
1733 if ((objectToolFlag & 0x100) != 0) //REQUIRES_TEMPLATE_MATCH
7ac735ef 1734 {
1735 objectToolFlag = objectToolFlag & ~0x100;
1736 filteringFlag = filteringFlag | 0x10;
1737 }
a13cb1ac
VK
1738
1739 if ((objectToolFlag & 0x10000) != 0) //SNMP_INDEXED_BY_VALUE
7ac735ef 1740 {
1741 objectToolFlag = objectToolFlag & ~0x10000;
1742 objectToolFlag = objectToolFlag | 0x10;
1743 }
a13cb1ac
VK
1744
1745 if ((objectToolFlag & 0x20000) != 0) //REQUIRES_WORKSTATION_OS_MATCH
7ac735ef 1746 {
1747 objectToolFlag = objectToolFlag & ~0x20000;
1748 filteringFlag = filteringFlag | 0x20;
1749 }
1750
a13cb1ac
VK
1751 // Add filter flags to XML
1752 TCHAR *xml = DBGetField(hResult, i, 2, NULL, 0);
367caea6 1753 size_t len = (xml != NULL) ? _tcslen(xml) + 1024 : 1024;
a13cb1ac 1754 TCHAR *tmp = (TCHAR *)malloc(len * sizeof(TCHAR));
367caea6 1755 TCHAR *ptr = (xml != NULL) ? _tcsrchr(xml, '<') : NULL;
a13cb1ac 1756 if (ptr != NULL)
7ac735ef 1757 {
1758 *ptr = 0;
a13cb1ac 1759 _sntprintf(tmp, len, _T("%s<flags>%d</flags></objectMenuFilter>"), xml, filteringFlag);
7ac735ef 1760 _tcsncpy(tmp, _T("<objectMenuFilter"), 17); //Change main tag name
1761 }
1762 else
1763 {
a13cb1ac 1764 _sntprintf(tmp, len, _T("<objectMenuFilter><flags>%d</flags></objectMenuFilter>"), filteringFlag);
7ac735ef 1765 }
1766
1767 DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("UPDATE object_tools SET flags=?,tool_filter=? WHERE tool_id=?"));
1768 if (hStmt != NULL)
1769 {
1770 DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, objectToolFlag);
a13cb1ac 1771 DBBind(hStmt, 2, DB_SQLTYPE_TEXT, tmp, DB_BIND_DYNAMIC);
7ac735ef 1772 DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0));
1773 if (!SQLExecute(hStmt))
1774 {
1775 if (!g_bIgnoreErrors)
1776 {
a13cb1ac 1777 free(xml);
7ac735ef 1778 DBFreeStatement(hStmt);
1779 DBFreeResult(hResult);
1780 return FALSE;
1781 }
1782 }
1783 }
a13cb1ac 1784 else
7ac735ef 1785 {
a13cb1ac
VK
1786 free(tmp);
1787 if (!g_bIgnoreErrors)
1788 {
1789 free(xml);
1790 DBFreeResult(hResult);
1791 return FALSE;
1792 }
7ac735ef 1793 }
a13cb1ac 1794 free(xml);
7ac735ef 1795 }
1796 DBFreeResult(hResult);
1797 }
1798 else
1799 {
1800 if (!g_bIgnoreErrors)
1801 return false;
1802 }
1803
1804 CHK_EXEC(SetSchemaVersion(418));
1805 return TRUE;
1806}
1807
c299358f 1808/**
b2ecde3b
VK
1809 * Upgrade from V416 to V417
1810 */
c299358f
EJ
1811static BOOL H_UpgradeFromV416(int currVersion, int newVersion)
1812{
1813 CHK_EXEC(CreateConfigParam(_T("JiraIssueType"), _T("Task"), true, false));
1814 CHK_EXEC(CreateConfigParam(_T("JiraLogin"), _T("netxms"), true, true));
1815 CHK_EXEC(CreateConfigParam(_T("JiraPassword"), _T(""), true, true));
1816 CHK_EXEC(CreateConfigParam(_T("JiraProjectCode"), _T("NETXMS"), true, false));
1817 CHK_EXEC(CreateConfigParam(_T("JiraProjectComponent"), _T(""), true, false));
1818 CHK_EXEC(CreateConfigParam(_T("JiraServerURL"), _T("http://localhost"), true, true));
1819
1820 CHK_EXEC(SetSchemaVersion(417));
1821 return TRUE;
1822}
1823
6a6b96c0 1824/**
b2ecde3b
VK
1825 * Upgrade from V415 to V416
1826 */
6a6b96c0
EJ
1827static BOOL H_UpgradeFromV415(int currVersion, int newVersion)
1828{
1829 CHK_EXEC(CreateTable(
1830 _T("CREATE TABLE alarm_categories (")
1831 _T("id integer not null,")
1832 _T("name varchar(63) null,")
1833 _T("descr varchar(255) null,")
1834 _T("PRIMARY KEY(id))")));
1835 CHK_EXEC(CreateTable(
1836 _T("CREATE TABLE alarm_category_acl (")
1837 _T("category_id integer not null,")
1838 _T("user_id integer not null,")
1839 _T("PRIMARY KEY(category_id,user_id))")));
1840 CHK_EXEC(CreateTable(
1841 _T("CREATE TABLE alarm_category_map (")
1842 _T("alarm_id integer not null,")
1843 _T("category_id integer not null,")
1844 _T("PRIMARY KEY(alarm_id,category_id))")));
1845
1846 CHK_EXEC(SQLQuery(
1847 _T("ALTER TABLE alarms ADD alarm_category_ids varchar(255)")));
1848
1849 // Add view all alarms system access to user group - Everyone
1850 DB_RESULT hResult = SQLSelect(_T("SELECT system_access FROM user_groups WHERE name='Everyone'"));
1851 if (hResult != NULL)
1852 {
1853 UINT64 sysAccess = DBGetFieldUInt64(hResult, 0, 0);
1854 sysAccess = sysAccess | SYSTEM_ACCESS_VIEW_ALL_ALARMS;
1855
1856 TCHAR query[MAX_DB_STRING];
1857 _sntprintf(query, MAX_DB_STRING, _T("UPDATE user_groups SET system_access=%ld WHERE name='Everyone'"), sysAccess);
1858 CHK_EXEC(SQLQuery(query));
1859
1860 DBFreeResult(hResult);
1861 }
1862 else
1863 {
1864 if (!g_bIgnoreErrors)
1865 return false;
1866 }
1867
1868 CHK_EXEC(SetSchemaVersion(416));
1869 return TRUE;
1870}
1871
73bbcd77
VK
1872/**
1873 * Upgrade from V414 to V415
1874 */
1875static BOOL H_UpgradeFromV414(int currVersion, int newVersion)
1876{
1877 CHK_EXEC(RemoveNotNullConstraint(_T("dci_summary_tables"), _T("menu_path")));
1878 CHK_EXEC(SetSchemaVersion(415));
1879 return TRUE;
1880}
1881
685508a7
VK
1882/**
1883 * Upgrade from V413 to V414
1884 */
1885static BOOL H_UpgradeFromV413(int currVersion, int newVersion)
1886{
1887 CHK_EXEC(SQLQuery(_T("UPDATE config SET var_name='EnableSyslogReceiver' WHERE var_name='EnableSyslogDaemon'")));
1888 CHK_EXEC(SetSchemaVersion(414));
1889 return TRUE;
1890}
1891
be737a59
VK
1892/**
1893 * Upgrade from V412 to V413
1894 */
1895static BOOL H_UpgradeFromV412(int currVersion, int newVersion)
1896{
1897 CHK_EXEC(SQLQuery(_T("UPDATE users SET name='system',description='Built-in system account',full_name='',flags=12 WHERE id=0")));
1898
1899 TCHAR password[128];
1900 DB_RESULT hResult = SQLSelect(_T("SELECT password FROM users WHERE id=0"));
1901 if (hResult != NULL)
1902 {
1903 if (DBGetNumRows(hResult) > 0)
1904 DBGetField(hResult, 0, 0, password, 128);
1905 else
1906 _tcscpy(password, _T("3A445C0072CD69D9030CC6644020E5C4576051B1")); // Use default password "netxms"
1907 DBFreeResult(hResult);
1908 }
1909 else
1910 {
1911 if (!g_bIgnoreErrors)
1912 return false;
1913 }
1914
1915 UINT32 userId = 1;
1916 hResult = SQLSelect(_T("SELECT max(id) FROM users"));
1917 if (hResult != NULL)
1918 {
1919 if (DBGetNumRows(hResult) > 0)
1920 userId = DBGetFieldULong(hResult, 0, 0) + 1;
1921 DBFreeResult(hResult);
1922 }
1923 else
1924 {
1925 if (!g_bIgnoreErrors)
1926 return false;
1927 }
1928
1929 uuid guid = uuid::generate();
1930 TCHAR query[1024];
1931 _sntprintf(query, 1024,
1932 _T("INSERT INTO users (id,name,password,system_access,flags,full_name,")
1933 _T(" description,grace_logins,auth_method,guid,")
1934 _T(" cert_mapping_method,cert_mapping_data,")
1935 _T(" auth_failures,last_passwd_change,min_passwd_length,")
1936 _T(" disabled_until,last_login) VALUES (%d,'admin','%s',274877906943,0,")
1937 _T(" '','Default administrator account',5,0,'%s',0,'',0,0,0,0,0)"),
1938 userId, password, (const TCHAR *)guid.toString());
1939 CHK_EXEC(SQLQuery(query));
1940
1941 for(int i = 1; i < 10; i++)
1942 {
1943 _sntprintf(query, 256, _T("INSERT INTO acl (object_id,user_id,access_rights) VALUES (%d,%d,32767)"), i, userId);
1944 CHK_EXEC(SQLQuery(query));
1945 }
1946
74cd0a62 1947 //Add adming to Admin group if exists
1948 UINT32 groupId = 0;
1949 hResult = SQLSelect(_T("SELECT id FROM user_groups WHERE name='Admins'"));
1950 if (hResult != NULL)
1951 {
1952 if (DBGetNumRows(hResult) > 0)
1953 groupId = DBGetFieldULong(hResult, 0, 0);
1954 DBFreeResult(hResult);
1955 }
1956 else
1957 {
1958 if (!g_bIgnoreErrors)
1959 return false;
1960 }
1961 if(groupId != 0)
1962 {
1963 _sntprintf(query, 256, _T("INSERT INTO user_group_members (group_id,user_id) VALUES (%d,%d)"), groupId, userId);
1964 CHK_EXEC(SQLQuery(query));
1965 }
1966
1967 //Update non object ACL
95111e00 1968 _sntprintf(query, 256, _T("UPDATE object_tools_acl SET user_id=%d WHERE user_id=0"), userId);
74cd0a62 1969 CHK_EXEC(SQLQuery(query));
1970
1971 _sntprintf(query, 256, _T("UPDATE graph_acl SET user_id=%d WHERE user_id=0"), userId);
1972 CHK_EXEC(SQLQuery(query));
1973
1974 _sntprintf(query, 256, _T("UPDATE graphs SET owner_id=%d WHERE owner_id=0"), userId);
1975 CHK_EXEC(SQLQuery(query));
1976
1977
be737a59
VK
1978 CHK_EXEC(SetSchemaVersion(413));
1979 return TRUE;
1980}
1981
43b62436
VK
1982/**
1983 * Upgrade from V411 to V412
1984 */
1985static BOOL H_UpgradeFromV411(int currVersion, int newVersion)
1986{
1987 DB_RESULT hResult = SQLSelect(_T("SELECT id,zone_guid,agent_proxy,snmp_proxy,icmp_proxy,ssh_proxy FROM zones"));
1988 if (hResult != NULL)
1989 {
1990 CHK_EXEC(SQLQuery(_T("DROP TABLE zones")));
1991 CHK_EXEC(CreateTable(
1992 _T("CREATE TABLE zones (")
1993 _T("id integer not null,")
1994 _T("zone_guid integer not null,")
1995 _T("proxy_node integer not null,")
1996 _T("PRIMARY KEY(id))")));
1997 int count = DBGetNumRows(hResult);
1998 if (count > 0)
1999 {
2000 TCHAR query[256];
2001 for(int i = 0; i < count; i++)
2002 {
2003 UINT32 proxy = 0;
2004 for(int j = 2; (j < 6) && (proxy == 0); j++)
2005 proxy = DBGetFieldULong(hResult, i, j);
49e749f3 2006 _sntprintf(query, 256, _T("INSERT INTO zones (id,zone_guid,proxy_node) VALUES (%d,%d,%d)"),
43b62436
VK
2007 DBGetFieldLong(hResult, i, 0), DBGetFieldLong(hResult, i, 1), (int)proxy);
2008 CHK_EXEC(SQLQuery(query));
2009 }
2010 }
2011 DBFreeResult(hResult);
2012 }
2013 else
2014 {
be737a59 2015 if (!g_bIgnoreErrors)
43b62436
VK
2016 return false;
2017 }
2018 CHK_EXEC(SetSchemaVersion(412));
2019 return TRUE;
2020}
2021
63604cda
VK
2022/**
2023 * Upgrade from V410 to V411
2024 */
2025static BOOL H_UpgradeFromV410(int currVersion, int newVersion)
2026{
29e18f5a 2027 //check if tdata upgrade was already done, then just delete "TdataTableUpdated" metadata parameter
03e5e230 2028 if (!MetaDataReadInt(_T("TdataTableUpdated"), 0))
63604cda 2029 {
29e18f5a 2030 StringMap savedMetadata;
2031 DB_RESULT hResult = SQLSelect(_T("SELECT var_name,var_value FROM metadata WHERE var_name LIKE 'TDataTableCreationCommand_%' OR var_name LIKE 'TDataIndexCreationCommand_%'"));
2032 if (hResult != NULL)
63604cda 2033 {
29e18f5a 2034 int count = DBGetNumRows(hResult);
2035 for(int i = 0; i < count; i++)
63604cda 2036 {
29e18f5a 2037 savedMetadata.setPreallocated(DBGetField(hResult, i, 0, NULL, 0), DBGetField(hResult, i, 1, NULL, 0));
63604cda 2038 }
29e18f5a 2039 DBFreeResult(hResult);
2040 }
2041 else if (!g_bIgnoreErrors)
2042 {
63604cda
VK
2043 return false;
2044 }
63604cda 2045
29e18f5a 2046 static const TCHAR *batch =
2047 _T("DELETE FROM metadata WHERE var_name LIKE 'TDataTableCreationCommand_%' OR var_name LIKE 'TDataIndexCreationCommand_%'\n")
2048 _T("INSERT INTO metadata (var_name,var_value) VALUES ('TDataTableCreationCommand_0','CREATE TABLE tdata_%d (item_id integer not null,tdata_timestamp integer not null,tdata_value $SQL:TEXT null)')\n")
2049 _T("<END>");
2050 CHK_EXEC(SQLBatch(batch));
2051
2052 if (g_dbSyntax == DB_SYNTAX_MSSQL)
2053 CHK_EXEC(SQLQuery(_T("INSERT INTO metadata (var_name,var_value) VALUES ('TDataIndexCreationCommand_0','CREATE CLUSTERED INDEX idx_tdata_%d ON tdata_%d(item_id,tdata_timestamp)')")));
2054 else
2055 CHK_EXEC(SQLQuery(_T("INSERT INTO metadata (var_name,var_value) VALUES ('TDataIndexCreationCommand_0','CREATE INDEX idx_tdata_%d ON tdata_%d(item_id,tdata_timestamp)')")));
2056
2057 // table conversion will require multiple commits
2058 DBCommit(g_hCoreDB);
2059 if (!ConvertTDataTables())
2060 {
2061 if (!g_bIgnoreErrors)
2062 {
2063 // Restore metadata
2064 SQLQuery(_T("DELETE FROM metadata WHERE var_name LIKE 'TDataTableCreationCommand_%' OR var_name LIKE 'TDataIndexCreationCommand_%'"));
2065 StringList *keys = savedMetadata.keys();
2066 for(int i = 0; i < keys->size(); i++)
2067 {
2068 TCHAR query[4096];
2069 _sntprintf(query, 4096, _T("INSERT INTO metadata (var_name,var_value) VALUES (%s,%s)"),
2070 (const TCHAR *)DBPrepareString(g_hCoreDB, keys->get(i)),
2071 (const TCHAR *)DBPrepareString(g_hCoreDB, savedMetadata.get(keys->get(i))));
2072 SQLQuery(query);
2073 }
2074 return false;
2075 }
2076 }
2077
2078 DBBegin(g_hCoreDB);
2079 }
2080 else
2081 {
2082 CHK_EXEC(SQLQuery(_T("DELETE FROM metadata WHERE var_name='TdataTableUpdated'")));
2083 }
63604cda
VK
2084 CHK_EXEC(SetSchemaVersion(411));
2085 return TRUE;
2086}
2087
241541f4
VK
2088/**
2089 * Upgrade from V409 to V410
2090 */
2091static BOOL H_UpgradeFromV409(int currVersion, int newVersion)
2092{
2093 static const TCHAR *batch =
2094 _T("ALTER TABLE zones ADD ssh_proxy integer\n")
2095 _T("UPDATE zones SET ssh_proxy=0\n")
2096 _T("ALTER TABLE nodes ADD ssh_login varchar(63)\n")
2097 _T("ALTER TABLE nodes ADD ssh_password varchar(63)\n")
2098 _T("ALTER TABLE nodes ADD ssh_proxy integer\n")
2099 _T("UPDATE nodes SET ssh_proxy=0\n")
2100 _T("<END>");
2101 CHK_EXEC(SQLBatch(batch));
2102
2103 CHK_EXEC(SetNotNullConstraint(_T("nodes"), _T("ssh_proxy")));
2104 CHK_EXEC(SetNotNullConstraint(_T("zones"), _T("ssh_proxy")));
2105
2106 CHK_EXEC(SetSchemaVersion(410));
2107 return TRUE;
2108}
2109
e980db40
VK
2110/**
2111 * Upgrade from V408 to V409
2112 */
2113static BOOL H_UpgradeFromV408(int currVersion, int newVersion)
2114{
2115 static const TCHAR *batch =
2116 _T("ALTER TABLE nodes ADD node_type integer\n")
2117 _T("ALTER TABLE nodes ADD node_subtype varchar(127)\n")
2118 _T("UPDATE nodes SET node_type=0\n")
2119 _T("<END>");
2120 CHK_EXEC(SQLBatch(batch));
2121
241541f4
VK
2122 CHK_EXEC(SetNotNullConstraint(_T("nodes"), _T("node_type")));
2123
e980db40
VK
2124 CHK_EXEC(SetSchemaVersion(409));
2125 return TRUE;
2126}
2127
e4926628
VK
2128/**
2129 * Upgrade from V407 to V408
2130 */
2131static BOOL H_UpgradeFromV407(int currVersion, int newVersion)
2132{
2133 CHK_EXEC(CreateTable(
2134 _T("CREATE TABLE chassis (")
2135 _T(" id integer not null,")
32a400d9 2136 _T(" flags integer not null,")
e4926628
VK
2137 _T(" controller_id integer not null,")
2138 _T(" rack_id integer not null,")
2139 _T(" rack_image varchar(36) null,")
2140 _T(" rack_position integer not null,")
2141 _T(" rack_height integer not null,")
2142 _T(" PRIMARY KEY(id))")
2143 ));
2144
2145 static const TCHAR *batch =
2146 _T("ALTER TABLE nodes ADD chassis_id integer\n")
2147 _T("UPDATE nodes SET chassis_id=0\n")
2148 _T("<END>");
2149 CHK_EXEC(SQLBatch(batch));
2150
241541f4
VK
2151 CHK_EXEC(SetNotNullConstraint(_T("nodes"), _T("chassis_id")));
2152
e4926628
VK
2153 CHK_EXEC(SetSchemaVersion(408));
2154 return TRUE;
2155}
2156
8498228c 2157/**
2158 * Upgrade from V406 to V407
2159 */
2160static BOOL H_UpgradeFromV406(int currVersion, int newVersion)
2161{
2162 ResizeColumn(_T("user_groups"), _T("ldap_unique_id"), 64, true);
e4926628 2163 CHK_EXEC(SetSchemaVersion(407));
8498228c 2164 return TRUE;
2165}
2166
ba756b1a
VK
2167/**
2168 * Upgrade from V405 to V406
2169 */
2170static BOOL H_UpgradeFromV405(int currVersion, int newVersion)
2171{
2172 static const TCHAR *batch =
2173 _T("ALTER TABLE nodes ADD syslog_msg_count $SQL:INT64\n")
2174 _T("ALTER TABLE nodes ADD snmp_trap_count $SQL:INT64\n")
2175 _T("UPDATE nodes SET syslog_msg_count=0,snmp_trap_count=0\n")
2176 _T("<END>");
2177 CHK_EXEC(SQLBatch(batch));
e4926628 2178 CHK_EXEC(SetSchemaVersion(406));
ba756b1a
VK
2179 return TRUE;
2180}
2181
b123ecb3 2182/**
2183 * Upgrade from V404 to V405
2184 */
2185static BOOL H_UpgradeFromV404(int currVersion, int newVersion)
2186{
7b30e5ae 2187 CHK_EXEC(CreateEventTemplate(EVENT_AGENT_LOG_PROBLEM, _T("SYS_AGENT_LOG_PROBLEM"),
b123ecb3 2188 SEVERITY_MAJOR, EF_LOG, _T("262057ca-357a-4a4d-9b78-42ae96e490a1"),
2189 _T("Problem with agent log: %2"),
7b30e5ae 2190 _T("Generated on status poll if agent reports problem with log file.\r\n")
b123ecb3 2191 _T("Parameters:\r\n")
7b30e5ae 2192 _T(" 1) Status code\r\n")
b123ecb3 2193 _T(" 2) Description")));
7b30e5ae 2194 CHK_EXEC(CreateEventTemplate(EVENT_AGENT_LOCAL_DATABASE_PROBLEM, _T("SYS_AGENT_LOCAL_DATABASE_PROBLEM"),
b123ecb3 2195 SEVERITY_MAJOR, EF_LOG, _T("d02b63f1-1151-429e-adb9-1dfbb3a31b32"),
2196 _T("Problem with agent local database: %2"),
7b30e5ae 2197 _T("Generated on status poll if agent reports local database problem.\r\n")
b123ecb3 2198 _T("Parameters:\r\n")
7b30e5ae 2199 _T(" 1) Status code\r\n")
b123ecb3 2200 _T(" 2) Description")));
2201
2202 int ruleId = NextFreeEPPruleID();
2203 TCHAR query[1024];
2204 _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 2205 _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 2206 ruleId, EVENT_ALARM_TIMEOUT);
2207 CHK_EXEC(SQLQuery(query));
7b30e5ae 2208 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_AGENT_LOG_PROBLEM);
b123ecb3 2209 CHK_EXEC(SQLQuery(query));
7b30e5ae
VK
2210
2211 ruleId = NextFreeEPPruleID();
b123ecb3 2212 _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 2213 _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 2214 ruleId, EVENT_ALARM_TIMEOUT);
2215 CHK_EXEC(SQLQuery(query));
7b30e5ae 2216 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_AGENT_LOCAL_DATABASE_PROBLEM);
b123ecb3 2217 CHK_EXEC(SQLQuery(query));
2218
e4926628 2219 CHK_EXEC(SetSchemaVersion(405));
b123ecb3 2220 return TRUE;
2221}
2222
b8c8a8a7
VK
2223/**
2224 * Upgrade from V403 to V404
2225 */
2226static BOOL H_UpgradeFromV403(int currVersion, int newVersion)
2227{
2228 CHK_EXEC(CreateConfigParam(_T("SyslogIgnoreMessageTimestamp"), _T("0"),
2229 _T("Ignore timestamp received in syslog messages and always use server time"),
2230 'B', true, false, false, false));
e4926628 2231 CHK_EXEC(SetSchemaVersion(404));
b8c8a8a7
VK
2232 return TRUE;
2233}
2234
a18687b9
VK
2235/**
2236 * Upgrade from V402 to V403
2237 */
2238static BOOL H_UpgradeFromV402(int currVersion, int newVersion)
2239{
2240 CHK_EXEC(SQLQuery(_T("DROP TABLE policy_time_range_list")));
2241 CHK_EXEC(SQLQuery(_T("DROP TABLE time_ranges")));
e4926628 2242 CHK_EXEC(SetSchemaVersion(403));
a18687b9
VK
2243 return TRUE;
2244}
2245
ed0a9e41
VK
2246/**
2247 * Upgrade from V401 to V402
2248 */
2249static BOOL H_UpgradeFromV401(int currVersion, int newVersion)
2250{
2251 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_event_log_source ON event_log(event_source)")));
e4926628 2252 CHK_EXEC(SetSchemaVersion(402));
ed0a9e41
VK
2253 return TRUE;
2254}
2255
bad2c02e 2256/**
2257 * Upgrade from V400 to V401
2258 */
2259static BOOL H_UpgradeFromV400(int currVersion, int newVersion)
2260{
3da098f7
VK
2261 CHK_EXEC(CreateEventTemplate(EVENT_LDAP_SYNC_ERROR, _T("SYS_LDAP_SYNC_ERROR"),
2262 SEVERITY_MAJOR, EF_LOG, _T("f7e8508d-1503-4736-854b-1e5b8b0ad1f2"),
2263 _T("LDAP sync error: %5"),
bad2c02e 2264 _T("Generated when LDAP synchronization error occurs.\r\n")
2265 _T("Parameters:\r\n")
2266 _T(" 1) User ID\r\n")
2267 _T(" 2) User GUID\r\n")
2268 _T(" 3) User LDAP DN\r\n")
2269 _T(" 4) User name\r\n")
2270 _T(" 5) Problem description")));
355aa002 2271
3da098f7 2272 int ruleId = NextFreeEPPruleID();
bad2c02e 2273 TCHAR query[1024];
3da098f7 2274 _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 2275 CHK_EXEC(SQLQuery(query));
50e319a2 2276 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_LDAP_SYNC_ERROR);
bad2c02e 2277 CHK_EXEC(SQLQuery(query));
2278
2279 CHK_EXEC(SQLQuery(_T("ALTER TABLE users ADD ldap_unique_id varchar(64)")));
2280 CHK_EXEC(SQLQuery(_T("ALTER TABLE user_groups ADD ldap_unique_id varchar(64)")));
2281 CHK_EXEC(CreateConfigParam(_T("LdapUserUniqueId"), _T(""), true, false, false));
2282 CHK_EXEC(CreateConfigParam(_T("LdapGroupUniqueId"), _T(""), true, false, false));
2283
e4926628 2284 CHK_EXEC(SetSchemaVersion(401));
bad2c02e 2285 return TRUE;
2286}
355aa002 2287
8e6e8ef1 2288/**
355aa002
TD
2289 * Upgrade from V399 to V400
2290 */
2291static BOOL H_UpgradeFromV399(int currVersion, int newVersion)
2292{
2293 CHK_EXEC(CreateConfigParam(_T("JobRetryCount"), _T("5"), _T("Maximum mumber of job execution retrys"), 'I', true, false, false, false));
e4926628 2294 CHK_EXEC(SetSchemaVersion(400));
355aa002
TD
2295 return TRUE;
2296}
2297
2298/**
2299 * Upgrade from V398 to V399
8e6e8ef1
VK
2300 */
2301static BOOL H_UpgradeFromV398(int currVersion, int newVersion)
2302{
2303 CHK_EXEC(CreateTable(
2304 _T("CREATE TABLE config_repositories (")
2305 _T(" id integer not null,")
2306 _T(" url varchar(1023) not null,")
2307 _T(" auth_token varchar(63) null,")
2308 _T(" description varchar(1023) null,")
2309 _T(" PRIMARY KEY(id))")
2310 ));
2311
e4926628 2312 CHK_EXEC(SetSchemaVersion(399));
8e6e8ef1
VK
2313 return TRUE;
2314}
2315
0de31ec3
VK
2316/**
2317 * Upgrade from V397 to V398
2318 */
2319static BOOL H_UpgradeFromV397(int currVersion, int newVersion)
2320{
2321 CHK_EXEC(CreateTable(
2322 _T("CREATE TABLE currency_codes (")
2323 _T(" numeric_code char(3) not null,")
2324 _T(" alpha_code char(3) not null,")
a27a303e 2325 _T(" description varchar(127) not null,")
0de31ec3
VK
2326 _T(" exponent integer not null,")
2327 _T(" PRIMARY KEY(numeric_code))")
2328 ));
2329
2330 CHK_EXEC(CreateTable(
2331 _T("CREATE TABLE country_codes (")
2332 _T(" numeric_code char(3) not null,")
2333 _T(" alpha_code char(2) not null,")
2334 _T(" alpha3_code char(3) not null,")
a27a303e 2335 _T(" name varchar(127) not null,")
0de31ec3
VK
2336 _T(" PRIMARY KEY(numeric_code))")
2337 ));
2338
dc4472a5 2339 static const TCHAR *batch1 =
0de31ec3
VK
2340 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('008', 'ALL', 'Lek', 2)\n")
2341 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('012', 'DZD', 'Algerian Dinar', 2)\n")
2342 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('031', 'AZM', 'Azerbaijanian Manat', 0)\n")
2343 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('032', 'ARS', 'Argentine Peso', 2)\n")
2344 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('036', 'AUD', 'Australian Dollar', 2)\n")
2345 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('044', 'BSD', 'Bahamian Dollar', 2)\n")
2346 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('048', 'BHD', 'Bahraini Dinar', 3)\n")
2347 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('050', 'BDT', 'Taka', 2)\n")
2348 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('051', 'AMD', 'Armenian Dram', 2)\n")
2349 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('052', 'BBD', 'Barbados Dollar', 2)\n")
2350 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('060', 'BMD', 'Bermudian Dollar', 2)\n")
2351 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('064', 'BTN', 'Ngultrum', 2)\n")
2352 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('068', 'BOB', 'Boliviano', 2)\n")
2353 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('072', 'BWP', 'Pula', 2)\n")
2354 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('084', 'BZD', 'Belize Dollar', 2)\n")
2355 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('090', 'SBD', 'Solomon Islands Dollar', 2)\n")
2356 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('096', 'BND', 'Brunei Dollar', 2)\n")
2357 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('100', 'BGL', 'Lev', 0)\n")
2358 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('104', 'MMK', 'Kyat', 2)\n")
2359 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('108', 'BIF', 'Burundi Franc', 0)\n")
2360 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('116', 'KHR', 'Riel', 2)\n")
2361 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('124', 'CAD', 'Canadian Dollar', 2)\n")
2362 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('132', 'CVE', 'Cape Verde Escudo', 2)\n")
2363 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('136', 'KYD', 'Cayman Islands Dollar', 2)\n")
2364 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('144', 'LKR', 'Sri Lanka Rupee', 2)\n")
2365 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('152', 'CLP', 'Chilean Peso', 0)\n")
2366 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('156', 'CNY', 'Yuan Renminbi', 2)\n")
2367 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('170', 'COP', 'Colombian Peso', 2)\n")
2368 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('174', 'KMF', 'Comoro Franc', 0)\n")
2369 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('188', 'CRC', 'Costa Rican Colon', 2)\n")
2370 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('191', 'HRK', 'Croatian Kuna', 2)\n")
2371 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('192', 'CUP', 'Cuban Peso', 2)\n")
2372 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('196', 'CYP', 'Cyprus Pound', 0)\n")
2373 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('203', 'CZK', 'Czech Koruna', 2)\n")
2374 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('208', 'DKK', 'Danish Krone', 2)\n")
2375 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('214', 'DOP', 'Dominican Peso', 2)\n")
2376 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('222', 'SVC', 'El Salvador Colon', 2)\n")
2377 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('230', 'ETB', 'Ethiopian Birr', 2)\n")
2378 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('232', 'ERN', 'Nakfa', 2)\n")
2379 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('233', 'EEK', 'Estonian Kroon', 0)\n")
2380 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('238', 'FKP', 'Falkland Islands Pound', 2)\n")
2381 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('242', 'FJD', 'Fiji Dollar', 2)\n")
2382 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('262', 'DJF', 'Djibouti Franc', 0)\n")
2383 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('270', 'GMD', 'Dalasi', 2)\n")
2384 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('288', 'GHC', 'Cedi', 0)\n")
2385 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('292', 'GIP', 'Gibraltar Pound', 2)\n")
2386 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('320', 'GTQ', 'Quetzal', 2)\n")
2387 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('324', 'GNF', 'Guinea Franc', 0)\n")
2388 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('328', 'GYD', 'Guyana Dollar', 2)\n")
2389 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('332', 'HTG', 'Gourde', 2)\n")
2390 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('340', 'HNL', 'Lempira', 2)\n")
2391 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('344', 'HKD', 'Hong Kong Dollar', 2)\n")
2392 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('348', 'HUF', 'Forint', 2)\n")
2393 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('352', 'ISK', 'Iceland Krona', 0)\n")
2394 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('356', 'INR', 'Indian Rupee', 2)\n")
2395 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('360', 'IDR', 'Rupiah', 2)\n")
2396 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('364', 'IRR', 'Iranian Rial', 2)\n")
2397 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('368', 'IQD', 'Iraqi Dinar', 3)\n")
2398 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('376', 'ILS', 'New Israeli Sheqel', 2)\n")
2399 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('388', 'JMD', 'Jamaican Dollar', 2)\n")
2400 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('392', 'JPY', 'Yen', 0)\n")
2401 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('398', 'KZT', 'Tenge', 2)\n")
2402 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('400', 'JOD', 'Jordanian Dinar', 3)\n")
2403 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('404', 'KES', 'Kenyan Shilling', 2)\n")
2404 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('408', 'KPW', 'North Korean Won', 2)\n")
2405 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('410', 'KRW', 'Won', 0)\n")
2406 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('414', 'KWD', 'Kuwaiti Dinar', 3)\n")
2407 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('417', 'KGS', 'Som', 2)\n")
2408 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('418', 'LAK', 'Kip', 2)\n")
2409 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('422', 'LBP', 'Lebanese Pound', 2)\n")
2410 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('426', 'LSL', 'Lesotho Loti', 2)\n")
2411 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('428', 'LVL', 'Latvian Lats', 2)\n")
2412 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('430', 'LRD', 'Liberian Dollar', 2)\n")
2413 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('434', 'LYD', 'Lybian Dinar', 3)\n")
2414 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('440', 'LTL', 'Lithuanian Litas', 2)\n")
2415 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('446', 'MOP', 'Pataca', 2)\n")
2416 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('450', 'MGF', 'Malagasy Franc', 0)\n")
2417 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('454', 'MWK', 'Kwacha', 2)\n")
2418 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('458', 'MYR', 'Malaysian Ringgit', 2)\n")
2419 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('462', 'MVR', 'Rufiyaa', 2)\n")
2420 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('470', 'MTL', 'Maltese Lira', 0)\n")
2421 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('478', 'MRO', 'Ouguiya', 2)\n")
2422 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('480', 'MUR', 'Mauritius Rupee', 2)\n")
2423 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('484', 'MXN', 'Mexican Peso', 2)\n")
2424 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('496', 'MNT', 'Tugrik', 2)\n")
2425 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('498', 'MDL', 'Moldovan Leu', 2)\n")
2426 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('504', 'MAD', 'Moroccan Dirham', 2)\n")
2427 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('508', 'MZM', 'Metical', 0)\n")
2428 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('512', 'OMR', 'Rial Omani', 3)\n")
2429 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('516', 'NAD', 'Namibia Dollar', 2)\n")
2430 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('524', 'NPR', 'Nepalese Rupee', 2)\n")
2431 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('532', 'ANG', 'Netherlands Antillan Guilder', 2)\n")
2432 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('533', 'AWG', 'Aruban Guilder', 2)\n")
2433 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('548', 'VUV', 'Vatu', 0)\n")
2434 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('554', 'NZD', 'New Zealand Dollar', 2)\n")
2435 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('558', 'NIO', 'Cordoba Oro', 2)\n")
2436 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('566', 'NGN', 'Naira', 2)\n")
2437 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('578', 'NOK', 'Norvegian Krone', 2)\n")
2438 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('586', 'PKR', 'Pakistan Rupee', 2)\n")
2439 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('590', 'PAB', 'Balboa', 2)\n")
2440 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('598', 'PGK', 'Kina', 2)\n")
2441 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('600', 'PYG', 'Guarani', 0)\n")
2442 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('604', 'PEN', 'Nuevo Sol', 2)\n")
2443 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('608', 'PHP', 'Philippine Peso', 2)\n")
2444 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('624', 'GWP', 'Guinea-Bissau Peso', 0)\n")
2445 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('634', 'QAR', 'Qatari Rial', 2)\n")
2446 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('642', 'ROL', 'Leu', 0)\n")
2447 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('643', 'RUB', 'Russian Ruble', 2)\n")
2448 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('646', 'RWF', 'Rwanda Franc', 0)\n")
2449 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('654', 'SHP', 'Saint Helena Pound', 2)\n")
2450 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('678', 'STD', 'Dobra', 2)\n")
2451 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('682', 'SAR', 'Saudi Riyal', 2)\n")
2452 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('690', 'SCR', 'Seychelles Rupee', 2)\n")
2453 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('694', 'SLL', 'Leone', 2)\n")
2454 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('702', 'SGD', 'Singapore Dollar', 2)\n")
2455 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('703', 'SKK', 'Slovak Koruna', 0)\n")
2456 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('704', 'VND', 'Dong', 0)\n")
2457 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('706', 'SOS', 'Somali Shilling', 2)\n")
2458 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('710', 'ZAR', 'Rand', 2)\n")
2459 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('716', 'ZWD', 'Zimbabwe Dollar', 0)\n")
2460 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('728', 'SSP', 'South Sudanese pound', 2)\n")
2461 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('740', 'SRG', 'Suriname Guilder', 0)\n")
2462 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('748', 'SZL', 'Lilangeni', 2)\n")
2463 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('752', 'SEK', 'Swedish Krona', 2)\n")
2464 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('756', 'CHF', 'Swiss Franc', 2)\n")
2465 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('760', 'SYP', 'Syrian Pound', 2)\n")
2466 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('764', 'THB', 'Baht', 2)\n")
2467 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('776', 'TOP', 'Paanga', 2)\n")
2468 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('780', 'TTD', 'Trinidad and Tobago Dollar', 2)\n")
2469 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('784', 'AED', 'UAE Dirham', 2)\n")
2470 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('788', 'TND', 'Tunisian Dinar', 3)\n")
2471 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('795', 'TMM', 'Manat', 0)\n")
2472 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('800', 'UGX', 'Uganda Shilling', 2)\n")
2473 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('807', 'MKD', 'Denar', 2)\n")
2474 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('810', 'RUR', 'Russian Ruble', 0)\n")
2475 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('818', 'EGP', 'Egyptian Pound', 2)\n")
2476 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('826', 'GBP', 'Pound Sterling', 2)\n")
2477 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('834', 'TZS', 'Tanzanian Shilling', 2)\n")
2478 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('840', 'USD', 'US Dollar', 2)\n")
2479 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('858', 'UYU', 'Peso Uruguayo', 2)\n")
2480 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('860', 'UZS', 'Uzbekistan Sum', 2)\n")
2481 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('862', 'VEB', 'Bolivar', 0)\n")
2482 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('882', 'WST', 'Tala', 2)\n")
2483 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('886', 'YER', 'Yemeni Rial', 2)\n")
2484 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('891', 'CSD', 'Serbian Dinar', 0)\n")
2485 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('894', 'ZMK', 'Kwacha', 2)\n")
2486 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('901', 'TWD', 'New Taiwan Dollar', 2)\n")
2487 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('933', 'BYN', 'Belarussian New Ruble', 2)\n")
2488 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('934', 'TMT', 'Turkmenistani Manat', 2)\n")
2489 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('937', 'VEF', 'Venezuelan Bolivar', 2)\n")
2490 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('938', 'SDG', 'Sudanese Pound', 2)\n")
2491 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('941', 'RSD', 'Serbian Dinar', 2)\n")
2492 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('943', 'MZN', 'Mozambican Metical', 2)\n")
2493 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('944', 'AZN', 'Azerbaijani Manat', 2)\n")
2494 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('946', 'RON', 'New Romanian Leu', 2)\n")
2495 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('949', 'TRY', 'New Turkish Lira', 2)\n")
2496 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('950', 'XAF', 'CFA Franc BEAC', 0)\n")
2497 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('951', 'XCD', 'East Carribbean Dollar', 2)\n")
2498 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('952', 'XOF', 'CFA Franc BCEAO', 0)\n")
2499 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('953', 'XPF', 'CFP Franc', 0)\n")
2500 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('967', 'ZMW', 'Zambian Kwacha', 2)\n")
2501 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('968', 'SRD', 'Surinamese Dollar', 2)\n")
2502 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('969', 'MGA', 'Malagasy Ariary', 2)\n")
2503 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('971', 'AFN', 'Afghani', 2)\n")
2504 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('972', 'TJS', 'Somoni', 2)\n")
2505 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('973', 'AOA', 'Kwanza', 2)\n")
2506 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('974', 'BYR', 'Belarussian Ruble', 0)\n")
2507 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('975', 'BGN', 'Bulgarian Lev', 2)\n")
2508 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('976', 'CDF', 'Franc Congolais', 2)\n")
2509 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('977', 'BAM', 'Convertible Marks', 2)\n")
2510 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('978', 'EUR', 'Euro', 2)\n")
2511 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('979', 'MXV', 'Mexican Unidad de Inversion (UDI)', 2)\n")
2512 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('980', 'UAH', 'Hryvnia', 2)\n")
2513 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('981', 'GEL', 'Lari', 2)\n")
2514 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('984', 'BOV', 'Mvdol', 2)\n")
2515 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('985', 'PLN', 'Zloty', 2)\n")
2516 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('986', 'BRL', 'Brazilian Real', 2)\n")
2517 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('990', 'CLF', 'Unidades de Fomento', 0)\n")
2518 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('997', 'USN', 'US dollar (next day funds code)', 2)\n")
2519 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('998', 'USS', 'US dollar (same day funds code)', 2)\n")
2520 _T("INSERT INTO currency_codes (numeric_code, alpha_code, description, exponent) VALUES ('999', 'XXX', 'No currency', 0)\n")
dc4472a5
VK
2521 _T("<END>");
2522 static const TCHAR *batch2 =
0de31ec3
VK
2523 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AD','AND','020','Andorra')\n")
2524 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AE','ARE','784','United Arab Emirates')\n")
2525 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AF','AFG','004','Afghanistan')\n")
2526 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AG','ATG','028','Antigua and Barbuda')\n")
2527 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AI','AIA','660','Anguilla')\n")
2528 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AL','ALB','008','Albania')\n")
2529 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AM','ARM','051','Armenia')\n")
2530 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AN','ANT','530','Netherlands Antilles')\n")
2531 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AO','AGO','024','Angola')\n")
2532 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AQ','ATA','010','Antarctica')\n")
2533 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AR','ARG','032','Argentina')\n")
2534 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AS','ASM','016','American Samoa')\n")
2535 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AT','AUT','040','Austria')\n")
2536 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AU','AUS','036','Australia')\n")
2537 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AW','ABW','533','Aruba')\n")
2538 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AX','ALA','248','Aland Islands')\n")
2539 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('AZ','AZE','031','Azerbaijan')\n")
2540 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BA','BIH','070','Bosnia and Herzegovina')\n")
2541 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BB','BRB','052','Barbados')\n")
2542 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BD','BGD','050','Bangladesh')\n")
2543 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BE','BEL','056','Belgium')\n")
2544 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BF','BFA','854','Burkina Faso')\n")
2545 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BG','BGR','100','Bulgaria')\n")
2546 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BH','BHR','048','Bahrain')\n")
2547 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BI','BDI','108','Burundi')\n")
2548 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BJ','BEN','204','Benin')\n")
2549 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BL','BLM','652','Saint-Barthelemy')\n")
2550 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BM','BMU','060','Bermuda')\n")
2551 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BN','BRN','096','Brunei Darussalam')\n")
2552 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BO','BOL','068','Bolivia')\n")
2553 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BQ','BES','535','Bonaire, Sint Eustatius and Saba')\n")
2554 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BR','BRA','076','Brazil')\n")
2555 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BS','BHS','044','Bahamas')\n")
2556 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BT','BTN','064','Bhutan')\n")
2557 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BV','BVT','074','Bouvet Island')\n")
2558 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BW','BWA','072','Botswana')\n")
2559 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BY','BLR','112','Belarus')\n")
2560 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('BZ','BLZ','084','Belize')\n")
2561 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CA','CAN','124','Canada')\n")
2562 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CC','CCK','166','Cocos (Keeling) Islands')\n")
2563 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CD','COD','180','Congo, Democratic Republic of the')\n")
2564 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CF','CAF','140','Central African Republic')\n")
2565 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CG','COG','178','Congo (Brazzaville)')\n")
2566 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CH','CHE','756','Switzerland')\n")
2567 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CI','CIV','384','Cote d''Ivoire')\n")
2568 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CK','COK','184','Cook Islands')\n")
2569 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CL','CHL','152','Chile')\n")
2570 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CM','CMR','120','Cameroon')\n")
2571 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CN','CHN','156','China')\n")
2572 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CO','COL','170','Colombia')\n")
2573 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CR','CRI','188','Costa Rica')\n")
2574 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CU','CUB','192','Cuba')\n")
2575 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CV','CPV','132','Cape Verde')\n")
2576 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CW','CUW','531','Curacao')\n")
2577 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CX','CXR','162','Christmas Island')\n")
2578 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CY','CYP','196','Cyprus')\n")
2579 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('CZ','CZE','203','Czech Republic')\n")
2580 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DE','DEU','276','Germany')\n")
2581 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DJ','DJI','262','Djibouti')\n")
2582 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DK','DNK','208','Denmark')\n")
2583 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DM','DMA','212','Dominica')\n")
2584 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DO','DOM','214','Dominican Republic')\n")
2585 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('DZ','DZA','012','Algeria')\n")
2586 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('EC','ECU','218','Ecuador')\n")
2587 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('EE','EST','233','Estonia')\n")
2588 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('EG','EGY','818','Egypt')\n")
2589 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('EH','ESH','732','Western Sahara')\n")
2590 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ER','ERI','232','Eritrea')\n")
2591 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ES','ESP','724','Spain')\n")
2592 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ET','ETH','231','Ethiopia')\n")
2593 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FI','FIN','246','Finland')\n")
2594 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FJ','FJI','242','Fiji')\n")
2595 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FK','FLK','238','Falkland Islands (Malvinas)')\n")
2596 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FM','FSM','583','Micronesia, Federated States of')\n")
2597 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FO','FRO','234','Faroe Islands')\n")
2598 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('FR','FRA','250','France')\n")
2599 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GA','GAB','266','Gabon')\n")
2600 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GB','GBR','826','United Kingdom')\n")
2601 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GD','GRD','308','Grenada')\n")
2602 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GE','GEO','268','Georgia')\n")
2603 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GF','GUF','254','French Guiana')\n")
2604 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GG','GGY','831','Guernsey')\n")
2605 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GH','GHA','288','Ghana')\n")
2606 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GI','GIB','292','Gibraltar')\n")
2607 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GL','GRL','304','Greenland')\n")
2608 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GM','GMB','270','Gambia')\n")
2609 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GN','GIN','324','Guinea')\n")
2610 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GP','GLP','312','Guadeloupe')\n")
2611 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GQ','GNQ','226','Equatorial Guinea')\n")
2612 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GR','GRC','300','Greece')\n")
2613 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GS','SGS','239','South Georgia and the South Sandwich Islands')\n")
2614 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GT','GTM','320','Guatemala')\n")
2615 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GU','GUM','316','Guam')\n")
2616 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GW','GNB','624','Guinea-Bissau')\n")
2617 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('GY','GUY','328','Guyana')\n")
2618 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HK','HKG','344','Hong Kong, Special Administrative Region of China')\n")
2619 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HM','HMD','334','Heard Island and Mcdonald Islands')\n")
2620 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HN','HND','340','Honduras')\n")
2621 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HR','HRV','191','Croatia')\n")
2622 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HT','HTI','332','Haiti')\n")
2623 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('HU','HUN','348','Hungary')\n")
2624 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ID','IDN','360','Indonesia')\n")
2625 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IE','IRL','372','Ireland')\n")
2626 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IL','ISR','376','Israel')\n")
2627 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IM','IMN','833','Isle of Man')\n")
2628 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IN','IND','356','India')\n")
2629 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IO','IOT','086','British Indian Ocean Territory')\n")
2630 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IQ','IRQ','368','Iraq')\n")
2631 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IR','IRN','364','Iran, Islamic Republic of')\n")
2632 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IS','ISL','352','Iceland')\n")
2633 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('IT','ITA','380','Italy')\n")
2634 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('JE','JEY','832','Jersey')\n")
2635 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('JM','JAM','388','Jamaica')\n")
2636 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('JO','JOR','400','Jordan')\n")
2637 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('JP','JPN','392','Japan')\n")
2638 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KE','KEN','404','Kenya')\n")
2639 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KG','KGZ','417','Kyrgyzstan')\n")
2640 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KH','KHM','116','Cambodia')\n")
2641 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KI','KIR','296','Kiribati')\n")
2642 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KM','COM','174','Comoros')\n")
2643 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KN','KNA','659','Saint Kitts and Nevis')\n")
2644 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KP','PRK','408','Korea, Democratic People''s Republic of')\n")
2645 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KR','KOR','410','Korea, Republic of')\n")
2646 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KW','KWT','414','Kuwait')\n")
2647 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KY','CYM','136','Cayman Islands')\n")
2648 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('KZ','KAZ','398','Kazakhstan')\n")
2649 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LA','LAO','418','Lao PDR')\n")
2650 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LB','LBN','422','Lebanon')\n")
2651 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LC','LCA','662','Saint Lucia')\n")
2652 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LI','LIE','438','Liechtenstein')\n")
2653 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LK','LKA','144','Sri Lanka')\n")
2654 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LR','LBR','430','Liberia')\n")
2655 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LS','LSO','426','Lesotho')\n")
2656 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LT','LTU','440','Lithuania')\n")
2657 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LU','LUX','442','Luxembourg')\n")
2658 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LV','LVA','428','Latvia')\n")
2659 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('LY','LBY','434','Libya')\n")
2660 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MA','MAR','504','Morocco')\n")
2661 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MC','MCO','492','Monaco')\n")
2662 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MD','MDA','498','Moldova')\n")
2663 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ME','MNE','499','Montenegro')\n")
2664 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MF','MAF','663','Saint-Martin (French part)')\n")
2665 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MG','MDG','450','Madagascar')\n")
2666 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MH','MHL','584','Marshall Islands')\n")
2667 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MK','MKD','807','Macedonia, Republic of')\n")
2668 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ML','MLI','466','Mali')\n")
2669 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MM','MMR','104','Myanmar')\n")
2670 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MN','MNG','496','Mongolia')\n")
2671 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MO','MAC','446','Macao, Special Administrative Region of China')\n")
2672 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MP','MNP','580','Northern Mariana Islands')\n")
2673 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MQ','MTQ','474','Martinique')\n")
2674 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MR','MRT','478','Mauritania')\n")
2675 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MS','MSR','500','Montserrat')\n")
2676 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MT','MLT','470','Malta')\n")
2677 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MU','MUS','480','Mauritius')\n")
2678 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MV','MDV','462','Maldives')\n")
2679 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MW','MWI','454','Malawi')\n")
2680 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MX','MEX','484','Mexico')\n")
2681 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MY','MYS','458','Malaysia')\n")
2682 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('MZ','MOZ','508','Mozambique')\n")
2683 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NA','NAM','516','Namibia')\n")
2684 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NC','NCL','540','New Caledonia')\n")
2685 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NE','NER','562','Niger')\n")
2686 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NF','NFK','574','Norfolk Island')\n")
2687 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NG','NGA','566','Nigeria')\n")
2688 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NI','NIC','558','Nicaragua')\n")
2689 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NL','NLD','528','Netherlands')\n")
2690 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NO','NOR','578','Norway')\n")
2691 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NP','NPL','524','Nepal')\n")
2692 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NR','NRU','520','Nauru')\n")
2693 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NU','NIU','570','Niue')\n")
2694 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('NZ','NZL','554','New Zealand')\n")
2695 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('OM','OMN','512','Oman')\n")
2696 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PA','PAN','591','Panama')\n")
2697 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PE','PER','604','Peru')\n")
2698 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PF','PYF','258','French Polynesia')\n")
2699 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PG','PNG','598','Papua New Guinea')\n")
2700 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PH','PHL','608','Philippines')\n")
2701 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PK','PAK','586','Pakistan')\n")
2702 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PL','POL','616','Poland')\n")
2703 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PM','SPM','666','Saint Pierre and Miquelon')\n")
2704 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PN','PCN','612','Pitcairn')\n")
2705 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PR','PRI','630','Puerto Rico')\n")
2706 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PS','PSE','275','Palestinian Territory, Occupied')\n")
2707 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PT','PRT','620','Portugal')\n")
2708 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PW','PLW','585','Palau')\n")
2709 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('PY','PRY','600','Paraguay')\n")
2710 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('QA','QAT','634','Qatar')\n")
2711 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RE','REU','638','Reunion')\n")
2712 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RO','ROU','642','Romania')\n")
2713 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RS','SRB','688','Serbia')\n")
2714 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RU','RUS','643','Russian Federation')\n")
2715 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('RW','RWA','646','Rwanda')\n")
2716 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SA','SAU','682','Saudi Arabia')\n")
2717 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SB','SLB','090','Solomon Islands')\n")
2718 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SC','SYC','690','Seychelles')\n")
2719 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SD','SDN','729','Sudan')\n")
2720 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SE','SWE','752','Sweden')\n")
2721 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SG','SGP','702','Singapore')\n")
2722 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SH','SHN','654','Saint Helena')\n")
2723 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SI','SVN','705','Slovenia')\n")
2724 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SJ','SJM','744','Svalbard and Jan Mayen Islands')\n")
2725 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SK','SVK','703','Slovakia')\n")
2726 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SL','SLE','694','Sierra Leone')\n")
2727 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SM','SMR','674','San Marino')\n")
2728 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SN','SEN','686','Senegal')\n")
2729 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SO','SOM','706','Somalia')\n")
2730 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SR','SUR','740','Suriname')\n")
2731 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SS','SSD','728','South Sudan')\n")
2732 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ST','STP','678','Sao Tome and Principe')\n")
2733 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SV','SLV','222','El Salvador')\n")
2734 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SX','SXM','534','Sint Maarten (Dutch part)')\n")
2735 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SY','SYR','760','Syrian Arab Republic (Syria)')\n")
2736 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('SZ','SWZ','748','Swaziland')\n")
2737 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TC','TCA','796','Turks and Caicos Islands')\n")
2738 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TD','TCD','148','Chad')\n")
2739 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TF','ATF','260','French Southern Territories')\n")
2740 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TG','TGO','768','Togo')\n")
2741 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TH','THA','764','Thailand')\n")
2742 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TJ','TJK','762','Tajikistan')\n")
2743 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TK','TKL','772','Tokelau')\n")
2744 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TL','TLS','626','Timor-Leste')\n")
2745 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TM','TKM','795','Turkmenistan')\n")
2746 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TN','TUN','788','Tunisia')\n")
2747 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TO','TON','776','Tonga')\n")
2748 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TR','TUR','792','Turkey')\n")
2749 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TT','TTO','780','Trinidad and Tobago')\n")
2750 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TV','TUV','798','Tuvalu')\n")
2751 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TW','TWN','158','Taiwan')\n")
2752 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('TZ','TZA','834','Tanzania')\n")
2753 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UA','UKR','804','Ukraine')\n")
2754 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UG','UGA','800','Uganda')\n")
2755 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UM','UMI','581','United States Minor Outlying Islands')\n")
2756 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('US','USA','840','United States of America')\n")
2757 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UY','URY','858','Uruguay')\n")
2758 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('UZ','UZB','860','Uzbekistan')\n")
2759 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VA','VAT','336','Holy See (Vatican City State)')\n")
2760 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VC','VCT','670','Saint Vincent and Grenadines')\n")
2761 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VE','VEN','862','Venezuela')\n")
2762 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VG','VGB','092','British Virgin Islands')\n")
2763 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VI','VIR','850','Virgin Islands, US')\n")
2764 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VN','VNM','704','Viet Nam')\n")
2765 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('VU','VUT','548','Vanuatu')\n")
2766 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('WF','WLF','876','Wallis and Futuna Islands')\n")
2767 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('WS','WSM','882','Samoa')\n")
2768 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('YE','YEM','887','Yemen')\n")
2769 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('YT','MYT','175','Mayotte')\n")
2770 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ZA','ZAF','710','South Africa')\n")
2771 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ZM','ZMB','894','Zambia')\n")
2772 _T("INSERT INTO country_codes (alpha_code,alpha3_code,numeric_code,name) VALUES ('ZW','ZWE','716','Zimbabwe')\n")
2773 _T("<END>");
dc4472a5
VK
2774 CHK_EXEC(SQLBatch(batch1));
2775 CHK_EXEC(SQLBatch(batch2));
0de31ec3 2776
e4926628 2777 CHK_EXEC(SetSchemaVersion(398));
0de31ec3
VK
2778 return TRUE;
2779}
2780
50963ced
VK
2781/**
2782 * Upgrade from V396 to V397
2783 */
2784static BOOL H_UpgradeFromV396(int currVersion, int newVersion)
2785{
2786 static GUID_MAPPING eventGuidMapping[] = {
2787 { EVENT_NODE_ADDED, _T("8d34acfd-dad6-4f6e-b6a8-1189683591ef") },
2788 { EVENT_SUBNET_ADDED, _T("75fc3f8b-768f-46b4-bf44-72949436a679") },
2789 { EVENT_INTERFACE_ADDED, _T("33cb8f9c-9427-459c-8a71-45c73f5cc183") },
2790 { EVENT_INTERFACE_UP, _T("09ee209a-0e75-434f-b8c8-399d93305d7b") },
2791 { EVENT_INTERFACE_DOWN, _T("d9a6d46d-97f8-48eb-a86a-2c0f6b150d0d") },
2792 { EVENT_INTERFACE_UNKNOWN, _T("ecb47be1-f911-4c1f-9b00-d0d21694071d") },
2793 { EVENT_INTERFACE_DISABLED, _T("2f3123a2-425f-47db-9c6b-9bc05a7fba2d") },
2794 { EVENT_INTERFACE_TESTING, _T("eb500e5c-3560-4394-8f5f-80aa67036f13") },
2795 { EVENT_INTERFACE_UNEXPECTED_UP, _T("ff21a165-9253-4ecc-929a-ffd1e388d504") },
2796 { EVENT_INTERFACE_EXPECTED_DOWN, _T("911358f4-d2a1-4465-94d7-ce4bc5c38860") },
2797 { EVENT_NODE_NORMAL, _T("03bc11c0-ec20-43be-be45-e60846f744dc") },
2798 { EVENT_NODE_WARNING, _T("1c80deab-aafb-43a7-93a7-1330dd563b47") },
2799 { EVENT_NODE_MINOR, _T("84eaea00-4ed7-41eb-9079-b783e5c60651") },
2800 { EVENT_NODE_MAJOR, _T("27035c88-c27a-4c16-97b3-4658d34a5f63") },
2801 { EVENT_NODE_CRITICAL, _T("8f2e98f8-1cd4-4e12-b41f-48b5c60ebe8e") },
2802 { EVENT_NODE_UNKNOWN, _T("6933cce0-fe1f-4123-817f-af1fb9f0eab4") },
2803 { EVENT_NODE_UNMANAGED, _T("a8356ba7-51b7-4487-b74e-d12132db233c") },
2804 { EVENT_NODE_FLAGS_CHANGED, _T("b04e39f5-d3a7-4d9a-b594-37132f5eaf34") },
2805 { EVENT_SNMP_FAIL, _T("d2fc3b0c-1215-4a92-b8f3-47df5d753602") },
2806 { EVENT_AGENT_FAIL, _T("ba484457-3594-418e-a72a-65336055d025") },
2807 { EVENT_INTERFACE_DELETED, _T("ad7e9856-e361-4095-9361-ccc462d93624") },
2808 { EVENT_THRESHOLD_REACHED, _T("05161c3d-7ceb-406f-af0a-af5c77f324a5") },
2809 { EVENT_THRESHOLD_REARMED, _T("25eef3a7-6158-4c5e-b4e3-8a7aa7ade73c") },
2810 { EVENT_SUBNET_DELETED, _T("af188eb3-e84f-4fd9-aecf-f1ba934a9f1a") },
2811 { EVENT_THREAD_HANGS, _T("df247d13-a63a-43fe-bb02-cb41718ee387") },
2812 { EVENT_THREAD_RUNNING, _T("5589f6ce-7133-44db-8e7a-e1452d636a9a") },
2813 { EVENT_SMTP_FAILURE, _T("1e376009-0d26-4b86-87a2-f4715a02fb38") },
2814 { EVENT_MAC_ADDR_CHANGED, _T("61916ef0-1eee-4df7-a95b-150928d47962") },
2815 { EVENT_INCORRECT_NETMASK, _T("86c08c55-416e-4ac4-bf2b-302b5fddbd68") },
2816 { EVENT_NODE_DOWN, _T("ce34f0d0-5b21-48c2-8788-8ed5ee547023") },
2817 { EVENT_NODE_UP, _T("05f180b6-62e7-4bc4-8a8d-34540214254b") },
2818 { EVENT_SERVICE_DOWN, _T("89caacb5-d2cf-493b-862f-cddbfecac5b6") },
2819 { EVENT_SERVICE_UP, _T("ab35e7c7-2428-44db-ad43-57fe551bb8cc") },
2820 { EVENT_SERVICE_UNKNOWN, _T("d891adae-49fe-4442-a8f3-0ca37ca8820a") },
2821 { EVENT_SMS_FAILURE, _T("c349bf75-458a-4d43-9c27-f71ea4bb06e2") },
2822 { EVENT_SNMP_OK, _T("a821086b-1595-40db-9148-8d770d30a54b") },
2823 { EVENT_AGENT_OK, _T("9c15299a-f2e3-4440-84c5-b17dea87ae2a") },
2824 { EVENT_SCRIPT_ERROR, _T("2cc78efe-357a-4278-932f-91e36754c775") },
2825 { EVENT_CONDITION_ACTIVATED, _T("16a86780-b73a-4601-929c-0c503bd06401") },
2826 { EVENT_CONDITION_DEACTIVATED, _T("926d15d2-9761-4bb6-a1ce-64175303796f") },
2827 { EVENT_DB_CONNECTION_LOST, _T("0311e9c8-8dcf-4a5b-9036-8cff034409ff") },
2828 { EVENT_DB_CONNECTION_RESTORED, _T("d36259a7-5f6b-4e3c-bb6f-17d1f8ac950d") },
2829 { EVENT_CLUSTER_RESOURCE_MOVED, _T("44abe5f3-a7c9-4fbd-8d10-53be172eae83") },
2830 { EVENT_CLUSTER_RESOURCE_DOWN, _T("c3b1d4b5-2e41-4a2f-b379-9d74ebba3a25") },
2831 { EVENT_CLUSTER_RESOURCE_UP, _T("ef6fff96-0cbb-4030-aeba-2473a80c6568") },
2832 { EVENT_CLUSTER_DOWN, _T("8f14d0f7-08d4-4422-92f4-469e5eef93ef") },
2833 { EVENT_CLUSTER_UP, _T("4a9cdb65-aa44-42f2-99b0-1e302aec10f6") },
2834 { EVENT_ALARM_TIMEOUT, _T("4ae4f601-327b-4ef8-9740-8600a1ba2acd") },
2835 { EVENT_LOG_RECORD_MATCHED, _T("d9326159-5c60-410f-990e-fae88df7fdd4") },
2836 { EVENT_EVENT_STORM_DETECTED, _T("c98d8575-d134-4044-ba67-75c5f5d0f6e0") },
2837 { EVENT_EVENT_STORM_ENDED, _T("dfd5e3ba-3182-4deb-bc32-9e6b8c1c6546") },
2838 { EVENT_NETWORK_CONNECTION_LOST, _T("3cb0921a-87a1-46e4-8be1-82ad2dda0015") },
2839 { EVENT_NETWORK_CONNECTION_RESTORED, _T("1c61b3e0-389a-47ac-8469-932a907392bc") },
2840 { EVENT_DB_QUERY_FAILED, _T("5f35d646-63b6-4dcd-b94a-e2ccd060686a") },
2841 { EVENT_DCI_UNSUPPORTED, _T("28367b5b-1541-4526-8cbe-91a17ed31ba4") },
2842 { EVENT_DCI_DISABLED, _T("50196042-0619-4420-9471-16b7c25c0213") },
2843 { EVENT_DCI_ACTIVE, _T("740b6810-b355-46f4-a921-65118504af18") },
2844 { EVENT_IP_ADDRESS_CHANGED, _T("517b6d2a-f5c6-46aa-969d-48e62e05e3bf") },
2845 { EVENT_CONTAINER_AUTOBIND, _T("611133e2-1f76-446f-b278-9d500a823611") },
2846 { EVENT_CONTAINER_AUTOUNBIND, _T("e57603be-0d81-41aa-b07c-12d08640561c") },
2847 { EVENT_TEMPLATE_AUTOAPPLY, _T("bf084945-f928-4428-8c6c-d2965addc832") },
2848 { EVENT_TEMPLATE_AUTOREMOVE, _T("8f7a4b4a-d0a2-4404-9b66-fdbc029f42cf") },
2849 { EVENT_NODE_UNREACHABLE, _T("47bba2ce-c795-4e56-ad44-cbf05741e1ff") },
2850 { EVENT_TABLE_THRESHOLD_ACTIVATED, _T("c08a1cfe-3128-40c2-99cc-378e7ef91f79") },
2851 { EVENT_TABLE_THRESHOLD_DEACTIVATED, _T("479085e7-e1d1-4f2a-9d96-1d522f51b26a") },
2852 { EVENT_IF_PEER_CHANGED, _T("a3a5c1df-9d96-4e98-9e06-b3157dbf39f0") },
2853 { EVENT_AP_ADOPTED, _T("5aaee261-0c5d-44e0-b2f0-223bbba5297d") },
2854 { EVENT_AP_UNADOPTED, _T("846a3581-aad1-4e17-9c55-9bd2e6b1247b") },
2855 { EVENT_AP_DOWN, _T("2c8c6208-d3ab-4b8c-926a-872f4d8abcee") },
2856 { EVENT_IF_MASK_CHANGED, _T("f800e593-057e-4aec-9e47-be0f7718c5c4") },
2857 { EVENT_IF_IPADDR_ADDED, _T("475bdca6-543e-410b-9aff-c217599e0fe6") },
2858 { EVENT_IF_IPADDR_DELETED, _T("ef477387-eb50-4a1a-bf90-717502b9873c") },
2859 { EVENT_MAINTENANCE_MODE_ENTERED, _T("5f6c8b1c-f162-413e-8028-80e7ad2c362d") },
2860 { EVENT_MAINTENANCE_MODE_LEFT, _T("cab06848-a622-430d-8b4c-addeea732657") },
2861 { EVENT_SNMP_UNMATCHED_TRAP, _T("fc3613f7-d151-4221-9acd-d28b6f804335") },
2862 { EVENT_SNMP_COLD_START, _T("39920e99-97bd-4d61-a462-43f89ba6fbdf") },
2863 { EVENT_SNMP_WARM_START, _T("0aa888c1-eba6-4fe7-a37a-b85f2b373bdc") },
2864 { EVENT_SNMP_LINK_DOWN, _T("b71338cc-137d-473c-a0f1-6b131086af56") },
2865 { EVENT_SNMP_LINK_UP, _T("03da14a7-e39c-4a46-a7cb-4bf77ec7936c") },
2866 { EVENT_SNMP_AUTH_FAILURE, _T("37020cb0-dde7-487b-9cfb-0d5ee771aa13") },
2867 { EVENT_SNMP_EGP_NL, _T("aecf5fa4-390c-4125-be10-df8b0e669fe1") },
2868 { 0, NULL }
2869 };
2870
2871 CHK_EXEC(SQLQuery(_T("ALTER TABLE event_cfg ADD guid varchar(36)")));
2872 CHK_EXEC(GenerateGUID(_T("event_cfg"), _T("event_code"), _T("guid"), eventGuidMapping));
e4926628 2873 CHK_EXEC(SetSchemaVersion(397));
50963ced
VK
2874 return TRUE;
2875}
2876
3df8bccd
Z
2877/**
2878 * Upgrade from V395 to V396
2879 */
2880static BOOL H_UpgradeFromV395(int currVersion, int newVersion)
2881{
2882 CHK_EXEC(CreateTable(
2883 _T("CREATE TABLE ap_log_parser (")
2884 _T(" policy_id integer not null,")
2885 _T(" file_content $SQL:TEXT null,")
2886 _T(" PRIMARY KEY(policy_id))")));
2887
e4926628 2888 CHK_EXEC(SetSchemaVersion(396));
3df8bccd
Z
2889 return TRUE;
2890}
2891
fdef3439
Z
2892/**
2893 * Upgrade from V394 to V395
2894 */
2895static BOOL H_UpgradeFromV394(int currVersion, int newVersion)
2896{
f6456d80 2897 CHK_EXEC(SQLQuery(_T("UPDATE config SET need_server_restart='1' WHERE var_name='OfflineDataRelevanceTime'")));
e4926628 2898 CHK_EXEC(SetSchemaVersion(395));
fdef3439
Z
2899 return TRUE;
2900}
2901
7f418694
Z
2902/**
2903 * Upgrade from V393 to V394
2904 */
2905static BOOL H_UpgradeFromV393(int currVersion, int newVersion)
2906{
c0e0623b 2907 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 2908 CHK_EXEC(SetSchemaVersion(394));
7f418694
Z
2909 return TRUE;
2910}
2911
c908b63b
VK
2912/**
2913 * Upgrade from V392 to V393
2914 */
2915static BOOL H_UpgradeFromV392(int currVersion, int newVersion)
2916{
2917 CHK_EXEC(CreateConfigParam(_T("DefaultInterfaceExpectedState"), _T("0"), _T("Default expected state for new interface objects"), 'C', true, false, false, false));
e4926628 2918 CHK_EXEC(SetSchemaVersion(393));
c908b63b
VK
2919 return TRUE;
2920}
2921
2922/**
03b96461
VK
2923 * Upgrade from V391 to V392
2924 */
2925static BOOL H_UpgradeFromV391(int currVersion, int newVersion)
2926{
2927 CHK_EXEC(CreateConfigParam(_T("ImportConfigurationOnStartup"), _T("0"), _T("Import configuration from local files on server startup"), 'B', true, true, false, false));
e4926628 2928 CHK_EXEC(SetSchemaVersion(392));
03b96461
VK
2929 return TRUE;
2930}
2931
c908b63b 2932/**
f61f151c
AK
2933 * Upgrade from V390 to V391
2934 */
2935static BOOL H_UpgradeFromV390(int currVersion, int newVersion)
2936{
03b96461
VK
2937 CHK_EXEC(CreateTable(
2938 _T("CREATE TABLE zmq_subscription (")
2939 _T(" object_id integer not null,")
2940 _T(" subscription_type char(1) not null,")
2941 _T(" ignore_items integer not null,")
2942 _T(" items $SQL:TEXT,")
2943 _T(" PRIMARY KEY(object_id, subscription_type))")));
f61f151c 2944
e4926628 2945 CHK_EXEC(SetSchemaVersion(391));
f61f151c
AK
2946 return TRUE;
2947}
2948
23464115
VK
2949/**
2950 * Upgrade from V389 to V390
2951 */
2952static BOOL H_UpgradeFromV389(int currVersion, int newVersion)
2953{
2954 CHK_EXEC(CreateTable(
2955 _T("CREATE TABLE object_containers (")
2956 _T(" id integer not null,")
2957 _T(" object_class integer not null,")
2958 _T(" flags integer not null,")
2959 _T(" auto_bind_filter $SQL:TEXT null,")
2960 _T(" PRIMARY KEY(id))")));
2961
2962 DB_RESULT hResult = SQLSelect(_T("SELECT id,object_class,flags,auto_bind_filter FROM containers"));
2963 if (hResult != NULL)
2964 {
2965 int count = DBGetNumRows(hResult);
2966 if (count > 0)
2967 {
2968 DB_STATEMENT hStmt = DBPrepare(g_hCoreDB, _T("INSERT INTO object_containers (id,object_class,flags,auto_bind_filter) VALUES (?,?,?,?)"));
2969 if (hStmt != NULL)
2970 {
2971 for(int i = 0; i < count; i++)
2972 {
2973 DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0));
2974 DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, DBGetFieldLong(hResult, i, 1));
2975 DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 2));
2976 DBBind(hStmt, 4, DB_SQLTYPE_TEXT, DBGetField(hResult, i, 3, NULL, 0), DB_BIND_DYNAMIC);
2977 if (!SQLExecute(hStmt))
2978 {
2979 if (!g_bIgnoreErrors)
2980 {
2981 DBFreeStatement(hStmt);
2982 DBFreeResult(hResult);
2983 return FALSE;
2984 }
2985 }
2986 }
2987 DBFreeStatement(hStmt);
2988 }
2989 else if (!g_bIgnoreErrors)
2990 {
2991 DBFreeResult(hResult);
2992 return FALSE;
2993 }
2994 }
2995 DBFreeResult(hResult);
2996 }
2997 else
2998 {
2999 if (!g_bIgnoreErrors)
3000 return FALSE;
3001 }
3002
3003 CHK_EXEC(SQLQuery(_T("DROP TABLE containers")));
3004 CHK_EXEC(SQLQuery(_T("DROP TABLE container_categories")));
e4926628 3005 CHK_EXEC(SetSchemaVersion(390));
23464115
VK
3006 return TRUE;
3007}
3008
b120cd0f
VK
3009/**
3010 * Upgrade from V388 to V389
3011 */
3012static BOOL H_UpgradeFromV388(int currVersion, int newVersion)
3013{
3014 static TCHAR batch[] =
3015 _T("ALTER TABLE racks ADD top_bottom_num char(1)\n")
3016 _T("UPDATE racks SET top_bottom_num='0'\n")
3017 _T("<END>");
3018 CHK_EXEC(SQLBatch(batch));
e4926628 3019 CHK_EXEC(SetSchemaVersion(389));
b120cd0f
VK
3020 return TRUE;
3021}
3022
65ce7452
VK
3023/**
3024 * Upgrade from V387 to V388
3025 */
3026static BOOL H_UpgradeFromV387(int currVersion, int newVersion)
3027{
3028 static TCHAR batch[] =
3029 _T("ALTER TABLE alarms ADD dci_id integer\n")
3030 _T("UPDATE alarms SET dci_id=0\n")
3031 _T("ALTER TABLE event_log ADD dci_id integer\n")
3032 _T("UPDATE event_log SET dci_id=0\n")
3033 _T("<END>");
3034 CHK_EXEC(SQLBatch(batch));
e4926628 3035 CHK_EXEC(SetSchemaVersion(388));
65ce7452
VK
3036 return TRUE;
3037}
3038
53e39123
VK
3039/**
3040 * Upgrade from V386 to V387
3041 */
3042static BOOL H_UpgradeFromV386(int currVersion, int newVersion)
3043{
3044 DB_RESULT hResult = SQLSelect(_T("SELECT id,flags,filter FROM network_maps WHERE filter IS NOT NULL"));
3045 if (hResult != NULL)
3046 {
3047 int count = DBGetNumRows(hResult);
3048 for(int i = 0; i < count; i++)
3049 {
3050 TCHAR *filter = DBGetField(hResult, i, 2, NULL, 0);
3051 if ((filter != NULL) && (filter[0] != 0))
3052 {
3053 TCHAR query[256];
3054 _sntprintf(query, 256, _T("UPDATE network_maps SET flags=%d WHERE id=%d"),
3055 DBGetFieldULong(hResult, i, 1) | MF_FILTER_OBJECTS, DBGetFieldULong(hResult, i, 0));
3056 CHK_EXEC(SQLQuery(query));
3057 }
3058 free(filter);
3059 }
3060 DBFreeResult(hResult);
3061 }
3062 else
3063 {
3064 if (!g_bIgnoreErrors)
3065 return FALSE;
3066 }
e4926628 3067 CHK_EXEC(SetSchemaVersion(387));
53e39123
VK
3068 return TRUE;
3069}
3070
e2a9c5fc
VK
3071/**
3072 * Upgrade from V385 to V386
3073 */
3074static BOOL H_UpgradeFromV385(int currVersion, int newVersion)
3075{
3076 TCHAR query[1024];
3077 int ruleId = NextFreeEPPruleID();
3078
3079 if (!IsEventPairInUse(EVENT_THREAD_HANGS, EVENT_THREAD_RUNNING))
3080 {
3081 _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);
3082 CHK_EXEC(SQLQuery(query));
3083 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_THREAD_HANGS);
3084 CHK_EXEC(SQLQuery(query));
3085 ruleId++;
3086 _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);
3087 CHK_EXEC(SQLQuery(query));
3088 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_THREAD_RUNNING);
3089 CHK_EXEC(SQLQuery(query));
3090 ruleId++;
3091 }
3092
3093 if (!IsEventPairInUse(EVENT_MAINTENANCE_MODE_ENTERED, EVENT_MAINTENANCE_MODE_LEFT))
3094 {
3095 _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);
3096 CHK_EXEC(SQLQuery(query));
3097 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_MAINTENANCE_MODE_ENTERED);
3098 CHK_EXEC(SQLQuery(query));
3099 ruleId++;
3100 _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);
3101 CHK_EXEC(SQLQuery(query));
3102 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_MAINTENANCE_MODE_LEFT);
3103 CHK_EXEC(SQLQuery(query));
3104 ruleId++;
3105 }
3106
3107 if (!IsEventPairInUse(EVENT_AGENT_FAIL, EVENT_AGENT_OK))
3108 {
3109 _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);
3110 CHK_EXEC(SQLQuery(query));
3111 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_AGENT_FAIL);
3112 CHK_EXEC(SQLQuery(query));
3113 ruleId++;
3114 _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);
3115 CHK_EXEC(SQLQuery(query));
3116 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_AGENT_OK);
3117 CHK_EXEC(SQLQuery(query));
3118 ruleId++;
3119 }
3120
3121 if (!IsEventPairInUse(EVENT_SNMP_FAIL, EVENT_SNMP_OK))
3122 {
3123 _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);
3124 CHK_EXEC(SQLQuery(query));
3125 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_SNMP_FAIL);
3126 CHK_EXEC(SQLQuery(query));
3127 ruleId++;
3128 _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);
3129 CHK_EXEC(SQLQuery(query));
3130 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_SNMP_OK);
3131 CHK_EXEC(SQLQuery(query));
3132 ruleId++;
3133 }
3134
3135 CHK_EXEC(SQLQuery(_T("UPDATE event_cfg SET severity='3' WHERE event_code=14 OR event_code=15")));
e4926628 3136 CHK_EXEC(SetSchemaVersion(386));
e2a9c5fc
VK
3137 return TRUE;
3138}
3139
7ac735ef 3140
4e7ebbb4
VK
3141/**
3142 * Upgrade from V384 to V385
3143 */
3144static BOOL H_UpgradeFromV384(int currVersion, int newVersion)
3145{
3146 CHK_EXEC(SQLQuery(_T("UPDATE config SET is_visible=1,need_server_restart=0 WHERE var_name='SNMPPorts'")));
e4926628 3147 CHK_EXEC(SetSchemaVersion(385));
4e7ebbb4
VK
3148 return TRUE;
3149}
3150
aed41472 3151/**
7bae90f4 3152 * Upgrade from V383 to V384
aed41472 3153 */
3154static BOOL H_UpgradeFromV383(int currVersion, int newVersion)
3155{
3156 CHK_EXEC(ConvertStrings(_T("graphs"), _T("graph_id"), _T("config")));
3157 static TCHAR batch[] =
3158 _T("ALTER TABLE graphs ADD flags integer\n")
3159 _T("ALTER TABLE graphs ADD filters $SQL:TEXT\n")
17b6b6a4 3160 _T("UPDATE graphs SET flags=0\n")
aed41472 3161 _T("<END>");
3162 CHK_EXEC(SQLBatch(batch));
e4926628 3163 CHK_EXEC(SetSchemaVersion(384));
aed41472 3164 return TRUE;
3165}
3166
55f6cb79
VK
3167/**
3168 * Upgrade from V382 to V383
3169 */
3170static BOOL H_UpgradeFromV382(int currVersion, int newVersion)
3171{
3172 CHK_EXEC(ResizeColumn(_T("nodes"), _T("primary_ip"), 48, false));
e4926628 3173 CHK_EXEC(SetSchemaVersion(383));
55f6cb79
VK
3174 return TRUE;
3175}
3176
83aa5ebd
VK
3177/**
3178 * Upgrade from V381 to V382
3179 */
3180static BOOL H_UpgradeFromV381(int currVersion, int newVersion)
3181{
7bae90f4
VK
3182 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")));
3183 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")));
3184 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")));
3185 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")));
3186 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")));
3187 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 3188 CHK_EXEC(SetSchemaVersion(382));
83aa5ebd
VK
3189 return TRUE;
3190}
3191
98ef8e4a
VK
3192/**
3193 * Upgrade from V380 to V381
3194 */
3195static BOOL H_UpgradeFromV380(int currVersion, int newVersion)
3196{
3197 static TCHAR batch[] =
3198 _T("ALTER TABLE items ADD guid varchar(36)\n")
3199 _T("ALTER TABLE dc_tables ADD guid varchar(36)\n")
3200 _T("<END>");
3201 CHK_EXEC(SQLBatch(batch));
50963ced
VK
3202 CHK_EXEC(GenerateGUID(_T("items"), _T("item_id"), _T("guid"), NULL));
3203 CHK_EXEC(GenerateGUID(_T("dc_tables"), _T("item_id"), _T("guid"), NULL));
e4926628 3204 CHK_EXEC(SetSchemaVersion(381));
98ef8e4a
VK
3205 return TRUE;
3206}
3207
9b4a2a0e
VK
3208/**