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