adding test scripts
[csql.git] / test / performance / loadtest / ODBCTestWiscSchema.c
blobf13be8cd170bb0e6ea6bd670da7836f363e5ae02
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(?,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__);
118 int i, j, k;
119 int tCount;
121 timer.reset ();
123 /* Run 1per Test */
124 for (i = START; i<(START + ITERATION); i++)
126 timer.start ();
127 iHolder = i ;
128 strcpy (sHolder, sData);
129 rc = SQLExecute (hstmt);
130 checkrc (rc, __LINE__);
131 rc = SQLTransact (henv, hdbc, SQL_COMMIT);
132 checkrc (rc, __LINE__);
133 timer.stop ();
136 printf ("Insert: 1 %lld %lld %lld\n", timer.min (), timer.max (),
137 timer.avg ());
139 return 0;
144 runReadTest (SQLHANDLE henv, SQLHANDLE hdbc, SQLHANDLE hstmt)
146 int iHolder;
147 int second;
148 char sHolder[200];
149 char sData[200];
151 int tempTermVar = 0;
152 int tempTermVal = 0;
153 int rc;
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__);
160 long sz = 0;
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__);
168 iHolder = 0;
169 strcpy (sData, "0123456789012345678901234567890123456789");
171 int i, j, k;
172 int tCount;
174 timer.reset ();
176 /* Run 1per Test */
177 for (i = START; i < (START+ITERATION); i++)
179 timer.start ();
180 tempTermVar = 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__);
191 timer.stop ();
193 printf ("Read: 1 %lld %lld %lld\n", timer.min (), timer.max (),
194 timer.avg ());
195 /* Set read-write transaction type */
196 readWriteTrans (hdbc);
197 return rc;
201 runUpdateTest (SQLHANDLE henv, SQLHANDLE hdbc, SQLHANDLE hstmt)
203 int rc;
204 int iHolder;
205 char sHolder[200];
206 char sData[200];
208 rc = SQLPrepare (hstmt,
209 (unsigned char *) "UPDATE t1 SET f2 = 122323 WHERE f1 = ?",
210 SQL_NTS);
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__);
216 iHolder = 0;
217 strcpy (sData, "9876543210987654321098765432109876543210");
219 int i, j, k;
220 int tCount;
222 timer.reset ();
224 /* Run 1per Test */
225 for (i = START; i < (START+ITERATION); i++)
227 timer.start ();
228 iHolder = i ;
229 strcpy (sHolder, sData);
230 rc = SQLExecute (hstmt);
231 checkrc (rc, __LINE__);
232 rc = SQLTransact (henv, hdbc, SQL_COMMIT);
233 checkrc (rc, __LINE__);
234 timer.stop ();
236 printf ("Update: 1 %lld %lld %lld\n", timer.min (), timer.max (),
237 timer.avg ());
239 return 0;
243 runDeleteTest (SQLHANDLE henv, SQLHANDLE hdbc, SQLHANDLE hstmt)
245 int rc;
246 int iHolder;
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__);
254 iHolder = 0;
255 int i, j, k;
256 int tCount;
257 timer.reset ();
258 /* Run 1per Test */
259 for (i = START; i < (START+ITERATION); i++)
261 timer.start ();
262 iHolder = i ;
263 rc = SQLExecute (hstmt);
264 checkrc (rc, __LINE__);
265 rc = SQLTransact (henv, hdbc, SQL_COMMIT);
266 checkrc (rc, __LINE__);
267 timer.stop ();
269 printf ("Delete: 1 %lld %lld %lld\n", timer.min (), timer.max (),
270 timer.avg ());
271 return 0;
275 main (int ac, char **av)
277 int rc;
278 char *dsn;
279 //SQLHANDLE henv, hdbc, hstmt;
280 ITERATION = atoi(getenv("ITERATION"));
281 START = atoi(getenv("START"));
282 SQLHENV henv;
283 SQLHDBC hdbc;
284 SQLHSTMT hstmt;
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"),
296 (SQLCHAR *) "root",
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);
312 } else {
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__);
345 exit (0);