Line data Source code
1 : /*
2 : * Purpose: Test handling of empty rowsets
3 : * Functions: dbcmd dbdata dbdatlen dbnextrow dbresults dbsqlexec
4 : */
5 :
6 : #include "common.h"
7 :
8 : static int failed = 0;
9 : static void set_failed(int line)
10 : {
11 0 : failed = 1;
12 0 : fprintf(stderr, "Failed check at line %d\n", line);
13 : }
14 : #define set_failed() set_failed(__LINE__)
15 :
16 : int
17 8 : main(int argc, char *argv[])
18 : {
19 : LOGINREC *login;
20 : DBPROCESS *dbproc;
21 : int ret_code;
22 : int num_cols;
23 : int num_res;
24 :
25 8 : set_malloc_options();
26 :
27 8 : read_login_info(argc, argv);
28 8 : printf("Starting %s\n", argv[0]);
29 8 : dbinit();
30 :
31 8 : dberrhandle(syb_err_handler);
32 8 : dbmsghandle(syb_msg_handler);
33 :
34 8 : printf("About to logon\n");
35 :
36 8 : login = dblogin();
37 8 : DBSETLPWD(login, PASSWORD);
38 8 : DBSETLUSER(login, USER);
39 8 : DBSETLAPP(login, "empty_rowsets");
40 :
41 8 : dbproc = dbopen(login, SERVER);
42 8 : if (strlen(DATABASE)) {
43 8 : dbuse(dbproc, DATABASE);
44 : }
45 8 : dbloginfree(login);
46 8 : printf("After logon\n");
47 :
48 : /* select */
49 8 : sql_cmd(dbproc);
50 8 : dbsqlexec(dbproc);
51 :
52 8 : num_res = 0;
53 48 : while ((ret_code = dbresults(dbproc)) == SUCCEED) {
54 32 : num_cols = dbnumcols(dbproc);
55 32 : printf("Result %d has %d columns\n", num_res, num_cols);
56 32 : if (!(num_res % 2) && num_cols)
57 : set_failed();
58 48 : while (dbnextrow(dbproc) != NO_MORE_ROWS)
59 16 : continue;
60 32 : num_res++;
61 : }
62 8 : if (ret_code != NO_MORE_RESULTS)
63 : set_failed();
64 :
65 8 : dbclose(dbproc);
66 8 : dbexit();
67 :
68 8 : printf("%s %s\n", __FILE__, (failed ? "failed!" : "OK"));
69 8 : return failed ? 1 : 0;
70 : }
|