10 //#define START 1010000001
11 //#define ITERATION 100
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__
);
100 runInsertTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
108 strcpy (sData
, "0123456789012345678901234567890123456789");
109 rc
= SQLPrepare (hstmt
, (unsigned char *) "INSERT INTO t1 VALUES (?, 2000)",
111 checkrc (rc
, __LINE__
);
112 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
113 0, 0, &iHolder
, 0, NULL
);
114 checkrc (rc
, __LINE__
);
115 SQLINTEGER sLen
= SQL_NTS
;
116 /* rc = SQLBindParameter (hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
117 196, 0, (void *) sHolder, 0, &sLen);*/
118 checkrc (rc
, __LINE__
);
125 for (i
= START
; i
<(START
+ ITERATION
); i
++)
129 strcpy (sHolder
, sData
);
130 rc
= SQLExecute (hstmt
);
131 checkrc (rc
, __LINE__
);
132 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
133 checkrc (rc
, __LINE__
);
137 printf ("Insert: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
145 runReadTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
156 /* Set read-only transaction type */
157 readOnlyTrans (hdbc
);
158 rc
= SQLPrepare (hstmt
, (unsigned char *)
159 "SELECT f1, f2 FROM t1 where f1 = ?", SQL_NTS
);
160 checkrc (rc
, __LINE__
);
162 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
163 0, 0, &tempTermVar
, 0, NULL
);
164 checkrc (rc
, __LINE__
);
165 rc
= SQLBindCol (hstmt
, 1, SQL_INTEGER
, &iHolder
, 0, NULL
);
166 checkrc (rc
, __LINE__
);
167 rc
= SQLBindCol (hstmt
, 2, SQL_INTEGER
, &second
, 0, NULL
);
168 checkrc (rc
, __LINE__
);
170 strcpy (sData
, "0123456789012345678901234567890123456789");
178 for (i
= START
; i
< (START
+ITERATION
); i
++)
182 rc
= SQLExecute (hstmt
);
183 checkrc (rc
, __LINE__
);
184 rc
= SQLFetch (hstmt
);
185 checkrc (rc
, __LINE__
);
186 tempTermVal
= iHolder
;
187 strcpy (sData
, sHolder
);
188 rc
= SQLCloseCursor (hstmt
);
189 checkrc (rc
, __LINE__
);
190 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
191 checkrc (rc
, __LINE__
);
194 printf ("Read: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
196 /* Set read-write transaction type */
197 readWriteTrans (hdbc
);
202 runUpdateTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
209 rc
= SQLPrepare (hstmt
,
210 (unsigned char *) "UPDATE t1 SET f2 = 122323 WHERE f1 = ?",
212 checkrc (rc
, __LINE__
);
213 SQLINTEGER sLen
= SQL_NTS
;
214 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
215 0, 0, &iHolder
, 0, NULL
);
216 checkrc (rc
, __LINE__
);
218 strcpy (sData
, "9876543210987654321098765432109876543210");
226 for (i
= START
; i
< (START
+ITERATION
); i
++)
230 strcpy (sHolder
, sData
);
231 rc
= SQLExecute (hstmt
);
232 checkrc (rc
, __LINE__
);
233 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
234 checkrc (rc
, __LINE__
);
237 printf ("Update: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
244 runDeleteTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
249 rc
= SQLPrepare (hstmt
, (unsigned char *)
250 "DELETE FROM t1 WHERE f1 = ?", SQL_NTS
);
251 checkrc (rc
, __LINE__
);
252 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
253 0, 0, &iHolder
, 0, NULL
);
254 checkrc (rc
, __LINE__
);
260 for (i
= START
; i
< (START
+ITERATION
); i
++)
264 rc
= SQLExecute (hstmt
);
265 checkrc (rc
, __LINE__
);
266 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
267 checkrc (rc
, __LINE__
);
270 printf ("Delete: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
276 main (int ac
, char **av
)
280 //SQLHANDLE henv, hdbc, hstmt;
281 ITERATION
= atoi(getenv("ITERATION"));
282 START
= atoi(getenv("START"));
287 dsn
= (char *) "DSN=myodbc3;";
289 rc
= SQLAllocHandle (SQL_HANDLE_ENV
, SQL_NULL_HANDLE
, &henv
);
290 checkrc (rc
, __LINE__
);
291 SQLSetEnvAttr(henv
, SQL_ATTR_ODBC_VERSION
, (void *) SQL_OV_ODBC3
, 0);
293 rc
= SQLAllocHandle (SQL_HANDLE_DBC
, henv
, &hdbc
);
294 checkrc (rc
, __LINE__
);
295 rc
= SQLConnect (hdbc
,
296 (SQLCHAR
*) "test", (SQLSMALLINT
) strlen ("test"),
298 (SQLSMALLINT
) strlen ("root"),
299 (SQLCHAR
*) "manager",
300 (SQLSMALLINT
) strlen ("manager"));
302 SQLCHAR outstr
[1024];
303 SQLSMALLINT outstrlen
;
304 /*rc = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)"DSN=myodbc3;UID=root;PWD=root123;", SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT);
306 if (SQL_SUCCEEDED(rc
)) {
307 printf("Connected\n");
308 //printf("Returned connection string was:\n\t%s\n", outstr);
309 if (rc
== SQL_SUCCESS_WITH_INFO
) {
310 printf("Driver reported the following diagnostics\n");
311 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
314 fprintf(stderr
, "Failed to connect\n");
315 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
318 //check_error (SQL_HANDLE_DBC, hdbc, rc, __LINE__);
319 checkrc (rc
, __LINE__
);
320 rc
= SQLSetConnectOption (hdbc
, SQL_AUTOCOMMIT
, SQL_AUTOCOMMIT_OFF
);
321 checkrc (rc
, __LINE__
);
322 rc
= SQLAllocHandle (SQL_HANDLE_STMT
, hdbc
, &hstmt
);
323 checkrc (rc
, __LINE__
);
325 rc = SQLExecDirect(hstmt, (SQLCHAR*) "CREATE TABLE t1 (f1 INTEGER, f2 char(1960), primary key (f1) size 10000);", SQL_NTS );
326 checkrc (rc, __LINE__);
328 runInsertTest (henv
, hdbc
, hstmt
);
329 runReadTest (henv
, hdbc
, hstmt
);
330 runUpdateTest (henv
, hdbc
, hstmt
);
331 runDeleteTest (henv
, hdbc
, hstmt
);
333 rc = SQLExecDirect(hstmt, (SQLCHAR*) "DROP TABLE t1;", SQL_NTS );
334 checkrc (rc, __LINE__);
335 rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT );
336 checkrc (rc, __LINE__);
338 rc
= SQLFreeHandle (SQL_HANDLE_STMT
, hstmt
);
339 checkrc (rc
, __LINE__
);
340 rc
= SQLDisconnect (hdbc
);
341 checkrc (rc
, __LINE__
);
342 rc
= SQLFreeHandle (SQL_HANDLE_DBC
, hdbc
);
343 checkrc (rc
, __LINE__
);
344 rc
= SQLFreeHandle (SQL_HANDLE_ENV
, henv
);
345 checkrc (rc
, __LINE__
);