adding test scripts
[csql.git] / test / performance / loadtest / ODBCTest.c
blobaa9da77555ed295700b319758acd93cc30038699
2 #include <iostream>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <time.h>
7 #include <sql.h>
8 #include <sqlext.h>
9 #include "NanoTimer.h"
10 //#define START 1010000001
11 //#define ITERATION 100
12 using namespace std;
14 int START=0;
15 int ITERATION=0;
16 NanoTimer timer;
18 void extract_error(
19 char *fn,
20 SQLHANDLE handle,
21 SQLSMALLINT type)
23 SQLINTEGER i = 0;
24 SQLINTEGER native;
25 SQLCHAR state[ 7 ];
26 SQLCHAR text[256];
27 SQLSMALLINT len;
28 SQLRETURN ret;
30 fprintf(stderr,
31 "\n"
32 "The driver reported the following diagnostics whilst running "
33 "%s\n\n",
34 fn);
38 ret = SQLGetDiagRec(type, handle, ++i, state, &native, text,
39 sizeof(text), &len );
40 if (SQL_SUCCEEDED(ret))
41 printf("%s:%ld:%ld:%s\n", state, i, native, text);
43 while( ret == SQL_SUCCESS );
46 inline void
47 check_error (SQLSMALLINT handleType, SQLHANDLE handle, int rc, int line)
49 if (rc)
51 cout << "Error " << rc << " at line: " << line << endl;
52 SQLCHAR state[10];
53 SQLINTEGER native;
54 SQLCHAR mesg[300];
55 int i=0;
56 while (SQLGetDiagRec (handleType, handle, i++, state, &native, mesg, 300,
57 NULL) == SQL_SUCCESS)
59 mesg[299] = '\0';
60 cout << "state: " << state << endl;
61 cout << "native: " << native << endl;
62 cout << "mesg: " << mesg << endl;
64 exit (1);
69 inline void
70 checkrc (int rc, int line)
72 if (rc)
74 cout << "Error " << rc << " at line: " << line << endl;
75 exit (1);
79 void
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__);
89 void
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 int
100 runInsertTest (SQLHANDLE henv, SQLHANDLE hdbc, SQLHANDLE hstmt)
102 int rc;
103 int iHolder;
104 char sHolder[200];
105 char sData[200];
107 iHolder = 0;
108 strcpy (sData, "0123456789012345678901234567890123456789");
109 rc = SQLPrepare (hstmt, (unsigned char *) "INSERT INTO t1 VALUES (?, 2000)",
110 SQL_NTS);
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__);
119 int i, j, k;
120 int tCount;
122 timer.reset ();
124 /* Run 1per Test */
125 for (i = START; i<(START + ITERATION); i++)
127 timer.start ();
128 iHolder = i ;
129 strcpy (sHolder, sData);
130 rc = SQLExecute (hstmt);
131 checkrc (rc, __LINE__);
132 rc = SQLTransact (henv, hdbc, SQL_COMMIT);
133 checkrc (rc, __LINE__);
134 timer.stop ();
137 printf ("Insert: 1 %lld %lld %lld\n", timer.min (), timer.max (),
138 timer.avg ());
140 return 0;
145 runReadTest (SQLHANDLE henv, SQLHANDLE hdbc, SQLHANDLE hstmt)
147 int iHolder;
148 int second;
149 char sHolder[200];
150 char sData[200];
152 int tempTermVar = 0;
153 int tempTermVal = 0;
154 int rc;
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__);
161 long sz = 0;
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__);
169 iHolder = 0;
170 strcpy (sData, "0123456789012345678901234567890123456789");
172 int i, j, k;
173 int tCount;
175 timer.reset ();
177 /* Run 1per Test */
178 for (i = START; i < (START+ITERATION); i++)
180 timer.start ();
181 tempTermVar = 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__);
192 timer.stop ();
194 printf ("Read: 1 %lld %lld %lld\n", timer.min (), timer.max (),
195 timer.avg ());
196 /* Set read-write transaction type */
197 readWriteTrans (hdbc);
198 return rc;
202 runUpdateTest (SQLHANDLE henv, SQLHANDLE hdbc, SQLHANDLE hstmt)
204 int rc;
205 int iHolder;
206 char sHolder[200];
207 char sData[200];
209 rc = SQLPrepare (hstmt,
210 (unsigned char *) "UPDATE t1 SET f2 = 122323 WHERE f1 = ?",
211 SQL_NTS);
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__);
217 iHolder = 0;
218 strcpy (sData, "9876543210987654321098765432109876543210");
220 int i, j, k;
221 int tCount;
223 timer.reset ();
225 /* Run 1per Test */
226 for (i = START; i < (START+ITERATION); i++)
228 timer.start ();
229 iHolder = i ;
230 strcpy (sHolder, sData);
231 rc = SQLExecute (hstmt);
232 checkrc (rc, __LINE__);
233 rc = SQLTransact (henv, hdbc, SQL_COMMIT);
234 checkrc (rc, __LINE__);
235 timer.stop ();
237 printf ("Update: 1 %lld %lld %lld\n", timer.min (), timer.max (),
238 timer.avg ());
240 return 0;
244 runDeleteTest (SQLHANDLE henv, SQLHANDLE hdbc, SQLHANDLE hstmt)
246 int rc;
247 int iHolder;
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__);
255 iHolder = 0;
256 int i, j, k;
257 int tCount;
258 timer.reset ();
259 /* Run 1per Test */
260 for (i = START; i < (START+ITERATION); i++)
262 timer.start ();
263 iHolder = i ;
264 rc = SQLExecute (hstmt);
265 checkrc (rc, __LINE__);
266 rc = SQLTransact (henv, hdbc, SQL_COMMIT);
267 checkrc (rc, __LINE__);
268 timer.stop ();
270 printf ("Delete: 1 %lld %lld %lld\n", timer.min (), timer.max (),
271 timer.avg ());
272 return 0;
276 main (int ac, char **av)
278 int rc;
279 char *dsn;
280 //SQLHANDLE henv, hdbc, hstmt;
281 ITERATION = atoi(getenv("ITERATION"));
282 START = atoi(getenv("START"));
283 SQLHENV henv;
284 SQLHDBC hdbc;
285 SQLHSTMT hstmt;
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"),
297 (SQLCHAR *) "root",
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);
313 } else {
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__);
346 exit (0);