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