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