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(?,12,13,14,15,16,17,18,19,20,21,100,100,'AXXXXXXXXXXXXXXXXXXXXXXXXXCXXXXXXXXXXXXXXXXXXXXXXXX','GXXXXXXXXXXXXXXXXXXXXXXXXXCXXXXXXXXXXXXXXXXXXXXXXXXA','OXXXXXXXXXXXXXXXXXXXXXXXXXOXXXXXXXXXXXXXXXXXXXXXXXXO')", SQL_NTS
);
110 checkrc (rc
, __LINE__
);
111 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
112 0, 0, &iHolder
, 0, NULL
);
113 checkrc (rc
, __LINE__
);
114 SQLINTEGER sLen
= SQL_NTS
;
115 /* rc = SQLBindParameter (hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
116 196, 0, (void *) sHolder, 0, &sLen);*/
117 checkrc (rc
, __LINE__
);
124 for (i
= START
; i
<(START
+ ITERATION
); i
++)
128 strcpy (sHolder
, sData
);
129 rc
= SQLExecute (hstmt
);
130 checkrc (rc
, __LINE__
);
131 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
132 checkrc (rc
, __LINE__
);
136 printf ("Insert: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
144 runReadTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
155 /* Set read-only transaction type */
156 readOnlyTrans (hdbc
);
157 rc
= SQLPrepare (hstmt
, (unsigned char *)
158 "SELECT f1, f2 FROM t1 where f1 = ?", SQL_NTS
);
159 checkrc (rc
, __LINE__
);
161 rc
= SQLBindParameter (hstmt
, 1, SQL_PARAM_INPUT
, SQL_C_LONG
, SQL_INTEGER
,
162 0, 0, &tempTermVar
, 0, NULL
);
163 checkrc (rc
, __LINE__
);
164 rc
= SQLBindCol (hstmt
, 1, SQL_INTEGER
, &iHolder
, 0, NULL
);
165 checkrc (rc
, __LINE__
);
166 rc
= SQLBindCol (hstmt
, 2, SQL_INTEGER
, &second
, 0, NULL
);
167 checkrc (rc
, __LINE__
);
169 strcpy (sData
, "0123456789012345678901234567890123456789");
177 for (i
= START
; i
< (START
+ITERATION
); i
++)
181 rc
= SQLExecute (hstmt
);
182 checkrc (rc
, __LINE__
);
183 rc
= SQLFetch (hstmt
);
184 checkrc (rc
, __LINE__
);
185 tempTermVal
= iHolder
;
186 strcpy (sData
, sHolder
);
187 rc
= SQLCloseCursor (hstmt
);
188 checkrc (rc
, __LINE__
);
189 rc
= SQLTransact (henv
, hdbc
, SQL_COMMIT
);
190 checkrc (rc
, __LINE__
);
193 printf ("Read: 1 %lld %lld %lld\n", timer
.min (), timer
.max (),
195 /* Set read-write transaction type */
196 readWriteTrans (hdbc
);
201 runUpdateTest (SQLHANDLE henv
, SQLHANDLE hdbc
, SQLHANDLE hstmt
)
208 rc
= SQLPrepare (hstmt
,
209 (unsigned char *) "UPDATE t1 SET f2 = 122323 WHERE f1 = ?",
211 checkrc (rc
, __LINE__
);
212 SQLINTEGER sLen
= SQL_NTS
;
213 rc
= SQLBindParameter (hstmt
, 1, 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
= START
; i
< (START
+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
= START
; i
< (START
+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 (),
275 main (int ac
, char **av
)
279 //SQLHANDLE henv, hdbc, hstmt;
280 ITERATION
= atoi(getenv("ITERATION"));
281 START
= atoi(getenv("START"));
286 dsn
= (char *) "DSN=myodbc3;";
288 rc
= SQLAllocHandle (SQL_HANDLE_ENV
, SQL_NULL_HANDLE
, &henv
);
289 checkrc (rc
, __LINE__
);
290 SQLSetEnvAttr(henv
, SQL_ATTR_ODBC_VERSION
, (void *) SQL_OV_ODBC3
, 0);
292 rc
= SQLAllocHandle (SQL_HANDLE_DBC
, henv
, &hdbc
);
293 checkrc (rc
, __LINE__
);
294 rc
= SQLConnect (hdbc
,
295 (SQLCHAR
*) "test", (SQLSMALLINT
) strlen ("test"),
297 (SQLSMALLINT
) strlen ("root"),
298 (SQLCHAR
*) "manager",
299 (SQLSMALLINT
) strlen ("manager"));
301 SQLCHAR outstr
[1024];
302 SQLSMALLINT outstrlen
;
303 /*rc = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)"DSN=myodbc3;UID=root;PWD=root123;", SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT);
305 if (SQL_SUCCEEDED(rc
)) {
306 printf("Connected\n");
307 //printf("Returned connection string was:\n\t%s\n", outstr);
308 if (rc
== SQL_SUCCESS_WITH_INFO
) {
309 printf("Driver reported the following diagnostics\n");
310 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
313 fprintf(stderr
, "Failed to connect\n");
314 extract_error("SQLDriverConnect", hdbc
, SQL_HANDLE_DBC
);
317 //check_error (SQL_HANDLE_DBC, hdbc, rc, __LINE__);
318 checkrc (rc
, __LINE__
);
319 rc
= SQLSetConnectOption (hdbc
, SQL_AUTOCOMMIT
, SQL_AUTOCOMMIT_OFF
);
320 checkrc (rc
, __LINE__
);
321 rc
= SQLAllocHandle (SQL_HANDLE_STMT
, hdbc
, &hstmt
);
322 checkrc (rc
, __LINE__
);
324 rc = SQLExecDirect(hstmt, (SQLCHAR*) "CREATE TABLE t1 (f1 INTEGER, f2 char(1960), primary key (f1) size 10000);", SQL_NTS );
325 checkrc (rc, __LINE__);
327 runInsertTest (henv
, hdbc
, hstmt
);
328 runReadTest (henv
, hdbc
, hstmt
);
329 runUpdateTest (henv
, hdbc
, hstmt
);
330 runDeleteTest (henv
, hdbc
, hstmt
);
332 rc = SQLExecDirect(hstmt, (SQLCHAR*) "DROP TABLE t1;", SQL_NTS );
333 checkrc (rc, __LINE__);
334 rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT );
335 checkrc (rc, __LINE__);
337 rc
= SQLFreeHandle (SQL_HANDLE_STMT
, hstmt
);
338 checkrc (rc
, __LINE__
);
339 rc
= SQLDisconnect (hdbc
);
340 checkrc (rc
, __LINE__
);
341 rc
= SQLFreeHandle (SQL_HANDLE_DBC
, hdbc
);
342 checkrc (rc
, __LINE__
);
343 rc
= SQLFreeHandle (SQL_HANDLE_ENV
, henv
);
344 checkrc (rc
, __LINE__
);