29 "The driver reported the following diagnostics whilst running "
35 ret
= SQLGetDiagRec(type
, handle
, ++i
, state
, &native
, text
,
37 if (SQL_SUCCEEDED(ret
))
38 printf("%s:%ld:%ld:%s\n", state
, i
, native
, text
);
40 while( ret
== SQL_SUCCESS
);
44 check_error (SQLSMALLINT handleType
, SQLHANDLE handle
, int rc
, int line
)
48 cout
<< "Error " << rc
<< " at line: " << line
<< endl
;
53 while (SQLGetDiagRec (handleType
, handle
, i
++, state
, &native
, mesg
, 300,
57 cout
<< "state: " << state
<< endl
;
58 cout
<< "native: " << native
<< endl
;
59 cout
<< "mesg: " << mesg
<< endl
;
67 checkrc (int rc
, int line
)
71 cout
<< "Error " << rc
<< " at line: " << line
<< endl
;
77 readWriteTrans (SQLHDBC hdbc
)
79 int rc
= SQLSetConnectAttr (hdbc
, SQL_ATTR_ACCESS_MODE
,
80 (SQLPOINTER
) SQL_MODE_READ_WRITE
, 0);
81 checkrc (rc
, __LINE__
);
82 rc
= SQLEndTran (SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
83 checkrc (rc
, __LINE__
);
87 readOnlyTrans (SQLHDBC hdbc
)
89 int rc
= SQLSetConnectAttr (hdbc
, SQL_ATTR_ACCESS_MODE
,
90 (SQLPOINTER
) SQL_MODE_READ_ONLY
, 0);
91 checkrc (rc
, __LINE__
);
92 rc
= SQLEndTran (SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
93 checkrc (rc
, __LINE__
);
97 runInsertTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
105 strcpy (sData
, "0123456789012345678901234567890123456789");
106 rc
= SQLPrepare (hstmt
, (unsigned char *) "INSERT INTO t1 VALUES (?, ?)",
108 checkrc (rc
, __LINE__
);
109 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
110 0, 0, &iHolder
, 0, NULL
);
111 checkrc (rc
, __LINE__
);
112 SQLINTEGER sLen
= SQL_NTS
;
113 rc
= SQLBindParameter (hstmt
, 2, SQL_PARAM_INPUT
, SQL_C_CHAR
, SQL_CHAR
,
114 196, 0, (void *) sHolder
, 0, &sLen
);
115 checkrc (rc
, __LINE__
);
122 for (i
= 0; i
< ITERATION
; i
++)
126 strcpy (sHolder
, sData
);
127 rc
= SQLExecute (hstmt
);
128 checkrc (rc
, __LINE__
);
129 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
130 checkrc (rc
, __LINE__
);
134 printf ("Insert: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
142 runReadTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
152 /* Set read-only transaction type */
153 readOnlyTrans (hdbc
);
154 rc
= SQLPrepare (hstmt
, (unsigned char *)
155 "SELECT f1, f2 FROM t1 where f1 = ?", SQL_NTS
);
156 checkrc (rc
, __LINE__
);
158 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
159 0, 0, &tempTermVar
, 0, NULL
);
160 checkrc (rc
, __LINE__
);
161 rc
= SQLBindCol (hstmt
, 1, SQL_INTEGER
, &iHolder
, 0, NULL
);
162 checkrc (rc
, __LINE__
);
163 rc
= SQLBindCol (hstmt
, 2, SQL_C_CHAR
, sHolder
, sizeof (sHolder
), NULL
);
164 checkrc (rc
, __LINE__
);
166 strcpy (sData
, "0123456789012345678901234567890123456789");
174 for (i
= 0; i
< ITERATION
; i
++)
178 rc
= SQLExecute (hstmt
);
179 checkrc (rc
, __LINE__
);
180 rc
= SQLFetch (hstmt
);
181 checkrc (rc
, __LINE__
);
182 tempTermVal
= iHolder
;
183 strcpy (sData
, sHolder
);
184 rc
= SQLCloseCursor (hstmt
);
185 checkrc (rc
, __LINE__
);
186 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
187 checkrc (rc
, __LINE__
);
190 printf ("Read: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
192 /* Set read-write transaction type */
193 readWriteTrans (hdbc
);
198 runUpdateTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
205 rc
= SQLPrepare (hstmt
,
206 (unsigned char *) "UPDATE t1 SET f2 = ? WHERE f1 = ?",
208 checkrc (rc
, __LINE__
);
209 SQLINTEGER sLen
= SQL_NTS
;
210 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_CHAR
, SQL_CHAR
,
211 196, 0, (void *) sHolder
, 0, &sLen
);
212 checkrc (rc
, __LINE__
);
213 rc
= SQLBindParameter (hstmt
, 2, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
214 0, 0, &iHolder
, 0, NULL
);
215 checkrc (rc
, __LINE__
);
217 strcpy (sData
, "9876543210987654321098765432109876543210");
225 for (i
= 0; i
< ITERATION
; i
++)
229 strcpy (sHolder
, sData
);
230 rc
= SQLExecute (hstmt
);
231 checkrc (rc
, __LINE__
);
232 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
233 checkrc (rc
, __LINE__
);
236 printf ("Update: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
243 runDeleteTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
248 rc
= SQLPrepare (hstmt
, (unsigned char *)
249 "DELETE FROM t1 WHERE f1 = ?", SQL_NTS
);
250 checkrc (rc
, __LINE__
);
251 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
252 0, 0, &iHolder
, 0, NULL
);
253 checkrc (rc
, __LINE__
);
259 for (i
= 0; i
< ITERATION
; i
++)
263 rc
= SQLExecute (hstmt
);
264 checkrc (rc
, __LINE__
);
265 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
266 checkrc (rc
, __LINE__
);
269 printf ("Delete: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
276 main (int ac
, char **av
)
280 //SQLHANDLE henv, hdbc, hstmt;
285 dsn
= (char *) "DSN=myodbc3;";
287 rc
= SQLAllocHandle (SQL_HANDLE_ENV
, SQL_NULL_HANDLE
, &henv
);
288 checkrc (rc
, __LINE__
);
289 SQLSetEnvAttr(henv
, SQL_ATTR_ODBC_VERSION
, (void *) SQL_OV_ODBC3
, 0);
291 rc
= SQLAllocHandle (SQL_HANDLE_DBC
, henv
, &hdbc
);
292 checkrc (rc
, __LINE__
);
293 rc
= SQLConnect (hdbc
,
294 (SQLCHAR
*) "test", (SQLSMALLINT
) strlen ("test"),
296 (SQLSMALLINT
) strlen ("root"),
297 (SQLCHAR
*) "manager",
298 (SQLSMALLINT
) strlen (""));
300 SQLCHAR outstr
[1024];
301 SQLSMALLINT outstrlen
;
304 rc = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)"DSN=myodbc3;", SQL_NTS,
305 outstr, sizeof(outstr), &outstrlen,
306 SQL_DRIVER_NOPROMPT);
309 if (SQL_SUCCEEDED(rc
)) {
310 printf("Connected\n");
311 //printf("Returned connection string was:\n\t%s\n", outstr);
312 if (rc
== SQL_SUCCESS_WITH_INFO
) {
313 printf("Driver reported the following diagnostics\n");
314 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
317 fprintf(stderr
, "Failed to connect\n");
318 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
321 //check_error (SQL_HANDLE_DBC, hdbc, rc, __LINE__);
322 checkrc (rc
, __LINE__
);
323 rc
= SQLSetConnectOption (hdbc
, SQL_AUTOCOMMIT
, SQL_AUTOCOMMIT_OFF
);
324 checkrc (rc
, __LINE__
);
325 rc
= SQLAllocHandle (SQL_HANDLE_STMT
, hdbc
, &hstmt
);
326 checkrc (rc
, __LINE__
);
327 rc
= SQLExecDirect(hstmt
, (SQLCHAR
*) "CREATE TABLE t1 (f1 INTEGER, f2 char(196), primary key (f1));", SQL_NTS
);
328 checkrc (rc
, __LINE__
);
330 runInsertTest (henv
, hdbc
, hstmt
);
331 runReadTest (henv
, hdbc
, hstmt
);
332 runUpdateTest (henv
, hdbc
, hstmt
);
333 runDeleteTest (henv
, hdbc
, hstmt
);
335 rc
= SQLExecDirect(hstmt
, (SQLCHAR
*) "DROP TABLE t1;", SQL_NTS
);
336 checkrc (rc
, __LINE__
);
337 rc
= SQLEndTran(SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
338 checkrc (rc
, __LINE__
);
340 rc
= SQLFreeHandle (SQL_HANDLE_STMT
, hstmt
);
341 checkrc (rc
, __LINE__
);
342 rc
= SQLDisconnect (hdbc
);
343 checkrc (rc
, __LINE__
);
344 rc
= SQLFreeHandle (SQL_HANDLE_DBC
, hdbc
);
345 checkrc (rc
, __LINE__
);
346 rc
= SQLFreeHandle (SQL_HANDLE_ENV
, henv
);
347 checkrc (rc
, __LINE__
);