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