added function DBAddPrimaryKey
authorVictor Kirhenshtein <victor@netxms.org>
Mon, 17 Jul 2017 09:47:46 +0000 (12:47 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Mon, 17 Jul 2017 09:47:46 +0000 (12:47 +0300)
include/nxdbapi.h
src/db/libnxdb/util.cpp

index 3ecc3eb..51471c0 100644 (file)
@@ -236,6 +236,7 @@ bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table,
 
 bool LIBNXDB_EXPORTABLE DBRenameTable(DB_HANDLE hdb, const TCHAR *oldName, const TCHAR *newName);
 bool LIBNXDB_EXPORTABLE DBDropPrimaryKey(DB_HANDLE hdb, const TCHAR *table);
+bool LIBNXDB_EXPORTABLE DBAddPrimaryKey(DB_HANDLE hdb, const TCHAR *table, const TCHAR *columns);
 bool LIBNXDB_EXPORTABLE DBRemoveNotNullConstraint(DB_HANDLE hdb, const TCHAR *table, const TCHAR *column);
 bool LIBNXDB_EXPORTABLE DBSetNotNullConstraint(DB_HANDLE hdb, const TCHAR *table, const TCHAR *column);
 bool LIBNXDB_EXPORTABLE DBResizeColumn(DB_HANDLE hdb, const TCHAR *table, const TCHAR *column, int newSize, bool nullable);
index e2ba4fa..37e06a8 100644 (file)
@@ -382,6 +382,45 @@ bool LIBNXDB_EXPORTABLE DBDropPrimaryKey(DB_HANDLE hdb, const TCHAR *table)
 }
 
 /**
+ * Add primary key to table. Columns should be passed as comma separated list.
+ */
+bool LIBNXDB_EXPORTABLE DBAddPrimaryKey(DB_HANDLE hdb, const TCHAR *table, const TCHAR *columns)
+{
+   int syntax = DBGetSyntax(hdb);
+
+   TCHAR query[1024];
+   bool success;
+   switch(syntax)
+   {
+      case DB_SYNTAX_INFORMIX:
+         _sntprintf(query, 1024, _T("ALTER TABLE %s ADD CONSTRAINT PRIMARY KEY (%s)"), table, columns);
+         success = DBQuery(hdb, query);
+         break;
+      case DB_SYNTAX_DB2:
+      case DB_SYNTAX_MSSQL:
+      case DB_SYNTAX_ORACLE:
+         _sntprintf(query, 1024, _T("ALTER TABLE %s ADD CONSTRAINT pk_%s PRIMARY KEY (%s)"), table, table, columns);
+         success = DBQuery(hdb, query);
+         break;
+      case DB_SYNTAX_MYSQL:
+      case DB_SYNTAX_PGSQL:
+         _sntprintf(query, 1024, _T("ALTER TABLE %s ADD PRIMARY KEY (%s)"), table, columns);
+         success = DBQuery(hdb, query);
+         break;
+      default:    // Unsupported DB engine
+         success = false;
+         break;
+   }
+
+   if ((syntax == DB_SYNTAX_DB2) && success)
+   {
+      _sntprintf(query, 1024, _T("CALL Sysproc.admin_cmd('REORG TABLE %s')"), table);
+      success = DBQuery(hdb, query);
+   }
+   return success;
+}
+
+/**
  * Remove NOT NULL constraint from column
  */
 bool LIBNXDB_EXPORTABLE DBRemoveNotNullConstraint(DB_HANDLE hdb, const TCHAR *table, const TCHAR *column)