1 /*
2  * Purpose: Test behaviour of dbmorecmds()
3  * Functions: dbmorecmds
4  */
5 
6 #include "common.h"
7 
8 #include <common/test_assert.h>
9 
10 int failed = 0;
11 
12 int
main(int argc,char ** argv)13 main(int argc, char **argv)
14 {
15 	const int rows_to_add = 10;
16 	LOGINREC *login;
17 	DBPROCESS *dbproc;
18 	int i, nresults;
19 
20 	set_malloc_options();
21 
22 	read_login_info(argc, argv);
23 	fprintf(stdout, "Starting %s\n", argv[0]);
24 
25 	/* Fortify_EnterScope(); */
26 	dbinit();
27 
28 	dberrhandle(syb_err_handler);
29 	dbmsghandle(syb_msg_handler);
30 
31 	fprintf(stdout, "About to logon\n");
32 
33 	login = dblogin();
34 	fprintf(stdout, "after dblogin\n");
35 	DBSETLPWD(login, PASSWORD);
36 	DBSETLUSER(login, USER);
37 	DBSETLAPP(login, "t0024");
38 
39 	fprintf(stdout, "About to open [%s]\n", USER);
40 
41 	dbproc = dbopen(login, SERVER);
42 	fprintf(stdout, "After dbopen [%s]\n", SERVER);
43 
44 	if (strlen(DATABASE)) {
45 		fprintf(stdout, "About to dbuse [%s]\n", DATABASE);
46 		dbuse(dbproc, DATABASE);
47 	}
48 	dbloginfree(login);
49 
50 	fprintf(stdout, "After dbuse [%s]\n", DATABASE);
51 
52 	fprintf(stdout, "creating table\n");
53 	sql_cmd(dbproc);
54 	dbsqlexec(dbproc);
55 	while (dbresults(dbproc) != NO_MORE_RESULTS) {
56 		/* nop */
57 	}
58 
59 	fprintf(stdout, "insert\n");
60 	for (i = 0; i < rows_to_add; i++) {
61 		sql_cmd(dbproc);
62 		dbsqlexec(dbproc);
63 		while (dbresults(dbproc) != NO_MORE_RESULTS) {
64 			/* nop */
65 		}
66 	}
67 
68 	fprintf(stdout, "select one resultset\n");
69 	sql_cmd(dbproc);
70 	dbsqlexec(dbproc);
71 
72 	nresults = 0;
73 
74 	if (dbresults(dbproc) == SUCCEED) {
75 		do {
76 			while (dbnextrow(dbproc) != NO_MORE_ROWS)
77 				continue;
78 			nresults++;
79 		} while (dbmorecmds(dbproc) == SUCCEED);
80 	}
81 
82 	/* dbmorecmds should return success 0 times for select 1 */
83 	if (nresults != 1) {
84 		failed = 1;
85 		fprintf(stdout, "Was expecting nresults == 1.\n");
86 		exit(1);
87 	}
88 
89 	dbcancel(dbproc);
90 
91 	fprintf(stdout, "select two resultsets\n");
92 	sql_cmd(dbproc);
93 	dbsqlexec(dbproc);
94 
95 	nresults = 0;
96 
97 	do {
98 		if (dbresults(dbproc) == SUCCEED) {
99 			while (dbnextrow(dbproc) != NO_MORE_ROWS)
100 				continue;
101 			nresults++;
102 		}
103 	} while (dbmorecmds(dbproc) == SUCCEED);
104 
105 
106 	/* dbmorecmds should return success 2 times for select 2 */
107 	if (nresults != 2) {	/* two results sets plus a return code */
108 		failed = 1;
109 		fprintf(stdout, "nresults was %d; was expecting nresults = 2.\n", nresults);
110 		exit(1);
111 	}
112 
113 	/* end of test processing */
114 	dbexit();
115 
116 	fprintf(stdout, "%s %s\n", __FILE__, (failed ? "failed!" : "OK"));
117 	return failed ? 1 : 0;
118 }
119