1 // Copyright (c) 1999-2018 David Muse
2 // See the file COPYING for more information.
3
4 #include "../../config.h"
5 #include <sqlrelay/sqlrclientwrapper.h>
6 #include <string.h>
7 #include <stdlib.h>
8
9 #include <stdio.h>
10
11 sqlrcon con;
12 sqlrcur cur;
13 sqlrcon secondcon;
14 sqlrcur secondcur;
15
checkSuccessString(const char * value,const char * success)16 void checkSuccessString(const char *value, const char *success) {
17
18 if (!success) {
19 if (!value) {
20 printf("success ");
21 return;
22 } else {
23 printf("\"%s\"!=\"%s\"",value,success);
24 printf("failure ");
25 sqlrcur_free(cur);
26 sqlrcon_free(con);
27 exit(1);
28 }
29 }
30
31 if (!strcmp(value,success)) {
32 printf("success ");
33 } else {
34 printf("\"%s\"!=\"%s\"",value,success);
35 printf("failure ");
36 sqlrcur_free(cur);
37 sqlrcon_free(con);
38 exit(1);
39 }
40 }
41
checkSuccessInt(int value,int success)42 void checkSuccessInt(int value, int success) {
43
44 if (value==success) {
45 printf("success ");
46 } else {
47 printf("\"%d\"!=\"%d\"",value,success);
48 printf("failure ");
49 sqlrcur_free(cur);
50 sqlrcon_free(con);
51 exit(1);
52 }
53 }
54
main(int argc,char ** argv)55 int main(int argc, char **argv) {
56
57 const char *subvars[4]={"var1","var2","var3",NULL};
58 const char *subvalstrings[3]={"hi","hello","bye"};
59 int64_t subvallongs[3]={1,2,3};
60 double subvaldoubles[3]={10.55,10.556,10.5556};
61 uint32_t precs[3]={4,5,6};
62 uint32_t scales[3]={2,3,4};
63 const char * const *cols;
64 const char * const *fields;
65 uint16_t port;
66 const char *socket;
67 uint16_t id;
68 char *filename;
69 uint32_t *fieldlens;
70
71 // instantiation
72 con=sqlrcon_alloc("sqlrelay",9000,
73 "/tmp/test.socket","test","test",0,1);
74 cur=sqlrcur_alloc(con);
75
76 // get database type
77 printf("IDENTIFY: \n");
78 checkSuccessString(sqlrcon_identify(con),"sqlite");
79 printf("\n");
80
81 // ping
82 printf("PING: \n");
83 checkSuccessInt(sqlrcon_ping(con),1);
84 printf("\n");
85
86 // drop existing table
87 sqlrcur_sendQuery(cur,"begin transaction");
88 sqlrcur_sendQuery(cur,"drop table testtable");
89 sqlrcon_commit(con);
90
91 // create a new table
92 printf("CREATE TEMPTABLE: \n");
93 sqlrcur_sendQuery(cur,"begin transaction");
94 checkSuccessInt(sqlrcur_sendQuery(cur,"create table testtable (testint int, testfloat float, testchar char(40), testvarchar varchar(40))"),1);
95 sqlrcon_commit(con);
96 printf("\n");
97
98 printf("INSERT: \n");
99 sqlrcur_sendQuery(cur,"begin transaction");
100 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable values (1,1.1,'testchar1','testvarchar1')"),1);
101 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable values (2,2.2,'testchar2','testvarchar2')"),1);
102 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable values (3,3.3,'testchar3','testvarchar3')"),1);
103 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable values (4,4.4,'testchar4','testvarchar4')"),1);
104 printf("\n");
105
106 printf("AFFECTED ROWS: \n");
107 checkSuccessInt(sqlrcur_affectedRows(cur),0);
108 printf("\n");
109
110 printf("BIND BY NAME: \n");
111 sqlrcur_prepareQuery(cur,"insert into testtable values (:var1,:var2,:var3,:var4)");
112 checkSuccessInt(sqlrcur_countBindVariables(cur),4);
113 sqlrcur_inputBindLong(cur,"var1",5);
114 sqlrcur_inputBindDouble(cur,"var2",5.5,4,1);
115 sqlrcur_inputBindString(cur,"var3","testchar5");
116 sqlrcur_inputBindString(cur,"var4","testvarchar5");
117 checkSuccessInt(sqlrcur_executeQuery(cur),1);
118 sqlrcur_clearBinds(cur);
119 sqlrcur_inputBindLong(cur,"var1",6);
120 sqlrcur_inputBindDouble(cur,"var2",6.6,4,1);
121 sqlrcur_inputBindString(cur,"var3","testchar6");
122 sqlrcur_inputBindString(cur,"var4","testvarchar6");
123 checkSuccessInt(sqlrcur_executeQuery(cur),1);
124 sqlrcur_clearBinds(cur);
125 sqlrcur_inputBindLong(cur,"var1",7);
126 sqlrcur_inputBindDouble(cur,"var2",7.7,4,1);
127 sqlrcur_inputBindString(cur,"var3","testchar7");
128 sqlrcur_inputBindString(cur,"var4","testvarchar7");
129 checkSuccessInt(sqlrcur_executeQuery(cur),1);
130 printf("\n");
131
132 printf("BIND BY NAME WITH VALIDATION: \n");
133 sqlrcur_clearBinds(cur);
134 sqlrcur_inputBindLong(cur,"var1",8);
135 sqlrcur_inputBindDouble(cur,"var2",8.8,4,1);
136 sqlrcur_inputBindString(cur,"var3","testchar8");
137 sqlrcur_inputBindString(cur,"var4","testvarchar8");
138 sqlrcur_validateBinds(cur);
139 checkSuccessInt(sqlrcur_executeQuery(cur),1);
140 printf("\n");
141
142 printf("SELECT: \n");
143 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
144 printf("\n");
145
146 printf("COLUMN COUNT: \n");
147 checkSuccessInt(sqlrcur_colCount(cur),4);
148 printf("\n");
149
150 printf("COLUMN NAMES: \n");
151 checkSuccessString(sqlrcur_getColumnName(cur,0),"testint");
152 checkSuccessString(sqlrcur_getColumnName(cur,1),"testfloat");
153 checkSuccessString(sqlrcur_getColumnName(cur,2),"testchar");
154 checkSuccessString(sqlrcur_getColumnName(cur,3),"testvarchar");
155 cols=sqlrcur_getColumnNames(cur);
156 checkSuccessString(cols[0],"testint");
157 checkSuccessString(cols[1],"testfloat");
158 checkSuccessString(cols[2],"testchar");
159 checkSuccessString(cols[3],"testvarchar");
160 printf("\n");
161
162 printf("COLUMN TYPES: \n");
163 #ifdef HAVE_SQLITE3_STMT
164 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,0),"INTEGER");
165 checkSuccessString(sqlrcur_getColumnTypeByName(cur,"testint"),"INTEGER");
166 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,1),"FLOAT");
167 checkSuccessString(sqlrcur_getColumnTypeByName(cur,"testfloat"),"FLOAT");
168 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,2),"STRING");
169 checkSuccessString(sqlrcur_getColumnTypeByName(cur,"testchar"),"STRING");
170 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,3),"STRING");
171 checkSuccessString(sqlrcur_getColumnTypeByName(cur,"testvarchar"),"STRING");
172 #else
173 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,0),"UNKNOWN");
174 checkSuccessString(sqlrcur_getColumnTypeByName(cur,"testint"),"UNKNOWN");
175 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,1),"UNKNOWN");
176 checkSuccessString(sqlrcur_getColumnTypeByName(cur,"testfloat"),"UNKNOWN");
177 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,2),"UNKNOWN");
178 checkSuccessString(sqlrcur_getColumnTypeByName(cur,"testchar"),"UNKNOWN");
179 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,3),"UNKNOWN");
180 checkSuccessString(sqlrcur_getColumnTypeByName(cur,"testvarchar"),"UNKNOWN");
181 #endif
182 printf("\n");
183
184 printf("COLUMN LENGTH: \n");
185 checkSuccessInt(sqlrcur_getColumnLengthByIndex(cur,0),0);
186 checkSuccessInt(sqlrcur_getColumnLengthByName(cur,"testint"),0);
187 checkSuccessInt(sqlrcur_getColumnLengthByIndex(cur,1),0);
188 checkSuccessInt(sqlrcur_getColumnLengthByName(cur,"testfloat"),0);
189 checkSuccessInt(sqlrcur_getColumnLengthByIndex(cur,2),0);
190 checkSuccessInt(sqlrcur_getColumnLengthByName(cur,"testchar"),0);
191 checkSuccessInt(sqlrcur_getColumnLengthByIndex(cur,3),0);
192 checkSuccessInt(sqlrcur_getColumnLengthByName(cur,"testvarchar"),0);
193 printf("\n");
194
195 printf("LONGEST COLUMN: \n");
196 checkSuccessInt(sqlrcur_getLongestByIndex(cur,0),1);
197 checkSuccessInt(sqlrcur_getLongestByName(cur,"testint"),1);
198 checkSuccessInt(sqlrcur_getLongestByIndex(cur,1),3);
199 checkSuccessInt(sqlrcur_getLongestByName(cur,"testfloat"),3);
200 checkSuccessInt(sqlrcur_getLongestByIndex(cur,2),9);
201 checkSuccessInt(sqlrcur_getLongestByName(cur,"testchar"),9);
202 checkSuccessInt(sqlrcur_getLongestByIndex(cur,3),12);
203 checkSuccessInt(sqlrcur_getLongestByName(cur,"testvarchar"),12);
204 printf("\n");
205
206 printf("ROW COUNT: \n");
207 checkSuccessInt(sqlrcur_rowCount(cur),8);
208 printf("\n");
209
210 printf("TOTAL ROWS: \n");
211 #ifdef HAVE_SQLITE3_STMT
212 checkSuccessInt(sqlrcur_totalRows(cur),0);
213 #else
214 checkSuccessInt(sqlrcur_totalRows(cur),8);
215 #endif
216 printf("\n");
217
218 printf("FIRST ROW INDEX: \n");
219 checkSuccessInt(sqlrcur_firstRowIndex(cur),0);
220 printf("\n");
221
222 printf("END OF RESULT SET: \n");
223 checkSuccessInt(sqlrcur_endOfResultSet(cur),1);
224 printf("\n");
225
226 printf("FIELDS BY INDEX: \n");
227 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
228 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,1),"1.1");
229 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,2),"testchar1");
230 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,3),"testvarchar1");
231 printf("\n");
232 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
233 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,1),"8.8");
234 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,2),"testchar8");
235 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,3),"testvarchar8");
236 printf("\n");
237
238 printf("FIELD LENGTHS BY INDEX: \n");
239 checkSuccessInt(sqlrcur_getFieldLengthByIndex(cur,0,0),1);
240 checkSuccessInt(sqlrcur_getFieldLengthByIndex(cur,0,1),3);
241 checkSuccessInt(sqlrcur_getFieldLengthByIndex(cur,0,2),9);
242 checkSuccessInt(sqlrcur_getFieldLengthByIndex(cur,0,3),12);
243 printf("\n");
244 checkSuccessInt(sqlrcur_getFieldLengthByIndex(cur,7,0),1);
245 checkSuccessInt(sqlrcur_getFieldLengthByIndex(cur,7,1),3);
246 checkSuccessInt(sqlrcur_getFieldLengthByIndex(cur,7,2),9);
247 checkSuccessInt(sqlrcur_getFieldLengthByIndex(cur,7,3),12);
248 printf("\n");
249
250 printf("FIELDS BY NAME: \n");
251 checkSuccessString(sqlrcur_getFieldByName(cur,0,"testint"),"1");
252 checkSuccessString(sqlrcur_getFieldByName(cur,0,"testfloat"),"1.1");
253 checkSuccessString(sqlrcur_getFieldByName(cur,0,"testchar"),"testchar1");
254 checkSuccessString(sqlrcur_getFieldByName(cur,0,"testvarchar"),"testvarchar1");
255 printf("\n");
256 checkSuccessString(sqlrcur_getFieldByName(cur,7,"testint"),"8");
257 checkSuccessString(sqlrcur_getFieldByName(cur,7,"testfloat"),"8.8");
258 checkSuccessString(sqlrcur_getFieldByName(cur,7,"testchar"),"testchar8");
259 checkSuccessString(sqlrcur_getFieldByName(cur,7,"testvarchar"),"testvarchar8");
260 printf("\n");
261
262 printf("FIELD LENGTHS BY NAME: \n");
263 checkSuccessInt(sqlrcur_getFieldLengthByName(cur,0,"testint"),1);
264 checkSuccessInt(sqlrcur_getFieldLengthByName(cur,0,"testfloat"),3);
265 checkSuccessInt(sqlrcur_getFieldLengthByName(cur,0,"testchar"),9);
266 checkSuccessInt(sqlrcur_getFieldLengthByName(cur,0,"testvarchar"),12);
267 printf("\n");
268 checkSuccessInt(sqlrcur_getFieldLengthByName(cur,7,"testint"),1);
269 checkSuccessInt(sqlrcur_getFieldLengthByName(cur,7,"testfloat"),3);
270 checkSuccessInt(sqlrcur_getFieldLengthByName(cur,7,"testchar"),9);
271 checkSuccessInt(sqlrcur_getFieldLengthByName(cur,7,"testvarchar"),12);
272 printf("\n");
273
274 printf("FIELDS BY ARRAY: \n");
275 fields=sqlrcur_getRow(cur,0);
276 checkSuccessString(fields[0],"1");
277 checkSuccessString(fields[1],"1.1");
278 checkSuccessString(fields[2],"testchar1");
279 checkSuccessString(fields[3],"testvarchar1");
280 printf("\n");
281
282 printf("FIELD LENGTHS BY ARRAY: \n");
283 fieldlens=sqlrcur_getRowLengths(cur,0);
284 checkSuccessInt(fieldlens[0],1);
285 checkSuccessInt(fieldlens[1],3);
286 checkSuccessInt(fieldlens[2],9);
287 checkSuccessInt(fieldlens[3],12);
288 printf("\n");
289
290 printf("INDIVIDUAL SUBSTITUTIONS: \n");
291 sqlrcur_sendQuery(cur,"drop table testtable1");
292 checkSuccessInt(sqlrcur_sendQuery(cur,"create table testtable1 (col1 int, col2 char, col3 float)"),1);
293 sqlrcur_prepareQuery(cur,"insert into testtable1 values ($(var1),'$(var2)',$(var3))");
294 sqlrcur_subLong(cur,"var1",1);
295 sqlrcur_subString(cur,"var2","hello");
296 sqlrcur_subDouble(cur,"var3",10.5556,6,4);
297 checkSuccessInt(sqlrcur_executeQuery(cur),1);
298 printf("\n");
299
300 printf("FIELDS: \n");
301 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable1"),1);
302 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
303 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,1),"hello");
304 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,2),"10.5556");
305 checkSuccessInt(sqlrcur_sendQuery(cur,"delete from testtable1"),1);
306 printf("\n");
307
308 printf("ARRAY SUBSTITUTIONS: \n");
309 sqlrcur_prepareQuery(cur,"insert into testtable1 values ('$(var1)','$(var2)','$(var3)')");
310 sqlrcur_subStrings(cur,subvars,subvalstrings);
311 checkSuccessInt(sqlrcur_executeQuery(cur),1);
312 printf("\n");
313
314 printf("FIELDS: \n");
315 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable1"),1);
316 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"hi");
317 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,1),"hello");
318 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,2),"bye");
319 checkSuccessInt(sqlrcur_sendQuery(cur,"delete from testtable1"),1);
320 printf("\n");
321
322
323 printf("ARRAY SUBSTITUTIONS: \n");
324 sqlrcur_prepareQuery(cur,"insert into testtable1 values ($(var1),'$(var2)',$(var3))");
325 sqlrcur_subLongs(cur,subvars,subvallongs);
326 checkSuccessInt(sqlrcur_executeQuery(cur),1);
327 printf("\n");
328
329 printf("FIELDS: \n");
330 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable1"),1);
331 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
332 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,1),"2");
333 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,2),"3.0");
334 checkSuccessInt(sqlrcur_sendQuery(cur,"delete from testtable1"),1);
335 printf("\n");
336
337
338 printf("ARRAY SUBSTITUTIONS: \n");
339 sqlrcur_prepareQuery(cur,"insert into testtable1 values ($(var1),'$(var2)',$(var3))");
340 sqlrcur_subDoubles(cur,subvars,subvaldoubles,precs,scales);
341 checkSuccessInt(sqlrcur_executeQuery(cur),1);
342 printf("\n");
343
344 printf("FIELDS: \n");
345 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable1"),1);
346 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"10.55");
347 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,1),"10.556");
348 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,2),"10.5556");
349 checkSuccessInt(sqlrcur_sendQuery(cur,"delete from testtable1"),1);
350 printf("\n");
351
352
353 printf("NULLS as Nulls: \n");
354 sqlrcur_getNullsAsNulls(cur);
355 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable1 values (1,NULL,NULL)"),1);
356 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable1"),1);
357 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
358 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,1),NULL);
359 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,2),NULL);
360 sqlrcur_getNullsAsEmptyStrings(cur);
361 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable1"),1);
362 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
363 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,1),"");
364 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,2),"");
365 sqlrcur_getNullsAsNulls(cur);
366 printf("\n");
367
368 printf("RESULT SET BUFFER SIZE: \n");
369 checkSuccessInt(sqlrcur_getResultSetBufferSize(cur),0);
370 sqlrcur_setResultSetBufferSize(cur,2);
371 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
372 checkSuccessInt(sqlrcur_getResultSetBufferSize(cur),2);
373 printf("\n");
374 checkSuccessInt(sqlrcur_firstRowIndex(cur),0);
375 checkSuccessInt(sqlrcur_endOfResultSet(cur),0);
376 checkSuccessInt(sqlrcur_rowCount(cur),2);
377 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
378 checkSuccessString(sqlrcur_getFieldByIndex(cur,1,0),"2");
379 checkSuccessString(sqlrcur_getFieldByIndex(cur,2,0),"3");
380 printf("\n");
381 checkSuccessInt(sqlrcur_firstRowIndex(cur),2);
382 checkSuccessInt(sqlrcur_endOfResultSet(cur),0);
383 checkSuccessInt(sqlrcur_rowCount(cur),4);
384 checkSuccessString(sqlrcur_getFieldByIndex(cur,6,0),"7");
385 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
386 printf("\n");
387 checkSuccessInt(sqlrcur_firstRowIndex(cur),6);
388 checkSuccessInt(sqlrcur_endOfResultSet(cur),0);
389 checkSuccessInt(sqlrcur_rowCount(cur),8);
390 checkSuccessString(sqlrcur_getFieldByIndex(cur,8,0),NULL);
391 printf("\n");
392 checkSuccessInt(sqlrcur_firstRowIndex(cur),8);
393 checkSuccessInt(sqlrcur_endOfResultSet(cur),1);
394 checkSuccessInt(sqlrcur_rowCount(cur),8);
395 printf("\n");
396
397 printf("DONT GET COLUMN INFO: \n");
398 sqlrcur_dontGetColumnInfo(cur);
399 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
400 checkSuccessString(sqlrcur_getColumnName(cur,0),NULL);
401 checkSuccessInt(sqlrcur_getColumnLengthByIndex(cur,0),0);
402 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,0),NULL);
403 sqlrcur_getColumnInfo(cur);
404 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
405 checkSuccessString(sqlrcur_getColumnName(cur,0),"testint");
406 checkSuccessInt(sqlrcur_getColumnLengthByIndex(cur,0),0);
407 #ifdef HAVE_SQLITE3_STMT
408 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,0),"INTEGER");
409 #else
410 checkSuccessString(sqlrcur_getColumnTypeByIndex(cur,0),"UNKNOWN");
411 #endif
412 printf("\n");
413
414 printf("SUSPENDED SESSION: \n");
415 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
416 sqlrcur_suspendResultSet(cur);
417 checkSuccessInt(sqlrcon_suspendSession(con),1);
418 port=sqlrcon_getConnectionPort(con);
419 socket=strdup(sqlrcon_getConnectionSocket(con));
420 checkSuccessInt(sqlrcon_resumeSession(con,port,socket),1);
421 printf("\n");
422 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
423 checkSuccessString(sqlrcur_getFieldByIndex(cur,1,0),"2");
424 checkSuccessString(sqlrcur_getFieldByIndex(cur,2,0),"3");
425 checkSuccessString(sqlrcur_getFieldByIndex(cur,3,0),"4");
426 checkSuccessString(sqlrcur_getFieldByIndex(cur,4,0),"5");
427 checkSuccessString(sqlrcur_getFieldByIndex(cur,5,0),"6");
428 checkSuccessString(sqlrcur_getFieldByIndex(cur,6,0),"7");
429 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
430 printf("\n");
431 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
432 sqlrcur_suspendResultSet(cur);
433 checkSuccessInt(sqlrcon_suspendSession(con),1);
434 port=sqlrcon_getConnectionPort(con);
435 socket=strdup(sqlrcon_getConnectionSocket(con));
436 checkSuccessInt(sqlrcon_resumeSession(con,port,socket),1);
437 printf("\n");
438 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
439 checkSuccessString(sqlrcur_getFieldByIndex(cur,1,0),"2");
440 checkSuccessString(sqlrcur_getFieldByIndex(cur,2,0),"3");
441 checkSuccessString(sqlrcur_getFieldByIndex(cur,3,0),"4");
442 checkSuccessString(sqlrcur_getFieldByIndex(cur,4,0),"5");
443 checkSuccessString(sqlrcur_getFieldByIndex(cur,5,0),"6");
444 checkSuccessString(sqlrcur_getFieldByIndex(cur,6,0),"7");
445 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
446 printf("\n");
447 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
448 sqlrcur_suspendResultSet(cur);
449 checkSuccessInt(sqlrcon_suspendSession(con),1);
450 port=sqlrcon_getConnectionPort(con);
451 socket=strdup(sqlrcon_getConnectionSocket(con));
452 checkSuccessInt(sqlrcon_resumeSession(con,port,socket),1);
453 printf("\n");
454 checkSuccessString(sqlrcur_getFieldByIndex(cur,0,0),"1");
455 checkSuccessString(sqlrcur_getFieldByIndex(cur,1,0),"2");
456 checkSuccessString(sqlrcur_getFieldByIndex(cur,2,0),"3");
457 checkSuccessString(sqlrcur_getFieldByIndex(cur,3,0),"4");
458 checkSuccessString(sqlrcur_getFieldByIndex(cur,4,0),"5");
459 checkSuccessString(sqlrcur_getFieldByIndex(cur,5,0),"6");
460 checkSuccessString(sqlrcur_getFieldByIndex(cur,6,0),"7");
461 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
462 printf("\n");
463
464 printf("SUSPENDED RESULT SET: \n");
465 sqlrcur_setResultSetBufferSize(cur,2);
466 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
467 checkSuccessString(sqlrcur_getFieldByIndex(cur,2,0),"3");
468 id=sqlrcur_getResultSetId(cur);
469 sqlrcur_suspendResultSet(cur);
470 checkSuccessInt(sqlrcon_suspendSession(con),1);
471 port=sqlrcon_getConnectionPort(con);
472 socket=strdup(sqlrcon_getConnectionSocket(con));
473 checkSuccessInt(sqlrcon_resumeSession(con,port,socket),1);
474 checkSuccessInt(sqlrcur_resumeResultSet(cur,id),1);
475 printf("\n");
476 checkSuccessInt(sqlrcur_firstRowIndex(cur),4);
477 checkSuccessInt(sqlrcur_endOfResultSet(cur),0);
478 checkSuccessInt(sqlrcur_rowCount(cur),6);
479 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
480 printf("\n");
481 checkSuccessInt(sqlrcur_firstRowIndex(cur),6);
482 checkSuccessInt(sqlrcur_endOfResultSet(cur),0);
483 checkSuccessInt(sqlrcur_rowCount(cur),8);
484 checkSuccessString(sqlrcur_getFieldByIndex(cur,8,0),NULL);
485 printf("\n");
486 checkSuccessInt(sqlrcur_firstRowIndex(cur),8);
487 checkSuccessInt(sqlrcur_endOfResultSet(cur),1);
488 checkSuccessInt(sqlrcur_rowCount(cur),8);
489 sqlrcur_setResultSetBufferSize(cur,0);
490 printf("\n");
491
492 printf("CACHED RESULT SET: \n");
493 sqlrcur_cacheToFile(cur,"cachefile1");
494 sqlrcur_setCacheTtl(cur,200);
495 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
496 filename=strdup(sqlrcur_getCacheFileName(cur));
497 checkSuccessString(filename,"cachefile1");
498 sqlrcur_cacheOff(cur);
499 checkSuccessInt(sqlrcur_openCachedResultSet(cur,filename),1);
500 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
501 free(filename);
502 printf("\n");
503
504 printf("COLUMN COUNT FOR CACHED RESULT SET: \n");
505 checkSuccessInt(sqlrcur_colCount(cur),4);
506 printf("\n");
507
508 printf("COLUMN NAMES FOR CACHED RESULT SET: \n");
509 checkSuccessString(sqlrcur_getColumnName(cur,0),"testint");
510 checkSuccessString(sqlrcur_getColumnName(cur,1),"testfloat");
511 checkSuccessString(sqlrcur_getColumnName(cur,2),"testchar");
512 checkSuccessString(sqlrcur_getColumnName(cur,3),"testvarchar");
513 cols=sqlrcur_getColumnNames(cur);
514 checkSuccessString(cols[0],"testint");
515 checkSuccessString(cols[1],"testfloat");
516 checkSuccessString(cols[2],"testchar");
517 checkSuccessString(cols[3],"testvarchar");
518 printf("\n");
519
520 printf("CACHED RESULT SET WITH RESULT SET BUFFER SIZE: \n");
521 sqlrcur_setResultSetBufferSize(cur,2);
522 sqlrcur_cacheToFile(cur,"cachefile1");
523 sqlrcur_setCacheTtl(cur,200);
524 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
525 filename=strdup(sqlrcur_getCacheFileName(cur));
526 checkSuccessString(filename,"cachefile1");
527 sqlrcur_cacheOff(cur);
528 checkSuccessInt(sqlrcur_openCachedResultSet(cur,filename),1);
529 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
530 checkSuccessString(sqlrcur_getFieldByIndex(cur,8,0),NULL);
531 sqlrcur_setResultSetBufferSize(cur,0);
532 free(filename);
533 printf("\n");
534
535 printf("FROM ONE CACHE FILE TO ANOTHER: \n");
536 sqlrcur_cacheToFile(cur,"cachefile2");
537 checkSuccessInt(sqlrcur_openCachedResultSet(cur,"cachefile1"),1);
538 sqlrcur_cacheOff(cur);
539 checkSuccessInt(sqlrcur_openCachedResultSet(cur,"cachefile2"),1);
540 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
541 checkSuccessString(sqlrcur_getFieldByIndex(cur,8,0),NULL);
542 printf("\n");
543
544 printf("FROM ONE CACHE FILE TO ANOTHER WITH RESULT SET BUFFER SIZE: \n");
545 sqlrcur_setResultSetBufferSize(cur,2);
546 sqlrcur_cacheToFile(cur,"cachefile2");
547 checkSuccessInt(sqlrcur_openCachedResultSet(cur,"cachefile1"),1);
548 sqlrcur_cacheOff(cur);
549 checkSuccessInt(sqlrcur_openCachedResultSet(cur,"cachefile2"),1);
550 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
551 checkSuccessString(sqlrcur_getFieldByIndex(cur,8,0),NULL);
552 sqlrcur_setResultSetBufferSize(cur,0);
553 printf("\n");
554
555 printf("CACHED RESULT SET WITH SUSPEND AND RESULT SET BUFFER SIZE: \n");
556 sqlrcur_setResultSetBufferSize(cur,2);
557 sqlrcur_cacheToFile(cur,"cachefile1");
558 sqlrcur_setCacheTtl(cur,200);
559 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
560 checkSuccessString(sqlrcur_getFieldByIndex(cur,2,0),"3");
561 filename=strdup(sqlrcur_getCacheFileName(cur));
562 checkSuccessString(filename,"cachefile1");
563 id=sqlrcur_getResultSetId(cur);
564 sqlrcur_suspendResultSet(cur);
565 checkSuccessInt(sqlrcon_suspendSession(con),1);
566 port=sqlrcon_getConnectionPort(con);
567 socket=strdup(sqlrcon_getConnectionSocket(con));
568 printf("\n");
569 checkSuccessInt(sqlrcon_resumeSession(con,port,socket),1);
570 checkSuccessInt(sqlrcur_resumeCachedResultSet(cur,id,filename),1);
571 printf("\n");
572 checkSuccessInt(sqlrcur_firstRowIndex(cur),4);
573 checkSuccessInt(sqlrcur_endOfResultSet(cur),0);
574 checkSuccessInt(sqlrcur_rowCount(cur),6);
575 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
576 printf("\n");
577 checkSuccessInt(sqlrcur_firstRowIndex(cur),6);
578 checkSuccessInt(sqlrcur_endOfResultSet(cur),0);
579 checkSuccessInt(sqlrcur_rowCount(cur),8);
580 checkSuccessString(sqlrcur_getFieldByIndex(cur,8,0),NULL);
581 printf("\n");
582 checkSuccessInt(sqlrcur_firstRowIndex(cur),8);
583 checkSuccessInt(sqlrcur_endOfResultSet(cur),1);
584 checkSuccessInt(sqlrcur_rowCount(cur),8);
585 sqlrcur_cacheOff(cur);
586 printf("\n");
587 checkSuccessInt(sqlrcur_openCachedResultSet(cur,filename),1);
588 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
589 checkSuccessString(sqlrcur_getFieldByIndex(cur,8,0),NULL);
590 sqlrcur_setResultSetBufferSize(cur,0);
591 free(filename);
592 printf("\n");
593
594 printf("COMMIT AND ROLLBACK: \n");
595 secondcon=sqlrcon_alloc("sqlrelay",9000,
596 "/tmp/test.socket","test","test",0,1);
597 secondcur=sqlrcur_alloc(secondcon);
598 checkSuccessInt(sqlrcur_sendQuery(secondcur,"select count(*) from testtable"),1);
599 checkSuccessString(sqlrcur_getFieldByIndex(secondcur,0,0),"0");
600 checkSuccessInt(sqlrcon_commit(con),1);
601 checkSuccessInt(sqlrcur_sendQuery(secondcur,"select count(*) from testtable"),1);
602 checkSuccessString(sqlrcur_getFieldByIndex(secondcur,0,0),"8");
603 checkSuccessInt(sqlrcur_sendQuery(secondcur,"insert into testtable values (10,10.1,'testchar10','testvarchar10')"),1);
604 checkSuccessInt(sqlrcur_sendQuery(secondcur,"select count(*) from testtable"),1);
605 checkSuccessString(sqlrcur_getFieldByIndex(secondcur,0,0),"9");
606 printf("\n");
607
608 printf("FINISHED SUSPENDED SESSION: \n");
609 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable order by testint"),1);
610 checkSuccessString(sqlrcur_getFieldByIndex(cur,4,0),"5");
611 checkSuccessString(sqlrcur_getFieldByIndex(cur,5,0),"6");
612 checkSuccessString(sqlrcur_getFieldByIndex(cur,6,0),"7");
613 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),"8");
614 id=sqlrcur_getResultSetId(cur);
615 sqlrcur_suspendResultSet(cur);
616 checkSuccessInt(sqlrcon_suspendSession(con),1);
617 port=sqlrcon_getConnectionPort(con);
618 socket=strdup(sqlrcon_getConnectionSocket(con));
619 checkSuccessInt(sqlrcon_resumeSession(con,port,socket),1);
620 checkSuccessInt(sqlrcur_resumeResultSet(cur,id),1);
621 checkSuccessString(sqlrcur_getFieldByIndex(cur,4,0),NULL);
622 checkSuccessString(sqlrcur_getFieldByIndex(cur,5,0),NULL);
623 checkSuccessString(sqlrcur_getFieldByIndex(cur,6,0),NULL);
624 checkSuccessString(sqlrcur_getFieldByIndex(cur,7,0),NULL);
625 printf("\n");
626
627 // drop existing table
628 sqlrcur_sendQuery(cur,"drop table testtable");
629
630 // invalid queries...
631 printf("INVALID QUERIES: \n");
632 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable"),0);
633 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable"),0);
634 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable"),0);
635 checkSuccessInt(sqlrcur_sendQuery(cur,"select * from testtable"),0);
636 printf("\n");
637 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable values (1,2,3,4)"),0);
638 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable values (1,2,3,4)"),0);
639 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable values (1,2,3,4)"),0);
640 checkSuccessInt(sqlrcur_sendQuery(cur,"insert into testtable values (1,2,3,4)"),0);
641 printf("\n");
642 checkSuccessInt(sqlrcur_sendQuery(cur,"create table testtable"),0);
643 checkSuccessInt(sqlrcur_sendQuery(cur,"create table testtable"),0);
644 checkSuccessInt(sqlrcur_sendQuery(cur,"create table testtable"),0);
645 checkSuccessInt(sqlrcur_sendQuery(cur,"create table testtable"),0);
646 printf("\n");
647
648 return 0;
649 }
650