Changed position of button that plays sound.
[public/netxms.git] / src / server / tools / nxdbmgr / upgrade.cpp
CommitLineData
6f33021d 1/*
5039dede 2** nxdbmgr - NetXMS database manager
805171de 3** Copyright (C) 2004-2015 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
4f50e45c
VK
31/**
32 * Create table
33 */
5039dede
AK
34static BOOL CreateTable(const TCHAR *pszQuery)
35{
5039dede 36 BOOL bResult;
7618e362 37 String query(pszQuery);
5039dede 38
2a964810
VK
39 query.replace(_T("$SQL:TEXT"), g_pszSqlType[g_dbSyntax][SQL_TYPE_TEXT]);
40 query.replace(_T("$SQL:TXT4K"), g_pszSqlType[g_dbSyntax][SQL_TYPE_TEXT4K]);
41 query.replace(_T("$SQL:INT64"), g_pszSqlType[g_dbSyntax][SQL_TYPE_INT64]);
42 if (g_dbSyntax == DB_SYNTAX_MYSQL)
7618e362
VK
43 query += g_pszTableSuffix;
44 bResult = SQLQuery(query);
5039dede
AK
45 return bResult;
46}
47
4f50e45c
VK
48/**
49 * Create configuration parameter if it doesn't exist (unless bForceUpdate set to true)
50 */
b3eb058b 51BOOL CreateConfigParam(const TCHAR *pszName, const TCHAR *pszValue, int iVisible, int iNeedRestart, BOOL bForceUpdate)
5039dede 52{
42475f3e 53 TCHAR szQuery[1024];
5039dede
AK
54 DB_RESULT hResult;
55 BOOL bVarExist = FALSE, bResult = TRUE;
56
57 // Check for variable existence
08b214c6 58 _sntprintf(szQuery, 1024, _T("SELECT var_value FROM config WHERE var_name='%s'"), pszName);
5039dede
AK
59 hResult = DBSelect(g_hCoreDB, szQuery);
60 if (hResult != 0)
61 {
62 if (DBGetNumRows(hResult) > 0)
63 bVarExist = TRUE;
64 DBFreeResult(hResult);
65 }
66
67 if (!bVarExist)
68 {
08b214c6 69 _sntprintf(szQuery, 1024, _T("INSERT INTO config (var_name,var_value,is_visible,")
6f33021d 70 _T("need_server_restart) VALUES (%s,%s,%d,%d)"),
71 (const TCHAR *)DBPrepareString(g_hCoreDB, pszName, 63),
42475f3e 72 (const TCHAR *)DBPrepareString(g_hCoreDB, pszValue, 255), iVisible, iNeedRestart);
5039dede
AK
73 bResult = SQLQuery(szQuery);
74 }
75 else if (bForceUpdate)
76 {
42475f3e
VK
77 _sntprintf(szQuery, 1024, _T("UPDATE config SET var_value=%s WHERE var_name=%s"),
78 (const TCHAR *)DBPrepareString(g_hCoreDB, pszValue, 255), (const TCHAR *)DBPrepareString(g_hCoreDB, pszName, 63));
5039dede
AK
79 bResult = SQLQuery(szQuery);
80 }
81 return bResult;
82}
83
4f50e45c
VK
84/**
85 * Set primary key constraint
86 */
5039dede
AK
87static BOOL SetPrimaryKey(const TCHAR *table, const TCHAR *key)
88{
89 TCHAR query[4096];
90
2a964810 91 if (g_dbSyntax == DB_SYNTAX_SQLITE)
5039dede 92 return TRUE; // SQLite does not support adding constraints
6f33021d 93
5039dede
AK
94 _sntprintf(query, 4096, _T("ALTER TABLE %s ADD PRIMARY KEY (%s)"), table, key);
95 return SQLQuery(query);
96}
97
4f50e45c
VK
98/**
99 * Drop primary key from table
100 */
9bfc9a6b
VK
101static BOOL DropPrimaryKey(const TCHAR *table)
102{
103 TCHAR query[1024];
104 DB_RESULT hResult;
105 BOOL success;
106
2a964810 107 switch(g_dbSyntax)
9bfc9a6b
VK
108 {
109 case DB_SYNTAX_ORACLE:
110 case DB_SYNTAX_MYSQL:
111 _sntprintf(query, 1024, _T("ALTER TABLE %s DROP PRIMARY KEY"), table);
112 success = SQLQuery(query);
113 break;
114 case DB_SYNTAX_PGSQL:
115 _sntprintf(query, 1024, _T("ALTER TABLE %s DROP CONSTRAINT %s_pkey"), table, table);
116 success = SQLQuery(query);
117 break;
118 case DB_SYNTAX_MSSQL:
119 success = FALSE;
120 _sntprintf(query, 1024, _T("SELECT name FROM sysobjects WHERE xtype='PK' AND parent_obj=OBJECT_ID('%s')"), table);
121 hResult = SQLSelect(query);
122 if (hResult != NULL)
123 {
124 if (DBGetNumRows(hResult) > 0)
125 {
126 TCHAR objName[512];
127
128 DBGetField(hResult, 0, 0, objName, 512);
129 _sntprintf(query, 1024, _T("ALTER TABLE %s DROP CONSTRAINT %s"), table, objName);
130 success = SQLQuery(query);
131 }
132 DBFreeResult(hResult);
133 }
134 break;
135 default: // Unsupported DB engine
136 success = FALSE;
137 break;
138 }
139 return success;
140}
141
4f50e45c
VK
142/**
143 * Convert strings from # encoded form to normal form
144 */
d6bf58f9 145static BOOL ConvertStrings(const TCHAR *table, const TCHAR *idColumn, const TCHAR *idColumn2, const TCHAR *column, bool isStringId)
643c9dcb
VK
146{
147 DB_RESULT hResult;
148 TCHAR *query;
4e0e77e6 149 size_t queryLen = 512;
643c9dcb
VK
150 BOOL success = FALSE;
151
c29fb885 152 query = (TCHAR *)malloc(queryLen * sizeof(TCHAR));
fe12a1ea 153
2a964810 154 switch(g_dbSyntax)
a4743a0f
VK
155 {
156 case DB_SYNTAX_MSSQL:
9f6712bc 157 _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE CAST(%s AS nvarchar(4000))=N'#00'"), table, column, column);
a4743a0f
VK
158 break;
159 case DB_SYNTAX_ORACLE:
160 _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE to_char(%s)='#00'"), table, column, column);
161 break;
162 default:
163 _sntprintf(query, queryLen, _T("UPDATE %s SET %s='' WHERE %s='#00'"), table, column, column);
164 break;
165 }
fe12a1ea
VK
166 if (!SQLQuery(query))
167 {
168 free(query);
169 return FALSE;
170 }
171
6f33021d 172 _sntprintf(query, queryLen, _T("SELECT %s,%s%s%s FROM %s WHERE %s LIKE '%%#%%'"),
98cd01bb 173 idColumn, column, (idColumn2 != NULL) ? _T(",") : _T(""), (idColumn2 != NULL) ? idColumn2 : _T(""), table, column);
643c9dcb
VK
174 hResult = SQLSelect(query);
175 if (hResult == NULL)
176 {
177 free(query);
178 return FALSE;
179 }
180
181 int count = DBGetNumRows(hResult);
182 for(int i = 0; i < count; i++)
183 {
643c9dcb 184 TCHAR *value = DBGetField(hResult, i, 1, NULL, 0);
035a4d73 185 if (_tcschr(value, _T('#')) != NULL)
643c9dcb 186 {
035a4d73
VK
187 DecodeSQLString(value);
188 String newValue = DBPrepareString(g_hCoreDB, value);
4e0e77e6 189 if (newValue.length() + 256 > queryLen)
035a4d73 190 {
4e0e77e6 191 queryLen = newValue.length() + 256;
c29fb885 192 query = (TCHAR *)realloc(query, queryLen * sizeof(TCHAR));
035a4d73 193 }
d6bf58f9 194 if (isStringId)
98cd01bb 195 {
d6bf58f9
VK
196 TCHAR *id = DBGetField(hResult, i, 0, NULL, 0);
197 if (idColumn2 != NULL)
198 {
199 TCHAR *id2 = DBGetField(hResult, i, 2, NULL, 0);
200 _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=%s AND %s=%s"),
201 table, column, (const TCHAR *)newValue,
6f33021d 202 idColumn, (const TCHAR *)DBPrepareString(g_hCoreDB, id),
d6bf58f9
VK
203 idColumn2, (const TCHAR *)DBPrepareString(g_hCoreDB, id2));
204 }
205 else
206 {
207 _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=%s"), table, column,
208 (const TCHAR *)newValue, idColumn, (const TCHAR *)DBPrepareString(g_hCoreDB, id));
209 }
210 free(id);
98cd01bb
VK
211 }
212 else
213 {
d6bf58f9
VK
214 INT64 id = DBGetFieldInt64(hResult, i, 0);
215 if (idColumn2 != NULL)
216 {
217 INT64 id2 = DBGetFieldInt64(hResult, i, 2);
6f33021d 218 _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=") INT64_FMT _T(" AND %s=") INT64_FMT,
d6bf58f9
VK
219 table, column, (const TCHAR *)newValue, idColumn, id, idColumn2, id2);
220 }
221 else
222 {
223 _sntprintf(query, queryLen, _T("UPDATE %s SET %s=%s WHERE %s=") INT64_FMT, table, column,
224 (const TCHAR *)newValue, idColumn, id);
225 }
98cd01bb 226 }
035a4d73
VK
227 if (!SQLQuery(query))
228 goto cleanup;
643c9dcb 229 }
643c9dcb
VK
230 }
231 success = TRUE;
232
233cleanup:
234 DBFreeResult(hResult);
a4743a0f 235 free(query);
643c9dcb
VK
236 return success;
237}
238
98cd01bb
VK
239static BOOL ConvertStrings(const TCHAR *table, const TCHAR *idColumn, const TCHAR *column)
240{
d6bf58f9 241 return ConvertStrings(table, idColumn, NULL, column, false);
98cd01bb
VK
242}
243
4f50e45c 244/**
70ffb771 245 * Set column nullable (currently only Oracle and PostgreSQL)
4f50e45c 246 */
480e036b 247static BOOL SetColumnNullable(const TCHAR *table, const TCHAR *column)
1024e962
VK
248{
249 TCHAR query[1024] = _T("");
250
2a964810 251 switch(g_dbSyntax)
1024e962
VK
252 {
253 case DB_SYNTAX_ORACLE:
254 _sntprintf(query, 1024, _T("DECLARE already_null EXCEPTION; ")
255 _T("PRAGMA EXCEPTION_INIT(already_null, -1451); ")
f57209fd
VK
256 _T("BEGIN EXECUTE IMMEDIATE 'ALTER TABLE %s MODIFY %s null'; ")
257 _T("EXCEPTION WHEN already_null THEN null; END;"), table, column);
1024e962 258 break;
480e036b
VK
259 case DB_SYNTAX_PGSQL:
260 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s DROP NOT NULL"), table, column);
261 break;
1024e962
VK
262 default:
263 break;
264 }
265
266 return (query[0] != 0) ? SQLQuery(query) : TRUE;
267}
268
480e036b
VK
269/**
270 * Resize varchar column
271 */
b69710b9 272static BOOL ResizeColumn(const TCHAR *table, const TCHAR *column, int newSize, bool nullable)
480e036b
VK
273{
274 TCHAR query[1024];
275
2a964810 276 switch(g_dbSyntax)
480e036b
VK
277 {
278 case DB_SYNTAX_DB2:
279 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s SET DATA TYPE varchar(%d)"), table, column, newSize);
280 break;
281 case DB_SYNTAX_MSSQL:
b69710b9 282 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s varchar(%d) %s NULL"), table, column, newSize, nullable ? _T("") : _T("NOT"));
480e036b
VK
283 break;
284 case DB_SYNTAX_PGSQL:
285 _sntprintf(query, 1024, _T("ALTER TABLE %s ALTER COLUMN %s TYPE varchar(%d)"), table, column, newSize);
286 break;
287 case DB_SYNTAX_SQLITE:
288 /* TODO: add SQLite support */
289 query[0] = 0;
290 break;
291 default:
292 _sntprintf(query, 1024, _T("ALTER TABLE %s MODIFY %s varchar(%d)"), table, column, newSize);
293 break;
294 }
295
296 return (query[0] != 0) ? SQLQuery(query) : TRUE;
297}
298
4f50e45c
VK
299/**
300 * Create new event template
301 */
aa16f82b
VK
302static BOOL CreateEventTemplate(int code, const TCHAR *name, int severity, int flags, const TCHAR *message, const TCHAR *description)
303{
480e036b 304 TCHAR query[4096];
aa16f82b 305
480e036b
VK
306 _sntprintf(query, 4096, _T("INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description) VALUES (%d,'%s',%d,%d,%s,%s)"),
307 code, name, severity, flags, (const TCHAR *)DBPrepareString(g_hCoreDB, message),
308 (const TCHAR *)DBPrepareString(g_hCoreDB, description));
aa16f82b
VK
309 return SQLQuery(query);
310}
311
22aaa779
VK
312/**
313 * Re-create TDATA tables
314 */
2f1bc68b 315static BOOL RecreateTData(const TCHAR *className, bool multipleTables, bool indexFix)
22aaa779 316{
1d4f7890 317 TCHAR query[1024];
22aaa779
VK
318 _sntprintf(query, 256, _T("SELECT id FROM %s"), className);
319 DB_RESULT hResult = SQLSelect(query);
320 if (hResult != NULL)
321 {
322 int count = DBGetNumRows(hResult);
323 for(int i = 0; i < count; i++)
324 {
2f1bc68b 325 bool recreateTables = true;
22aaa779
VK
326 DWORD id = DBGetFieldULong(hResult, i, 0);
327
2f1bc68b 328 if (indexFix)
1d4f7890 329 {
2f1bc68b
VK
330 _sntprintf(query, 256, _T("SELECT count(*) FROM dc_tables WHERE node_id=%d"), id);
331 DB_RESULT hResultCount = SQLSelect(query);
332 if (hResultCount != NULL)
22aaa779 333 {
7d4f8ace 334 recreateTables = (DBGetFieldLong(hResultCount, 0, 0) == 0);
2f1bc68b
VK
335 DBFreeResult(hResultCount);
336 }
337
338 if (!recreateTables)
339 {
a9f5aa55 340 _sntprintf(query, 256, _T("CREATE INDEX idx_tdata_rec_%d_id ON tdata_records_%d(record_id)"), id, id);
2f1bc68b
VK
341 if (!SQLQuery(query))
342 {
343 if (!g_bIgnoreErrors)
344 {
345 DBFreeResult(hResult);
346 return FALSE;
347 }
348 }
22aaa779
VK
349 }
350 }
351
2f1bc68b 352 if (recreateTables)
22aaa779 353 {
2f1bc68b 354 if (multipleTables)
22aaa779 355 {
2f1bc68b
VK
356 _sntprintf(query, 1024, _T("DROP TABLE tdata_rows_%d\nDROP TABLE tdata_records_%d\nDROP TABLE tdata_%d\n<END>"), id, id, id);
357 }
358 else
359 {
360 _sntprintf(query, 256, _T("DROP TABLE tdata_%d\n<END>"), id);
361 }
362 if (!SQLBatch(query))
363 {
364 if (!g_bIgnoreErrors)
365 {
366 DBFreeResult(hResult);
367 return FALSE;
368 }
369 }
370
371 if (!CreateTDataTables(id))
372 {
373 if (!g_bIgnoreErrors)
374 {
375 DBFreeResult(hResult);
376 return FALSE;
377 }
22aaa779
VK
378 }
379 }
380 }
381 DBFreeResult(hResult);
382 }
383 else
384 {
385 if (!g_bIgnoreErrors)
386 return FALSE;
387 }
385b1f20 388 return TRUE;
389}
390
c75e9ee4
VK
391/**
392 * Convert network masks from dotted decimal format to number of bits
393 */
394static BOOL ConvertNetMasks(const TCHAR *table, const TCHAR *column, const TCHAR *idColumn, const TCHAR *idColumn2 = NULL, const TCHAR *condition = NULL)
395{
396 TCHAR query[256];
fcf91b2e 397
c75e9ee4
VK
398 if (idColumn2 != NULL)
399 _sntprintf(query, 256, _T("SELECT %s,%s,%s FROM %s"), idColumn, column, idColumn2, table);
400 else
401 _sntprintf(query, 256, _T("SELECT %s,%s FROM %s"), idColumn, column, table);
402 DB_RESULT hResult = SQLSelect(query);
403 if (hResult == NULL)
404 return FALSE;
405
a19fa589 406 BOOL success = SQLDropColumn(table, column);
fcf91b2e 407
c75e9ee4
VK
408 if (success)
409 {
410 _sntprintf(query, 256, _T("ALTER TABLE %s ADD %s integer"), table, column);
411 success = SQLQuery(query);
412 }
413
414 if (success)
415 {
416 int count = DBGetNumRows(hResult);
417 for(int i = 0; (i < count) && success; i++)
418 {
419 if (idColumn2 != NULL)
420 {
421 TCHAR id2[256];
fcf91b2e 422 _sntprintf(query, 256, _T("UPDATE %s SET %s=%d WHERE %s=%d AND %s='%s'"),
c75e9ee4
VK
423 table, column, BitsInMask(DBGetFieldIPAddr(hResult, i, 1)), idColumn, DBGetFieldLong(hResult, i, 0),
424 idColumn2, DBGetField(hResult, i, 2, id2, 256));
425 }
426 else
427 {
fcf91b2e 428 _sntprintf(query, 256, _T("UPDATE %s SET %s=%d WHERE %s=%d"),
c75e9ee4
VK
429 table, column, BitsInMask(DBGetFieldIPAddr(hResult, i, 1)), idColumn, DBGetFieldLong(hResult, i, 0));
430 }
431 success = SQLQuery(query);
432 }
433 }
434
435 DBFreeResult(hResult);
436 return success;
437}
438
ac58ffe9
VK
439/**
440 * Upgrade from V350 to V351
441 */
442static BOOL H_UpgradeFromV350(int currVersion, int newVersion)
443{
444 static TCHAR batch[] =
445 _T("ALTER TABLE access_points ADD ap_index integer\n")
446 _T("UPDATE access_points SET ap_index=0\n")
447 _T("<END>");
448 CHK_EXEC(SQLBatch(batch));
449
450 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='351' WHERE var_name='SchemaVersion'")));
451 return TRUE;
452}
453
fcf91b2e 454/**
455 * Upgrade from V349 to V350
456 */
457static BOOL H_UpgradeFromV349(int currVersion, int newVersion)
458{
459 switch(g_dbSyntax)
460 {
461 case DB_SYNTAX_ORACLE:
a8a0793d
VK
462 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)")));
463 break;
fcf91b2e 464 case DB_SYNTAX_DB2:
a8a0793d
VK
465 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 <> '')")));
466 break;
96e03924 467 case DB_SYNTAX_MSSQL:
b69710b9 468 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 469 break;
470 case DB_SYNTAX_PGSQL:
a8a0793d 471 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 472 break;
473 case DB_SYNTAX_SQLITE:
a8a0793d 474 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 475 break;
476 case DB_SYNTAX_MYSQL:
a8a0793d 477 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 478 break;
479 default:
96e03924 480 break;
fcf91b2e 481 }
482
3f543e56 483 CHK_EXEC(SQLDropColumn(_T("ap_common"), _T("description")));
fcf91b2e 484 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='350' WHERE var_name='SchemaVersion'")));
485 return TRUE;
486}
487
b06ae508
VK
488/**
489 * Upgrade from V348 to V349
490 */
491static BOOL H_UpgradeFromV348(int currVersion, int newVersion)
492{
493 CHK_EXEC(SQLQuery(_T("DELETE FROM config WHERE var_name='HouseKeepingInterval'")));
494 CHK_EXEC(CreateConfigParam(_T("HousekeeperStartTime"), _T("02:00"), 1, 1));
495 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='349' WHERE var_name='SchemaVersion'")));
496 return TRUE;
497}
498
c30c0c0f
VK
499/**
500 * Upgrade from V347 to V348
501 */
502static BOOL H_UpgradeFromV347(int currVersion, int newVersion)
503{
504 CHK_EXEC(CreateEventTemplate(EVENT_IF_IPADDR_ADDED, _T("SYS_IF_IPADDR_ADDED"), SEVERITY_NORMAL, EF_LOG,
505 _T("IP address %3/%4 added to interface \"%2\""),
506 _T("Generated when IP address added to interface.\r\n")
507 _T("Parameters:\r\n")
508 _T(" 1) Interface object ID\r\n")
509 _T(" 2) Interface name\r\n")
510 _T(" 3) IP address\r\n")
511 _T(" 4) Network mask\r\n")
512 _T(" 5) Interface index")));
513
514 CHK_EXEC(CreateEventTemplate(EVENT_IF_IPADDR_DELETED, _T("SYS_IF_IPADDR_DELETED"), SEVERITY_NORMAL, EF_LOG,
515 _T("IP address %3/%4 deleted from interface \"%2\""),
516 _T("Generated when IP address deleted from interface.\r\n")
517 _T("Parameters:\r\n")
518 _T(" 1) Interface object ID\r\n")
519 _T(" 2) Interface name\r\n")
520 _T(" 3) IP address\r\n")
521 _T(" 4) Network mask\r\n")
522 _T(" 5) Interface index")));
523
524 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='348' WHERE var_name='SchemaVersion'")));
525 return TRUE;
526}
527
528/**
529 * Upgrade from V346 to V347
530 */
531static BOOL H_UpgradeFromV346(int currVersion, int newVersion)
532{
533 CHK_EXEC(CreateTable(
534 _T("CREATE TABLE interface_address_list (")
535 _T(" iface_id integer not null,")
536 _T(" ip_addr varchar(48) not null,")
537 _T(" ip_netmask integer not null,")
538 _T(" PRIMARY KEY(iface_id,ip_addr))")));
539
540 DB_RESULT hResult = SQLSelect(_T("SELECT id,ip_addr,ip_netmask FROM interfaces WHERE ip_addr<>'0.0.0.0'"));
541 if (hResult != NULL)
542 {
543 int count = DBGetNumRows(hResult);
544 for(int i = 0; i < count; i++)
545 {
546 TCHAR query[256], addr[64];
547 _sntprintf(query, 256, _T("INSERT INTO interface_address_list (iface_id,ip_addr,ip_netmask) VALUES (%d,'%s',%d)"),
548 DBGetFieldLong(hResult, i, 0), DBGetField(hResult, i, 1, addr, 64), DBGetFieldLong(hResult, i, 2));
549 CHK_EXEC(SQLQuery(query));
550 }
551 DBFreeResult(hResult);
552 }
553 else
554 {
555 if (!g_bIgnoreErrors)
556 return FALSE;
557 }
558
559 static TCHAR batch[] =
560 _T("ALTER TABLE interfaces DROP COLUMN ip_addr\n")
561 _T("ALTER TABLE interfaces DROP COLUMN ip_netmask\n")
562 _T("<END>");
563 CHK_EXEC(SQLBatch(batch));
564
565 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='347' WHERE var_name='SchemaVersion'")));
566 return TRUE;
567}
568
c75e9ee4
VK
569/**
570 * Upgrade from V345 to V346
571 */
572static BOOL H_UpgradeFromV345(int currVersion, int newVersion)
573{
b69710b9
VK
574 if (g_dbSyntax == DB_SYNTAX_MSSQL)
575 {
576 CHK_EXEC(DropPrimaryKey(_T("cluster_sync_subnets")));
577 CHK_EXEC(DropPrimaryKey(_T("address_lists")));
578 CHK_EXEC(DropPrimaryKey(_T("vpn_connector_networks")));
579 }
580
581 CHK_EXEC(ResizeColumn(_T("cluster_sync_subnets"), _T("subnet_addr"), 48, false));
582 CHK_EXEC(ResizeColumn(_T("cluster_resources"), _T("ip_addr"), 48, false));
583 CHK_EXEC(ResizeColumn(_T("subnets"), _T("ip_addr"), 48, false));
584 CHK_EXEC(ResizeColumn(_T("interfaces"), _T("ip_addr"), 48, false));
585 CHK_EXEC(ResizeColumn(_T("network_services"), _T("ip_bind_addr"), 48, false));
586 CHK_EXEC(ResizeColumn(_T("vpn_connector_networks"), _T("ip_addr"), 48, false));
587 CHK_EXEC(ResizeColumn(_T("snmp_trap_log"), _T("ip_addr"), 48, false));
588 CHK_EXEC(ResizeColumn(_T("address_lists"), _T("addr1"), 48, false));
589 CHK_EXEC(ResizeColumn(_T("address_lists"), _T("addr2"), 48, false));
590 CHK_EXEC(ResizeColumn(_T("nodes"), _T("primary_ip"), 48, false));
c75e9ee4
VK
591
592 CHK_EXEC(ConvertNetMasks(_T("cluster_sync_subnets"), _T("subnet_mask"), _T("cluster_id")));
593 CHK_EXEC(ConvertNetMasks(_T("subnets"), _T("ip_netmask"), _T("id")));
594 CHK_EXEC(ConvertNetMasks(_T("interfaces"), _T("ip_netmask"), _T("id")));
595 CHK_EXEC(ConvertNetMasks(_T("vpn_connector_networks"), _T("ip_netmask"), _T("vpn_id"), _T("ip_addr")));
596
597 DB_RESULT hResult = SQLSelect(_T("SELECT community_id,addr_type,addr1,addr2 FROM address_lists WHERE list_type=0"));
598 if (hResult != NULL)
599 {
600 int count = DBGetNumRows(hResult);
601 if (count > 0)
602 {
603 CHK_EXEC(SQLQuery(_T("DELETE FROM address_lists WHERE list_type=0")));
604
605 for(int i = 0; i < count; i++)
606 {
607 TCHAR query[256], addr[64];
608 _sntprintf(query, 256, _T("INSERT INTO address_lists (list_type,community_id,addr_type,addr1,addr2) VALUES (0,%d,%d,'%s','%d')"),
609 DBGetFieldLong(hResult, i, 0), DBGetFieldLong(hResult, i, 1), DBGetField(hResult, i, 2, addr, 64),
610 BitsInMask(DBGetFieldIPAddr(hResult, i, 3)));
611 CHK_EXEC(SQLQuery(query));
612 }
613 }
614 DBFreeResult(hResult);
615 }
616 else
617 {
618 if (!g_bIgnoreErrors)
619 return FALSE;
620 }
621
b69710b9
VK
622 if (g_dbSyntax == DB_SYNTAX_MSSQL)
623 {
624 CHK_EXEC(SQLQuery(_T("ALTER TABLE cluster_sync_subnets ADD CONSTRAINT pk_cluster_sync_subnets PRIMARY KEY (cluster_id,subnet_addr)")));
625 CHK_EXEC(SQLQuery(_T("ALTER TABLE address_lists ADD CONSTRAINT pk_address_lists PRIMARY KEY (list_type,community_id,addr_type,addr1,addr2)")));
626 CHK_EXEC(SQLQuery(_T("ALTER TABLE vpn_connector_networks ADD CONSTRAINT pk_vpn_connector_networks PRIMARY KEY (vpn_id,ip_addr)")));
627 }
628
c75e9ee4
VK
629 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='346' WHERE var_name='SchemaVersion'")));
630 return TRUE;
631}
632
805171de
VK
633/**
634 * Upgrade from V344 to V345
635 */
636static BOOL H_UpgradeFromV344(int currVersion, int newVersion)
637{
638 CHK_EXEC(CreateConfigParam(_T("NumberOfInstancePollers"), _T("10"), 1, 1));
639 CHK_EXEC(CreateConfigParam(_T("InstancePollingInterval"), _T("600"), 1, 1));
640 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='345' WHERE var_name='SchemaVersion'")));
641 return TRUE;
642}
643
e95680e5
VK
644/**
645 * Upgrade from V343 to V344
646 */
647static BOOL H_UpgradeFromV343(int currVersion, int newVersion)
648{
c30c0c0f 649 static TCHAR batch[] =
e95680e5
VK
650 _T("ALTER TABLE interfaces ADD mtu integer\n")
651 _T("ALTER TABLE interfaces ADD alias varchar(255)\n")
652 _T("UPDATE interfaces SET mtu=0\n")
653 _T("<END>");
654 CHK_EXEC(SQLBatch(batch));
655 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='344' WHERE var_name='SchemaVersion'")));
656 return TRUE;
657}
658
d140955e
VK
659/**
660 * Upgrade from V342 to V343
661 */
662static BOOL H_UpgradeFromV342(int currVersion, int newVersion)
663{
664 if (g_dbSyntax != DB_SYNTAX_MSSQL)
665 {
666 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 667 CHK_EXEC(DBCommit(g_hCoreDB)); // do reindexing outside current transaction
d140955e 668 ReindexIData();
5096f5a5 669 CHK_EXEC(DBBegin(g_hCoreDB));
d140955e
VK
670 }
671 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='343' WHERE var_name='SchemaVersion'")));
672 return TRUE;
673}
674
4b70cb26 675/**
676 * Upgrade from V341 to V342
677 */
678static BOOL H_UpgradeFromV341(int currVersion, int newVersion)
679{
d140955e 680 CHK_EXEC(SQLQuery(_T("ALTER TABLE object_tools ADD tool_filter $SQL:TEXT")));
4b70cb26 681 DB_RESULT hResult = SQLSelect(_T("SELECT tool_id, matching_oid FROM object_tools"));
682 if (hResult != NULL)
683 {
684 int count = DBGetNumRows(hResult);
685 for(int i = 0; i < count; i++)
686 {
687 TCHAR *oid = DBGetField(hResult, i, 1, NULL, 0);
688 if (oid == NULL || !_tcscmp(oid, _T(" ")))
689 {
690 oid = _tcsdup(_T(""));
691 }
692 else
693 {
694 TCHAR *newConfig = (TCHAR *)malloc((_tcslen(oid) + 512) * sizeof(TCHAR));
695 _tcscpy(newConfig, _T("<objectToolFilter>"));
696 _tcscat(newConfig, _T("<snmpOid>"));
697 _tcscat(newConfig, oid);
698 _tcscat(newConfig, _T("</snmpOid>"));
699 _tcscat(newConfig, _T("</objectToolFilter>"));
700
701 DB_STATEMENT statment = DBPrepare(g_hCoreDB, _T("UPDATE object_tools SET tool_filter=? WHERE tool_id=?"));
702 if (statment != NULL)
703 {
704 DBBind(statment, 1, DB_SQLTYPE_TEXT, newConfig, DB_BIND_STATIC);
705 DBBind(statment, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0));
706 CHK_EXEC(DBExecute(statment));
707 DBFreeStatement(statment);
708 }
709 else
710 {
711 if (!g_bIgnoreErrors)
712 return FALSE;
713 }
714 }
715 }
716 }
a19fa589 717 CHK_EXEC(SQLDropColumn(_T("object_tools"), _T("matching_oid"))); //delete old column
4b70cb26 718 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='342' WHERE var_name='SchemaVersion'")));
719 return TRUE;
720}
721
56fa1092
VK
722/**
723 * Upgrade from V340 to V341
724 */
725static BOOL H_UpgradeFromV340(int currVersion, int newVersion)
726{
727 static TCHAR batch[] =
728 _T("ALTER TABLE object_properties ADD country varchar(63)\n")
729 _T("ALTER TABLE object_properties ADD city varchar(63)\n")
730 _T("ALTER TABLE object_properties ADD street_address varchar(255)\n")
731 _T("ALTER TABLE object_properties ADD postcode varchar(31)\n")
732 _T("<END>");
733 CHK_EXEC(SQLBatch(batch));
734 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='341' WHERE var_name='SchemaVersion'")));
735 return TRUE;
736}
737
b00236dd 738/**
739 * Upgrade from V339 to V340
740 */
741static BOOL H_UpgradeFromV339(int currVersion, int newVersion)
742{
743 CHK_EXEC(CreateConfigParam(_T("LdapPageSize"), _T("1000"), 1, 0));
744 CHK_EXEC(SQLQuery(_T("UPDATE config SET var_value='1' WHERE var_name='LdapUserDeleteAction'")));
745 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='340' WHERE var_name='SchemaVersion'")));
746 return TRUE;
747}
748
815638fe
VK
749/**
750 * Upgrade from V338 to V339
751 */
752static BOOL H_UpgradeFromV338(int currVersion, int newVersion)
753{
754 CHK_EXEC(CreateConfigParam(_T("EscapeLocalCommands"), _T("0"), 1, 0));
755 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='339' WHERE var_name='SchemaVersion'")));
756 return TRUE;
757}
758
9208c84b
VK
759/**
760 * Upgrade from V337 to V338
761 */
762static BOOL H_UpgradeFromV337(int currVersion, int newVersion)
763{
764 static TCHAR batch[] =
765 _T("ALTER TABLE nodes ADD icmp_proxy integer\n")
766 _T("UPDATE nodes SET icmp_proxy=0\n")
767 _T("<END>");
768 CHK_EXEC(SQLBatch(batch));
769 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='338' WHERE var_name='SchemaVersion'")));
770 return TRUE;
771}
772
d368074d
VK
773/**
774 * Upgrade from V336 to V337
775 */
776static BOOL H_UpgradeFromV336(int currVersion, int newVersion)
777{
778 CHK_EXEC(CreateConfigParam(_T("SyslogNodeMatchingPolicy"), _T("0"), 1, 1));
779 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='337' WHERE var_name='SchemaVersion'")));
780 return TRUE;
781}
782
2b01f47c 783/**
784 * Upgrade from V335 to V336
785 */
786static BOOL H_UpgradeFromV335(int currVersion, int newVersion)
787{
b69710b9
VK
788 CHK_EXEC(ResizeColumn(_T("network_map_links"), _T("connector_name1"), 255, true));
789 CHK_EXEC(ResizeColumn(_T("network_map_links"), _T("connector_name2"), 255, true));
2b01f47c 790 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='336' WHERE var_name='SchemaVersion'")));
791 return TRUE;
792}
793
b30bb1bc 794/**
795 * Upgrade from V334 to V335
796 */
797static BOOL H_UpgradeFromV334(int currVersion, int newVersion)
798{
17b15353
VK
799 CHK_EXEC(CreateEventTemplate(EVENT_IF_MASK_CHANGED, _T("SYS_IF_MASK_CHANGED"), SEVERITY_NORMAL, EF_LOG,
800 _T("Interface \"%2\" changed mask from %6 to %4 (IP Addr: %3/%4, IfIndex: %5)"),
801 _T("Generated when when network mask on interface is changed.\r\n")
802 _T("Parameters:\r\n")
803 _T(" 1) Interface object ID\r\n")
804 _T(" 2) Interface name\r\n")
805 _T(" 3) IP address\r\n")
806 _T(" 4) New network mask\r\n")
807 _T(" 5) Interface index\r\n")
808 _T(" 6) Old network mask")));
b30bb1bc 809 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='335' WHERE var_name='SchemaVersion'")));
810 return TRUE;
811}
812
39e60274
AK
813/**
814 * Upgrade from V333 to V334
815 */
816static BOOL H_UpgradeFromV333(int currVersion, int newVersion)
817{
818 CHK_EXEC(SetColumnNullable(_T("user_groups"), _T("description")));
819 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='334' WHERE var_name='SchemaVersion'")));
820 return TRUE;
821}
822
4899db4d 823/**
824 * Upgrade from V332 to V333
825 */
826static BOOL H_UpgradeFromV332(int currVersion, int newVersion)
827{
828 static TCHAR batch[] =
829 _T("INSERT INTO metadata (var_name,var_value)")
830 _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")
831 _T("<END>");
832 CHK_EXEC(SQLBatch(batch));
833 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='333' WHERE var_name='SchemaVersion'")));
834 return TRUE;
835}
836
a6312bd6
VK
837/**
838 * Upgrade from V331 to V332
839 */
840static BOOL H_UpgradeFromV331(int currVersion, int newVersion)
841{
842 CHK_EXEC(SQLQuery(_T("UPDATE items SET instd_data=instance WHERE node_id=template_id AND instd_method=0")));
843 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='332' WHERE var_name='SchemaVersion'")));
844 return TRUE;
845}
846
2a964810
VK
847/**
848 * Upgrade from V330 to V331
849 */
850static BOOL H_UpgradeFromV330(int currVersion, int newVersion)
851{
852 if (g_dbSyntax == DB_SYNTAX_ORACLE)
853 {
854 CHK_EXEC(SQLQuery(_T("ALTER TABLE audit_log ADD session_id integer DEFAULT 0 NOT NULL")));
855 }
856 else
857 {
858 CHK_EXEC(SQLQuery(_T("ALTER TABLE audit_log ADD session_id integer NOT NULL DEFAULT 0")));
859 }
860 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='331' WHERE var_name='SchemaVersion'")));
861 return TRUE;
862}
863
b66098ac
VK
864/**
865 * Upgrade from V329 to V330
866 */
867static BOOL H_UpgradeFromV329(int currVersion, int newVersion)
868{
869 CHK_EXEC(CreateConfigParam(_T("AlarmListDisplayLimit"), _T("4096"), 1, 0));
870 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='330' WHERE var_name='SchemaVersion'")));
871 return TRUE;
872}
873
4016c0df 874/**
875 * Upgrade from V328 to V329
876 */
877static BOOL H_UpgradeFromV328(int currVersion, int newVersion)
878{
b6005694
VK
879 CHK_EXEC(SQLQuery(_T("ALTER TABLE items ADD comments $SQL:TEXT")));
880 CHK_EXEC(SQLQuery(_T("ALTER TABLE dc_tables ADD comments $SQL:TEXT")));
4016c0df 881 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='329' WHERE var_name='SchemaVersion'")));
882 return TRUE;
883}
884
385b1f20 885/**
886 * Upgrade from V327 to V328
887 */
888static BOOL H_UpgradeFromV327(int currVersion, int newVersion)
889{
d368074d 890 CHK_EXEC(CreateConfigParam(_T("ResolveDNSToIPOnStatusPoll"), _T("0"), 1, 1));
385b1f20 891 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='328' WHERE var_name='SchemaVersion'")));
892 return TRUE;
893}
173c189d
VK
894
895/**
896 * Upgrade from V326 to V327
897 */
898static BOOL H_UpgradeFromV326(int currVersion, int newVersion)
899{
3fa5e14a
VK
900 CHK_EXEC(DropPrimaryKey(_T("network_map_links")));
901 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_network_map_links_map_id ON network_map_links(map_id)")));
173c189d 902 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='327' WHERE var_name='SchemaVersion'")));
22aaa779
VK
903 return TRUE;
904}
905
ade20a86 906/**
907 * Upgrade from V325 to V326
908 */
909static BOOL H_UpgradeFromV325(int currVersion, int newVersion)
910{
ade20a86 911 static TCHAR batch[] =
912 _T("ALTER TABLE network_map_links DROP COLUMN color\n")
913 _T("ALTER TABLE network_map_links DROP COLUMN status_object\n")
914 _T("ALTER TABLE network_map_links DROP COLUMN routing\n")
915 _T("ALTER TABLE network_map_links DROP COLUMN bend_points\n")
916 _T("<END>");
917 CHK_EXEC(SQLBatch(batch));
918
919 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='326' WHERE var_name='SchemaVersion'")));
920 return TRUE;
921}
922
923/**
924 * Upgrade from V324 to V325
925 */
926static BOOL H_UpgradeFromV324(int currVersion, int newVersion)
927{
928 //move map link configuration to xml
929
930 DB_RESULT hResult = SQLSelect(_T("SELECT map_id, element1, element2, element_data, color, status_object, routing, bend_points FROM network_map_links"));
931 if (hResult != NULL)
932 {
933 int count = DBGetNumRows(hResult);
934 for(int i = 0; i < count; i++)
935 {
c55ab1c2
VK
936 TCHAR *config = DBGetField(hResult, i, 3, NULL, 0);
937 if (config == NULL)
938 config = _tcsdup(_T(""));
ade20a86 939 UINT32 color = DBGetFieldULong(hResult, i, 4);
940 UINT32 statusObject = DBGetFieldULong(hResult, i, 5);
941 UINT32 routing = DBGetFieldULong(hResult, i, 6);
942 TCHAR bendPoints[1024];
943 DBGetField(hResult, i, 7, bendPoints, 1024);
944
c55ab1c2 945 TCHAR *newConfig = (TCHAR *)malloc((_tcslen(config) + 4096) * sizeof(TCHAR));
ade20a86 946 _tcscpy(newConfig, _T("<config>"));
947 TCHAR* c1 = _tcsstr(config, _T("<dciList"));
948 TCHAR* c2 = _tcsstr(config, _T("</dciList>"));
949 if(c1 != NULL && c2!= NULL)
950 {
951 *c2 = 0;
952 _tcscat(newConfig, c1);
953 _tcscat(newConfig, _T("</dciList>"));
954 }
955
956 TCHAR tmp[2048];
957 _sntprintf(tmp, 2048, _T("<color>%d</color>"), color),
958 _tcscat(newConfig, tmp);
959
c55ab1c2 960 if (statusObject != 0)
ade20a86 961 {
962 _sntprintf(tmp, 2048, _T("<objectStatusList length=\"1\"><long>%d</long></objectStatusList>"), statusObject);
963 _tcscat(newConfig, tmp);
964 }
965
966 _sntprintf(tmp, 2048, _T("<routing>%d</routing>"), routing);
967 _tcscat(newConfig, tmp);
968
c55ab1c2 969 if (routing == 3 && bendPoints[0] != 0)
ade20a86 970 {
971 count = 1;
30b86580 972 for(size_t j = 0; j < _tcslen(bendPoints); j++)
ade20a86 973 {
c55ab1c2 974 if (bendPoints[j] == _T(','))
ade20a86 975 count++;
976 }
977 _sntprintf(tmp, 2048, _T("<bendPoints length=\"%d\">%s</bendPoints>"), count, bendPoints);
978 _tcscat(newConfig, tmp);
979 }
980 _tcscat(newConfig, _T("</config>"));
981
982 safe_free(config);
983 DB_STATEMENT statment = DBPrepare(g_hCoreDB, _T("UPDATE network_map_links SET element_data=? WHERE map_id=? AND element1=? AND element2=?"));
e196e5d8
VK
984 if (statment != NULL)
985 {
986 DBBind(statment, 1, DB_SQLTYPE_TEXT, newConfig, DB_BIND_STATIC);
987 DBBind(statment, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0));
988 DBBind(statment, 3, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 1));
989 DBBind(statment, 4, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 2));
990 CHK_EXEC(DBExecute(statment));
991 DBFreeStatement(statment);
992 }
993 else
994 {
995 if (!g_bIgnoreErrors)
996 return FALSE;
997 }
081bba09 998 safe_free(newConfig);
ade20a86 999 }
1000 DBFreeResult(hResult);
1001 }
1002
1003 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='325' WHERE var_name='SchemaVersion'")));
1004 return TRUE;
1005}
1006
2f1bc68b
VK
1007/**
1008 * Upgrade from V323 to V324
1009 */
1010static BOOL H_UpgradeFromV323(int currVersion, int newVersion)
1011{
a9f5aa55 1012 if (!MetaDataReadInt(_T("ValidTDataIndex"), 0)) // check if schema is already correct
2f1bc68b
VK
1013 {
1014 TCHAR query[1024];
ade20a86 1015 _sntprintf(query, 1024,
66717659 1016 _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 1017 g_pszSqlType[g_dbSyntax][SQL_TYPE_INT64], g_pszSqlType[g_dbSyntax][SQL_TYPE_INT64]);
2f1bc68b
VK
1018 CHK_EXEC(SQLQuery(query));
1019
1020 RecreateTData(_T("nodes"), true, true);
1021 RecreateTData(_T("clusters"), true, true);
1022 RecreateTData(_T("mobile_devices"), true, true);
1023 }
1024
a9f5aa55 1025 CHK_EXEC(SQLQuery(_T("DELETE FROM metadata WHERE var_name='ValidTDataIndex'")));
2f1bc68b
VK
1026 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='324' WHERE var_name='SchemaVersion'")));
1027 return TRUE;
1028}
1029
c8076b19
VK
1030/**
1031 * Upgrade from V322 to V323
1032 */
1033static BOOL H_UpgradeFromV322(int currVersion, int newVersion)
1034{
1035 CHK_EXEC(CreateConfigParam(_T("ProcessTrapsFromUnmanagedNodes"), _T("0"), 1, 1));
1036 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='323' WHERE var_name='SchemaVersion'")));
1037 return TRUE;
1038}
1039
f4d8fe18 1040/**
1041 * Upgrade from V321 to V322
1042 */
1043static BOOL H_UpgradeFromV321(int currVersion, int newVersion)
1044{
2a964810 1045 switch(g_dbSyntax)
f4d8fe18 1046 {
1047 case DB_SYNTAX_DB2:
87104c6a
VK
1048 CHK_EXEC(SQLBatch(
1049 _T("ALTER TABLE users ALTER COLUMN system_access SET DATA TYPE $SQL:INT64\n")
1050 _T("ALTER TABLE user_groups ALTER COLUMN system_access SET DATA TYPE $SQL:INT64\n")
1051 _T("<END>")));
f4d8fe18 1052 break;
1053 case DB_SYNTAX_MSSQL:
87104c6a
VK
1054 CHK_EXEC(SQLBatch(
1055 _T("ALTER TABLE users ALTER COLUMN system_access $SQL:INT64\n")
1056 _T("ALTER TABLE user_groups ALTER COLUMN system_access $SQL:INT64\n")
1057 _T("<END>")));
f4d8fe18 1058 break;
1059 case DB_SYNTAX_PGSQL:
87104c6a 1060 CHK_EXEC(SQLBatch(
d27fb10d
VK
1061 _T("ALTER TABLE users ALTER COLUMN system_access TYPE $SQL:INT64\n")
1062 _T("ALTER TABLE user_groups ALTER COLUMN system_access TYPE $SQL:INT64\n")
87104c6a 1063 _T("<END>")));
f4d8fe18 1064 break;
1065 case DB_SYNTAX_SQLITE:
87104c6a
VK
1066 CHK_EXEC(SQLBatch(
1067 _T("CREATE TABLE temp_users AS SELECT * FROM users\n")
1068 _T("DROP TABLE users\n")
1069 _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,")
1070 _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,")
1071 _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,")
1072 _T(" xmpp_id varchar(127) null, ldap_dn $SQL:TEXT null, PRIMARY KEY(id))\n")
1073 _T("INSERT INTO users SELECT * FROM temp_users\n")
1074 _T("DROP TABLE temp_users\n")
1075 _T("CREATE TABLE temp_user_groups AS SELECT * FROM user_groups\n")
1076 _T("DROP TABLE user_groups\n")
1077 _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,")
1078 _T(" description varchar(255) not null, ldap_dn $SQL:TEXT null, PRIMARY KEY(id))\n")
1079 _T("INSERT INTO user_groups SELECT * FROM temp_user_groups\n")
1080 _T("DROP TABLE temp_user_groups\n")
1081 _T("<END>")));
f4d8fe18 1082 break;
52162395
VK
1083 case DB_SYNTAX_ORACLE:
1084 // no changes needed
1085 break;
f4d8fe18 1086 default:
87104c6a
VK
1087 CHK_EXEC(SQLBatch(
1088 _T("ALTER TABLE users MODIFY system_access $SQL:INT64\n")
1089 _T("ALTER TABLE user_groups MODIFY system_access $SQL:INT64\n")
1090 _T("<END>")));
f4d8fe18 1091 break;
1092 }
1093
1094 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='322' WHERE var_name='SchemaVersion'")));
1095 return TRUE;
1096}
1097
1098/**
d4ce93a2
VK
1099 * Upgrade from V320 to V321
1100 */
1101static BOOL H_UpgradeFromV320(int currVersion, int newVersion)
1102{
1103 static TCHAR batch[] =
1104 _T("ALTER TABLE object_tools ADD command_short_name varchar(31)\n")
1105 _T("UPDATE object_tools SET command_short_name='Shutdown' WHERE tool_id=1\n")
1106 _T("UPDATE object_tools SET command_short_name='Restart' WHERE tool_id=2\n")
1107 _T("UPDATE object_tools SET command_short_name='Wakeup' WHERE tool_id=3\n")
1108 _T("<END>");
1109 CHK_EXEC(SQLBatch(batch));
1110 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='321' WHERE var_name='SchemaVersion'")));
1111 return TRUE;
1112}
1113
ac14e3e6 1114/**
d4ce93a2 1115 * Upgrade from V319 to V320
d9177dd1 1116 */
1117static BOOL H_UpgradeFromV319(int currVersion, int newVersion)
1118{
6c352bb5 1119 CHK_EXEC(CreateConfigParam(_T("LdapConnectionString"), _T("ldap://localhost:389"), 1, 0));
d9177dd1 1120 CHK_EXEC(CreateConfigParam(_T("LdapSyncUser"), _T(""), 1, 0));
1121 CHK_EXEC(CreateConfigParam(_T("LdapSyncUserPassword"), _T(""), 1, 0));
1122 CHK_EXEC(CreateConfigParam(_T("LdapSearchBase"), _T(""), 1, 0));
1123 CHK_EXEC(CreateConfigParam(_T("LdapSearchFilter"), _T(""), 1, 0));
1124 CHK_EXEC(CreateConfigParam(_T("LdapUserDeleteAction"), _T("1"), 1, 0));
2575f149 1125 CHK_EXEC(CreateConfigParam(_T("LdapMappingName"), _T("uid"), 1, 0));
d9177dd1 1126 CHK_EXEC(CreateConfigParam(_T("LdapMappingFullName"), _T("displayName"), 1, 0));
2575f149 1127 CHK_EXEC(CreateConfigParam(_T("LdapMappingDescription"), _T(""), 1, 0));
d9177dd1 1128 CHK_EXEC(CreateConfigParam(_T("LdapGroupClass"), _T(""), 1, 0));
1129 CHK_EXEC(CreateConfigParam(_T("LdapUserClass"), _T(""), 1, 0));
1130 CHK_EXEC(CreateConfigParam(_T("LdapSyncInterval"), _T("0"), 1, 0));
1131
1132 static TCHAR batch[] =
1133 _T("ALTER TABLE users ADD ldap_dn $SQL:TEXT\n")
1134 _T("ALTER TABLE user_groups ADD ldap_dn $SQL:TEXT\n")
1135 _T("<END>");
1136 CHK_EXEC(SQLBatch(batch));
1137
1138 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='320' WHERE var_name='SchemaVersion'")));
1139 return TRUE;
1140}
d4ce93a2 1141
d9177dd1 1142/*
ac14e3e6
VK
1143 * Upgrade from V318 to V319
1144 */
1145static BOOL H_UpgradeFromV318(int currVersion, int newVersion)
1146{
1147 static TCHAR batch[] =
1148 _T("ALTER TABLE object_tools ADD icon $SQL:TEXT\n")
1149 _T("ALTER TABLE object_tools ADD command_name varchar(255)\n")
1150 _T("UPDATE object_tools SET flags=74,command_name='Shutdown system',icon='89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000473424954080808087c086488000002bf49444154388d95933f689c7518c73fbf3f7779efaede995c137369d54123ba4843070b1204c10ed24db182939b90c1c1e2eee05871e8d0d2b98a8ba0c52ee2d0cb622acd99222dd1084d9a18cd3597f7bd6bdebbdffbfbe7701d82e8e0071ebec303dfe7e1e1fb883fea7542aba54c080dac153c261ed1a30540b51a8f359bd9c9e565afedd4943ab6b4f4d56873f38d5014ff6af04f95950aaad5fa7e7d7dfdbcee1d1c3cd95d59395b5a5c7c82ffc1fd4ee7acc9f349fd683090b1db15499ae2013b3f8f1c0e296f6f539c380140796707333747a856296d6ca081d1e1a138cc73a95d8cc28f468834459f3ecd7367cee0b38ccd7bf7787e711180dfaf5ee599850544a3c1760898d5556c51e06314d2c5288be150186b995d58404bc9eef5ebb87e86140229257690b17be33b4a4a3173ea14236b71d60a17a3901684b59652b34952ab31dcda6470f76794c9b0b6c0160665320eefae317ab04552ad529e9ec6c78003292dc861bf2f4408e369fb7b948a8cb2cd7085c115868998936887eb75514a617a3db66eb68505211d30f86b97dde536420844a341b17e8bf8db0a21ed12d23ddcda0ff46f7e4dac24482939b8b386b3060f4207206a457afb16be9f519f7f91f22baf52f9e91bfca7ef00829a4fb1af9fa3fed2cbf8419f6c75054a0a0fc800a025f151cafdcb17514af3ecc79f939fbf40d69c259d9ca1ffd687cc7d7411a5145b573e230e52d0120f68ffd8400ad8b97685c9934f31f9ee07b4de5e227ff37d8c311c4f12aad50afb5f5c62e7da65a400519204408f37108408de471e5cfa04fbe3b74c9d7b8ff2d32f1042805f7e25bdf1257fdeee103c8408528d53afa356c85a42b107d6812920bdd3c16f7448cae3d81a0b837cdc2b1c380f724203445d8ff161767cb66df1afe5380a0d3d05ca8d0f148110c02bb035b013109b1a17747b06baa20d3c84897dc93420feeb0b8f22203603dd19307f037f0665861328b32e0000000049454e44ae426082' WHERE tool_id=1\n")
1151 _T("UPDATE object_tools SET flags=74,command_name='Restart system',icon='89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000473424954080808087c0864880000029849444154388d85934d8b1c5514869f73eeadaaae6ea77bda388999882241fc5c0e09ae4484c4857b4177fa0b5474256edcfa075cbacbc23f6074a12332a0a2200a2189e8c468a23d93e99e9eaeaaae7beb1e1733f9902c7ce06c0ebc2f2fe7f0ca5fe311fdd71e77d93332922e08b749dcc5fe3bc9f72d5d1fcf861f7dd6f9f295353778ebdd0b71ff977374ad60f7888e1003bbb3379ceb930f4e7fbe7be5a7573da7f65697db17cf2ff2e757fe6e06a00e1141040aab59ebb5dc47076efbdb739cacc63edc9aabee4f64796248efb10dbcf738e750556268e97eff14b937ce6d1607126e55eae33c4956d5f4f72f21ae40d6cfe0bc4755c9f39cd4ccc0d27d7a695ae23c896fe7a645d5482c26340f0d19e639beb9811463c85788610a29c1d11d4284cc416a82848589861a49754bab390fac3f4ba69174f963ba7040d745249f4136033f63efd859769f78933a792c244265ea436d9a9a99e86895bc28b0e90fc03632bd88e463acb787580696f3e0fa299ade09e275a5feed2b09b5898f4ba35bdc40bb6b0034f5357cda4277bec354400d0b0d5d75406a5e42caa751d90596c425e22d00aa48771933a3c99e6230a8d1b241dcd1eb03a4a2c4563600f07615bc622da80510149aefa1b982ef3dc24d7d071b7afc71f0c781d58c83d107e48347d1f62a1a7f44f4d0c0130c4c4196d89fefa1273f215f7d9d4b379fa4dfdf22cb32bc7f99b5f533c45893edbc4fe75a8c0116c05b008b408434fd9a327f031b7d08c73670ee2c65595296259afe20fbe76de2fc9ba39e1cd6c6a7e4b0ae87d5200a4cbea4acce3318bd8865cfe1a283dd9fe9a65f901615a982d400c96360be9eda4ebbfdf0a6ec752f741ac11f1a89db02d9ba5bc8d483ae877587e2f0abdfac2b26b209488fa218b07627d7ff636dc524d52cff0513e53f37235ac3190000000049454e44ae426082' WHERE tool_id=2\n")
1152 _T("UPDATE object_tools SET flags=64,command_name='Wakeup node using Wake-On-LAN',icon='89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000473424954080808087c086488000000097048597300000dd700000dd70142289b780000001974455874536f667477617265007777772e696e6b73636170652e6f72679bee3c1a0000023649444154388d8d924f48545114c67ff7bd37ff7cf9071bc70a4d47271ca15c848d448185b40a89204890362d8568eb2270d7a2762d5cb7711504d1ae10c195218895a488528e4e06a653d338de7bdfbcf75ac84ce38c901f9ccdb9e7fbce39f77c627ce6872df6dd71f01f781e1d9c00866003215efaf99de7d6763afb1078721262053a800908ed5a5aa9b1e3bb0802a600c0717d3cdf3fae6cccd24a25abb302a80b990c265a009859d941299763249296d6b2a6732468d25a1f24156f00e0cbd62e9b5a71a0dd9a490cad14a570b4266c780cf546797cab1b1317139747435ddcec69266c78385a53c9b1b45265b548d022d51563f45a9c778b69ce35850058de928c0cb4933fd04c7ffece812e9639e5158480865098ebc9181fbfeef07a6e9dc68805c0af8243f45480ab174e33bb9426e7484a9b942710020c3b40e24c236f3facb1bd9b634d3a00d8e100ab992cb7af7421bc225aa9b280a195a414524972054d5f679488e5a394442949d8f4b8d4d14caea09115f55a490cad155a2b9452ecfdcef37e619ddef6287706ba89c76ce2319be1fe4e926d51663e6d90cdeda3d42147ebaa4fcc161da6a61739df52cfe88d8b0ca712f8be871d0e31bb94666a7a916c2e8feb7aff3cd33ef2f4c8612dd3a0a5d1a6bfa78d544f1bbeef33bf9a617e65939fb902c50a328068bd3bb10c1c71a3210401cb24143cbc82d2459c62ad8980154b2b3909bca87e91c09fea642d26ad67f7fb32afe6bebd5958dd1c2c48ddf45f8a10d87591bdcb89b3b3f7063a337f01f30f1c1c580292640000000049454e44ae426082' WHERE tool_id=3\n")
1153 _T("<END>");
1154 CHK_EXEC(SQLBatch(batch));
1155 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='319' WHERE var_name='SchemaVersion'")));
1156 return TRUE;
1157}
1158
56d5289b
VK
1159/**
1160 * Upgrade from V317 to V318
1161 */
1162static BOOL H_UpgradeFromV317(int currVersion, int newVersion)
1163{
1164 CHK_EXEC(CreateEventTemplate(EVENT_AP_DOWN, _T("SYS_AP_DOWN"), SEVERITY_CRITICAL, EF_LOG,
1165 _T("Access point %2 changed state to DOWN"),
1166 _T("Generated when access point state changes to DOWN.\r\n")
1167 _T("Parameters:\r\n")
1168 _T(" 1) Access point object ID\r\n")
1169 _T(" 2) Access point name\r\n")
1170 _T(" 3) Access point MAC address\r\n")
1171 _T(" 4) Access point IP address\r\n")
1172 _T(" 5) Access point vendor name\r\n")
1173 _T(" 6) Access point model\r\n")
1174 _T(" 7) Access point serial number")));
1175
1176 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='318' WHERE var_name='SchemaVersion'")));
1177 return TRUE;
1178}
1179
8deadd79
VK
1180/**
1181 * Upgrade from V316 to V317
1182 */
1183static BOOL H_UpgradeFromV316(int currVersion, int newVersion)
1184{
1185 CHK_EXEC(CreateConfigParam(_T("MinViewRefreshInterval"), _T("1000"), 1, 0));
1186 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='317' WHERE var_name='SchemaVersion'")));
1187 return TRUE;
1188}
1189
23ed00c4
VK
1190/**
1191 * Upgrade from V315 to V316
1192 */
1193static BOOL H_UpgradeFromV315(int currVersion, int newVersion)
1194{
1195 static TCHAR batch[] =
1196 _T("ALTER TABLE access_points ADD ap_state integer\n")
1197 _T("UPDATE access_points SET ap_state=0\n")
1198 _T("<END>");
1199 CHK_EXEC(SQLBatch(batch));
1200
1201 CHK_EXEC(CreateEventTemplate(EVENT_AP_ADOPTED, _T("SYS_AP_ADOPTED"), SEVERITY_NORMAL, EF_LOG,
1202 _T("Access point %2 changed state to ADOPTED"),
1203 _T("Generated when access point state changes to ADOPTED.\r\n")
1204 _T("Parameters:\r\n")
1205 _T(" 1) Access point object ID\r\n")
1206 _T(" 2) Access point name\r\n")
1207 _T(" 3) Access point MAC address\r\n")
1208 _T(" 4) Access point IP address\r\n")
1209 _T(" 5) Access point vendor name\r\n")
1210 _T(" 6) Access point model\r\n")
1211 _T(" 7) Access point serial number")));
1212
1213 CHK_EXEC(CreateEventTemplate(EVENT_AP_UNADOPTED, _T("SYS_AP_UNADOPTED"), SEVERITY_MAJOR, EF_LOG,
1214 _T("Access point %2 changed state to UNADOPTED"),
1215 _T("Generated when access point state changes to UNADOPTED.\r\n")
1216 _T("Parameters:\r\n")
1217 _T(" 1) Access point object ID\r\n")
1218 _T(" 2) Access point name\r\n")
1219 _T(" 3) Access point MAC address\r\n")
1220 _T(" 4) Access point IP address\r\n")
1221 _T(" 5) Access point vendor name\r\n")
1222 _T(" 6) Access point model\r\n")
1223 _T(" 7) Access point serial number")));
1224
1225 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='316' WHERE var_name='SchemaVersion'")));
1226 return TRUE;
1227}
1228
b2042b58
VK
1229/**
1230 * Upgrade from V314 to V315
1231 */
1232static BOOL H_UpgradeFromV314(int currVersion, int newVersion)
1233{
1234 static TCHAR batch[] =
1235 _T("ALTER TABLE thresholds ADD match_count integer\n")
1236 _T("UPDATE thresholds SET match_count=0 WHERE current_state=0\n")
1237 _T("UPDATE thresholds SET match_count=1 WHERE current_state<>0\n")
1238 _T("<END>");
1239 CHK_EXEC(SQLBatch(batch));
1240 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='315' WHERE var_name='SchemaVersion'")));
1241 return TRUE;
1242}
1243
2d7ee2e0 1244/**
1245 * Upgrade from V313 to V314
1246 */
1247static BOOL H_UpgradeFromV313(int currVersion, int newVersion)
1248{
b2042b58 1249 // Replace double backslash with single backslash in all "file download" (code 7) object tools
2d7ee2e0 1250 DB_RESULT hResult = SQLSelect(_T("SELECT tool_id, tool_data FROM object_tools WHERE tool_type=7"));
1251 if (hResult != NULL)
1252 {
1253 int count = DBGetNumRows(hResult);
1254 for(int i = 0; i < count; i++)
1255 {
1256 TCHAR* toolData = DBGetField(hResult, i, 1, NULL, 0);
1257 TranslateStr(toolData, _T("\\\\"), _T("\\"));
1258
1259 DB_STATEMENT statment = DBPrepare(g_hCoreDB, _T("UPDATE object_tools SET tool_data=? WHERE tool_id=?"));
1260 if (statment == NULL)
1261 return FALSE;
1262 DBBind(statment, 1, DB_SQLTYPE_TEXT, toolData, DB_BIND_DYNAMIC);
1263 DBBind(statment, 2, DB_SQLTYPE_INTEGER, DBGetFieldULong(hResult, i, 0));
1264 if(!DBExecute(statment))
1265 return FALSE;
1266 DBFreeStatement(statment);
1267 }
1268 DBFreeResult(hResult);
1269 }
1270
1271 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='314' WHERE var_name='SchemaVersion'")));
1272 return TRUE;
1273}
1274
1275/**
1276 * Upgrade from V312 to V313
1277 */
1278static BOOL H_UpgradeFromV312(int currVersion, int newVersion)
1279{
4dfa78b6
VK
1280 CHK_EXEC(SetColumnNullable(_T("object_tools"), _T("tool_name")));
1281 CHK_EXEC(SetColumnNullable(_T("object_tools"), _T("tool_data")));
1282 CHK_EXEC(SetColumnNullable(_T("object_tools"), _T("description")));
1283 CHK_EXEC(SetColumnNullable(_T("object_tools"), _T("confirmation_text")));
1284 CHK_EXEC(SetColumnNullable(_T("object_tools"), _T("matching_oid")));
1285 CHK_EXEC(SetColumnNullable(_T("object_tools_table_columns"), _T("col_name")));
2d7ee2e0 1286 CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("tool_name")));
1287 CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("tool_data")));
1288 CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("description")));
1289 CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("confirmation_text")));
1290 CHK_EXEC(ConvertStrings(_T("object_tools"), _T("tool_id"), _T("matching_oid")));
1291 CHK_EXEC(ConvertStrings(_T("object_tools_table_columns"), _T("tool_id"), _T("col_number"), _T("col_name"), false));
1292 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='313' WHERE var_name='SchemaVersion'")));
1293 return TRUE;
1294}
1295
6498e05a
VK
1296/**
1297 * Upgrade from V311 to V312
1298 */
1299static BOOL H_UpgradeFromV311(int currVersion, int newVersion)
1300{
1301 CHK_EXEC(CreateConfigParam(_T("EnableReportingServer"), _T("0"), 1, 1));
1302 CHK_EXEC(CreateConfigParam(_T("ReportingServerHostname"), _T("localhost"), 1, 1));
1303 CHK_EXEC(CreateConfigParam(_T("ReportingServerPort"), _T("4710"), 1, 1));
1304 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='312' WHERE var_name='SchemaVersion'")));
1305 return TRUE;
1306}
1307
9262b092
VK
1308/**
1309 * Upgrade from V310 to V311
1310 */
1311static BOOL H_UpgradeFromV310(int currVersion, int newVersion)
1312{
1313 IntegerArray<UINT32> deleteList;
1314
1315 // reports
1316 DB_RESULT hResult = SQLSelect(_T("SELECT id FROM reports"));
1317 if (hResult != NULL)
1318 {
1319 int count = DBGetNumRows(hResult);
1320 for(int i = 0; i < count; i++)
1321 deleteList.add(DBGetFieldULong(hResult, i, 0));
1322 DBFreeResult(hResult);
1323 }
1324
1325 // report groups
1326 hResult = SQLSelect(_T("SELECT id FROM containers WHERE object_class=25"));
1327 if (hResult != NULL)
1328 {
1329 int count = DBGetNumRows(hResult);
1330 for(int i = 0; i < count; i++)
1331 deleteList.add(DBGetFieldULong(hResult, i, 0));
1332 DBFreeResult(hResult);
1333 }
1334
1335 for(int i = 0; i < deleteList.size(); i++)
1336 {
1337 TCHAR query[256];
1338
1339 _sntprintf(query, 256, _T("DELETE FROM object_properties WHERE object_id=%d"), deleteList.get(i));
1340 CHK_EXEC(SQLQuery(query));
1341
1342 _sntprintf(query, 256, _T("DELETE FROM object_custom_attributes WHERE object_id=%d"), deleteList.get(i));
1343 CHK_EXEC(SQLQuery(query));
1344
1345 _sntprintf(query, 256, _T("DELETE FROM acl WHERE object_id=%d"), deleteList.get(i));
1346 CHK_EXEC(SQLQuery(query));
1347
1348 _sntprintf(query, 256, _T("DELETE FROM container_members WHERE object_id=%d OR container_id=%d"), deleteList.get(i), deleteList.get(i));
1349 CHK_EXEC(SQLQuery(query));
1350 }
1351
1352 static TCHAR batch[] =
1353 _T("DROP TABLE reports\n")
1354 _T("DROP TABLE report_results\n")
1355 _T("DELETE FROM containers WHERE object_class=25\n")
1356 _T("DELETE FROM object_properties WHERE object_id=8\n")
1357 _T("<END>");
1358 CHK_EXEC(SQLBatch(batch));
1359 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='311' WHERE var_name='SchemaVersion'")));
1360 return TRUE;
1361}
1362
32745683
VK
1363/**
1364 * Upgrade from V309 to V310
1365 */
1366static BOOL H_UpgradeFromV309(int currVersion, int newVersion)
1367{
1368 static TCHAR batch[] =
1369 _T("ALTER TABLE interfaces ADD peer_proto integer\n")
1370 _T("UPDATE interfaces SET peer_proto=0\n")
1371 _T("<END>");
1372 CHK_EXEC(SQLBatch(batch));
1373 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='310' WHERE var_name='SchemaVersion'")));
1374 return TRUE;
1375}
1376
34a320ad
VK
1377/**
1378 * Upgrade from V308 to V309
1379 */
1380static BOOL H_UpgradeFromV308(int currVersion, int newVersion)
1381{
1382 CHK_EXEC(CreateConfigParam(_T("HelpDeskLink"), _T("none"), 1, 1));
1383 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='309' WHERE var_name='SchemaVersion'")));
1384 return TRUE;
1385}
1386
2ab9314f 1387/**
1388 * Upgrade from V307 to V308
1389 */
1390static BOOL H_UpgradeFromV307(int currVersion, int newVersion)
1391{
1392 static TCHAR batch[] =
32745683
VK
1393 _T("ALTER TABLE network_map_elements ADD flags integer\n")
1394 _T("UPDATE network_map_elements SET flags=0\n") //set all elements like manually generated
1395 _T("ALTER TABLE network_map_links ADD element_data $SQL:TEXT\n")
1396 _T("ALTER TABLE network_map_links ADD flags integer\n")
1397 _T("UPDATE network_map_links SET flags=0\n") //set all elements like manually generated
1398 _T("<END>");
2ab9314f 1399 CHK_EXEC(SQLBatch(batch));
1400
32745683
VK
1401 // it is assumed that now all autogenerated maps contain only autogenerated objects and links
1402 // get elements from autogenerated maps and set their flags to AUTO_GENERATED for map elements and map links
2ab9314f 1403 TCHAR query[256];
1404 _sntprintf(query, 256, _T("SELECT id FROM network_maps WHERE map_type=%d OR map_type=%d"),
1405 MAP_TYPE_LAYER2_TOPOLOGY, MAP_TYPE_IP_TOPOLOGY);
1406 DB_RESULT hResult = SQLSelect(query);
1407 if (hResult != NULL)
1408 {
1409 int count = DBGetNumRows(hResult);
1410 for(int i = 0; i < count; i++)
1411 {
1412 _sntprintf(query, 256, _T("UPDATE network_map_elements SET flags='1' WHERE map_id=%d"),
1413 DBGetFieldULong(hResult, i, 0));
1414 CHK_EXEC(SQLQuery(query));
1415 _sntprintf(query, 256, _T("UPDATE network_map_links SET flags='1' WHERE map_id=%d"),
1416 DBGetFieldULong(hResult, i, 0));
1417 CHK_EXEC(SQLQuery(query));
1418 }
1419 DBFreeResult(hResult);
1420 }
1421
1422 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='308' WHERE var_name='SchemaVersion'")));
1423 return TRUE;
1424}
1425
b3eb058b
VK
1426/**
1427 * Upgrade from V306 to V307
1428 */
1429static BOOL H_UpgradeFromV306(int currVersion, int newVersion)
1430{
1431 CHK_EXEC(SetColumnNullable(_T("config_clob"), _T("var_value")));
1432 CHK_EXEC(ConvertStrings(_T("config_clob"), _T("var_name"), NULL, _T("var_value"), true));
1433 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='307' WHERE var_name='SchemaVersion'")));
1434 return TRUE;
1435}
1436
d1730ccf
VK
1437/**
1438 * Upgrade from V305 to V306
1439 */
1440static BOOL H_UpgradeFromV305(int currVersion, int newVersion)
1441{
1442 CHK_EXEC(CreateConfigParam(_T("ExtendedLogQueryAccessControl"), _T("0"), 1, 0));
1443 CHK_EXEC(CreateConfigParam(_T("EnableTimedAlarmAck"), _T("1"), 1, 1));
9a1f7c45 1444 CHK_EXEC(CreateConfigParam(_T("EnableCheckPointSNMP"), _T("0"), 1, 0));
d1730ccf
VK
1445 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='306' WHERE var_name='SchemaVersion'")));
1446 return TRUE;
1447}
1448
035745fc
VK
1449/**
1450 * Upgrade from V304 to V305
1451 */
1452static BOOL H_UpgradeFromV304(int currVersion, int newVersion)
1453{
2ab9314f 1454 CHK_EXEC(CreateEventTemplate(EVENT_IF_PEER_CHANGED, _T("SYS_IF_PEER_CHANGED"), SEVERITY_NORMAL, EF_LOG,
035745fc
VK
1455 _T("New peer for interface %3 is %7 interface %10 (%12)"),
1456 _T("Generated when peer information for interface changes.\r\n")
1457 _T("Parameters:\r\n")
1458 _T(" 1) Local interface object ID\r\n")
1459 _T(" 2) Local interface index\r\n")
1460 _T(" 3) Local interface name\r\n")
1461 _T(" 4) Local interface IP address\r\n")
1462 _T(" 5) Local interface MAC address\r\n")
1463 _T(" 6) Peer node object ID\r\n")
1464 _T(" 7) Peer node name\r\n")
1465 _T(" 8) Peer interface object ID\r\n")
1466 _T(" 9) Peer interface index\r\n")
1467 _T(" 10) Peer interface name\r\n")
1468 _T(" 11) Peer interface IP address\r\n")
1469 _T(" 12) Peer interface MAC address")));
1470 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='305' WHERE var_name='SchemaVersion'")));
1471 return TRUE;
1472}
1473
fce4295c 1474/**
1475 * Upgrade from V303 to V304
1476 */
1477static BOOL H_UpgradeFromV303(int currVersion, int newVersion)
1478{
d184506f 1479 CHK_EXEC(CreateConfigParam(_T("StrictAlarmStatusFlow"), _T("0"), 1, 0));
fce4295c 1480 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='304' WHERE var_name='SchemaVersion'")));
1481 return TRUE;
1482}
1483
6f33021d 1484/**
1485 * Upgrade from V302 to V303
1486 */
1487static BOOL H_UpgradeFromV302(int currVersion, int newVersion)
1488{
1489 static TCHAR batch[] =
1490 _T("ALTER TABLE alarms ADD ack_timeout integer\n")
1491 _T("UPDATE alarms SET ack_timeout='0'\n")
1492 _T("<END>");
1493 CHK_EXEC(SQLBatch(batch));
1494
1495 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='303' WHERE var_name='SchemaVersion'")));
1496 return TRUE;
1497}
1498
27088c41
AK
1499/**
1500 * Upgrade from V301 to V302
1501 */
1502static BOOL H_UpgradeFromV301(int currVersion, int newVersion)
1503{
1504 static TCHAR batch[] =
1505 _T("DELETE FROM config WHERE var_name='DisableVacuum'\n")
1506 _T("<END>");
1507 CHK_EXEC(SQLBatch(batch));
1508
1509 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='302' WHERE var_name='SchemaVersion'")));
1510 return TRUE;
1511}
1512
1d34c533
VK
1513/**
1514 * Upgrade from V300 to V301
1515 */
1516static BOOL H_UpgradeFromV300(int currVersion, int newVersion)
1517{
1518 static TCHAR batch[] =
1519 _T("ALTER TABLE thresholds ADD script $SQL:TEXT\n")
1520 _T("ALTER TABLE thresholds ADD sample_count integer\n")
1521 _T("UPDATE thresholds SET sample_count=parameter_1\n")
1522 _T("ALTER TABLE thresholds DROP COLUMN parameter_1\n")
1523 _T("ALTER TABLE thresholds DROP COLUMN parameter_2\n")
1524 _T("<END>");
1525 CHK_EXEC(SQLBatch(batch));
1526
1527 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='301' WHERE var_name='SchemaVersion'")));
1528 return TRUE;
1529}
1530
244c65ef
VK
1531/**
1532 * Upgrade from V299 to V300
1533 */
1534static BOOL H_UpgradeFromV299(int currVersion, int newVersion)
1535{
1536 CHK_EXEC(CreateConfigParam(_T("EnableXMPPConnector"), _T("0"), 1, 1));
1537 CHK_EXEC(CreateConfigParam(_T("XMPPLogin"), _T("netxms@localhost"), 1, 1));
1538 CHK_EXEC(CreateConfigParam(_T("XMPPPassword"), _T("netxms"), 1, 1));
1539 CHK_EXEC(CreateConfigParam(_T("XMPPServer"), _T("localhost"), 1, 1));
1540 CHK_EXEC(CreateConfigParam(_T("XMPPPort"), _T("5222"), 1, 1));
1541
1542 SetColumnNullable(_T("users"), _T("full_name"));
1543 SetColumnNullable(_T("users"), _T("description"));
1544 SetColumnNullable(_T("users"), _T("cert_mapping_data"));
1545 SetColumnNullable(_T("user_groups"), _T("description"));
1546 SetColumnNullable(_T("userdb_custom_attributes"), _T("attr_value"));
1547
1548 ConvertStrings(_T("users"), _T("id"), _T("full_name"));
1549 ConvertStrings(_T("users"), _T("id"), _T("description"));
1550 ConvertStrings(_T("users"), _T("id"), _T("cert_mapping_data"));
1551 ConvertStrings(_T("user_groups"), _T("id"), _T("description"));
1552 ConvertStrings(_T("userdb_custom_attributes"), _T("object_id"), _T("attr_name"), _T("attr_name"), true);
1553 ConvertStrings(_T("userdb_custom_attributes"), _T("object_id"), _T("attr_name"), _T("attr_value"), true);
1554
1555 CHK_EXEC(SQLQuery(_T("ALTER TABLE users ADD xmpp_id varchar(127)")));
1556
1557 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='300' WHERE var_name='SchemaVersion'")));
1558 return TRUE;
1559}
1560
ce47611c
VK
1561/**
1562 * Upgrade from V298 to V299
1563 */
1564static BOOL H_UpgradeFromV298(int currVersion, int newVersion)
1565{
1566 CHK_EXEC(SQLQuery(_T("UPDATE event_cfg SET message='Subnet %2 added',description='")
1567 _T("Generated when subnet object added to the database.\r\n")
1568 _T("Parameters:\r\n")
1569 _T(" 1) Subnet object ID\r\n")
1570 _T(" 2) Subnet name\r\n")
1571 _T(" 3) IP address\r\n")
1572 _T(" 4) Network mask")
1573 _T("' WHERE event_code=2")));
1574 CHK_EXEC(SQLQuery(_T("UPDATE event_cfg SET message='Subnet %2 deleted',description='")
1575 _T("Generated when subnet object deleted from the database.\r\n")
1576 _T("Parameters:\r\n")
1577 _T(" 1) Subnet object ID\r\n")
1578 _T(" 2) Subnet name\r\n")
1579 _T(" 3) IP address\r\n")
1580 _T(" 4) Network mask")
1581 _T("' WHERE event_code=19")));
1582 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='299' WHERE var_name='SchemaVersion'")));
1583 return TRUE;
1584}
1585
af21affe
VK
1586/**
1587 * Upgrade from V297 to V298
1588 */
1589static BOOL H_UpgradeFromV297(int currVersion, int newVersion)
1590{
1591 CHK_EXEC(CreateConfigParam(_T("AgentDefaultSharedSecret"), _T("netxms"), 1, 0));
1592 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='298' WHERE var_name='SchemaVersion'")));
1593 return TRUE;
1594}
1595
e02953a4
VK
1596/**
1597 * Upgrade from V296 to V297
1598 */
1599static BOOL H_UpgradeFromV296(int currVersion, int newVersion)
1600{
1601 CHK_EXEC(CreateConfigParam(_T("UseSNMPTrapsForDiscovery"), _T("0"), 1, 1));
1602 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='297' WHERE var_name='SchemaVersion'")));
1603 return TRUE;
1604}
1605
71e4ed3a
VK
1606/**
1607 * Upgrade from V295 to V296
1608 */
1609static BOOL H_UpgradeFromV295(int currVersion, int newVersion)
1610{
1611 static TCHAR batch[] =
1612 _T("ALTER TABLE nodes ADD boot_time integer\n")
1613 _T("UPDATE nodes SET boot_time=0\n")
1614 _T("<END>");
1615 CHK_EXEC(SQLBatch(batch));
1616
1617 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='296' WHERE var_name='SchemaVersion'")));
1618 return TRUE;
1619}
1620
c59466d2
VK
1621/**
1622 * Upgrade from V294 to V295
1623 */
1624static BOOL H_UpgradeFromV294(int currVersion, int newVersion)
1625{
1626 CHK_EXEC(CreateConfigParam(_T("IcmpPingTimeout"), _T("1500"), 1, 1));
1627 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='295' WHERE var_name='SchemaVersion'")));
1628 return TRUE;
1629}
1630
1d4f7890
VK
1631/**
1632 * Upgrade from V293 to V294
1633 */
1634static BOOL H_UpgradeFromV293(int currVersion, int newVersion)
1635{
1636 static TCHAR batch[] =
1637 _T("DELETE FROM metadata WHERE var_name LIKE 'TDataTableCreationCommand_%'\n")
1638 _T("INSERT INTO metadata (var_name,var_value)")
1639 _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")
1640 _T("INSERT INTO metadata (var_name,var_value)")
a9f5aa55 1641 _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
1642 _T("INSERT INTO metadata (var_name,var_value)")
1643 _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
1644 _T("INSERT INTO metadata (var_name,var_value)")
1645 _T(" VALUES ('TDataIndexCreationCommand_2','CREATE INDEX idx_tdata_rec_%d_id ON tdata_records_%d(record_id)')\n")
1d4f7890
VK
1646 _T("<END>");
1647 CHK_EXEC(SQLBatch(batch));
1648
2f1bc68b
VK
1649 RecreateTData(_T("nodes"), true, false);
1650 RecreateTData(_T("clusters"), true, false);
1651 RecreateTData(_T("mobile_devices"), true, false);
1d4f7890 1652
a9f5aa55 1653 CHK_EXEC(SQLQuery(_T("INSERT INTO metadata (var_name,var_value) VALUES ('ValidTDataIndex','1')")));
1d4f7890
VK
1654 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='294' WHERE var_name='SchemaVersion'")));
1655 return TRUE;
1656}
1657
bc969eaf
VK
1658/**
1659 * Upgrade from V292 to V293
1660 */
1661static BOOL H_UpgradeFromV292(int currVersion, int newVersion)
1662{
1663 CHK_EXEC(CreateConfigParam(_T("DefaultConsoleShortTimeFormat"), _T("HH:mm"), 1, 0));
1664 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='293' WHERE var_name='SchemaVersion'")));
1665 return TRUE;
1666}
1667
badf9a95
VK
1668/**
1669 * Upgrade from V291 to V292
1670 */
1671static BOOL H_UpgradeFromV291(int currVersion, int newVersion)
1672{
1673 CHK_EXEC(SQLQuery(_T("ALTER TABLE event_policy ADD rule_guid varchar(36)")));
1674
1675 // Generate GUIDs for all objects
1676 DB_RESULT hResult = SQLSelect(_T("SELECT rule_id FROM event_policy"));
1677 if (hResult != NULL)
1678 {
1679 int count = DBGetNumRows(hResult);
1680 for(int i = 0; i < count; i++)
1681 {
1682 uuid_t guid;
1683 TCHAR query[256], buffer[64];
1684
1685 uuid_generate(guid);
1686 _sntprintf(query, 256, _T("UPDATE event_policy SET rule_guid='%s' WHERE rule_id=%d"),
1687 uuid_to_string(guid, buffer), DBGetFieldULong(hResult, i, 0));
1688 CHK_EXEC(SQLQuery(query));
1689 }
1690 DBFreeResult(hResult);
1691 }
1692
1693 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='292' WHERE var_name='SchemaVersion'")));
1694 return TRUE;
1695}
1696
48d50116
VK
1697/**
1698 * Upgrade from V290 to V291
1699 */
1700static BOOL H_UpgradeFromV290(int currVersion, int newVersion)
1701{
1702 CHK_EXEC(SQLQuery(_T("UPDATE network_services SET service_type=7 WHERE service_type=6")));
1703 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='291' WHERE var_name='SchemaVersion'")));
1704 return TRUE;
1705}
1706
701726bc
VK
1707/**
1708 * Upgrade from V289 to V290
1709 */
1710static BOOL H_UpgradeFromV289(int currVersion, int newVersion)
1711{
1712 CHK_EXEC(SQLQuery(_T("ALTER TABLE network_maps ADD filter $SQL:TEXT")));
1713 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='290' WHERE var_name='SchemaVersion'")));
1714 return TRUE;
1715}
1716
90297892
VK
1717/**
1718 * Upgrade from V288 to V289
1719 */
1720static BOOL H_UpgradeFromV288(int currVersion, int newVersion)
1721{
d95c3dad
A
1722 static TCHAR batch[] =
1723 _T("ALTER TABLE dct_thresholds DROP COLUMN current_state\n")
1724 _T("<END>");
1725 CHK_EXEC(SQLBatch(batch));
90297892
VK
1726 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='289' WHERE var_name='SchemaVersion'")));
1727 return TRUE;
1728}
1729
a0dc14f9
VK
1730/**
1731 * Upgrade from V287 to V288
1732 */
1733static BOOL H_UpgradeFromV287(int currVersion, int newVersion)
1734{
1735 CHK_EXEC(CreateEventTemplate(EVENT_TABLE_THRESHOLD_ACTIVATED, _T("SYS_TABLE_THRESHOLD_ACTIVATED"), EVENT_SEVERITY_MINOR, EF_LOG,
1736 _T("Threshold activated on table \"%2\" row %4 (%5)"),
1737 _T("Generated when table threshold is activated.\r\n")
1738 _T("Parameters:\r\n")
1739 _T(" 1) Table DCI name\r\n")
1740 _T(" 2) Table DCI description\r\n")
1741 _T(" 3) Table DCI ID\r\n")
1742 _T(" 4) Table row\r\n")
1743 _T(" 5) Instance")));
1744
1745 CHK_EXEC(CreateEventTemplate(EVENT_TABLE_THRESHOLD_DEACTIVATED, _T("SYS_TABLE_THRESHOLD_DEACTIVATED"), EVENT_SEVERITY_NORMAL, EF_LOG,
1746 _T("Threshold deactivated on table \"%2\" row %4 (%5)"),
1747 _T("Generated when table threshold is deactivated.\r\n")
1748 _T("Parameters:\r\n")
1749 _T(" 1) Table DCI name\r\n")
1750 _T(" 2) Table DCI description\r\n")
1751 _T(" 3) Table DCI ID\r\n")
1752 _T(" 4) Table row\r\n")
1753 _T(" 5) Instance")));
1754
1755 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='288' WHERE var_name='SchemaVersion'")));
1756 return TRUE;
1757}
1758
9387bc59
VK
1759/**
1760 * Upgrade from V286 to V287
1761 */
1762static BOOL H_UpgradeFromV286(int currVersion, int newVersion)
1763{
1764 static TCHAR batch[] =
1765 _T("ALTER TABLE dc_table_columns ADD sequence_number integer\n")
1766 _T("UPDATE dc_table_columns SET sequence_number=0\n")
1767 _T("<END>");
1768 CHK_EXEC(SQLBatch(batch));
1769
1770 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='287' WHERE var_name='SchemaVersion'")));
1771 return TRUE;
1772}
1773
9098ad59
VK
1774/**
1775 * Upgrade from V285 to V286
1776 */
1777static BOOL H_UpgradeFromV285(int currVersion, int newVersion)
1778{
1779 CHK_EXEC(CreateTable(
1780 _T("CREATE TABLE dct_thresholds (")
1781 _T("id integer not null,")
1782 _T("table_id integer not null,")
1783 _T("sequence_number integer not null,")
1784 _T("current_state char(1) not null,")
1785 _T("activation_event integer not null,")
1786 _T("deactivation_event integer not null,")
1787 _T("PRIMARY KEY(id))")));
1788
1789 CHK_EXEC(CreateTable(
1790 _T("CREATE TABLE dct_threshold_conditions (")
1791 _T("threshold_id integer not null,")
1792 _T("group_id integer not null,")
1793 _T("sequence_number integer not null,")
1794 _T("column_name varchar(63) null,")
1795 _T("check_operation integer not null,")
1796 _T("check_value varchar(255) null,")
1797 _T("PRIMARY KEY(threshold_id,group_id,sequence_number))")));
1798
1799 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='286' WHERE var_name='SchemaVersion'")));
1800 return TRUE;
1801}
1802
17017844
VK
1803/**
1804 * Upgrade from V284 to V285
1805 */
1806static BOOL H_UpgradeFromV284(int currVersion, int newVersion)
1807{
1808 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_items_node_id ON items(node_id)")));
1809 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_dc_tables_node_id ON dc_tables(node_id)")));
1810
1811 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='285' WHERE var_name='SchemaVersion'")));
1812 return TRUE;
1813}
1814
eb4822b6
VK
1815/**
1816 * Upgrade from V283 to V284
1817 */
1818static BOOL H_UpgradeFromV283(int currVersion, int newVersion)
1819{
1820 CHK_EXEC(CreateConfigParam(_T("SNMPTrapPort"), _T("162"), 1, 1));
1821
1822 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='284' WHERE var_name='SchemaVersion'")));
1823 return TRUE;
1824}
1825
0b77b73e
VK
1826/**
1827 * Upgrade from V282 to V283
1828 */
1829static BOOL H_UpgradeFromV282(int currVersion, int newVersion)
1830{
1831 static TCHAR batch[] =
1832 _T("ALTER TABLE dc_table_columns ADD display_name varchar(255)\n")
1833 _T("UPDATE dc_table_columns SET display_name=column_name\n")
1834 _T("<END>");
1835 CHK_EXEC(SQLBatch(batch));
1836
1837 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='283' WHERE var_name='SchemaVersion'")));
1838 return TRUE;
1839}
1840
549f48b3
VK
1841/**
1842 * Upgrade from V281 to V282
1843 */
1844static BOOL H_UpgradeFromV281(int currVersion, int newVersion)
1845{
1846 CHK_EXEC(SQLQuery(_T("DELETE FROM config WHERE var_name='WindowsConsoleUpgradeURL'")));
1847 CHK_EXEC(CreateConfigParam(_T("EnableObjectTransactions"), _T("0"), 1, 1));
1848
1849 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='282' WHERE var_name='SchemaVersion'")));
1850 return TRUE;
1851}
1852
22aaa779
VK
1853/**
1854 * Upgrade from V280 to V281
1855 */
1856static BOOL H_UpgradeFromV280(int currVersion, int newVersion)
1857{
1858 static TCHAR batch[] =
1859 _T("DELETE FROM metadata WHERE var_name='TDataTableCreationCommand'\n")
1860 _T("INSERT INTO metadata (var_name,var_value)")
1861 _T(" VALUES ('TDataTableCreationCommand_0','CREATE TABLE tdata_%d (item_id integer not null,tdata_timestamp integer not null,record_id $SQL:INT64 not null)')\n")
1862 _T("INSERT INTO metadata (var_name,var_value)")
1863 _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(record_id,row_id))')\n")
1864 _T("INSERT INTO metadata (var_name,var_value)")
1865 _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))')\n")
1866 _T("INSERT INTO metadata (var_name,var_value)")
1867 _T(" VALUES ('TDataIndexCreationCommand_1','CREATE INDEX idx_tdata_rec_%d_instance ON tdata_records_%d(instance)')\n")
1868 _T("<END>");
1869 CHK_EXEC(SQLBatch(batch));
1870
2f1bc68b
VK
1871 RecreateTData(_T("nodes"), false, false);
1872 RecreateTData(_T("clusters"), false, false);
1873 RecreateTData(_T("mobile_devices"), false, false);
22aaa779
VK
1874
1875 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='281' WHERE var_name='SchemaVersion'")));
1876 return TRUE;
1877}
1878
1879/**
1880 * Upgrade from V279 to V280
1881 */
1882static BOOL H_UpgradeFromV279(int currVersion, int newVersion)
1883{
1884 static TCHAR batch[] =
1885 _T("ALTER TABLE dc_table_columns ADD flags integer\n")
1886 _T("UPDATE dc_table_columns SET flags=data_type\n")
1887 _T("ALTER TABLE dc_table_columns DROP COLUMN data_type\n")
1888 _T("<END>");
1889 CHK_EXEC(SQLBatch(batch));
1890
1891 DB_RESULT hResult = SQLSelect(_T("SELECT item_id,instance_column FROM dc_tables"));
1892 if (hResult != NULL)
1893 {
1894 int count = DBGetNumRows(hResult);
1895 for(int i = 0; i < count; i++)
1896 {
1897 TCHAR columnName[MAX_COLUMN_NAME] = _T("");
1898 DBGetField(hResult, i, 1, columnName, MAX_COLUMN_NAME);
1899 if (columnName[0] != 0)
1900 {
1901 TCHAR query[256];
1902 _sntprintf(query, 256, _T("UPDATE dc_table_columns SET flags=flags+256 WHERE table_id=%d AND column_name=%s"),
1903 DBGetFieldLong(hResult, i, 0), (const TCHAR *)DBPrepareString(g_hCoreDB, columnName));
1904 CHK_EXEC(SQLQuery(query));
1905 }
1906 }
1907 DBFreeResult(hResult);
1908 }
1909 else
1910 {
1911 if (!g_bIgnoreErrors)
1912 return FALSE;
1913 }
1914
1915 CHK_EXEC(SQLQuery(_T("ALTER TABLE dc_tables DROP COLUMN instance_column")));
1916
1917 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='280' WHERE var_name='SchemaVersion'")));
1918 return TRUE;
1919}
1920
22ee6d97
VK
1921/**
1922 * Upgrade from V278 to V279
1923 */
1924static BOOL H_UpgradeFromV278(int currVersion, int newVersion)
1925{
1926 CHK_EXEC(CreateConfigParam(_T("DeleteEventsOfDeletedObject"), _T("1"), 1, 0));
1927 CHK_EXEC(CreateConfigParam(_T("DeleteAlarmsOfDeletedObject"), _T("1"), 1, 0));
1928
1929 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='279' WHERE var_name='SchemaVersion'")));
1930 return TRUE;
1931}
1932
85ae39bc
VK
1933/**
1934 * Upgrade from V277 to V278
1935 */
1936static BOOL H_UpgradeFromV277(int currVersion, int newVersion)
1937{
1938 DB_RESULT hResult = SQLSelect(_T("SELECT id FROM clusters"));
1939 if (hResult != NULL)
1940 {
1941 int count = DBGetNumRows(hResult);
1942 for(int i = 0; i < count; i++)
1943 {
1944 DWORD id = DBGetFieldULong(hResult, i, 0);
1945 if (!CreateIDataTable(id))
1946 {
1947 if (!g_bIgnoreErrors)
1948 {
1949 DBFreeResult(hResult);
1950 return FALSE;
1951 }
1952 }
22aaa779 1953 if (!CreateTDataTable_preV281(id))
85ae39bc
VK
1954 {
1955 if (!g_bIgnoreErrors)
1956 {
1957 DBFreeResult(hResult);
1958 return FALSE;
1959 }
1960 }
1961 }
1962 DBFreeResult(hResult);
1963 }
1964 else
1965 {
1966 if (!g_bIgnoreErrors)
1967 return FALSE;
1968 }
1969
1970 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='278' WHERE var_name='SchemaVersion'")));
1971 return TRUE;
1972}
1973
62f41164
VK
1974/**
1975 * Upgrade from V276 to V277
1976 */
1977static BOOL H_UpgradeFromV276(int currVersion, int newVersion)
1978{
b4c2a628
VK
1979 CHK_EXEC(CreateTable(_T("CREATE TABLE dci_summary_tables (")
1980 _T("id integer not null,")
1981 _T("menu_path varchar(255) not null,")
1982 _T("title varchar(127) null,")
1983 _T("node_filter $SQL:TEXT null,")
1984 _T("flags integer not null,")
1985 _T("columns $SQL:TEXT null,")
1986 _T("PRIMARY KEY(id))")));
1987
62f41164
VK
1988 CHK_EXEC(CreateConfigParam(_T("DefaultMapBackgroundColor"), _T("0xffffff"), 1, 0));
1989
1990 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='277' WHERE var_name='SchemaVersion'")));
1991 return TRUE;
1992}
1993
55bdca5a
VK
1994/**
1995 * Upgrade from V275 to V276
1996 */
1997static BOOL H_UpgradeFromV275(int currVersion, int newVersion)
1998{
1999 static TCHAR batch[] =
2000 _T("ALTER TABLE dc_table_columns DROP COLUMN transformation_script\n")
2001 _T("ALTER TABLE dc_tables ADD transformation_script $SQL:TEXT\n")
2002 _T("<END>");
2003 CHK_EXEC(SQLBatch(batch));
2004
2005 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='276' WHERE var_name='SchemaVersion'")));
2006 return TRUE;
2007}
2008
8715a84c
VK
2009/**
2010 * Upgrade from V274 to V275
2011 */
2012static BOOL H_UpgradeFromV274(int currVersion, int newVersion)
2013{
2014 static TCHAR batch[] =
2015 _T("ALTER TABLE nodes ADD rack_image varchar(36)\n")
2016 _T("ALTER TABLE nodes ADD rack_position integer\n")
2017 _T("ALTER TABLE nodes ADD rack_id integer\n")
2018 _T("UPDATE nodes SET rack_image='00000000-0000-0000-0000-000000000000',rack_position=0,rack_id=0\n")
2019 _T("<END>");
2020 CHK_EXEC(SQLBatch(batch));
2021
2022 CHK_EXEC(CreateTable(_T("CREATE TABLE access_points (")
2023 _T("id integer not null,")
2024 _T("node_id integer not null,")
f1989a3a 2025 _T("mac_address varchar(12) null,")
8715a84c
VK
2026 _T("vendor varchar(64) null,")
2027 _T("model varchar(128) null,")
2028 _T("serial_number varchar(64) null,")
2029 _T("PRIMARY KEY(id))")));
2030
2031 CHK_EXEC(CreateTable(_T("CREATE TABLE racks (")
2032 _T("id integer not null,")
2033 _T("height integer not null,")
2034 _T("PRIMARY KEY(id))")));
2035
2036 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='275' WHERE var_name='SchemaVersion'")));
2037 return TRUE;
2038}
2039
d02f6b92
VK
2040/**
2041 * Upgrade from V273 to V274
2042 */
2043static BOOL H_UpgradeFromV273(int currVersion, int newVersion)
2044{
2045 static TCHAR batch[] =
2046 _T("ALTER TABLE items ADD samples integer\n")
2047 _T("UPDATE items SET samples=0\n")
2048 _T("<END>");
2049 CHK_EXEC(SQLBatch(batch));
2050
2051 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='274' WHERE var_name='SchemaVersion'")));
2052 return TRUE;
2053}
2054
f05a8a45
VK
2055/**
2056 * Upgrade from V272 to V273
2057 */
2058static BOOL H_UpgradeFromV272(int currVersion, int newVersion)
2059{
2060 CHK_EXEC(CreateConfigParam(_T("DefaultDCIRetentionTime"), _T("30"), 1, 0));
2061 CHK_EXEC(CreateConfigParam(_T("DefaultDCIPollingInterval"), _T("60"), 1, 0));
2062 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='273' WHERE var_name='SchemaVersion'")));
2063 return TRUE;
2064}
2065
0f75f8fc
VK
2066/**
2067 * Upgrade from V271 to V272
2068 */
2069static BOOL H_UpgradeFromV271(int currVersion, int newVersion)
2070{
2071 CHK_EXEC(CreateConfigParam(_T("SNMPTrapLogRetentionTime"), _T("90"), 1, 0));
28e1575f 2072 CHK_EXEC(SQLQuery(_T("ALTER TABLE nodes ADD driver_name varchar(32)\n")));
0f75f8fc
VK
2073 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='272' WHERE var_name='SchemaVersion'")));
2074 return TRUE;
2075}
2076
86634c2c
VK
2077/**
2078 * Upgrade from V270 to V271
2079 */
2080static BOOL H_UpgradeFromV270(int currVersion, int newVersion)
2081{
2082 static TCHAR batch[] =
2083 _T("ALTER TABLE object_properties ADD location_accuracy integer\n")
f2d5b2c4
VK
2084 _T("ALTER TABLE object_properties ADD location_timestamp integer\n")
2085 _T("UPDATE object_properties SET location_accuracy=0,location_timestamp=0\n")
86634c2c
VK
2086 _T("<END>");
2087 CHK_EXEC(SQLBatch(batch));
2088
2089 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='271' WHERE var_name='SchemaVersion'")));
2090 return TRUE;
2091}
2092
afbe5388
VK
2093/**
2094 * Upgrade from V269 to V270
2095 */
2096static BOOL H_UpgradeFromV269(int currVersion, int newVersion)
2097{
6f33021d 2098 static TCHAR batch[] =
afbe5388
VK
2099 _T("ALTER TABLE items ADD instd_method integer\n")
2100 _T("ALTER TABLE items ADD instd_data varchar(255)\n")
2101 _T("ALTER TABLE items ADD instd_filter $SQL:TEXT\n")
2102 _T("UPDATE items SET instd_method=0\n")
2103 _T("<END>");
2104 CHK_EXEC(SQLBatch(batch));
2105
2106 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='270' WHERE var_name='SchemaVersion'")));
2107 return TRUE;
2108}
2109
480e036b
VK
2110/**
2111 * Upgrade from V268 to V269
2112 */
2113static BOOL H_UpgradeFromV268(int currVersion, int newVersion)
2114{
b69710b9
VK
2115 CHK_EXEC(ResizeColumn(_T("alarms"), _T("message"), 2000, true));
2116 CHK_EXEC(ResizeColumn(_T("alarm_events"), _T("message"), 2000, true));
2117 CHK_EXEC(ResizeColumn(_T("event_log"), _T("event_message"), 2000, true));
2118 CHK_EXEC(ResizeColumn(_T("event_cfg"), _T("message"), 2000, true));
2119 CHK_EXEC(ResizeColumn(_T("event_policy"), _T("alarm_message"), 2000, true));
2120 CHK_EXEC(ResizeColumn(_T("items"), _T("name"), 1024, true));
2121 CHK_EXEC(ResizeColumn(_T("dc_tables"), _T("name"), 1024, true));
480e036b
VK
2122
2123 CHK_EXEC(SetColumnNullable(_T("event_policy"), _T("alarm_key")));
2124 CHK_EXEC(SetColumnNullable(_T("event_policy"), _T("alarm_message")));
2125 CHK_EXEC(SetColumnNullable(_T("event_policy"), _T("comments")));
2126 CHK_EXEC(SetColumnNullable(_T("event_policy"), _T("situation_instance")));
2127 CHK_EXEC(SetColumnNullable(_T("event_policy"), _T("script")));
2128 CHK_EXEC(ConvertStrings(_T("event_policy"), _T("rule_id"), _T("alarm_key")));
2129 CHK_EXEC(ConvertStrings(_T("event_policy"), _T("rule_id"), _T("alarm_message")));
2130 CHK_EXEC(ConvertStrings(_T("event_policy"), _T("rule_id"), _T("comments")));
2131 CHK_EXEC(ConvertStrings(_T("event_policy"), _T("rule_id"), _T("situation_instance")));
2132 CHK_EXEC(ConvertStrings(_T("event_policy"), _T("rule_id"), _T("script")));
2133
2134 CHK_EXEC(SetColumnNullable(_T("policy_situation_attr_list"), _T("attr_value")));
2135 // convert strings in policy_situation_attr_list
2136 DB_RESULT hResult = SQLSelect(_T("SELECT rule_id,situation_id,attr_name,attr_value FROM policy_situation_attr_list"));
2137 if (hResult != NULL)
2138 {
2139 if (SQLQuery(_T("DELETE FROM policy_situation_attr_list")))
2140 {
2141 TCHAR name[MAX_DB_STRING], value[MAX_DB_STRING], query[1024];
2142 int count = DBGetNumRows(hResult);
2143 for(int i = 0; i < count; i++)
2144 {
2145 LONG ruleId = DBGetFieldLong(hResult, i, 0);
2146 LONG situationId = DBGetFieldLong(hResult, i, 1);
2147 DBGetField(hResult, i, 2, name, MAX_DB_STRING);
2148 DBGetField(hResult, i, 3, value, MAX_DB_STRING);
2149
2150 DecodeSQLString(name);
2151 DecodeSQLString(value);
2152
2153 if (name[0] == 0)
2154 _tcscpy(name, _T("noname"));
2155
2156 _sntprintf(query, 1024, _T("INSERT INTO policy_situation_attr_list (rule_id,situation_id,attr_name,attr_value) VALUES (%d,%d,%s,%s)"),
2157 ruleId, situationId, (const TCHAR *)DBPrepareString(g_hCoreDB, name), (const TCHAR *)DBPrepareString(g_hCoreDB, value));
2158 if (!SQLQuery(query))
2159 {
2160 if (!g_bIgnoreErrors)
2161 {
2162 DBFreeResult(hResult);
2163 return FALSE;
2164 }
2165 }
2166 }
2167 }
2168 else
2169 {
2170 if (!g_bIgnoreErrors)
2171 {
2172 DBFreeResult(hResult);
2173 return FALSE;
2174 }
2175 }
2176 DBFreeResult(hResult);
2177 }
2178 else
2179 {
2180 if (!g_bIgnoreErrors)
2181 return FALSE;
2182 }
2183
2184 CHK_EXEC(SetColumnNullable(_T("event_cfg"), _T("description")));
2185 CHK_EXEC(SetColumnNullable(_T("event_cfg"), _T("message")));
2186 CHK_EXEC(ConvertStrings(_T("event_cfg"), _T("event_code"), _T("description")));
2187 CHK_EXEC(ConvertStrings(_T("event_cfg"), _T("event_code"), _T("message")));
2188
2189 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='269' WHERE var_name='SchemaVersion'")));
2190 return TRUE;
2191}
2192
d6bf58f9
VK
2193/**
2194 * Upgrade from V267 to V268
2195 */
2196static BOOL H_UpgradeFromV267(int currVersion, int newVersion)
2197{
480e036b
VK
2198 CHK_EXEC(SetColumnNullable(_T("network_services"), _T("check_request")));
2199 CHK_EXEC(SetColumnNullable(_T("network_services"), _T("check_responce")));
d6bf58f9
VK
2200 CHK_EXEC(ConvertStrings(_T("network_services"), _T("id"), _T("check_request")));
2201 CHK_EXEC(ConvertStrings(_T("network_services"), _T("id"), _T("check_responce")));
2202
480e036b 2203 CHK_EXEC(SetColumnNullable(_T("config"), _T("var_value")));
d6bf58f9
VK
2204 CHK_EXEC(ConvertStrings(_T("config"), _T("var_name"), NULL, _T("var_value"), true));
2205
480e036b 2206 CHK_EXEC(SetColumnNullable(_T("dci_schedules"), _T("schedule")));
d6bf58f9
VK
2207 CHK_EXEC(ConvertStrings(_T("dci_schedules"), _T("schedule_id"), _T("item_id"), _T("schedule"), false));
2208
2209 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='268' WHERE var_name='SchemaVersion'")));
2210 return TRUE;
2211}
2212
c1482463
VK
2213/**
2214 * Upgrade from V266 to V267
2215 */
2216static BOOL H_UpgradeFromV266(int currVersion, int newVersion)
2217{
2218 CHK_EXEC(CreateEventTemplate(EVENT_NODE_UNREACHABLE, _T("SYS_NODE_UNREACHABLE"), EVENT_SEVERITY_CRITICAL,
2219 EF_LOG, _T("Node unreachable because of network failure"),
2220 _T("Generated when node is unreachable by management server because of network failure.\r\nParameters:\r\n No event-specific parameters")));
2221 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='267' WHERE var_name='SchemaVersion'")));
2222 return TRUE;
2223}
2224
69bb7f47
VK
2225/**
2226 * Upgrade from V265 to V266
2227 */
2228static BOOL H_UpgradeFromV265(int currVersion, int newVersion)
2229{
2230 // create index on root event ID in event log
2a964810 2231 switch(g_dbSyntax)
69bb7f47
VK
2232 {
2233 case DB_SYNTAX_MSSQL:
2234 case DB_SYNTAX_PGSQL:
2235 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_event_log_root_id ON event_log(root_event_id) WHERE root_event_id > 0")));
2236 break;
2237 case DB_SYNTAX_ORACLE:
2238 CHK_EXEC(SQLQuery(_T("CREATE OR REPLACE FUNCTION zero_to_null(id NUMBER) ")
2239 _T("RETURN NUMBER ")
2240 _T("DETERMINISTIC ")
2241 _T("AS BEGIN")
2242 _T(" IF id > 0 THEN")
2243 _T(" RETURN id;")
2244 _T(" ELSE")
2245 _T(" RETURN NULL;")
2246 _T(" END IF;")
2247 _T("END;")));
2248 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_event_log_root_id ON event_log(zero_to_null(root_event_id))")));
2249 break;
2250 default:
2251 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_event_log_root_id ON event_log(root_event_id)")));
2252 break;
2253 }
2254
2255 CHK_EXEC(CreateTable(_T("CREATE TABLE mapping_tables (")
2256 _T("id integer not null,")
2257 _T("name varchar(63) not null,")
2258 _T("flags integer not null,")
2259 _T("description $SQL:TXT4K null,")
2260 _T("PRIMARY KEY(id))")));
2261
2262 CHK_EXEC(CreateTable(_T("CREATE TABLE mapping_data (")
2263 _T("table_id integer not null,")
2264 _T("md_key varchar(63) not null,")
2265 _T("md_value varchar(255) null,")
f41af2c4 2266 _T("description $SQL:TXT4K null,")
69bb7f47
VK
2267 _T("PRIMARY KEY(table_id,md_key))")));
2268
2269 CHK_EXEC(SQLQuery(_T("DROP TABLE deleted_objects")));
2270
2271 CHK_EXEC(CreateConfigParam(_T("FirstFreeObjectId"), _T("100"), 0, 1, FALSE));
2272
2273 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='266' WHERE var_name='SchemaVersion'")));
2274 return TRUE;
2275}
2276
b1e9b6b3
VK
2277/**
2278 * Upgrade from V264 to V265
2279 */
2280static BOOL H_UpgradeFromV264(int currVersion, int newVersion)
2281{
2282 CHK_EXEC(CreateTable(_T("CREATE TABLE alarm_events (")
2283 _T("alarm_id integer not null,")
2284 _T("event_id $SQL:INT64 not null,")
2285 _T("event_code integer not null,")
2286 _T("event_name varchar(63) null,")
2287 _T("severity integer not null,")
2288 _T("source_object_id integer not null,")
2289 _T("event_timestamp integer not null,")
2290 _T("message varchar(255) null,")
2291 _T("PRIMARY KEY(alarm_id,event_id))")));
2292 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_alarm_events_alarm_id ON alarm_events(alarm_id)")));
2293 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='265' WHERE var_name='SchemaVersion'")));
2294 return TRUE;
2295}
2296
9aa67910
VK
2297/**
2298 * Upgrade from V263 to V264
2299 */
2300static BOOL H_UpgradeFromV263(int currVersion, int newVersion)
2301{
2302 CHK_EXEC(CreateTable(_T("CREATE TABLE mobile_devices (")
2303 _T("id integer not null,")
2304 _T("device_id varchar(64) not null,")
2305 _T("vendor varchar(64) null,")
2306 _T("model varchar(128) null,")
2307 _T("serial_number varchar(64) null,")
2308 _T("os_name varchar(32) null,")
2309 _T("os_version varchar(64) null,")
2310 _T("user_id varchar(64) null,")
171c2fd6 2311 _T("battery_level integer not null,")
9aa67910 2312 _T("PRIMARY KEY(id))")));
534e1b83 2313 CHK_EXEC(CreateConfigParam(_T("MobileDeviceListenerPort"), _T("4747"), 1, 1));
9aa67910
VK
2314 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='264' WHERE var_name='SchemaVersion'")));
2315 return TRUE;
2316}
2317
84880c89
VK
2318/**
2319 * Upgrade from V262 to V263
2320 */
2321static BOOL H_UpgradeFromV262(int currVersion, int newVersion)
2322{
2323 CHK_EXEC(SQLQuery(_T("ALTER TABLE network_maps ADD radius integer")));
2324 CHK_EXEC(SQLQuery(_T("UPDATE network_maps SET radius=-1")));
2325 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='263' WHERE var_name='SchemaVersion'")));
2326 return TRUE;
2327}
2328
dc4a1aec
AK
2329/**
2330 * Upgrade from V261 to V262
2331 */
2332static BOOL H_UpgradeFromV261(int currVersion, int newVersion)
2333{
534e1b83 2334 CHK_EXEC(CreateConfigParam(_T("ApplyDCIFromTemplateToDisabledDCI"), _T("0"), 1, 1));
dc4a1aec
AK
2335 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='262' WHERE var_name='SchemaVersion'")));
2336 return TRUE;
2337}
2338
4f50e45c
VK
2339/**
2340 * Upgrade from V260 to V261
2341 */
2342static BOOL H_UpgradeFromV260(int currVersion, int newVersion)
2343{
534e1b83 2344 CHK_EXEC(CreateConfigParam(_T("NumberOfBusinessServicePollers"), _T("10"), 1, 1));
4f50e45c
VK
2345 CHK_EXEC(SQLQuery(_T("DELETE FROM config WHERE var_name='NumberOfEventProcessors'")));
2346 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='261' WHERE var_name='SchemaVersion'")));
2347 return TRUE;
2348}
a203ea53 2349
4f50e45c
VK
2350/**
2351 * Upgrade from V259 to V260
2352 */
a203ea53
AK
2353static BOOL H_UpgradeFromV259(int currVersion, int newVersion)
2354{
534e1b83 2355 CHK_EXEC(CreateConfigParam(_T("UseFQDNForNodeNames"), _T("1"), 1, 1));
a203ea53
AK
2356 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='260' WHERE var_name='SchemaVersion'")));
2357 return TRUE;
2358}
2359
4f50e45c
VK
2360/**
2361 * Upgrade from V258 to V259
2362 */
5da6ca46
VK
2363static BOOL H_UpgradeFromV258(int currVersion, int newVersion)
2364{
2365 // have to made these columns nullable again because
2366 // because they was forgotten as NOT NULL in schema.in
2367 // and so some databases can still have them as NOT NULL
480e036b
VK
2368 CHK_EXEC(SetColumnNullable(_T("templates"), _T("apply_filter")));
2369 CHK_EXEC(SetColumnNullable(_T("containers"), _T("auto_bind_filter")));
5da6ca46
VK
2370
2371 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='259' WHERE var_name='SchemaVersion'")));
2372 return TRUE;
2373}
2374
4f50e45c
VK
2375/**
2376 * Upgrade from V257 to V258
2377 */
dd42ad0a
AK
2378static BOOL H_UpgradeFromV257(int currVersion, int newVersion)
2379{
6f33021d 2380 static TCHAR batch[] =
dd42ad0a
AK
2381 _T("ALTER TABLE nodes ADD down_since integer\n")
2382 _T("UPDATE nodes SET down_since=0\n")
2383 _T("<END>");
2384
2385 CHK_EXEC(SQLBatch(batch));
2386
534e1b83 2387 CHK_EXEC(CreateConfigParam(_T("DeleteUnreachableNodesPeriod"), _T("0"), 1, 1));
dd42ad0a
AK
2388
2389 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='258' WHERE var_name='SchemaVersion'")));
2390 return TRUE;
2391}
aa16f82b 2392
534e1b83
VK
2393/**
2394 * Upgrade from V256 to V257
2395 */
e4acd770
VK
2396static BOOL H_UpgradeFromV256(int currVersion, int newVersion)
2397{
6f33021d 2398 static TCHAR batch[] =
e4acd770
VK
2399 _T("ALTER TABLE network_maps ADD bg_color integer\n")
2400 _T("ALTER TABLE network_maps ADD link_routing integer\n")
2401 _T("UPDATE network_maps SET bg_color=16777215,link_routing=1\n")
2402 _T("ALTER TABLE network_map_links ADD routing integer\n")
2403 _T("ALTER TABLE network_map_links ADD bend_points $SQL:TXT4K\n")
2404 _T("UPDATE network_map_links SET routing=0\n")
2405 _T("<END>");
2406
2407 CHK_EXEC(SQLBatch(batch));
6f33021d 2408
e4acd770
VK
2409 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='257' WHERE var_name='SchemaVersion'")));
2410 return TRUE;
2411}
2412
534e1b83
VK
2413/**
2414 * Upgrade from V255 to V256
2415 */
aabe5b72
VK
2416static BOOL H_UpgradeFromV255(int currVersion, int newVersion)
2417{
534e1b83
VK
2418 CHK_EXEC(CreateConfigParam(_T("DefaultConsoleDateFormat"), _T("dd.MM.yyyy"), 1, 0));
2419 CHK_EXEC(CreateConfigParam(_T("DefaultConsoleTimeFormat"), _T("HH:mm:ss"), 1, 0));
aabe5b72
VK
2420
2421 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='256' WHERE var_name='SchemaVersion'")));
2422 return TRUE;
2423}
2424
480e036b
VK
2425/**
2426 * Upgrade from V254 to V255
2427 */
5f6bc78c
VK
2428static BOOL H_UpgradeFromV254(int currVersion, int newVersion)
2429{
6f33021d 2430 static TCHAR batch[] =
5f6bc78c
VK
2431 _T("ALTER TABLE alarms ADD resolved_by integer\n")
2432 _T("UPDATE alarms SET resolved_by=0\n")
2433 _T("UPDATE alarms SET alarm_state=3 WHERE alarm_state=2\n")
2434 _T("<END>");
2435
2436 CHK_EXEC(SQLBatch(batch));
2437
3e9e0cc5 2438 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='255' WHERE var_name='SchemaVersion'")));
5f6bc78c
VK
2439 return TRUE;
2440}
40647141 2441
badf9a95
VK
2442/**
2443 * Upgrade from V253 to V254
2444 */
40647141
VK
2445static BOOL H_UpgradeFromV253(int currVersion, int newVersion)
2446{
6f33021d 2447 static TCHAR batch[] =
40647141
VK
2448 _T("ALTER TABLE network_maps ADD flags integer\n")
2449 _T("ALTER TABLE network_maps ADD link_color integer\n")
2450 _T("UPDATE network_maps SET flags=1,link_color=-1\n")
2451 _T("ALTER TABLE network_map_links ADD color integer\n")
2452 _T("ALTER TABLE network_map_links ADD status_object integer\n")
2453 _T("UPDATE network_map_links SET color=-1,status_object=0\n")
2454 _T("<END>");
2455
2456 CHK_EXEC(SQLBatch(batch));
2457
2458 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='254' WHERE var_name='SchemaVersion'")));
2459 return TRUE;
2460}
2461
d6bf58f9
VK
2462/**
2463 * Upgrade from V252 to V253
2464 */
feab3324
VK
2465static BOOL H_UpgradeFromV252(int currVersion, int newVersion)
2466{
480e036b 2467 CHK_EXEC(SetColumnNullable(_T("templates"), _T("apply_filter")));
242e9c7f
VK
2468 CHK_EXEC(ConvertStrings(_T("templates"), _T("id"), _T("apply_filter")));
2469
480e036b 2470 CHK_EXEC(SetColumnNullable(_T("containers"), _T("auto_bind_filter")));
242e9c7f
VK
2471 CHK_EXEC(ConvertStrings(_T("containers"), _T("id"), _T("auto_bind_filter")));
2472
6f33021d 2473 static TCHAR batch[] =
feab3324 2474 _T("ALTER TABLE templates ADD flags integer\n")
2984ac95
VK
2475 _T("UPDATE templates SET flags=0 WHERE enable_auto_apply=0\n")
2476 _T("UPDATE templates SET flags=3 WHERE enable_auto_apply<>0\n")
feab3324
VK
2477 _T("ALTER TABLE templates DROP COLUMN enable_auto_apply\n")
2478 _T("ALTER TABLE containers ADD flags integer\n")
2984ac95
VK
2479 _T("UPDATE containers SET flags=0 WHERE enable_auto_bind=0\n")
2480 _T("UPDATE containers SET flags=3 WHERE enable_auto_bind<>0\n")
feab3324
VK
2481 _T("ALTER TABLE containers DROP COLUMN enable_auto_bind\n")
2482 _T("<END>");
feab3324
VK
2483 CHK_EXEC(SQLBatch(batch));
2484
2485 CHK_EXEC(CreateEventTemplate(EVENT_CONTAINER_AUTOBIND, _T("SYS_CONTAINER_AUTOBIND"), EVENT_SEVERITY_NORMAL, 1,
6f33021d 2486 _T("Node %2 automatically bound to container %4"),
feab3324
VK
2487 _T("Generated when node bound to container object by autobind rule.\r\n")
2488 _T("Parameters:#\r\n")
2489 _T(" 1) Node ID\r\n")
2490 _T(" 2) Node name\r\n")
2491 _T(" 3) Container ID\r\n")
2492 _T(" 4) Container name")
2493 ));
2494
2495 CHK_EXEC(CreateEventTemplate(EVENT_CONTAINER_AUTOUNBIND, _T("SYS_CONTAINER_AUTOUNBIND"), EVENT_SEVERITY_NORMAL, 1,
6f33021d 2496 _T("Node %2 automatically unbound from container %4"),
feab3324
VK
2497 _T("Generated when node unbound from container object by autobind rule.\r\n")
2498 _T("Parameters:#\r\n")
2499 _T(" 1) Node ID\r\n")
2500 _T(" 2) Node name\r\n")
2501 _T(" 3) Container ID\r\n")
2502 _T(" 4) Container name")
2503 ));
2504
2505 CHK_EXEC(CreateEventTemplate(EVENT_TEMPLATE_AUTOAPPLY, _T("SYS_TEMPLATE_AUTOAPPLY"), EVENT_SEVERITY_NORMAL, 1,
6f33021d 2506 _T("Template %4 automatically applied to node %2"),
feab3324
VK
2507 _T("Generated when template applied to node by autoapply rule.\r\n")
2508 _T("Parameters:#\r\n")
2509 _T(" 1) Node ID\r\n")
2510 _T(" 2) Node name\r\n")
2511 _T(" 3) Template ID\r\n")
2512 _T(" 4) Template name")
2513 ));
2514
2515 CHK_EXEC(CreateEventTemplate(EVENT_TEMPLATE_AUTOREMOVE, _T("SYS_TEMPLATE_AUTOREMOVE"), EVENT_SEVERITY_NORMAL, 1,
6f33021d 2516 _T("Template %4 automatically removed from node %2"),
feab3324
VK
2517 _T("Generated when template removed from node by autoapply rule.\r\n")
2518 _T("Parameters:#\r\n")
2519 _T(" 1) Node ID\r\n")
2520 _T(" 2) Node name\r\n")
2521 _T(" 3) Template ID\r\n")
2522 _T(" 4) Template name")
2523 ));
2524
65790062
VK
2525 TCHAR buffer[64];
2526 _sntprintf(buffer, 64, _T("%d"), ConfigReadInt(_T("AllowedCiphers"), 15) + 16);
2527 CreateConfigParam(_T("AllowedCiphers"), buffer, 1, 1, TRUE);
2528
feab3324
VK
2529 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='253' WHERE var_name='SchemaVersion'")));
2530 return TRUE;
2531}
2532
badf9a95
VK
2533/**
2534 * Upgrade from V251 to V252
2535 */
1e6b68a6
VK
2536static BOOL H_UpgradeFromV251(int currVersion, int newVersion)
2537{
6f33021d 2538 static TCHAR batch[] =
1e6b68a6
VK
2539 _T("ALTER TABLE interfaces ADD admin_state integer\n")
2540 _T("ALTER TABLE interfaces ADD oper_state integer\n")
2541 _T("UPDATE interfaces SET admin_state=0,oper_state=0\n")
2542 _T("<END>");
2543
2544 CHK_EXEC(SQLBatch(batch));
2545
2546 CHK_EXEC(CreateEventTemplate(EVENT_INTERFACE_UNEXPECTED_UP, _T("SYS_IF_UNEXPECTED_UP"), EVENT_SEVERITY_MAJOR, 1,
6f33021d 2547 _T("Interface \"%2\" unexpectedly changed state to UP (IP Addr: %3/%4, IfIndex: %5)"),
1e6b68a6
VK
2548 _T("Generated when interface goes up but it's expected state set to DOWN.\r\n")
2549 _T("Please note that source of event is node, not an interface itself.\r\n")
2550 _T("Parameters:#\r\n")
2551 _T(" 1) Interface object ID\r\n")
2552 _T(" 2) Interface name\r\n")
2553 _T(" 3) Interface IP address\r\n")
2554 _T(" 4) Interface netmask\r\n")
2555 _T(" 5) Interface index")
2556 ));
2557
2558 CHK_EXEC(CreateEventTemplate(EVENT_INTERFACE_EXPECTED_DOWN, _T("SYS_IF_EXPECTED_DOWN"), EVENT_SEVERITY_NORMAL, 1,
6f33021d 2559 _T("Interface \"%2\" with expected state DOWN changed state to DOWN (IP Addr: %3/%4, IfIndex: %5)"),
1e6b68a6
VK
2560 _T("Generated when interface goes down and it's expected state is DOWN.\r\n")
2561 _T("Please note that source of event is node, not an interface itself.\r\n")
2562 _T("Parameters:#\r\n")
2563 _T(" 1) Interface object ID\r\n")
2564 _T(" 2) Interface name\r\n")
2565 _T(" 3) Interface IP address\r\n")
2566 _T(" 4) Interface netmask\r\n")
2567 _T(" 5) Interface index")
2568 ));
2569
2570 // Create rule pair in event processing policy
2571 int ruleId = 0;
2572 DB_RESULT hResult = SQLSelect(_T("SELECT max(rule_id) FROM event_policy"));
2573 if (hResult != NULL)
2574 {
2575 ruleId = DBGetFieldLong(hResult, 0, 0) + 1;
2576 DBFreeResult(hResult);
2577 }
2578
2579 TCHAR query[1024];
6f33021d 2580 _sntprintf(query, 1024,
1e6b68a6
VK
2581 _T("INSERT INTO event_policy (rule_id,flags,comments,alarm_message,alarm_severity,alarm_key,")
2582 _T("script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES ")
2583 _T("(%d,7944,'Show alarm when interface is unexpectedly up','%%m',5,'IF_UNEXP_UP_%%i_%%1',")
2584 _T("'#00',0,%d,0,'#00')"), ruleId, EVENT_ALARM_TIMEOUT);
2585 CHK_EXEC(SQLQuery(query));
2586 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_INTERFACE_UNEXPECTED_UP);
2587 CHK_EXEC(SQLQuery(query));
2588 ruleId++;
2589
6f33021d 2590 _sntprintf(query, 1024,
1e6b68a6
VK
2591 _T("INSERT INTO event_policy (rule_id,flags,comments,alarm_message,alarm_severity,alarm_key,")
2592 _T("script,alarm_timeout,alarm_timeout_event,situation_id,situation_instance) VALUES ")
2593 _T("(%d,7944,'Acknowlege interface unexpectedly up alarms when interface goes down','%%m',")
2594 _T("6,'IF_UNEXP_UP_%%i_%%1','#00',0,%d,0,'#00')"), ruleId, EVENT_ALARM_TIMEOUT);
2595 CHK_EXEC(SQLQuery(query));
2596 _sntprintf(query, 1024, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"), ruleId, EVENT_INTERFACE_EXPECTED_DOWN);
2597 CHK_EXEC(SQLQuery(query));
2598
2599 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='252' WHERE var_name='SchemaVersion'")));
2600 return TRUE;
2601}
2602
9aa67910
VK
2603/**
2604 * Upgrade from V250 to V251
2605 */
711e5e9a
VK
2606static BOOL H_UpgradeFromV250(int currVersion, int newVersion)
2607{
6f33021d 2608 static TCHAR batch[] =
711e5e9a
VK
2609 _T("ALTER TABLE thresholds ADD current_severity integer\n")
2610 _T("ALTER TABLE thresholds ADD last_event_timestamp integer\n")
2611 _T("UPDATE thresholds SET current_severity=0,last_event_timestamp=0\n")
2612 _T("<END>");
2613
2614 CHK_EXEC(SQLBatch(batch));
2615
480e036b
VK
2616 CHK_EXEC(SetColumnNullable(_T("thresholds"), _T("fire_value")));
2617 CHK_EXEC(SetColumnNullable(_T("thresholds"), _T("rearm_value")));
711e5e9a
VK
2618 CHK_EXEC(ConvertStrings(_T("thresholds"), _T("threshold_id"), _T("fire_value")));
2619 CHK_EXEC(ConvertStrings(_T("thresholds"), _T("threshold_id"), _T("rearm_value")));
2620
2621 CHK_EXEC(CreateConfigParam(_T("EnableNXSLContainerFunctions"), _T("1"), 1, 1));
2622 CHK_EXEC(CreateConfigParam(_T("UseDNSNameForDiscoveredNodes"), _T("0"), 1, 0));
2623 CHK_EXEC(CreateConfigParam(_T("AllowTrapVarbindsConversion"), _T("1"), 1, 1));
2624
2625 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='251' WHERE var_name='SchemaVersion'")));
2626 return TRUE;
2627}
2628
9aa67910
VK
2629/**
2630 * Upgrade from V249 to V250
2631 */
ae2a3458
VK
2632static BOOL H_UpgradeFromV249(int currVersion, int newVersion)
2633{
2634 CHK_EXEC(CreateTable(_T("CREATE TABLE licenses (")
2635 _T("id integer not null,")
2636 _T("content $SQL:TEXT null,")
2637 _T("PRIMARY KEY(id))")));
2638
2639 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='250' WHERE var_name='SchemaVersion'")));
2640 return TRUE;
2641}
2642
9aa67910
VK
2643/**
2644 * Upgrade from V248 to V249
2645 */
d6124fa0
VK
2646#define TDATA_CREATE_QUERY _T("CREATE TABLE tdata_%d (item_id integer not null,tdata_timestamp integer not null,tdata_row integer not null,tdata_column integer not null,tdata_value varchar(255) null)")
2647#define TDATA_INDEX_MSSQL _T("CREATE CLUSTERED INDEX idx_tdata_%d_id_timestamp ON tdata_%d(item_id,tdata_timestamp)")
2648#define TDATA_INDEX_PGSQL _T("CREATE INDEX idx_tdata_%d_timestamp_id ON tdata_%d(tdata_timestamp,item_id)")
2649#define TDATA_INDEX_DEFAULT _T("CREATE INDEX idx_tdata_%d_id_timestamp ON tdata_%d(item_id,tdata_timestamp)")
2650
2651static BOOL CreateTData(DWORD nodeId)
2652{
2653 TCHAR query[256];
2654
2655 _sntprintf(query, 256, TDATA_CREATE_QUERY, (int)nodeId);
2656 CHK_EXEC(SQLQuery(query));
2657
2a964810 2658 switch(g_dbSyntax)
d6124fa0
VK
2659 {
2660 case DB_SYNTAX_MSSQL:
2661 _sntprintf(query, 256, TDATA_INDEX_MSSQL, (int)nodeId, (int)nodeId);
2662 break;
2663 case DB_SYNTAX_PGSQL:
2664 _sntprintf(query, 256, TDATA_INDEX_PGSQL, (int)nodeId, (int)nodeId);
2665 break;
2666 default:
2667 _sntprintf(query, 256, TDATA_INDEX_DEFAULT, (int)nodeId, (int)nodeId);
2668 break;
2669 }
2670 CHK_EXEC(SQLQuery(query));
2671
2672 return TRUE;
2673}
2674
2675static BOOL H_UpgradeFromV248(int currVersion, int newVersion)
2676{
2677 CHK_EXEC(SQLQuery(_T("INSERT INTO metadata (var_name,var_value) VALUES ('TDataTableCreationCommand','") TDATA_CREATE_QUERY _T("')")));
2678
2a964810 2679 switch(g_dbSyntax)
d6124fa0
VK
2680 {
2681 case DB_SYNTAX_MSSQL:
2682 CHK_EXEC(SQLQuery(_T("INSERT INTO metadata (var_name,var_value) VALUES ('TDataIndexCreationCommand_0','") TDATA_INDEX_MSSQL _T("')")));
2683 break;
2684 case DB_SYNTAX_PGSQL:
2685 CHK_EXEC(SQLQuery(_T("INSERT INTO metadata (var_name,var_value) VALUES ('TDataIndexCreationCommand_0','") TDATA_INDEX_PGSQL _T("')")));
2686 break;
2687 default:
2688 CHK_EXEC(SQLQuery(_T("INSERT INTO metadata (var_name,var_value) VALUES ('TDataIndexCreationCommand_0','") TDATA_INDEX_DEFAULT _T("')")));
2689 break;
2690 }
2691
2692 CHK_EXEC(CreateTable(_T("CREATE TABLE dct_column_names (")
2693 _T("column_id integer not null,")
2694 _T("column_name varchar(63) not null,")
2695 _T("PRIMARY KEY(column_id))")));
2696
2697 DB_RESULT hResult = SQLSelect(_T("SELECT id FROM nodes"));
2698 if (hResult != NULL)
2699 {
2700 int count = DBGetNumRows(hResult);
2701 for(int i = 0 ; i < count; i++)
2702 {
2703 if (!CreateTData(DBGetFieldULong(hResult, i, 0)))
2704 {
2705 if (!g_bIgnoreErrors)
2706 {
2707 DBFreeResult(hResult);
2708 return FALSE;
2709 }
2710 }
2711 }
2712 DBFreeResult(hResult);
2713 }
2714 else
2715 {
2716 if (!g_bIgnoreErrors)
2717 return FALSE;
2718 }
2719
2720 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='249' WHERE var_name='SchemaVersion'")));
2721 return TRUE;
2722}
2723
480e036b
VK
2724/**
2725 * Upgrade from V247 to V248
2726 */
cc8ce218
VK
2727static BOOL H_UpgradeFromV247(int currVersion, int newVersion)
2728{
2729 CHK_EXEC(CreateTable(_T("CREATE TABLE dc_tables (")
2730 _T("item_id integer not null,")
2731 _T("node_id integer not null,")
2732 _T("template_id integer not null,")
2733 _T("template_item_id integer not null,")
2734 _T("name varchar(255) null,")
2735 _T("instance_column varchar(63) null,")
2736 _T("description varchar(255) null,")
2737 _T("flags integer not null,")
2738 _T("source integer not null,")
2739 _T("snmp_port integer not null,")
2740 _T("polling_interval integer not null,")
2741 _T("retention_time integer not null,")
2742 _T("status integer not null,")
2743 _T("system_tag varchar(255) null,")
2744 _T("resource_id integer not null,")
2745 _T("proxy_node integer not null,")
2746 _T("perftab_settings $SQL:TEXT null,")
2747 _T("PRIMARY KEY(item_id))")));
2748
2749 CHK_EXEC(CreateTable(_T("CREATE TABLE dc_table_columns (")
2750 _T("table_id integer not null,")
2751 _T("column_name varchar(63) not null,")
2752 _T("snmp_oid varchar(1023) null,")
2753 _T("data_type integer not null,")
2754 _T("transformation_script $SQL:TEXT null,")
2755 _T("PRIMARY KEY(table_id,column_name))")));
2756
2757 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='248' WHERE var_name='SchemaVersion'")));
2758 return TRUE;
2759}
2760
480e036b
VK
2761/**
2762 * Upgrade from V246 to V247
2763 */
ff392ecf
VK
2764static BOOL H_UpgradeFromV246(int currVersion, int newVersion)
2765{
2766 static TCHAR insertQuery[] = _T("INSERT INTO object_custom_attributes (object_id,attr_name,attr_value) VALUES (?,?,?)");
2767
480e036b 2768 CHK_EXEC(SetColumnNullable(_T("object_custom_attributes"), _T("attr_value")));
ff392ecf
VK
2769
2770 // Convert strings in object_custom_attributes table
2771 DB_RESULT hResult = SQLSelect(_T("SELECT object_id,attr_name,attr_value FROM object_custom_attributes"));
2772 if (hResult != NULL)
2773 {
2774 if (SQLQuery(_T("DELETE FROM object_custom_attributes")))
2775 {
2776 TCHAR errorText[DBDRV_MAX_ERROR_TEXT];
2777 DB_STATEMENT hStmt = DBPrepareEx(g_hCoreDB, insertQuery, errorText);
2778 if (hStmt != NULL)
2779 {
2780 TCHAR name[128], *value;
2781 int count = DBGetNumRows(hResult);
2782 for(int i = 0; i < count; i++)
2783 {
967893bb 2784 UINT32 id = DBGetFieldULong(hResult, i, 0);
ff392ecf
VK
2785 DBGetField(hResult, i, 1, name, 128);
2786 DecodeSQLString(name);
2787 value = DBGetField(hResult, i, 2, NULL, 0);
2788 DecodeSQLString(value);
2789
2790 DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, id);
2791 DBBind(hStmt, 2, DB_SQLTYPE_VARCHAR, name, DB_BIND_STATIC);
2792 DBBind(hStmt, 3, DB_SQLTYPE_VARCHAR, value, DB_BIND_DYNAMIC);
2793 if (g_bTrace)
2794 ShowQuery(insertQuery);
2795 if (!DBExecuteEx(hStmt, errorText))
2796 {
2797 WriteToTerminalEx(_T("SQL query failed (%s):\n\x1b[33;1m%s\x1b[0m\n"), errorText, insertQuery);
2798 if (!g_bIgnoreErrors)
2799 {
2800 DBFreeStatement(hStmt);
2801 DBFreeResult(hResult);
2802 return FALSE;
2803 }
2804 }
2805 }
2806 DBFreeStatement(hStmt);
2807 }
2808 else
2809 {
2810 WriteToTerminalEx(_T("SQL query failed (%s):\n\x1b[33;1m%s\x1b[0m\n"), errorText, insertQuery);
2811 if (!g_bIgnoreErrors)
2812 {
2813 DBFreeResult(hResult);
2814 return FALSE;
2815 }
2816 }
2817 }
2818 else
2819 {
2820 if (!g_bIgnoreErrors)
2821 {
2822 DBFreeResult(hResult);
2823 return FALSE;
2824 }
2825 }
2826
2827 DBFreeResult(hResult);
2828 }
2829 else
2830 {
2831 if (!g_bIgnoreErrors)
2832 return FALSE;
2833 }
2834
2835 CHK_EXEC(SQLQuery(_T("CREATE INDEX idx_ocattr_oid ON object_custom_attributes(object_id)")));
2836 CHK_EXEC(CreateConfigParam(_T("AlarmHistoryRetentionTime"), _T("180"), 1, 0));
2837
2838 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='247' WHERE var_name='SchemaVersion'")));
2839 return TRUE;
2840}
2841
d6bf58f9
VK
2842/**
2843 * Upgrade from V245 to V246
2844 */
98cd01bb
VK
2845static BOOL H_UpgradeFromV245(int currVersion, int newVersion)
2846{
6f33021d 2847 static TCHAR batch[] =
98cd01bb
VK
2848 _T("ALTER TABLE snmp_trap_pmap ADD flags integer\n")
2849 _T("UPDATE snmp_trap_pmap SET flags=0\n")
2850 _T("<END>");
2851
2852 CHK_EXEC(SQLBatch(batch));
2853
480e036b 2854 CHK_EXEC(SetColumnNullable(_T("snmp_trap_pmap"), _T("description")));
d6bf58f9 2855 CHK_EXEC(ConvertStrings(_T("snmp_trap_pmap"), _T("trap_id"), _T("parameter"), _T("description"), false));
6f33021d 2856
480e036b 2857 CHK_EXEC(SetColumnNullable(_T("cluster_resources"), _T("resource_name")));
d6bf58f9 2858 CHK_EXEC(ConvertStrings(_T("cluster_resources"), _T("cluster_id"), _T("resource_id"), _T("resource_name"), false));
6f33021d 2859
98cd01bb
VK
2860 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='246' WHERE var_name='SchemaVersion'")));
2861 return TRUE;
2862}
2863
d6bf58f9
VK
2864/**
2865 * Upgrade from V244 to V245
2866 */
4866d57b
VK
2867static BOOL H_UpgradeFromV244(int currVersion, int newVersion)
2868{
6f33021d 2869 static TCHAR batch[] =
4866d57b
VK
2870 _T("ALTER TABLE nodes ADD runtime_flags integer\n")
2871 _T("UPDATE nodes SET runtime_flags=0\n")
2872 _T("<END>");
2873
2874 CHK_EXEC(SQLBatch(batch));
2875
480e036b
VK
2876 CHK_EXEC(SetColumnNullable(_T("actions"), _T("rcpt_addr")));
2877 CHK_EXEC(SetColumnNullable(_T("actions"), _T("email_subject")));
2878 CHK_EXEC(SetColumnNullable(_T("actions"), _T("action_data")));
4866d57b
VK
2879
2880 CHK_EXEC(ConvertStrings(_T("actions"), _T("action_id"), _T("rcpt_addr")));
2881 CHK_EXEC(ConvertStrings(_T("actions"), _T("action_id"), _T("email_subject")));
2882 CHK_EXEC(ConvertStrings(_T("actions"), _T("action_id"), _T("action_data")));
6f33021d 2883
4866d57b
VK
2884 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='245' WHERE var_name='SchemaVersion'")));
2885 return TRUE;
2886}
2887
2888
aa16f82b
VK
2889//
2890// Upgrade from V243 to V244
2891//
2892
2893static BOOL H_UpgradeFromV243(int currVersion, int newVersion)
2894{
6f33021d 2895 static TCHAR batch[] =
aa16f82b
VK
2896 _T("ALTER TABLE interfaces ADD dot1x_pae_state integer\n")
2897 _T("ALTER TABLE interfaces ADD dot1x_backend_state integer\n")
2898 _T("UPDATE interfaces SET dot1x_pae_state=0,dot1x_backend_state=0\n")
2899 _T("<END>");
2900
2901 CHK_EXEC(SQLBatch(batch));
2902
2903 CHK_EXEC(CreateEventTemplate(EVENT_8021X_PAE_STATE_CHANGED, _T("SYS_8021X_PAE_STATE_CHANGED"),
6f33021d 2904 EVENT_SEVERITY_NORMAL, 1, _T("Port %6 PAE state changed from %4 to %2"),
aa16f82b
VK
2905 _T("Generated when switch port PAE state changed.\r\nParameters:\r\n")
2906 _T(" 1) New PAE state code\r\n")
2907 _T(" 2) New PAE state as text\r\n")
2908 _T(" 3) Old PAE state code\r\n")
2909 _T(" 4) Old PAE state as text\r\n")
2910 _T(" 5) Interface index\r\n")
2911 _T(" 6) Interface name")));
2912
2913 CHK_EXEC(CreateEventTemplate(EVENT_8021X_BACKEND_STATE_CHANGED, _T("SYS_8021X_BACKEND_STATE_CHANGED"),
6f33021d 2914 EVENT_SEVERITY_NORMAL, 1, _T("Port %6 backend authentication state changed from %4 to %2"),
aa16f82b
VK
2915 _T("Generated when switch port backend authentication state changed.\r\nParameters:\r\n")
2916 _T(" 1) New backend state code\r\n")
2917 _T(" 2) New backend state as text\r\n")
2918 _T(" 3) Old backend state code\r\n")
2919 _T(" 4) Old backend state as text\r\n")
2920 _T(" 5) Interface index\r\n")
2921 _T(" 6) Interface name")));
2922
2923 CHK_EXEC(CreateEventTemplate(EVENT_8021X_PAE_FORCE_UNAUTH, _T("SYS_8021X_PAE_FORCE_UNAUTH"),
6f33021d 2924 EVENT_SEVERITY_MAJOR, 1, _T("Port %2 switched to force unauthorize state"),
aa16f82b
VK
2925 _T("Generated when switch port PAE state changed to FORCE UNAUTHORIZE.\r\nParameters:\r\n")
2926 _T(" 1) Interface index\r\n")
2927 _T(" 2) Interface name")));
2928
2929 CHK_EXEC(CreateEventTemplate(EVENT_8021X_AUTH_FAILED, _T("SYS_8021X_AUTH_FAILED"),
6f33021d 2930 EVENT_SEVERITY_MAJOR, 1, _T("802.1x authentication failed on port %2"),
aa16f82b
VK
2931 _T("Generated when switch port backend authentication state changed to FAIL.\r\nParameters:\r\n")
2932 _T(" 1) Interface index\r\n")
2933 _T(" 2) Interface name")));
2934
2935 CHK_EXEC(CreateEventTemplate(EVENT_8021X_AUTH_TIMEOUT, _T("SYS_8021X_AUTH_TIMEOUT"),
6f33021d 2936 EVENT_SEVERITY_MAJOR, 1, _T("802.1x authentication time out on port %2"),
aa16f82b
VK
2937 _T("Generated when switch port backend authentication state changed to TIMEOUT.\r\nParameters:\r\n")
2938 _T(" 1) Interface index\r\n")
2939 _T(" 2) Interface name")));
2940
2941 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='244' WHERE var_name='SchemaVersion'")));
2942 return TRUE;
2943}
2944
2945
e320f8ce
VK
2946//
2947// Upgrade from V242 to V243
2948//
2949
2950static BOOL H_UpgradeFromV242(int currVersion, int newVersion)
2951{
6f33021d 2952 static TCHAR batch[] =
242e9c7f
VK
2953 _T("ALTER TABLE items ADD snmp_raw_value_type integer\n")
2954 _T("UPDATE items SET snmp_raw_value_type=0\n")
e320f8ce
VK
2955 _T("ALTER TABLE items ADD flags integer\n")
2956 _T("UPDATE items SET flags=adv_schedule+(all_thresholds*2)\n")
2957 _T("ALTER TABLE items DROP COLUMN adv_schedule\n")
2958 _T("ALTER TABLE items DROP COLUMN all_thresholds\n")
e320f8ce
VK
2959 _T("<END>");
2960
2961 CHK_EXEC(SQLBatch(batch));
2962 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='243' WHERE var_name='SchemaVersion'")));
2963 return TRUE;
2964}
2965
2966
f5e80875
VK
2967//
2968// Upgrade from V241 to V242
2969//
2970
2971static BOOL H_UpgradeFromV241(int currVersion, int newVersion)
2972{
6f33021d 2973 static TCHAR batch[] =
f5e80875
VK
2974 _T("DROP TABLE business_service_templates\n")
2975 _T("ALTER TABLE dashboards ADD options integer\n")
2976 _T("UPDATE dashboards SET options=0\n")
2977 _T("<END>");
2978
2979 CHK_EXEC(SQLBatch(batch));
2980 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='242' WHERE var_name='SchemaVersion'")));
2981 return TRUE;
2982}
2983
2984
6ff21d27
VK
2985//
2986// Upgrade from V240 to V241
2987//
2988
2989static BOOL H_UpgradeFromV240(int currVersion, int newVersion)
2990{
6f33021d 2991 static TCHAR batch[] =
6ff21d27
VK
2992 _T("ALTER TABLE slm_checks ADD template_id integer\n")
2993 _T("ALTER TABLE slm_checks ADD current_ticket integer\n")
2994 _T("UPDATE slm_checks SET template_id=0,current_ticket=0\n")
2995 _T("<END>");
2996
2997 CHK_EXEC(SQLBatch(batch));
2998 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='241' WHERE var_name='SchemaVersion'")));
2999 return TRUE;
3000}
3001
3002
5fe19f9e
VK
3003//
3004// Upgrade from V239 to V240
3005//
3006
3007static BOOL H_UpgradeFromV239(int currVersion, int newVersion)
3008{
3009 CHK_EXEC(SQLQuery(_T("ALTER TABLE raw_dci_values ADD transformed_value varchar(255)")));
3010 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='240' WHERE var_name='SchemaVersion'")));
3011 return TRUE;
3012}
3013
3014
5a7d6a10
VK
3015//
3016// Upgrade from V238 to V239
3017//
3018
3019static BOOL H_UpgradeFromV238(int currVersion, int newVersion)
3020{
3021 CHK_EXEC(SQLQuery(
3022 _T("INSERT INTO event_cfg (event_code,event_name,severity,flags,message,description) VALUES ")
3023 _T("(56,'SYS_IP_ADDRESS_CHANGED',1,1,'Primary IP address changed from %2 to %1',")
3024 _T("'Generated when primary IP address changed (usually because of primary name change or DNS change).#0D#0A")
3025 _T("Parameters:#0D#0A 1) New IP address#0D#0A 2) Old IP address#0D#0A 3) Primary host name')")));
3026
3027 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='239' WHERE var_name='SchemaVersion'")));
3028 return TRUE;
3029}
3030
3031
34ccf87f
VK
3032//
3033// Upgrade from V232 to V238
3034//
3035
3036static BOOL H_UpgradeFromV232toV238(int currVersion, int newVersion)
3037{
3038 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_checks (")
3039 _T("id integer not null,")
3040 _T("type integer not null,")
3041 _T("content $SQL:TEXT null,")
3042 _T("threshold_id integer not null,")
3043 _T("reason varchar(255) null,")
3044 _T("is_template integer not null,")
3045 _T("PRIMARY KEY(id))")));
3046
3047 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_tickets (")
3048 _T("ticket_id integer not null,")
3049 _T("service_id integer not null,")
3050 _T("check_id integer not null,")
3051 _T("create_timestamp integer not null,")
3052 _T("close_timestamp integer not null,")
3053 _T("reason varchar(255) null,")
3054 _T("PRIMARY KEY(ticket_id))")));
3055
3056 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_service_history (")
3057 _T("record_id integer not null,")
3058 _T("service_id integer not null,")
3059 _T("change_timestamp integer not null,")
3060 _T("new_status integer not null,")
3061 _T("PRIMARY KEY(record_id))")));
3062
3063 CHK_EXEC(CreateTable(_T("CREATE TABLE report_results (")
3064 _T("report_id integer not null,")
3065 _T("generated integer not null,")
3066 _T("job_id integer not null,")
3067 _T("PRIMARY KEY(report_id,job_id))")));
3068
3069 CHK_EXEC(CreateTable(_T("CREATE TABLE reports (")
3070 _T("id integer not null,")
3071 _T("definition $SQL:TEXT null,")
3072 _T("PRIMARY KEY(id))")));
3073
3074 CHK_EXEC(CreateTable(_T("CREATE TABLE job_history (")
3075 _T("id integer not null,")
3076 _T("time_created integer not null,")
3077 _T("time_started integer not null,")
3078 _T("time_finished integer not null,")
3079 _T("job_type varchar(127) null,")
3080 _T("description varchar(255) null,")
3081 _T("additional_info varchar(255) null,")
3082 _T("node_id integer not null,")
3083 _T("user_id integer not null,")
3084 _T("status integer not null,")
3085 _T("failure_message varchar(255) null,")
3086 _T("PRIMARY KEY(id))")));
3087
3088 CHK_EXEC(CreateTable(_T("CREATE TABLE business_services (")
3089 _T("service_id integer not null,")
3090 _T("PRIMARY KEY(service_id))")));
3091
3092 CHK_EXEC(CreateTable(_T("CREATE TABLE business_service_templates (")
3093 _T("service_id integer not null,")
3094 _T("template_id integer not null,")
3095 _T("PRIMARY KEY(service_id,template_id))")));
3096
3097 CHK_EXEC(CreateTable(_T("CREATE TABLE node_links (")
3098 _T("nodelink_id integer not null,")
3099 _T("node_id integer not null,")
3100 _T("PRIMARY KEY(nodelink_id))")));
3101
3102 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_agreements (")
3103 _T("agreement_id integer not null,")
3104 _T("service_id integer not null,")
3105 _T("org_id integer not null,")
3106 _T("uptime varchar(63) not null,")
3107 _T("period integer not null,")
3108 _T("start_date integer not null,")
3109 _T("notes varchar(255),")
3110 _T("PRIMARY KEY(agreement_id))")));
3111
3112 CHK_EXEC(CreateTable(_T("CREATE TABLE organizations (")
3113 _T("id integer not null,")
3114 _T("parent_id integer not null,")
3115 _T("org_type integer not null,")
3116 _T("name varchar(63) not null,")
3117 _T("description varchar(255),")
3118 _T("manager integer not null,")
3119 _T("PRIMARY KEY(id))")));
3120
3121 CHK_EXEC(CreateTable(_T("CREATE TABLE persons (")
3122 _T("id integer not null,")
3123 _T("org_id integer not null,")
3124 _T("first_name varchar(63),")
3125 _T("last_name varchar(63),")
3126 _T("title varchar(255),")
3127 _T("status integer not null,")
3128 _T("PRIMARY KEY(id))")));
3129
3130 CHK_EXEC(CreateConfigParam(_T("JobHistoryRetentionTime"), _T("90"), 1, 0));
3131
3132 CHK_EXEC(SQLQuery(_T("UPDATE event_cfg SET description=")
3133 _T("'Generated when threshold check is rearmed for specific data collection item.#0D#0A")
3134 _T("Parameters:#0D#0A")
3135 _T(" 1) Parameter name#0D#0A")
3136 _T(" 2) Item description#0D#0A")
3137 _T(" 3) Data collection item ID#0D#0A")
3138 _T(" 4) Instance#0D#0A")
3139 _T(" 5) Threshold value#0D#0A")
3140 _T(" 6) Actual value' WHERE event_code=18")));
3141
3142 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='238' WHERE var_name='SchemaVersion'")));
3143 return TRUE;
3144}
3145
3146
9c529287
VK
3147//
3148// Upgrade from V237 to V238
3149//
3150
3151static BOOL H_UpgradeFromV237(int currVersion, int newVersion)
3152{
6f33021d 3153 static TCHAR batch[] =
9c529287
VK
3154 _T("DROP TABLE slm_check_templates\n")
3155 _T("DROP TABLE node_link_checks\n")
3156 _T("DROP TABLE slm_checks\n")
3157 _T("DROP TABLE slm_tickets\n")
3158 _T("<END>");
3159
3160 CHK_EXEC(SQLBatch(batch));
3161
3162 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_checks (")
3163 _T("id integer not null,")
3164 _T("type integer not null,")
3165 _T("content $SQL:TEXT null,")
3166 _T("threshold_id integer not null,")
3167 _T("reason varchar(255) null,")
3168 _T("is_template integer not null,")
3169 _T("PRIMARY KEY(id))")));
3170
3171 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_tickets (")
3172 _T("ticket_id integer not null,")
3173 _T("service_id integer not null,")
3174 _T("check_id integer not null,")
3175 _T("create_timestamp integer not null,")
3176 _T("close_timestamp integer not null,")
3177 _T("reason varchar(255) null,")
3178 _T("PRIMARY KEY(ticket_id))")));
3179
3180 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_service_history (")
3181 _T("record_id integer not null,")
3182 _T("service_id integer not null,")
3183 _T("change_timestamp integer not null,")
3184 _T("new_status integer not null,")
3185 _T("PRIMARY KEY(record_id))")));
3186
3187 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='238' WHERE var_name='SchemaVersion'")));
3188 return TRUE;
3189}
3190
3191
f5c9fdc5
VK
3192//
3193// Upgrade from V236 to V237
3194//
3195
3196static BOOL H_UpgradeFromV236(int currVersion, int newVersion)
3197{
6f33021d 3198 static TCHAR batch[] =
f5c9fdc5
VK
3199 _T("ALTER TABLE business_services DROP COLUMN name\n")
3200 _T("ALTER TABLE business_services DROP COLUMN parent_id\n")
3201 _T("ALTER TABLE business_services DROP COLUMN status\n")
3202 _T("ALTER TABLE slm_checks DROP COLUMN name\n")
3203 _T("<END>");
3204
3205 CHK_EXEC(SQLBatch(batch));
3206
3207 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='237' WHERE var_name='SchemaVersion'")));
3208 return TRUE;
3209}
3210
3211
5418326b
AK
3212//
3213// Upgrade from V235 to V236
3214//
3215
3216static BOOL H_UpgradeFromV235(int currVersion, int newVersion)
3217{
3218 CHK_EXEC(CreateTable(_T("CREATE TABLE report_results (")
3219 _T("report_id integer not null,")
3220 _T("generated integer not null,")
3221 _T("job_id integer not null,")
3222 _T("PRIMARY KEY(report_id,job_id))")));
3223
3224 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='236' WHERE var_name='SchemaVersion'")));
3225 return TRUE;
3226}
3227
3228
845b8121
VK
3229//
3230// Upgrade from V234 to V235
3231//
3232
3233static BOOL H_UpgradeFromV234(int currVersion, int newVersion)
3234{
3235 CHK_EXEC(CreateTable(_T("CREATE TABLE reports (")
3236 _T("id integer not null,")
3237 _T("definition $SQL:TEXT null,")
3238 _T("PRIMARY KEY(id))")));
3239
845b8121
VK
3240 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='235' WHERE var_name='SchemaVersion'")));
3241 return TRUE;
3242}
3243
3244
878b4261
VK
3245//
3246// Upgrade from V233 to V234
3247//
3248
3249static BOOL H_UpgradeFromV233(int currVersion, int newVersion)
3250{
3251 CHK_EXEC(CreateTable(_T("CREATE TABLE job_history (")
3252 _T("id integer not null,")
3253 _T("time_created integer not null,")
3254 _T("time_started integer not null,")
3255 _T("time_finished integer not null,")
3256 _T("job_type varchar(127) null,")
3257 _T("description varchar(255) null,")
24dc5346 3258 _T("additional_info varchar(255) null,")
878b4261
VK
3259 _T("node_id integer not null,")
3260 _T("user_id integer not null,")
3261 _T("status integer not null,")
3262 _T("failure_message varchar(255) null,")
3263 _T("PRIMARY KEY(id))")));
3264
3265 CHK_EXEC(CreateConfigParam(_T("JobHistoryRetentionTime"), _T("90"), 1, 0));
3266
3267 CHK_EXEC(SQLQuery(_T("UPDATE event_cfg SET description=")
3268 _T("'Generated when threshold check is rearmed for specific data collection item.#0D#0A")
3269 _T("Parameters:#0D#0A")
3270 _T(" 1) Parameter name#0D#0A")
3271 _T(" 2) Item description#0D#0A")
3272 _T(" 3) Data collection item ID#0D#0A")
3273 _T(" 4) Instance#0D#0A")
3274 _T(" 5) Threshold value#0D#0A")
3275 _T(" 6) Actual value' WHERE event_code=18")));
3276
3277 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='234' WHERE var_name='SchemaVersion'")));
3278 return TRUE;
3279}
3280
3281
128681c8
VK
3282//
3283// Upgrade from V232 to V233
3284//
3285
3286static BOOL H_UpgradeFromV232(int currVersion, int newVersion)
3287{
3288 CHK_EXEC(CreateTable(_T("CREATE TABLE business_services (")
3289 _T("service_id integer not null,")
3290 _T("name varchar(63) not null,")
2498594e
VK
3291 _T("parent_id integer not null,")
3292 _T("status integer not null,")
128681c8
VK
3293 _T("PRIMARY KEY(service_id))")));
3294
128681c8
VK
3295 CHK_EXEC(CreateTable(_T("CREATE TABLE business_service_templates (")
3296 _T("service_id integer not null,")
3297 _T("template_id integer not null,")
3298 _T("PRIMARY KEY(service_id,template_id))")));
3299
3300 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_checks (")
3301 _T("check_id integer not null,")
3302 _T("name varchar(63) not null,")
2498594e 3303 _T("type integer not null,")
128681c8 3304 _T("content $SQL:TEXT,")
2498594e 3305 _T("threshold_id integer not null,")
128681c8
VK
3306 _T("state integer not null,")
3307 _T("reason varchar(255) not null,")
3308 _T("PRIMARY KEY(check_id))")));
3309
3310 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_check_templates (")
3311 _T("id integer not null,")
3312 _T("name varchar(63) not null,")
2498594e 3313 _T("type integer not null,")
128681c8 3314 _T("content $SQL:TEXT,")
2498594e 3315 _T("threshold_id integer not null,")
128681c8
VK
3316 _T("PRIMARY KEY(id))")));
3317
3318 CHK_EXEC(CreateTable(_T("CREATE TABLE node_links (")
3319 _T("nodelink_id integer not null,")
3320 _T("node_id integer not null,")
3321 _T("PRIMARY KEY(nodelink_id))")));
3322
3323 CHK_EXEC(CreateTable(_T("CREATE TABLE node_link_checks (")
3324 _T("nodelink_id integer not null,")
3325 _T("check_id integer not null,")
3326 _T("PRIMARY KEY(nodelink_id,check_id))")));
3327
3328 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_agreements (")
3329 _T("agreement_id integer not null,")
3330 _T("service_id integer not null,")
3331 _T("org_id integer not null,")
3332 _T("uptime varchar(63) not null,")
3333 _T("period integer not null,")
3334 _T("start_date integer not null,")
3335 _T("notes varchar(255),")
3336 _T("PRIMARY KEY(agreement_id))")));
3337
3338 CHK_EXEC(CreateTable(_T("CREATE TABLE slm_tickets (")
3339 _T("ticket_id integer not null,")
3340 _T("service_id integer not null,")
3341 _T("create_timestamp integer not null,")
3342 _T("close_timestamp integer not null,")
3343 _T("reason varchar(255) not null,")
3344 _T("PRIMARY KEY(ticket_id))")));
3345
3346 CHK_EXEC(CreateTable(_T("CREATE TABLE organizations (")
3347 _T("id integer not null,")
3348 _T("parent_id integer not null,")
3349 _T("org_type integer not null,")
3350 _T("name varchar(63) not null,")
3351 _T("description varchar(255),")
3352 _T("manager integer not null,")
3353 _T("PRIMARY KEY(id))")));
3354
3355 CHK_EXEC(CreateTable(_T("CREATE TABLE persons (")
3356 _T("id integer not null,")
3357 _T("org_id integer not null,")
3358 _T("first_name varchar(63),")
3359 _T("last_name varchar(63),")
3360 _T("title varchar(255),")
3361 _T("status integer not null,")
3362 _T("PRIMARY KEY(id))")));
3363
3364 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='233' WHERE var_name='SchemaVersion'")));
3365 return TRUE;
3366}
3367
3368
8f245200
VK
3369//
3370// Upgrade from V231 to V232
3371//
3372
3373static BOOL H_UpgradeFromV231(int currVersion, int newVersion)
3374{
6f33021d 3375 static TCHAR batch[] =
8f245200
VK
3376 _T("ALTER TABLE object_properties ADD submap_id integer\n")
3377 _T("UPDATE object_properties SET submap_id=0\n")
3378 _T("DROP TABLE maps\n")
3379 _T("DROP TABLE map_access_lists\n")
3380 _T("DROP TABLE submaps\n")
3381 _T("DROP TABLE submap_object_positions\n")
3382 _T("DROP TABLE submap_links\n")
3383 _T("<END>");
3384
3385 CHK_EXEC(SQLBatch(batch));
3386
3387 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='232' WHERE var_name='SchemaVersion'")));
3388 return TRUE;
3389}
3390
3391
3eab63f2
VK
3392//
3393// Upgrade from V230 to V231
3394//
3395
3396static BOOL H_UpgradeFromV230(int currVersion, int newVersion)
3397{
6f33021d 3398 static TCHAR batch[] =
3eab63f2
VK
3399 _T("ALTER TABLE nodes ADD bridge_base_addr varchar(15)\n")
3400 _T("UPDATE nodes SET bridge_base_addr='000000000000'\n")
3401 _T("<END>");
3402
3403 CHK_EXEC(SQLBatch(batch));
3404
3405 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='231' WHERE var_name='SchemaVersion'")));
3406 return TRUE;
3407}
3408
3409
fceea457
VK
3410//
3411// Upgrade from V229 to V230
3412//
3413
3414static BOOL H_UpgradeFromV229(int currVersion, int newVersion)
3415{
6f33021d 3416 static TCHAR batch1[] =
1a74dc37
VK
3417 _T("ALTER TABLE network_maps ADD bg_latitude varchar(20)\n")
3418 _T("ALTER TABLE network_maps ADD bg_longitude varchar(20)\n")
3419 _T("ALTER TABLE network_maps ADD bg_zoom integer\n")
fceea457
VK
3420 _T("ALTER TABLE dashboard_elements ADD layout_data $SQL:TEXT\n")
3421 _T("<END>");
3422
3423 CHK_EXEC(SQLBatch(batch1));
3424
3425 DB_RESULT hResult = SQLSelect(_T("SELECT dashboard_id,element_id,horizontal_span,vertical_span,horizontal_alignment,vertical_alignment FROM dashboard_elements"));
3426 if (hResult != NULL)
3427 {
3428 TCHAR query[1024], xml[1024];
3429
3430 int count = DBGetNumRows(hResult);
3431 for(int i = 0; i < count; i++)
3432 {
3433 _sntprintf(xml, 1024, _T("<layout><horizontalSpan>%d</horizontalSpan><verticalSpan>%d</verticalSpan><horizontalAlignment>%d</horizontalAlignment><verticalAlignment>%d</verticalAlignment></layout>"),
3434 (int)DBGetFieldLong(hResult, i, 2), (int)DBGetFieldLong(hResult, i, 3),
3435 (int)DBGetFieldLong(hResult, i, 4), (int)DBGetFieldLong(hResult, i, 5));
3436 _sntprintf(query, 1024, _T("UPDATE dashboard_elements SET layout_data=%s WHERE dashboard_id=%d AND element_id=%d"),
3437 (const TCHAR *)DBPrepareString(g_hCoreDB, xml), (int)DBGetFieldLong(hResult, i, 0), (int)DBGetFieldLong(hResult, i, 1));
3438 CHK_EXEC(SQLQuery(query));
3439 }
3440 DBFreeResult(hResult);
3441 }
3442 else
3443 {
3444 if (!g_bIgnoreErrors)
3445 return FALSE;
3446 }
3447
6f33021d 3448 static TCHAR batch2[] =
fceea457
VK
3449 _T("ALTER TABLE dashboard_elements DROP COLUMN horizontal_span\n")
3450 _T("ALTER TABLE dashboard_elements DROP COLUMN vertical_span\n")
3451 _T("ALTER TABLE dashboard_elements DROP COLUMN horizontal_alignment\n")
3452 _T("ALTER TABLE dashboard_elements DROP COLUMN vertical_alignment\n")
3453 _T("<END>");
3454
3455 CHK_EXEC(SQLBatch(batch2));
3456
3457 CreateConfigParam(_T("TileServerURL"), _T("http://tile.openstreetmap.org/"), 1, 0);
3458
3459 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='230' WHERE var_name='SchemaVersion'")));
3460 return TRUE;
3461}
3462
3463
926e8ce7
VK
3464//
3465// Upgrade from V228 to V229
3466//
3467
3468static BOOL H_UpgradeFromV228(int currVersion, int newVersion)
3469{
3470 CHK_EXEC(CreateTable(_T("CREATE TABLE dashboards (")
3471 _T(" id integer not null,")
3472 _T(" num_columns integer not null,")
3473 _T(" PRIMARY KEY(id))")));
3474
3475 CHK_EXEC(CreateTable(_T("CREATE TABLE dashboard_elements (")
3476 _T(" dashboard_id integer not null,")
3477 _T(" element_id integer not null,")
3478 _T(" element_type integer not null,")
3479 _T(" element_data $SQL:TEXT null,")
3480 _T(" horizontal_span integer not null,")
3481 _T(" vertical_span integer not null,")
3482 _T(" horizontal_alignment integer not null,")
3483 _T(" vertical_alignment integer not null,")
3484 _T(" PRIMARY KEY(dashboard_id,element_id))")));
3485
3486 CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='229' WHERE var_name='SchemaVersion'")));
3487 return TRUE;
3488}
3489
badf9a95
VK
3490/**
3491 * Upgrade from V227 to V228
3492 */
7a41a06e
VK
3493static BOOL H_UpgradeFromV227(int currVersion, int newVersion)
3494{
3495 CHK_EXEC(SQLQuery(_T("DROP TABLE web_maps")));