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