11 #define ITERATION 1000
32 "The driver reported the following diagnostics whilst running "
38 ret
= SQLGetDiagRec(type
, handle
, ++i
, state
, &native
, text
,
40 if (SQL_SUCCEEDED(ret
))
41 printf("%s:%ld:%ld:%s\n", state
, i
, native
, text
);
43 while( ret
== SQL_SUCCESS
);
47 check_error (SQLSMALLINT handleType
, SQLHANDLE handle
, int rc
, int line
)
51 cout
<< "Error " << rc
<< " at line: " << line
<< endl
;
56 while (SQLGetDiagRec (handleType
, handle
, i
++, state
, &native
, mesg
, 300,
60 cout
<< "state: " << state
<< endl
;
61 cout
<< "native: " << native
<< endl
;
62 cout
<< "mesg: " << mesg
<< endl
;
70 checkrc (int rc
, int line
)
74 cout
<< "Error " << rc
<< " at line: " << line
<< endl
;
80 readWriteTrans (SQLHDBC hdbc
)
82 int rc
= SQLSetConnectAttr (hdbc
, SQL_ATTR_ACCESS_MODE
,
83 (SQLPOINTER
) SQL_MODE_READ_WRITE
, 0);
84 checkrc (rc
, __LINE__
);
85 rc
= SQLEndTran (SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
86 checkrc (rc
, __LINE__
);
90 readOnlyTrans (SQLHDBC hdbc
)
92 int rc
= SQLSetConnectAttr (hdbc
, SQL_ATTR_ACCESS_MODE
,
93 (SQLPOINTER
) SQL_MODE_READ_ONLY
, 0);
94 checkrc (rc
, __LINE__
);
95 rc
= SQLEndTran (SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
96 checkrc (rc
, __LINE__
);
99 void *runInsertTest (void *massage
)
102 thno
=*(int*)massage
;
110 char *dsn
= (char *) "DSN=test;";
112 rc
= SQLAllocHandle (SQL_HANDLE_ENV
, SQL_NULL_HANDLE
, &henv
);
113 checkrc (rc
, __LINE__
);
114 SQLSetEnvAttr(henv
, SQL_ATTR_ODBC_VERSION
, (void *) SQL_OV_ODBC3
, 0);
116 rc
= SQLAllocHandle (SQL_HANDLE_DBC
, henv
, &hdbc
);
117 checkrc (rc
, __LINE__
);
118 rc
= SQLConnect (hdbc
,
119 (SQLCHAR
*) dsn
, SQL_NTS
,
121 (SQLSMALLINT
) strlen ("root"),
122 (SQLCHAR
*) "manager",
123 (SQLSMALLINT
) strlen (""));
125 SQLCHAR outstr
[1024];
126 SQLSMALLINT outstrlen
;
127 if (SQL_SUCCEEDED(rc
)) {
128 // printf("Connected\n");
129 if (rc
== SQL_SUCCESS_WITH_INFO
) {
130 printf("Driver reported the following diagnostics\n");
131 extract_error("SQLDriverConnect",hdbc
, SQL_HANDLE_DBC
);
134 fprintf(stderr
, "Failed to connect\n");
135 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
137 checkrc (rc
, __LINE__
);
138 rc
= SQLSetConnectOption (hdbc
, SQL_AUTOCOMMIT
, SQL_AUTOCOMMIT_OFF
);
139 checkrc (rc
, __LINE__
);
140 rc
= SQLAllocHandle (SQL_HANDLE_STMT
, hdbc
, &hstmt
);
141 checkrc (rc
, __LINE__
);
145 strcpy (sData
, "0123456789012345678901234567890123456789");
146 rc
= SQLPrepare (hstmt
, (unsigned char *) "INSERT INTO t1 VALUES (?, ?)", SQL_NTS
);
149 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
150 0, 0, &iHolder
, 0, NULL
);
151 checkrc (rc
, __LINE__
);
152 SQLINTEGER sLen
= SQL_NTS
;
153 rc
= SQLBindParameter (hstmt
, 2, SQL_PARAM_INPUT
, SQL_C_CHAR
, SQL_CHAR
,
154 196, 0, (void *) sHolder
, 0, &sLen
);
155 checkrc (rc
, __LINE__
);
162 for (i
= 0; i
< ITERATION
; i
++)
166 iHolder
= ITERATION
*thno
+i
;
167 strcpy (sHolder
, sData
);
168 rc
= SQLExecute (hstmt
);
169 while(rc
!=0 && tryno
!=0)
171 rc
= SQLExecute (hstmt
);
174 if( 0==tryno
) { printf("BREAK IN INSERT THREAD NO %d\n",thno
); break;}
175 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
176 checkrc (rc
, __LINE__
);
180 printf("Thread No %d\t No Of Record Insert %d\n",thno
,i
);
181 rc
= SQLEndTran(SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
182 checkrc (rc
, __LINE__
);
184 rc
= SQLFreeHandle (SQL_HANDLE_STMT
, hstmt
);
185 checkrc (rc
, __LINE__
);
186 rc
= SQLDisconnect (hdbc
);
187 checkrc (rc
, __LINE__
);
188 rc
= SQLFreeHandle (SQL_HANDLE_DBC
, hdbc
);
189 checkrc (rc
, __LINE__
);
190 rc
= SQLFreeHandle (SQL_HANDLE_ENV
, henv
);
191 checkrc (rc
, __LINE__
);
197 void * runReadTest (void *massage
)
203 thno
=*(int*)massage
;
212 dsn
= (char *) "DSN=test;";
214 rc
= SQLAllocHandle (SQL_HANDLE_ENV
, SQL_NULL_HANDLE
, &henv
);
215 checkrc (rc
, __LINE__
);
216 SQLSetEnvAttr(henv
, SQL_ATTR_ODBC_VERSION
, (void *) SQL_OV_ODBC3
, 0);
218 rc
= SQLAllocHandle (SQL_HANDLE_DBC
, henv
, &(hdbc
));
219 checkrc (rc
, __LINE__
);
220 rc
= SQLConnect (hdbc
,
221 (SQLCHAR
*) dsn
, SQL_NTS
,
223 (SQLSMALLINT
) strlen ("root"),
224 (SQLCHAR
*) "manager",
225 (SQLSMALLINT
) strlen (""));
227 SQLCHAR outstr
[1024];
228 SQLSMALLINT outstrlen
;
229 if (SQL_SUCCEEDED(rc
)) {
230 //printf("Connected\n");
231 if (rc
== SQL_SUCCESS_WITH_INFO
) {
232 printf("Driver reported the following diagnostics\n");
233 extract_error("SQLDriverConnect",hdbc
, SQL_HANDLE_DBC
);
236 fprintf(stderr
, "Failed to connect\n");
237 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
239 checkrc (rc
, __LINE__
);
240 rc
= SQLSetConnectOption (hdbc
, SQL_AUTOCOMMIT
, SQL_AUTOCOMMIT_OFF
);
241 checkrc (rc
, __LINE__
);
242 rc
= SQLAllocHandle (SQL_HANDLE_STMT
, hdbc
, &(hstmt
));
243 checkrc (rc
, __LINE__
);
245 /* Set read-only transaction type */
246 readOnlyTrans (hdbc
);
247 rc
= SQLPrepare (hstmt
, (unsigned char *)
248 "SELECT f1, f2 FROM t1 where f1 = ?", SQL_NTS
);
249 checkrc (rc
, __LINE__
);
251 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
252 0, 0, &tempTermVar
, 0, NULL
);
253 checkrc (rc
, __LINE__
);
254 rc
= SQLBindCol (hstmt
, 1, SQL_INTEGER
, &iHolder
, 0, NULL
);
255 checkrc (rc
, __LINE__
);
256 rc
= SQLBindCol (hstmt
, 2, SQL_C_CHAR
, sHolder
, sizeof (sHolder
), NULL
);
257 checkrc (rc
, __LINE__
);
259 strcpy (sData
, "0123456789012345678901234567890123456789");
268 for (i
= 0; i
< ITERATION
; i
++)
271 tempTermVar
= ITERATION
*thno
+i
;
272 rc
= SQLExecute (hstmt
);
273 while(rc
!=0 && tryno
!=0)
275 rc
= SQLExecute (hstmt
);
278 if(0==tryno
) {printf("BREAK IN SELECT THREAD NO %d\n",thno
); break;}
279 if(SQL_SUCCEEDED(rc
= SQLFetch(hstmt
)))
283 strcpy (sData
, sHolder
);
284 rc
= SQLCloseCursor (hstmt
);
285 checkrc (rc
, __LINE__
);
286 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
287 checkrc (rc
, __LINE__
);
290 printf("Thread No %d\t No Of Record Select %d\n",thno
,count
);
291 /* Set read-write transaction type */
292 rc
= SQLEndTran(SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
293 checkrc (rc
, __LINE__
);
295 rc
= SQLFreeHandle (SQL_HANDLE_STMT
, hstmt
);
296 checkrc (rc
, __LINE__
);
297 rc
= SQLDisconnect (hdbc
);
298 checkrc (rc
, __LINE__
);
299 rc
= SQLFreeHandle (SQL_HANDLE_DBC
, hdbc
);
300 checkrc (rc
, __LINE__
);
301 rc
= SQLFreeHandle (SQL_HANDLE_ENV
, henv
);
302 checkrc (rc
, __LINE__
);
307 void *runUpdateTest (void *massage
)
310 thno
=*(int*)massage
;
320 dsn
= (char *) "DSN=test;";
322 rc
= SQLAllocHandle (SQL_HANDLE_ENV
, SQL_NULL_HANDLE
, &henv
);
323 checkrc (rc
, __LINE__
);
324 SQLSetEnvAttr(henv
, SQL_ATTR_ODBC_VERSION
, (void *) SQL_OV_ODBC3
, 0);
326 rc
= SQLAllocHandle (SQL_HANDLE_DBC
, henv
, &(hdbc
));
327 checkrc (rc
, __LINE__
);
328 rc
= SQLConnect (hdbc
,
329 (SQLCHAR
*) dsn
, SQL_NTS
,
331 (SQLSMALLINT
) strlen ("root"),
332 (SQLCHAR
*) "manager",
333 (SQLSMALLINT
) strlen (""));
335 SQLCHAR outstr
[1024];
336 SQLSMALLINT outstrlen
;
337 if (SQL_SUCCEEDED(rc
)) {
338 // printf("Connected\n");
339 if (rc
== SQL_SUCCESS_WITH_INFO
) {
340 printf("Driver reported the following diagnostics\n");
341 extract_error("SQLDriverConnect",hdbc
, SQL_HANDLE_DBC
);
344 fprintf(stderr
, "Failed to connect\n");
345 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
347 checkrc (rc
, __LINE__
);
348 rc
= SQLSetConnectOption (hdbc
, SQL_AUTOCOMMIT
, SQL_AUTOCOMMIT_OFF
);
349 checkrc (rc
, __LINE__
);
350 rc
= SQLAllocHandle (SQL_HANDLE_STMT
, hdbc
, &(hstmt
));
351 checkrc (rc
, __LINE__
);
353 rc
= SQLPrepare (hstmt
,
354 (unsigned char *) "UPDATE t1 SET f2 = ? WHERE f1 = ?",
356 checkrc (rc
, __LINE__
);
357 SQLINTEGER sLen
= SQL_NTS
;
358 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_CHAR
, SQL_CHAR
,
359 196, 0, (void *) sHolder
, 0, &sLen
);
360 checkrc (rc
, __LINE__
);
361 rc
= SQLBindParameter (hstmt
, 2, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
362 0, 0, &iHolder
, 0, NULL
);
363 checkrc (rc
, __LINE__
);
365 strcpy (sData
, "9876543210987654321098765432109876543210");
372 for (i
= 0; i
< ITERATION
; i
++)
375 iHolder
= ITERATION
*thno
+1;
376 strcpy (sHolder
, sData
);
377 rc
= SQLExecute (hstmt
);
378 while(rc
!=0 && tryno
!=0)
380 rc
= SQLExecute (hstmt
);
383 if(0==tryno
) {printf("BREAK IN UPDATE THREAD NO %d\n",thno
); break;}
384 checkrc (rc
, __LINE__
);
385 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
386 checkrc (rc
, __LINE__
);
389 printf("Thread No %d\t No Of Record Update %d\n",thno
,i
);
390 rc
= SQLEndTran(SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
391 checkrc (rc
, __LINE__
);
393 rc
= SQLFreeHandle (SQL_HANDLE_STMT
, hstmt
);
394 checkrc (rc
, __LINE__
);
395 rc
= SQLDisconnect (hdbc
);
396 checkrc (rc
, __LINE__
);
397 rc
= SQLFreeHandle (SQL_HANDLE_DBC
, hdbc
);
398 checkrc (rc
, __LINE__
);
399 rc
= SQLFreeHandle (SQL_HANDLE_ENV
, henv
);
400 checkrc (rc
, __LINE__
);
405 void *runDeleteTest (void *massage
)
408 thno
=*(int*)massage
;
415 dsn
= (char *) "DSN=test;";
417 rc
= SQLAllocHandle (SQL_HANDLE_ENV
, SQL_NULL_HANDLE
, &henv
);
418 checkrc (rc
, __LINE__
);
419 SQLSetEnvAttr(henv
, SQL_ATTR_ODBC_VERSION
, (void *) SQL_OV_ODBC3
, 0);
421 rc
= SQLAllocHandle (SQL_HANDLE_DBC
, henv
, &(hdbc
));
422 checkrc (rc
, __LINE__
);
423 rc
= SQLConnect (hdbc
,
424 (SQLCHAR
*) dsn
, SQL_NTS
,
426 (SQLSMALLINT
) strlen ("root"),
427 (SQLCHAR
*) "manager",
428 (SQLSMALLINT
) strlen (""));
430 SQLCHAR outstr
[1024];
431 SQLSMALLINT outstrlen
;
432 if (SQL_SUCCEEDED(rc
)) {
433 // printf("Connected\n");
434 if (rc
== SQL_SUCCESS_WITH_INFO
) {
435 printf("Driver reported the following diagnostics\n");
436 extract_error("SQLDriverConnect",hdbc
, SQL_HANDLE_DBC
);
439 fprintf(stderr
, "Failed to connect\n");
440 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
442 checkrc (rc
, __LINE__
);
443 rc
= SQLSetConnectOption (hdbc
, SQL_AUTOCOMMIT
, SQL_AUTOCOMMIT_OFF
);
444 checkrc (rc
, __LINE__
);
445 rc
= SQLAllocHandle (SQL_HANDLE_STMT
, hdbc
, &(hstmt
));
446 checkrc (rc
, __LINE__
);
448 rc
= SQLPrepare (hstmt
, (unsigned char *)
449 "DELETE FROM t1 WHERE f1 = ?", SQL_NTS
);
450 checkrc (rc
, __LINE__
);
451 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
452 0, 0, &iHolder
, 0, NULL
);
453 checkrc (rc
, __LINE__
);
459 for (i
= 0; i
< ITERATION
; i
++)
462 iHolder
= ITERATION
*thno
+i
;
463 rc
= SQLExecute (hstmt
);
464 while(rc
!=0 && tryno
!=0)
466 rc
= SQLExecute (hstmt
);
469 if(0==tryno
) {printf("BREAK IN DELETE THREAD NO %d\n",thno
); break;}
470 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
471 checkrc (rc
, __LINE__
);
474 printf("Thread No %d\t No Of Record Delete %d\n",thno
,i
);
475 //printf ("Delete: 1 %lld %lld %lld\n", timer.minc (), timer.maxc (), timer.avg ());
476 rc
= SQLEndTran(SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
477 checkrc (rc
, __LINE__
);
479 rc
= SQLFreeHandle (SQL_HANDLE_STMT
, hstmt
);
480 checkrc (rc
, __LINE__
);
481 rc
= SQLDisconnect (hdbc
);
482 checkrc (rc
, __LINE__
);
483 rc
= SQLFreeHandle (SQL_HANDLE_DBC
, hdbc
);
484 checkrc (rc
, __LINE__
);
485 rc
= SQLFreeHandle (SQL_HANDLE_ENV
, henv
);
486 checkrc (rc
, __LINE__
);
493 int main (int ac
, char **av
)
500 dsn
= (char *) "DSN=test;";
502 rc
= SQLAllocHandle (SQL_HANDLE_ENV
, SQL_NULL_HANDLE
, &henv
);
503 checkrc (rc
, __LINE__
);
504 SQLSetEnvAttr(henv
, SQL_ATTR_ODBC_VERSION
, (void *) SQL_OV_ODBC3
, 0);
506 rc
= SQLAllocHandle (SQL_HANDLE_DBC
, henv
, &(hdbc
));
507 checkrc (rc
, __LINE__
);
508 rc
= SQLConnect (hdbc
,
509 (SQLCHAR
*) dsn
, SQL_NTS
,
511 (SQLSMALLINT
) strlen ("root"),
512 (SQLCHAR
*) "manager",
513 (SQLSMALLINT
) strlen (""));
515 SQLCHAR outstr
[1024];
516 SQLSMALLINT outstrlen
;
517 if (SQL_SUCCEEDED(rc
)) {
518 //printf("Connected\n");
519 if (rc
== SQL_SUCCESS_WITH_INFO
) {
520 printf("Driver reported the following diagnostics\n");
521 extract_error("SQLDriverConnect",hdbc
, SQL_HANDLE_DBC
);
524 fprintf(stderr
, "Failed to connect\n");
525 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
527 checkrc (rc
, __LINE__
);
528 rc
= SQLSetConnectOption (hdbc
, SQL_AUTOCOMMIT
, SQL_AUTOCOMMIT_OFF
);
529 checkrc (rc
, __LINE__
);
530 rc
= SQLAllocHandle (SQL_HANDLE_STMT
, hdbc
, &(hstmt
));
531 checkrc (rc
, __LINE__
);
532 rc
= SQLExecDirect(hstmt
, (SQLCHAR
*) "CREATE TABLE t1 (f1 INTEGER, f2 char(196));", SQL_NTS
);
533 checkrc (rc
, __LINE__
);
534 printf("t1 Table Created\n");
536 rc
= SQLExecDirect(hstmt
, (SQLCHAR
*) "CREATE INDEX idx1 on t1(f1) hash;", SQL_NTS
);
537 checkrc (rc
, __LINE__
);
538 printf("Hash Index Created\n");
541 rc
= SQLExecDirect(hstmt
, (SQLCHAR
*) "CREATE INDEX idx1 on t1(f1) tree;", SQL_NTS
);
542 checkrc (rc
, __LINE__
);
543 printf("Tree Index Created\n");
545 pthread_t thr
[THREADS
];
546 int message
[THREADS
];
548 printf("Insert Operartion \n");
549 for (int i
=0; i
<THREADS
; i
++)
552 pthread_create (&thr
[i
], NULL
, &runInsertTest
, (void *) &message
[i
]);
554 for (int i
=0; i
<THREADS
; i
++) {
555 pthread_join(thr
[i
], (void**)&status
);
557 printf("Select Operartion \n");
558 for (int i
=0; i
<THREADS
; i
++)
561 pthread_create (&thr
[i
], NULL
, &runReadTest
, (void *) &message
[i
]);
563 for (int i
=0; i
<THREADS
; i
++) {
564 pthread_join(thr
[i
], (void**)&status
);
566 printf("Update Operartion \n");
567 for (int i
=0; i
<THREADS
; i
++)
570 pthread_create (&thr
[i
], NULL
, &runUpdateTest
, (void *) &message
[i
]);
572 for (int i
=0; i
<THREADS
; i
++) {
573 pthread_join(thr
[i
], (void**)&status
);
575 printf("Delete Operartion \n");
576 for (int i
=0; i
<THREADS
; i
++)
579 pthread_create (&thr
[i
], NULL
, &runDeleteTest
, (void *) &message
[i
]);
581 for (int i
=0; i
<THREADS
; i
++) {
582 pthread_join(thr
[i
], (void**)&status
);
585 rc
= SQLExecDirect(hstmt
, (SQLCHAR
*) "DROP TABLE t1;", SQL_NTS
);
586 checkrc (rc
, __LINE__
);
587 printf("t1 Table Droped\n");
588 rc
= SQLEndTran(SQL_HANDLE_DBC
, hdbc
, SQL_COMMIT
);
589 checkrc (rc
, __LINE__
);
591 rc
= SQLFreeHandle (SQL_HANDLE_STMT
, hstmt
);
592 checkrc (rc
, __LINE__
);
593 rc
= SQLDisconnect (hdbc
);
594 checkrc (rc
, __LINE__
);
595 rc
= SQLFreeHandle (SQL_HANDLE_DBC
, hdbc
);
596 checkrc (rc
, __LINE__
);
597 rc
= SQLFreeHandle (SQL_HANDLE_ENV
, henv
);
598 checkrc (rc
, __LINE__
);