added callback for DB session setup
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 31 Mar 2015 05:43:49 +0000 (08:43 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 31 Mar 2015 05:43:49 +0000 (08:43 +0300)
include/nxdbapi.h
src/db/libnxdb/session.cpp

index 899ee5a..8fb9814 100644 (file)
@@ -114,6 +114,7 @@ DB_HANDLE LIBNXDB_EXPORTABLE DBConnect(DB_DRIVER driver, const TCHAR *server, co
 void LIBNXDB_EXPORTABLE DBDisconnect(DB_HANDLE hConn);
 void LIBNXDB_EXPORTABLE DBEnableReconnect(DB_HANDLE hConn, bool enabled);
 bool LIBNXDB_EXPORTABLE DBSetPrefetchLimit(DB_HANDLE hConn, int limit);
+void LIBNXDB_EXPORTABLE DBSetSessionInitCallback(void (*cb)(DB_HANDLE));
 
 DB_STATEMENT LIBNXDB_EXPORTABLE DBPrepare(DB_HANDLE hConn, const TCHAR *szQuery);
 DB_STATEMENT LIBNXDB_EXPORTABLE DBPrepareEx(DB_HANDLE hConn, const TCHAR *szQuery, TCHAR *errorText);
index 701099c..0f889fb 100644 (file)
@@ -1,7 +1,7 @@
 /*
 ** NetXMS - Network Management System
 ** Database Abstraction Library
-** Copyright (C) 2003-2014 Victor Kirhenshtein
+** Copyright (C) 2003-2015 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU Lesser General Public License as published by
  */
 #define IS_VALID_STATEMENT_HANDLE(s) ((s != NULL) && (s->m_connection != NULL))
 
+/**
+ * Session init callback
+ */
+static void (*s_sessionInitCb)(DB_HANDLE session) = NULL;
+
 /**
  * Invalidate all prepared statements on connection
  */
@@ -95,6 +100,8 @@ DB_HANDLE LIBNXDB_EXPORTABLE DBConnect(DB_DRIVER driver, const TCHAR *server, co
          if (driver->m_fpDrvSetPrefetchLimit != NULL)
             driver->m_fpDrvSetPrefetchLimit(hDrvConn, driver->m_defaultPrefetchLimit);
                   __DBDbgPrintf(4, _T("New DB connection opened: handle=%p"), hConn);
+         if (s_sessionInitCb != NULL)
+            s_sessionInitCb(hConn);
       }
       else
       {
@@ -168,6 +175,8 @@ static void DBReconnect(DB_HANDLE hConn)
       {
          if (hConn->m_driver->m_fpDrvSetPrefetchLimit != NULL)
             hConn->m_driver->m_fpDrvSetPrefetchLimit(hConn->m_connection, hConn->m_driver->m_defaultPrefetchLimit);
+         if (s_sessionInitCb != NULL)
+            s_sessionInitCb(hConn);
          break;
       }
       if (nCount == 0)
@@ -208,6 +217,14 @@ bool LIBNXDB_EXPORTABLE DBSetPrefetchLimit(DB_HANDLE hConn, int limit)
    return hConn->m_driver->m_fpDrvSetPrefetchLimit(hConn->m_connection, limit);
 }
 
+/**
+ * Set session initialization callback
+ */
+void LIBNXDB_EXPORTABLE DBSetSessionInitCallback(void (*cb)(DB_HANDLE))
+{
+   s_sessionInitCb = cb;
+}
+
 /**
  * Perform a non-SELECT SQL query
  */