1 // Copyright (c) 1999-2018 David Muse
2 // See the file COPYING for more information.
3
4 #include <sqlrelay/sqlrclient.h>
5 #include <rudiments/charstring.h>
6 #include <rudiments/process.h>
7 #include <rudiments/snooze.h>
8 #include <rudiments/stdio.h>
9
10 sqlrconnection *con;
11 sqlrcursor *cur;
12 sqlrconnection *secondcon;
13 sqlrcursor *secondcur;
14
checkSuccess(const char * value,const char * success)15 void checkSuccess(const char *value, const char *success) {
16
17 if (!success) {
18 if (!value) {
19 stdoutput.printf("success \n");
20 return;
21 } else {
22 stdoutput.printf("failure %s!=%s\n",value,success);
23 delete cur;
24 delete con;
25 process::exit(1);
26 }
27 }
28
29 if (!charstring::compare(value,success)) {
30 stdoutput.printf("success \n");
31 } else {
32 stdoutput.printf("failure %s!=%s\n",value,success);
33 delete cur;
34 delete con;
35 process::exit(1);
36 }
37 }
38
checkSuccess(const char * value,const char * success,size_t length)39 void checkSuccess(const char *value, const char *success, size_t length) {
40
41 if (!success) {
42 if (!value) {
43 stdoutput.printf("success \n");
44 return;
45 } else {
46 stdoutput.printf("failure %s!=%s\n",value,success);
47 delete cur;
48 delete con;
49 process::exit(1);
50 }
51 }
52
53 if (!charstring::compare(value,success,length)) {
54 stdoutput.printf("success \n");
55 } else {
56 stdoutput.printf("failure %s!=%s\n",value,success);
57 delete cur;
58 delete con;
59 process::exit(1);
60 }
61 }
62
checkSuccess(int value,int success)63 void checkSuccess(int value, int success) {
64
65 if (value==success) {
66 stdoutput.printf("success \n");
67 } else {
68 stdoutput.printf("failure %d!=%d\n",value,success);
69 delete cur;
70 delete con;
71 process::exit(1);
72 }
73 }
74
checkSuccess(double value,double success)75 void checkSuccess(double value, double success) {
76
77 if (value==success) {
78 stdoutput.printf("success \n");
79 } else {
80 stdoutput.printf("failure %f!=%f\n",value,success);
81 delete cur;
82 delete con;
83 process::exit(1);
84 }
85 }
86
main(int argc,char ** argv)87 int main(int argc, char **argv) {
88
89 const char * const *cols;
90 const char * const *fields;
91 uint32_t *fieldlens;
92
93 // instantiation
94 con=new sqlrconnection("sqlrelay",9000,"/tmp/test.socket",
95 "test","test",0,1);
96 cur=new sqlrcursor(con);
97
98 // get database type
99 stdoutput.printf("IDENTIFY: \n");
100 checkSuccess(con->identify(),"router");
101 stdoutput.printf("\n");
102
103 // get the db version
104 const char *dbversion=con->dbVersion();
105 uint32_t majorversion=dbversion[0]-'0';
106
107 // ping
108 stdoutput.printf("PING: \n");
109 checkSuccess(con->ping(),1);
110 stdoutput.printf("\n");
111
112 stdoutput.printf("FILTERED-OUT QUERIES: \n");
113 checkSuccess(cur->sendQuery("create table junktable (col1 int)"),0);
114 checkSuccess(cur->sendQuery("insert into junktable values (1)"),0);
115 checkSuccess(cur->sendQuery("update junktable set col1=2"),0);
116 checkSuccess(cur->sendQuery("delete from junktable"),0);
117 checkSuccess(cur->sendQuery("drop table junktable (col1 int)"),0);
118 stdoutput.printf("\n");
119
120 // drop existing table
121 cur->sendQuery("drop table testtable1");
122 cur->sendQuery("drop table testtable2");
123
124 stdoutput.printf("CREATE TESTTABLES: \n");
125 checkSuccess(cur->sendQuery("create table testtable1 (testint int, testfloat float, testreal real, testsmallint smallint, testchar char(40), testvarchar varchar(40), testdate date, testtime time, testtimestamp timestamp)"),1);
126 checkSuccess(cur->sendQuery("create table testtable2 (testint int, testfloat float, testreal real, testsmallint smallint, testchar char(40), testvarchar varchar(40), testdate date, testtime time, testtimestamp timestamp)"),1);
127 stdoutput.printf("\n");
128
129 stdoutput.printf("BEGIN TRANSCTION: \n");
130 checkSuccess(cur->sendQuery("begin"),1);
131 stdoutput.printf("\n");
132
133 stdoutput.printf("INSERT: \n");
134 checkSuccess(cur->sendQuery("insert into testtable1 values (1,1.1,1.1,1,'testchar1','testvarchar1','2001-01-01','01:00:00',NULL)"),1);
135 checkSuccess(cur->sendQuery("insert into testtable1 values (2,2.2,2.2,2,'testchar2','testvarchar2','2002-01-01','02:00:00',NULL)"),1);
136 checkSuccess(cur->sendQuery("insert into testtable1 values (3,3.3,3.3,3,'testchar3','testvarchar3','2003-01-01','03:00:00',NULL)"),1);
137 checkSuccess(cur->sendQuery("insert into testtable1 values (4,4.4,4.4,4,'testchar4','testvarchar4','2004-01-01','04:00:00',NULL)"),1);
138 stdoutput.printf("\n");
139 checkSuccess(cur->sendQuery("insert into testtable2 values (1,1.1,1.1,1,'testchar1','testvarchar1','2001-01-01','01:00:00',NULL)"),1);
140 checkSuccess(cur->sendQuery("insert into testtable2 values (2,2.2,2.2,2,'testchar2','testvarchar2','2002-01-01','02:00:00',NULL)"),1);
141 checkSuccess(cur->sendQuery("insert into testtable2 values (3,3.3,3.3,3,'testchar3','testvarchar3','2003-01-01','03:00:00',NULL)"),1);
142 checkSuccess(cur->sendQuery("insert into testtable2 values (4,4.4,4.4,4,'testchar4','testvarchar4','2004-01-01','04:00:00',NULL)"),1);
143 stdoutput.printf("\n");
144
145 stdoutput.printf("AFFECTED ROWS: \n");
146 checkSuccess(cur->affectedRows(),1);
147 stdoutput.printf("\n");
148
149 stdoutput.printf("BIND BY NAME: \n");
150 cur->prepareQuery("insert into testtable1 values (?,?,?,?,?,?,?,?,NULL)");
151 checkSuccess(cur->countBindVariables(),8);
152 cur->inputBind("1",5);
153 cur->inputBind("2",5.5,4,2);
154 cur->inputBind("3",5.5,4,2);
155 cur->inputBind("4",5);
156 cur->inputBind("5","testchar5");
157 cur->inputBind("6","testvarchar5");
158 cur->inputBind("7","2005-01-01");
159 cur->inputBind("8","05:00:00");
160 checkSuccess(cur->executeQuery(),1);
161 cur->clearBinds();
162 cur->inputBind("1",6);
163 cur->inputBind("2",6.6,4,2);
164 cur->inputBind("3",6.6,4,2);
165 cur->inputBind("4",6);
166 cur->inputBind("5","testchar6");
167 cur->inputBind("6","testvarchar6");
168 cur->inputBind("7","2006-01-01");
169 cur->inputBind("8","06:00:00");
170 checkSuccess(cur->executeQuery(),1);
171 cur->clearBinds();
172 cur->inputBind("1",7);
173 cur->inputBind("2",7.7,4,2);
174 cur->inputBind("3",7.7,4,2);
175 cur->inputBind("4",7);
176 cur->inputBind("5","testchar7");
177 cur->inputBind("6","testvarchar7");
178 cur->inputBind("7","2007-01-01");
179 cur->inputBind("8","07:00:00");
180 checkSuccess(cur->executeQuery(),1);
181 stdoutput.printf("\n");
182
183 stdoutput.printf("BIND BY NAME WITH VALIDATION: \n");
184 cur->clearBinds();
185 cur->inputBind("1",8);
186 cur->inputBind("2",8.8,4,2);
187 cur->inputBind("3",8.8,4,2);
188 cur->inputBind("4",8);
189 cur->inputBind("5","testchar8");
190 cur->inputBind("6","testvarchar8");
191 cur->inputBind("7","2008-01-01");
192 cur->inputBind("8","08:00:00");
193 cur->inputBind("9","junkvalue");
194 cur->validateBinds();
195 checkSuccess(cur->executeQuery(),1);
196 stdoutput.printf("\n");
197
198 stdoutput.printf("BIND BY NAME: \n");
199 cur->prepareQuery("insert into testtable2 values (?,?,?,?,?,?,?,?,NULL)");
200 checkSuccess(cur->countBindVariables(),8);
201 cur->inputBind("1",5);
202 cur->inputBind("2",5.5,4,2);
203 cur->inputBind("3",5.5,4,2);
204 cur->inputBind("4",5);
205 cur->inputBind("5","testchar5");
206 cur->inputBind("6","testvarchar5");
207 cur->inputBind("7","2005-01-01");
208 cur->inputBind("8","05:00:00");
209 checkSuccess(cur->executeQuery(),1);
210 cur->clearBinds();
211 cur->inputBind("1",6);
212 cur->inputBind("2",6.6,4,2);
213 cur->inputBind("3",6.6,4,2);
214 cur->inputBind("4",6);
215 cur->inputBind("5","testchar6");
216 cur->inputBind("6","testvarchar6");
217 cur->inputBind("7","2006-01-01");
218 cur->inputBind("8","06:00:00");
219 checkSuccess(cur->executeQuery(),1);
220 cur->clearBinds();
221 cur->inputBind("1",7);
222 cur->inputBind("2",7.7,4,2);
223 cur->inputBind("3",7.7,4,2);
224 cur->inputBind("4",7);
225 cur->inputBind("5","testchar7");
226 cur->inputBind("6","testvarchar7");
227 cur->inputBind("7","2007-01-01");
228 cur->inputBind("8","07:00:00");
229 checkSuccess(cur->executeQuery(),1);
230 stdoutput.printf("\n");
231
232 stdoutput.printf("BIND BY NAME WITH VALIDATION: \n");
233 cur->clearBinds();
234 cur->inputBind("1",8);
235 cur->inputBind("2",8.8,4,2);
236 cur->inputBind("3",8.8,4,2);
237 cur->inputBind("4",8);
238 cur->inputBind("5","testchar8");
239 cur->inputBind("6","testvarchar8");
240 cur->inputBind("7","2008-01-01");
241 cur->inputBind("8","08:00:00");
242 cur->inputBind("9","junkvalue");
243 cur->validateBinds();
244 checkSuccess(cur->executeQuery(),1);
245 stdoutput.printf("\n");
246
247 checkSuccess(con->commit(),1);
248 snooze::macrosnooze(2,0);
249
250 stdoutput.printf("SELECT: \n");
251 checkSuccess(cur->sendQuery("select * from testtable1 order by testint"),1);
252 stdoutput.printf("\n");
253
254 stdoutput.printf("COLUMN COUNT: \n");
255 checkSuccess(cur->colCount(),9);
256 stdoutput.printf("\n");
257
258 stdoutput.printf("COLUMN NAMES: \n");
259 checkSuccess(cur->getColumnName(0),"testint");
260 checkSuccess(cur->getColumnName(1),"testfloat");
261 checkSuccess(cur->getColumnName(2),"testreal");
262 checkSuccess(cur->getColumnName(3),"testsmallint");
263 checkSuccess(cur->getColumnName(4),"testchar");
264 checkSuccess(cur->getColumnName(5),"testvarchar");
265 checkSuccess(cur->getColumnName(6),"testdate");
266 checkSuccess(cur->getColumnName(7),"testtime");
267 checkSuccess(cur->getColumnName(8),"testtimestamp");
268 cols=cur->getColumnNames();
269 checkSuccess(cols[0],"testint");
270 checkSuccess(cols[1],"testfloat");
271 checkSuccess(cols[2],"testreal");
272 checkSuccess(cols[3],"testsmallint");
273 checkSuccess(cols[4],"testchar");
274 checkSuccess(cols[5],"testvarchar");
275 checkSuccess(cols[6],"testdate");
276 checkSuccess(cols[7],"testtime");
277 checkSuccess(cols[8],"testtimestamp");
278 stdoutput.printf("\n");
279
280 stdoutput.printf("COLUMN TYPES: \n");
281 checkSuccess(cur->getColumnType((uint32_t)0),"INT");
282 checkSuccess(cur->getColumnType("testint"),"INT");
283 checkSuccess(cur->getColumnType(1),"FLOAT");
284 checkSuccess(cur->getColumnType("testfloat"),"FLOAT");
285 checkSuccess(cur->getColumnType(2),"REAL");
286 checkSuccess(cur->getColumnType("testreal"),"REAL");
287 checkSuccess(cur->getColumnType(3),"SMALLINT");
288 checkSuccess(cur->getColumnType("testsmallint"),"SMALLINT");
289 if (majorversion==3) {
290 checkSuccess(cur->getColumnType(4),"VARSTRING");
291 checkSuccess(cur->getColumnType("testchar"),"VARSTRING");
292 } else {
293 checkSuccess(cur->getColumnType(4),"STRING");
294 checkSuccess(cur->getColumnType("testchar"),"STRING");
295 }
296 checkSuccess(cur->getColumnType(5),"VARSTRING");
297 checkSuccess(cur->getColumnType("testvarchar"),"VARSTRING");
298 checkSuccess(cur->getColumnType(6),"DATE");
299 checkSuccess(cur->getColumnType("testdate"),"DATE");
300 checkSuccess(cur->getColumnType(7),"TIME");
301 checkSuccess(cur->getColumnType("testtime"),"TIME");
302 checkSuccess(cur->getColumnType(8),"TIMESTAMP");
303 checkSuccess(cur->getColumnType("testtimestamp"),"TIMESTAMP");
304 stdoutput.printf("\n");
305
306 stdoutput.printf("COLUMN LENGTH: \n");
307 checkSuccess(cur->getColumnLength((uint32_t)0),4);
308 checkSuccess(cur->getColumnLength("testint"),4);
309 checkSuccess(cur->getColumnLength(1),4);
310 checkSuccess(cur->getColumnLength("testfloat"),4);
311 checkSuccess(cur->getColumnLength(2),8);
312 checkSuccess(cur->getColumnLength("testreal"),8);
313 checkSuccess(cur->getColumnLength(3),2);
314 checkSuccess(cur->getColumnLength("testsmallint"),2);
315 // not reliable... some mysql client return the number of bytes
316 // rather than chars, which can be 3 times the number of chars if
317 // the db supports multibyte characters
318 //checkSuccess(cur->getColumnLength(4),40);
319 //checkSuccess(cur->getColumnLength("testchar"),40);
320 //checkSuccess(cur->getColumnLength(5),41);
321 //checkSuccess(cur->getColumnLength("testvarchar"),41);
322 checkSuccess(cur->getColumnLength(6),3);
323 checkSuccess(cur->getColumnLength("testdate"),3);
324 checkSuccess(cur->getColumnLength(7),3);
325 checkSuccess(cur->getColumnLength("testtime"),3);
326 checkSuccess(cur->getColumnLength(8),4);
327 checkSuccess(cur->getColumnLength("testtimestamp"),4);
328 stdoutput.printf("\n");
329
330 /*stdoutput.printf("LONGEST COLUMN: \n");
331 // FIXME: weird, this returns 0 but the next one works
332 checkSuccess(cur->getLongest((uint32_t)0),1);
333 checkSuccess(cur->getLongest("testint"),1);
334 checkSuccess(cur->getLongest(1),3);
335 checkSuccess(cur->getLongest("testfloat"),3);
336 checkSuccess(cur->getLongest(2),3);
337 checkSuccess(cur->getLongest("testreal"),3);
338 checkSuccess(cur->getLongest(3),1);
339 checkSuccess(cur->getLongest("testsmallint"),1);
340 checkSuccess(cur->getLongest(4),9);
341 checkSuccess(cur->getLongest("testchar"),9);
342 checkSuccess(cur->getLongest(5),12);
343 checkSuccess(cur->getLongest("testvarchar"),12);
344 checkSuccess(cur->getLongest(6),10);
345 checkSuccess(cur->getLongest("testdate"),10);
346 checkSuccess(cur->getLongest(7),8);
347 checkSuccess(cur->getLongest("testtime"),8);
348 stdoutput.printf("\n");*/
349
350 stdoutput.printf("ROW COUNT: \n");
351 checkSuccess(cur->rowCount(),8);
352 stdoutput.printf("\n");
353
354 stdoutput.printf("TOTAL ROWS: \n");
355 checkSuccess(cur->totalRows(),8);
356 stdoutput.printf("\n");
357
358 stdoutput.printf("FIRST ROW INDEX: \n");
359 checkSuccess(cur->firstRowIndex(),0);
360 stdoutput.printf("\n");
361
362 stdoutput.printf("END OF RESULT SET: \n");
363 checkSuccess(cur->endOfResultSet(),1);
364 stdoutput.printf("\n");
365
366 stdoutput.printf("FIELDS BY INDEX: \n");
367 checkSuccess(cur->getField(0,(uint32_t)0),"1");
368 //checkSuccess(cur->getField(0,1),"1.1");
369 //checkSuccess(cur->getField(0,2),"1.1");
370 checkSuccess(cur->getField(0,3),"1");
371 checkSuccess(cur->getField(0,4),"testchar1");
372 checkSuccess(cur->getField(0,5),"testvarchar1");
373 checkSuccess(cur->getField(0,6),"2001-01-01");
374 checkSuccess(cur->getField(0,7),"01:00:00");
375 stdoutput.printf("\n");
376 checkSuccess(cur->getField(7,(uint32_t)0),"8");
377 //checkSuccess(cur->getField(7,1),"8.8");
378 //checkSuccess(cur->getField(7,2),"8.8");
379 checkSuccess(cur->getField(7,3),"8");
380 checkSuccess(cur->getField(7,4),"testchar8");
381 checkSuccess(cur->getField(7,5),"testvarchar8");
382 checkSuccess(cur->getField(7,6),"2008-01-01");
383 checkSuccess(cur->getField(7,7),"08:00:00");
384 stdoutput.printf("\n");
385
386 stdoutput.printf("FIELD LENGTHS BY INDEX: \n");
387 checkSuccess(cur->getFieldLength(0,(uint32_t)0),1);
388 //checkSuccess(cur->getFieldLength(0,1),3);
389 //checkSuccess(cur->getFieldLength(0,2),3);
390 checkSuccess(cur->getFieldLength(0,3),1);
391 checkSuccess(cur->getFieldLength(0,4),9);
392 checkSuccess(cur->getFieldLength(0,5),12);
393 checkSuccess(cur->getFieldLength(0,6),10);
394 checkSuccess(cur->getFieldLength(0,7),8);
395 stdoutput.printf("\n");
396 checkSuccess(cur->getFieldLength(7,(uint32_t)0),1);
397 //checkSuccess(cur->getFieldLength(7,1),3);
398 //checkSuccess(cur->getFieldLength(7,2),3);
399 checkSuccess(cur->getFieldLength(7,3),1);
400 checkSuccess(cur->getFieldLength(7,4),9);
401 checkSuccess(cur->getFieldLength(7,5),12);
402 checkSuccess(cur->getFieldLength(7,6),10);
403 checkSuccess(cur->getFieldLength(7,7),8);
404 stdoutput.printf("\n");
405
406 stdoutput.printf("FIELDS BY NAME: \n");
407 checkSuccess(cur->getField(0,"testint"),"1");
408 //checkSuccess(cur->getField(0,"testfloat"),"1.1");
409 //checkSuccess(cur->getField(0,"testreal"),"1.1");
410 checkSuccess(cur->getField(0,"testsmallint"),"1");
411 checkSuccess(cur->getField(0,"testchar"),"testchar1");
412 checkSuccess(cur->getField(0,"testvarchar"),"testvarchar1");
413 checkSuccess(cur->getField(0,"testdate"),"2001-01-01");
414 checkSuccess(cur->getField(0,"testtime"),"01:00:00");
415 stdoutput.printf("\n");
416 checkSuccess(cur->getField(7,"testint"),"8");
417 //checkSuccess(cur->getField(7,"testfloat"),"8.8");
418 //checkSuccess(cur->getField(7,"testreal"),"8.8");
419 checkSuccess(cur->getField(7,"testsmallint"),"8");
420 checkSuccess(cur->getField(7,"testchar"),"testchar8");
421 checkSuccess(cur->getField(7,"testvarchar"),"testvarchar8");
422 checkSuccess(cur->getField(7,"testdate"),"2008-01-01");
423 checkSuccess(cur->getField(7,"testtime"),"08:00:00");
424 stdoutput.printf("\n");
425
426 stdoutput.printf("FIELD LENGTHS BY NAME: \n");
427 checkSuccess(cur->getFieldLength(0,"testint"),1);
428 //checkSuccess(cur->getFieldLength(0,"testfloat"),3);
429 //checkSuccess(cur->getFieldLength(0,"testreal"),3);
430 checkSuccess(cur->getFieldLength(0,"testsmallint"),1);
431 checkSuccess(cur->getFieldLength(0,"testchar"),9);
432 checkSuccess(cur->getFieldLength(0,"testvarchar"),12);
433 checkSuccess(cur->getFieldLength(0,"testdate"),10);
434 checkSuccess(cur->getFieldLength(0,"testtime"),8);
435 stdoutput.printf("\n");
436 checkSuccess(cur->getFieldLength(7,"testint"),1);
437 //checkSuccess(cur->getFieldLength(7,"testfloat"),3);
438 //checkSuccess(cur->getFieldLength(7,"testreal"),3);
439 checkSuccess(cur->getFieldLength(7,"testsmallint"),1);
440 checkSuccess(cur->getFieldLength(7,"testchar"),9);
441 checkSuccess(cur->getFieldLength(7,"testvarchar"),12);
442 checkSuccess(cur->getFieldLength(7,"testdate"),10);
443 checkSuccess(cur->getFieldLength(7,"testtime"),8);
444 stdoutput.printf("\n");
445
446 stdoutput.printf("FIELDS BY ARRAY: \n");
447 fields=cur->getRow(0);
448 checkSuccess(fields[0],"1");
449 //checkSuccess(fields[1],"1.1");
450 //checkSuccess(fields[2],"1.1");
451 checkSuccess(fields[3],"1");
452 checkSuccess(fields[4],"testchar1");
453 checkSuccess(fields[5],"testvarchar1");
454 checkSuccess(fields[6],"2001-01-01");
455 checkSuccess(fields[7],"01:00:00");
456 stdoutput.printf("\n");
457
458 stdoutput.printf("FIELD LENGTHS BY ARRAY: \n");
459 fieldlens=cur->getRowLengths(0);
460 checkSuccess(fieldlens[0],1);
461 //checkSuccess(fieldlens[1],3);
462 //checkSuccess(fieldlens[2],3);
463 checkSuccess(fieldlens[3],1);
464 checkSuccess(fieldlens[4],9);
465 checkSuccess(fieldlens[5],12);
466 checkSuccess(fieldlens[6],10);
467 checkSuccess(fieldlens[7],8);
468 stdoutput.printf("\n");
469
470 checkSuccess(con->commit(),1);
471 snooze::macrosnooze(2,0);
472
473 stdoutput.printf("SELECT: \n");
474 checkSuccess(cur->sendQuery("select * from testtable1 order by testint"),1);
475 stdoutput.printf("\n");
476
477 stdoutput.printf("COLUMN COUNT: \n");
478 checkSuccess(cur->colCount(),9);
479 stdoutput.printf("\n");
480
481 stdoutput.printf("COLUMN NAMES: \n");
482 checkSuccess(cur->getColumnName(0),"testint");
483 checkSuccess(cur->getColumnName(1),"testfloat");
484 checkSuccess(cur->getColumnName(2),"testreal");
485 checkSuccess(cur->getColumnName(3),"testsmallint");
486 checkSuccess(cur->getColumnName(4),"testchar");
487 checkSuccess(cur->getColumnName(5),"testvarchar");
488 checkSuccess(cur->getColumnName(6),"testdate");
489 checkSuccess(cur->getColumnName(7),"testtime");
490 checkSuccess(cur->getColumnName(8),"testtimestamp");
491 cols=cur->getColumnNames();
492 checkSuccess(cols[0],"testint");
493 checkSuccess(cols[1],"testfloat");
494 checkSuccess(cols[2],"testreal");
495 checkSuccess(cols[3],"testsmallint");
496 checkSuccess(cols[4],"testchar");
497 checkSuccess(cols[5],"testvarchar");
498 checkSuccess(cols[6],"testdate");
499 checkSuccess(cols[7],"testtime");
500 checkSuccess(cols[8],"testtimestamp");
501 stdoutput.printf("\n");
502
503 stdoutput.printf("COLUMN TYPES: \n");
504 checkSuccess(cur->getColumnType((uint32_t)0),"INT");
505 checkSuccess(cur->getColumnType("testint"),"INT");
506 checkSuccess(cur->getColumnType(1),"FLOAT");
507 checkSuccess(cur->getColumnType("testfloat"),"FLOAT");
508 checkSuccess(cur->getColumnType(2),"REAL");
509 checkSuccess(cur->getColumnType("testreal"),"REAL");
510 checkSuccess(cur->getColumnType(3),"SMALLINT");
511 checkSuccess(cur->getColumnType("testsmallint"),"SMALLINT");
512 if (majorversion==3) {
513 checkSuccess(cur->getColumnType(4),"VARSTRING");
514 checkSuccess(cur->getColumnType("testchar"),"VARSTRING");
515 } else {
516 checkSuccess(cur->getColumnType(4),"STRING");
517 checkSuccess(cur->getColumnType("testchar"),"STRING");
518 }
519 checkSuccess(cur->getColumnType(5),"VARSTRING");
520 checkSuccess(cur->getColumnType("testvarchar"),"VARSTRING");
521 checkSuccess(cur->getColumnType(6),"DATE");
522 checkSuccess(cur->getColumnType("testdate"),"DATE");
523 checkSuccess(cur->getColumnType(7),"TIME");
524 checkSuccess(cur->getColumnType("testtime"),"TIME");
525 checkSuccess(cur->getColumnType(8),"TIMESTAMP");
526 checkSuccess(cur->getColumnType("testtimestamp"),"TIMESTAMP");
527 stdoutput.printf("\n");
528
529 stdoutput.printf("COLUMN LENGTH: \n");
530 checkSuccess(cur->getColumnLength((uint32_t)0),4);
531 checkSuccess(cur->getColumnLength("testint"),4);
532 checkSuccess(cur->getColumnLength(1),4);
533 checkSuccess(cur->getColumnLength("testfloat"),4);
534 checkSuccess(cur->getColumnLength(2),8);
535 checkSuccess(cur->getColumnLength("testreal"),8);
536 checkSuccess(cur->getColumnLength(3),2);
537 checkSuccess(cur->getColumnLength("testsmallint"),2);
538 //checkSuccess(cur->getColumnLength(4),40);
539 //checkSuccess(cur->getColumnLength("testchar"),40);
540 //checkSuccess(cur->getColumnLength(5),41);
541 //checkSuccess(cur->getColumnLength("testvarchar"),41);
542 checkSuccess(cur->getColumnLength(6),3);
543 checkSuccess(cur->getColumnLength("testdate"),3);
544 checkSuccess(cur->getColumnLength(7),3);
545 checkSuccess(cur->getColumnLength("testtime"),3);
546 checkSuccess(cur->getColumnLength(8),4);
547 checkSuccess(cur->getColumnLength("testtimestamp"),4);
548 stdoutput.printf("\n");
549
550 stdoutput.printf("LONGEST COLUMN: \n");
551 checkSuccess(cur->getLongest((uint32_t)0),1);
552 checkSuccess(cur->getLongest("testint"),1);
553 //checkSuccess(cur->getLongest(1),3);
554 //checkSuccess(cur->getLongest("testfloat"),3);
555 //checkSuccess(cur->getLongest(2),3);
556 //checkSuccess(cur->getLongest("testreal"),3);
557 checkSuccess(cur->getLongest(3),1);
558 checkSuccess(cur->getLongest("testsmallint"),1);
559 checkSuccess(cur->getLongest(4),9);
560 checkSuccess(cur->getLongest("testchar"),9);
561 checkSuccess(cur->getLongest(5),12);
562 checkSuccess(cur->getLongest("testvarchar"),12);
563 checkSuccess(cur->getLongest(6),10);
564 checkSuccess(cur->getLongest("testdate"),10);
565 checkSuccess(cur->getLongest(7),8);
566 checkSuccess(cur->getLongest("testtime"),8);
567 stdoutput.printf("\n");
568
569 stdoutput.printf("ROW COUNT: \n");
570 checkSuccess(cur->rowCount(),8);
571 stdoutput.printf("\n");
572
573 stdoutput.printf("TOTAL ROWS: \n");
574 checkSuccess(cur->totalRows(),8);
575 stdoutput.printf("\n");
576
577 stdoutput.printf("FIRST ROW INDEX: \n");
578 checkSuccess(cur->firstRowIndex(),0);
579 stdoutput.printf("\n");
580
581 stdoutput.printf("END OF RESULT SET: \n");
582 checkSuccess(cur->endOfResultSet(),1);
583 stdoutput.printf("\n");
584
585 stdoutput.printf("FIELDS BY INDEX: \n");
586 checkSuccess(cur->getField(0,(uint32_t)0),"1");
587 //checkSuccess(cur->getField(0,1),"1.1");
588 //checkSuccess(cur->getField(0,2),"1.1");
589 checkSuccess(cur->getField(0,3),"1");
590 checkSuccess(cur->getField(0,4),"testchar1");
591 checkSuccess(cur->getField(0,5),"testvarchar1");
592 checkSuccess(cur->getField(0,6),"2001-01-01");
593 checkSuccess(cur->getField(0,7),"01:00:00");
594 stdoutput.printf("\n");
595 checkSuccess(cur->getField(7,(uint32_t)0),"8");
596 //checkSuccess(cur->getField(7,1),"8.8");
597 //checkSuccess(cur->getField(7,2),"8.8");
598 checkSuccess(cur->getField(7,3),"8");
599 checkSuccess(cur->getField(7,4),"testchar8");
600 checkSuccess(cur->getField(7,5),"testvarchar8");
601 checkSuccess(cur->getField(7,6),"2008-01-01");
602 checkSuccess(cur->getField(7,7),"08:00:00");
603 stdoutput.printf("\n");
604
605 stdoutput.printf("FIELD LENGTHS BY INDEX: \n");
606 checkSuccess(cur->getFieldLength(0,(uint32_t)0),1);
607 //checkSuccess(cur->getFieldLength(0,1),3);
608 //checkSuccess(cur->getFieldLength(0,2),3);
609 checkSuccess(cur->getFieldLength(0,3),1);
610 checkSuccess(cur->getFieldLength(0,4),9);
611 checkSuccess(cur->getFieldLength(0,5),12);
612 checkSuccess(cur->getFieldLength(0,6),10);
613 checkSuccess(cur->getFieldLength(0,7),8);
614 stdoutput.printf("\n");
615 checkSuccess(cur->getFieldLength(7,(uint32_t)0),1);
616 //checkSuccess(cur->getFieldLength(7,1),3);
617 //checkSuccess(cur->getFieldLength(7,2),3);
618 checkSuccess(cur->getFieldLength(7,3),1);
619 checkSuccess(cur->getFieldLength(7,4),9);
620 checkSuccess(cur->getFieldLength(7,5),12);
621 checkSuccess(cur->getFieldLength(7,6),10);
622 checkSuccess(cur->getFieldLength(7,7),8);
623 stdoutput.printf("\n");
624
625 stdoutput.printf("FIELDS BY NAME: \n");
626 checkSuccess(cur->getField(0,"testint"),"1");
627 //checkSuccess(cur->getField(0,"testfloat"),"1.1");
628 //checkSuccess(cur->getField(0,"testreal"),"1.1");
629 checkSuccess(cur->getField(0,"testsmallint"),"1");
630 checkSuccess(cur->getField(0,"testchar"),"testchar1");
631 checkSuccess(cur->getField(0,"testvarchar"),"testvarchar1");
632 checkSuccess(cur->getField(0,"testdate"),"2001-01-01");
633 checkSuccess(cur->getField(0,"testtime"),"01:00:00");
634 stdoutput.printf("\n");
635 checkSuccess(cur->getField(7,"testint"),"8");
636 //checkSuccess(cur->getField(7,"testfloat"),"8.8");
637 //checkSuccess(cur->getField(7,"testreal"),"8.8");
638 checkSuccess(cur->getField(7,"testsmallint"),"8");
639 checkSuccess(cur->getField(7,"testchar"),"testchar8");
640 checkSuccess(cur->getField(7,"testvarchar"),"testvarchar8");
641 checkSuccess(cur->getField(7,"testdate"),"2008-01-01");
642 checkSuccess(cur->getField(7,"testtime"),"08:00:00");
643 stdoutput.printf("\n");
644
645 stdoutput.printf("FIELD LENGTHS BY NAME: \n");
646 checkSuccess(cur->getFieldLength(0,"testint"),1);
647 //checkSuccess(cur->getFieldLength(0,"testfloat"),3);
648 //checkSuccess(cur->getFieldLength(0,"testreal"),3);
649 checkSuccess(cur->getFieldLength(0,"testsmallint"),1);
650 checkSuccess(cur->getFieldLength(0,"testchar"),9);
651 checkSuccess(cur->getFieldLength(0,"testvarchar"),12);
652 checkSuccess(cur->getFieldLength(0,"testdate"),10);
653 checkSuccess(cur->getFieldLength(0,"testtime"),8);
654 stdoutput.printf("\n");
655 checkSuccess(cur->getFieldLength(7,"testint"),1);
656 //checkSuccess(cur->getFieldLength(7,"testfloat"),3);
657 //checkSuccess(cur->getFieldLength(7,"testreal"),3);
658 checkSuccess(cur->getFieldLength(7,"testsmallint"),1);
659 checkSuccess(cur->getFieldLength(7,"testchar"),9);
660 checkSuccess(cur->getFieldLength(7,"testvarchar"),12);
661 checkSuccess(cur->getFieldLength(7,"testdate"),10);
662 checkSuccess(cur->getFieldLength(7,"testtime"),8);
663 stdoutput.printf("\n");
664
665 stdoutput.printf("FIELDS BY ARRAY: \n");
666 fields=cur->getRow(0);
667 checkSuccess(fields[0],"1");
668 //checkSuccess(fields[1],"1.1");
669 //checkSuccess(fields[2],"1.1");
670 checkSuccess(fields[3],"1");
671 checkSuccess(fields[4],"testchar1");
672 checkSuccess(fields[5],"testvarchar1");
673 checkSuccess(fields[6],"2001-01-01");
674 checkSuccess(fields[7],"01:00:00");
675 stdoutput.printf("\n");
676
677 stdoutput.printf("FIELD LENGTHS BY ARRAY: \n");
678 fieldlens=cur->getRowLengths(0);
679 checkSuccess(fieldlens[0],1);
680 //checkSuccess(fieldlens[1],3);
681 //checkSuccess(fieldlens[2],3);
682 checkSuccess(fieldlens[3],1);
683 checkSuccess(fieldlens[4],9);
684 checkSuccess(fieldlens[5],12);
685 checkSuccess(fieldlens[6],10);
686 checkSuccess(fieldlens[7],8);
687 stdoutput.printf("\n");
688
689 stdoutput.printf("COMMIT AND ROLLBACK: \n");
690 secondcon=new sqlrconnection("sqlrelay",9000,"/tmp/test.socket",
691 "test","test",0,1);
692 secondcur=new sqlrcursor(secondcon);
693 checkSuccess(con->commit(),1);
694 snooze::macrosnooze(2,0);
695 checkSuccess(secondcon->commit(),1);
696 snooze::macrosnooze(2,0);
697 checkSuccess(secondcur->sendQuery("select count(*) from testtable1"),1);
698 checkSuccess(secondcur->getField(0,(uint32_t)0),"8");
699 checkSuccess(secondcur->sendQuery("select count(*) from testtable2"),1);
700 checkSuccess(secondcur->getField(0,(uint32_t)0),"8");
701 checkSuccess(con->autoCommitOn(),1);
702 checkSuccess(secondcon->autoCommitOn(),1);
703 checkSuccess(cur->sendQuery("insert into testtable1 values (10,10.1,10.1,10,'testchar10','testvarchar10','2010-01-01','10:00:00',NULL)"),1);
704 checkSuccess(cur->sendQuery("insert into testtable2 values (10,10.1,10.1,10,'testchar10','testvarchar10','2010-01-01','10:00:00',NULL)"),1);
705 snooze::macrosnooze(2,0);
706 checkSuccess(secondcur->sendQuery("select count(*) from testtable1"),1);
707 checkSuccess(secondcur->getField(0,(uint32_t)0),"9");
708 checkSuccess(secondcur->sendQuery("select count(*) from testtable2"),1);
709 checkSuccess(secondcur->getField(0,(uint32_t)0),"9");
710 checkSuccess(con->autoCommitOff(),1);
711 checkSuccess(secondcon->autoCommitOff(),1);
712 checkSuccess(cur->sendQuery("begin"),1);
713 stdoutput.printf("\n");
714
715 // drop existing table
716 cur->sendQuery("drop table testtable1");
717 cur->sendQuery("drop table testtable2");
718
719 stdoutput.printf("\n");
720
721 return 0;
722 }
723