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