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