2 ** NetXMS - Network Management System
4 ** Copyright (C) 2003-2011 Victor Kirhenshtein
6 ** This program is free software; you can redistribute it and/or modify
7 ** it under the terms of the GNU Lesser General Public License as published by
8 ** the Free Software Foundation; either version 3 of the License, or
9 ** (at your option) any later version.
11 ** This program is distributed in the hope that it will be useful,
12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ** GNU General Public License for more details.
16 ** You should have received a copy of the GNU Lesser General Public License
17 ** along with this program; if not, write to the Free Software
18 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28 #ifdef LIBNXDB_EXPORTS
29 #define LIBNXDB_EXPORTABLE __declspec(dllexport)
31 #define LIBNXDB_EXPORTABLE __declspec(dllimport)
34 #define LIBNXDB_EXPORTABLE
42 // DB-related constants
45 #define MAX_DB_LOGIN 64
46 #define MAX_DB_PASSWORD 64
47 #define MAX_DB_NAME 256
52 #define DBEVENT_CONNECTION_LOST 0
53 #define DBEVENT_CONNECTION_RESTORED 1
54 #define DBEVENT_QUERY_FAILED 2
58 * Database syntax codes
60 #define DB_SYNTAX_MYSQL 0
61 #define DB_SYNTAX_PGSQL 1
62 #define DB_SYNTAX_MSSQL 2
63 #define DB_SYNTAX_ORACLE 3
64 #define DB_SYNTAX_SQLITE 4
65 #define DB_SYNTAX_DB2 5
66 #define DB_SYNTAX_INFORMIX 6
67 #define DB_SYNTAX_UNKNOWN -1
70 * Database connection structures
73 typedef db_driver_t
* DB_DRIVER
;
76 typedef db_handle_t
* DB_HANDLE
;
78 struct db_statement_t
;
79 typedef db_statement_t
* DB_STATEMENT
;
82 typedef db_result_t
* DB_RESULT
;
84 struct db_unbuffered_result_t
;
85 typedef db_unbuffered_result_t
* DB_UNBUFFERED_RESULT
;
88 * Pool connection information
90 struct PoolConnectionInfo
94 time_t lastAccessTime
;
102 * DB library performance counters
104 struct LIBNXDB_PERF_COUNTERS
106 UINT64 selectQueries
;
107 UINT64 nonSelectQueries
;
109 UINT64 longRunningQueries
;
110 UINT64 failedQueries
;
116 bool LIBNXDB_EXPORTABLE
DBInit(DWORD logMsgCode
, DWORD sqlErrorMsgCode
);
117 DB_DRIVER LIBNXDB_EXPORTABLE
DBLoadDriver(const TCHAR
*module
, const TCHAR
*initParameters
,
118 bool dumpSQL
, void (* fpEventHandler
)(DWORD
, const WCHAR
*, const WCHAR
*, bool, void *),
120 void LIBNXDB_EXPORTABLE
DBUnloadDriver(DB_DRIVER driver
);
121 const char LIBNXDB_EXPORTABLE
*DBGetDriverName(DB_DRIVER driver
);
122 void LIBNXDB_EXPORTABLE
DBSetDefaultPrefetchLimit(DB_DRIVER driver
, int limit
);
124 DB_HANDLE LIBNXDB_EXPORTABLE
DBConnect(DB_DRIVER driver
, const TCHAR
*server
, const TCHAR
*dbName
,
125 const TCHAR
*login
, const TCHAR
*password
, const TCHAR
*schema
, TCHAR
*errorText
);
126 void LIBNXDB_EXPORTABLE
DBDisconnect(DB_HANDLE hConn
);
127 void LIBNXDB_EXPORTABLE
DBEnableReconnect(DB_HANDLE hConn
, bool enabled
);
128 bool LIBNXDB_EXPORTABLE
DBSetPrefetchLimit(DB_HANDLE hConn
, int limit
);
129 void LIBNXDB_EXPORTABLE
DBSetSessionInitCallback(void (*cb
)(DB_HANDLE
));
131 DB_STATEMENT LIBNXDB_EXPORTABLE
DBPrepare(DB_HANDLE hConn
, const TCHAR
*szQuery
);
132 DB_STATEMENT LIBNXDB_EXPORTABLE
DBPrepareEx(DB_HANDLE hConn
, const TCHAR
*szQuery
, TCHAR
*errorText
);
133 void LIBNXDB_EXPORTABLE
DBFreeStatement(DB_STATEMENT hStmt
);
134 const TCHAR LIBNXDB_EXPORTABLE
*DBGetStatementSource(DB_STATEMENT hStmt
);
135 bool LIBNXDB_EXPORTABLE
DBOpenBatch(DB_STATEMENT hStmt
);
136 void LIBNXDB_EXPORTABLE
DBNextBatchRow(DB_STATEMENT hStmt
);
137 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, int cType
, void *buffer
, int allocType
);
138 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, const TCHAR
*value
, int allocType
);
139 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, const TCHAR
*value
, int allocType
, int maxLen
);
140 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, INT32 value
);
141 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, UINT32 value
);
142 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, INT64 value
);
143 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, UINT64 value
);
144 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, double value
);
145 void LIBNXDB_EXPORTABLE
DBBind(DB_STATEMENT hStmt
, int pos
, int sqlType
, const uuid
& value
);
146 bool LIBNXDB_EXPORTABLE
DBExecute(DB_STATEMENT hStmt
);
147 bool LIBNXDB_EXPORTABLE
DBExecuteEx(DB_STATEMENT hStmt
, TCHAR
*errorText
);
148 DB_RESULT LIBNXDB_EXPORTABLE
DBSelectPrepared(DB_STATEMENT hStmt
);
149 DB_RESULT LIBNXDB_EXPORTABLE
DBSelectPreparedEx(DB_STATEMENT hStmt
, TCHAR
*errorText
);
150 DB_UNBUFFERED_RESULT LIBNXDB_EXPORTABLE
DBSelectPreparedUnbuffered(DB_STATEMENT hStmt
);
151 DB_UNBUFFERED_RESULT LIBNXDB_EXPORTABLE
DBSelectPreparedUnbufferedEx(DB_STATEMENT hStmt
, TCHAR
*errorText
);
153 bool LIBNXDB_EXPORTABLE
DBQuery(DB_HANDLE hConn
, const TCHAR
*szQuery
);
154 bool LIBNXDB_EXPORTABLE
DBQueryEx(DB_HANDLE hConn
, const TCHAR
*szQuery
, TCHAR
*errorText
);
156 DB_RESULT LIBNXDB_EXPORTABLE
DBSelect(DB_HANDLE hConn
, const TCHAR
*szQuery
);
157 DB_RESULT LIBNXDB_EXPORTABLE
DBSelectEx(DB_HANDLE hConn
, const TCHAR
*szQuery
, TCHAR
*errorText
);
158 int LIBNXDB_EXPORTABLE
DBGetColumnCount(DB_RESULT hResult
);
159 bool LIBNXDB_EXPORTABLE
DBGetColumnName(DB_RESULT hResult
, int column
, TCHAR
*buffer
, int bufSize
);
160 int LIBNXDB_EXPORTABLE
DBGetNumRows(DB_RESULT hResult
);
161 void LIBNXDB_EXPORTABLE
DBFreeResult(DB_RESULT hResult
);
163 TCHAR LIBNXDB_EXPORTABLE
*DBGetField(DB_RESULT hResult
, int row
, int col
, TCHAR
*pszBuffer
, int nBufLen
);
164 TCHAR LIBNXDB_EXPORTABLE
*DBGetFieldForXML(DB_RESULT hResult
, int row
, int col
);
165 char LIBNXDB_EXPORTABLE
*DBGetFieldA(DB_RESULT hResult
, int iRow
, int iColumn
, char *pszBuffer
, int nBufLen
);
166 char LIBNXDB_EXPORTABLE
*DBGetFieldUTF8(DB_RESULT hResult
, int iRow
, int iColumn
, char *pszBuffer
, int nBufLen
);
167 INT32 LIBNXDB_EXPORTABLE
DBGetFieldLong(DB_RESULT hResult
, int iRow
, int iColumn
);
168 UINT32 LIBNXDB_EXPORTABLE
DBGetFieldULong(DB_RESULT hResult
, int iRow
, int iColumn
);
169 INT64 LIBNXDB_EXPORTABLE
DBGetFieldInt64(DB_RESULT hResult
, int iRow
, int iColumn
);
170 UINT64 LIBNXDB_EXPORTABLE
DBGetFieldUInt64(DB_RESULT hResult
, int iRow
, int iColumn
);
171 double LIBNXDB_EXPORTABLE
DBGetFieldDouble(DB_RESULT hResult
, int iRow
, int iColumn
);
172 UINT32 LIBNXDB_EXPORTABLE
DBGetFieldIPAddr(DB_RESULT hResult
, int iRow
, int iColumn
);
173 InetAddress LIBNXDB_EXPORTABLE
DBGetFieldInetAddr(DB_RESULT hResult
, int iRow
, int iColumn
);
174 bool LIBNXDB_EXPORTABLE
DBGetFieldByteArray(DB_RESULT hResult
, int iRow
, int iColumn
,
175 int *pnArray
, int nSize
, int nDefault
);
176 bool LIBNXDB_EXPORTABLE
DBGetFieldByteArray2(DB_RESULT hResult
, int iRow
, int iColumn
,
177 BYTE
*data
, int nSize
, int nDefault
);
178 uuid LIBNXDB_EXPORTABLE
DBGetFieldGUID(DB_RESULT hResult
, int iRow
, int iColumn
);
180 DB_UNBUFFERED_RESULT LIBNXDB_EXPORTABLE
DBSelectUnbuffered(DB_HANDLE hConn
, const TCHAR
*szQuery
);
181 DB_UNBUFFERED_RESULT LIBNXDB_EXPORTABLE
DBSelectUnbufferedEx(DB_HANDLE hConn
, const TCHAR
*szQuery
, TCHAR
*errorText
);
182 bool LIBNXDB_EXPORTABLE
DBFetch(DB_UNBUFFERED_RESULT hResult
);
183 int LIBNXDB_EXPORTABLE
DBGetColumnCount(DB_UNBUFFERED_RESULT hResult
);
184 bool LIBNXDB_EXPORTABLE
DBGetColumnName(DB_UNBUFFERED_RESULT hResult
, int column
, TCHAR
*buffer
, int bufSize
);
185 void LIBNXDB_EXPORTABLE
DBFreeResult(DB_UNBUFFERED_RESULT hResult
);
187 TCHAR LIBNXDB_EXPORTABLE
*DBGetField(DB_UNBUFFERED_RESULT hResult
, int iColumn
, TCHAR
*pBuffer
, int iBufSize
);
188 char LIBNXDB_EXPORTABLE
*DBGetFieldUTF8(DB_UNBUFFERED_RESULT hResult
, int iColumn
, char *buffer
, int iBufSize
);
189 INT32 LIBNXDB_EXPORTABLE
DBGetFieldLong(DB_UNBUFFERED_RESULT hResult
, int iColumn
);
190 UINT32 LIBNXDB_EXPORTABLE
DBGetFieldULong(DB_UNBUFFERED_RESULT hResult
, int iColumn
);
191 INT64 LIBNXDB_EXPORTABLE
DBGetFieldInt64(DB_UNBUFFERED_RESULT hResult
, int iColumn
);
192 UINT64 LIBNXDB_EXPORTABLE
DBGetFieldUInt64(DB_UNBUFFERED_RESULT hResult
, int iColumn
);
193 double LIBNXDB_EXPORTABLE
DBGetFieldDouble(DB_UNBUFFERED_RESULT hResult
, int iColumn
);
194 UINT32 LIBNXDB_EXPORTABLE
DBGetFieldIPAddr(DB_UNBUFFERED_RESULT hResult
, int iColumn
);
195 InetAddress LIBNXDB_EXPORTABLE
DBGetFieldInetAddr(DB_UNBUFFERED_RESULT hResult
, int iColumn
);
196 uuid LIBNXDB_EXPORTABLE
DBGetFieldGUID(DB_UNBUFFERED_RESULT hResult
, int iColumn
);
198 bool LIBNXDB_EXPORTABLE
DBBegin(DB_HANDLE hConn
);
199 bool LIBNXDB_EXPORTABLE
DBCommit(DB_HANDLE hConn
);
200 bool LIBNXDB_EXPORTABLE
DBRollback(DB_HANDLE hConn
);
202 int LIBNXDB_EXPORTABLE
DBIsTableExist(DB_HANDLE conn
, const TCHAR
*table
);
204 int LIBNXDB_EXPORTABLE
DBGetSchemaVersion(DB_HANDLE conn
);
205 int LIBNXDB_EXPORTABLE
DBGetSyntax(DB_HANDLE conn
);
207 String LIBNXDB_EXPORTABLE
DBPrepareString(DB_HANDLE conn
, const TCHAR
*str
, int maxSize
= -1);
208 String LIBNXDB_EXPORTABLE
DBPrepareString(DB_DRIVER drv
, const TCHAR
*str
, int maxSize
= -1);
210 String LIBNXDB_EXPORTABLE
DBPrepareStringA(DB_HANDLE conn
, const char *str
, int maxSize
= -1);
211 String LIBNXDB_EXPORTABLE
DBPrepareStringA(DB_DRIVER drv
, const char *str
, int maxSize
= -1);
213 #define DBPrepareStringA DBPrepareString
215 TCHAR LIBNXDB_EXPORTABLE
*EncodeSQLString(const TCHAR
*pszIn
);
216 void LIBNXDB_EXPORTABLE
DecodeSQLString(TCHAR
*pszStr
);
218 bool LIBNXDB_EXPORTABLE
DBConnectionPoolStartup(DB_DRIVER driver
, const TCHAR
*server
, const TCHAR
*dbName
,
219 const TCHAR
*login
, const TCHAR
*password
, const TCHAR
*schema
,
220 int basePoolSize
, int maxPoolSize
, int cooldownTime
,
222 void LIBNXDB_EXPORTABLE
DBConnectionPoolShutdown();
223 DB_HANDLE LIBNXDB_EXPORTABLE
__DBConnectionPoolAcquireConnection(const char *srcFile
, int srcLine
);
224 #define DBConnectionPoolAcquireConnection() __DBConnectionPoolAcquireConnection(__FILE__, __LINE__)
225 void LIBNXDB_EXPORTABLE
DBConnectionPoolReleaseConnection(DB_HANDLE connection
);
226 int LIBNXDB_EXPORTABLE
DBConnectionPoolGetSize();
227 int LIBNXDB_EXPORTABLE
DBConnectionPoolGetAcquiredCount();
229 void LIBNXDB_EXPORTABLE
DBSetLongRunningThreshold(UINT32 threshold
);
230 ObjectArray
<PoolConnectionInfo
> LIBNXDB_EXPORTABLE
*DBConnectionPoolGetConnectionList();
231 void LIBNXDB_EXPORTABLE
DBGetPerfCounters(LIBNXDB_PERF_COUNTERS
*counters
);
233 bool LIBNXDB_EXPORTABLE
IsDatabaseRecordExist(DB_HANDLE hdb
, const TCHAR
*table
, const TCHAR
*idColumn
, UINT32 id
);
234 bool LIBNXDB_EXPORTABLE
IsDatabaseRecordExist(DB_HANDLE hdb
, const TCHAR
*table
, const TCHAR
*idColumn
, const uuid
& id
);
235 bool LIBNXDB_EXPORTABLE
IsDatabaseRecordExist(DB_HANDLE hdb
, const TCHAR
*table
, const TCHAR
*idColumn
, const TCHAR
*id
);
237 #endif /* _nxsrvapi_h_ */