Line data Source code
1 : /*
2 : * Purpose: Test retrieving compute rows
3 : * Functions: dbaltbind dbaltcolid dbaltop dbalttype dbnumalts
4 : */
5 :
6 : #include "common.h"
7 : #include <assert.h>
8 :
9 : static int got_error = 0;
10 : static int compute_supported = 1;
11 :
12 : static int
13 0 : compute_msg_handler(DBPROCESS * dbproc TDS_UNUSED, DBINT msgno TDS_UNUSED, int state TDS_UNUSED, int severity TDS_UNUSED,
14 : char *text TDS_UNUSED, char *server TDS_UNUSED, char *proc TDS_UNUSED, int line TDS_UNUSED)
15 : {
16 0 : if (strstr(text, "compute"))
17 0 : compute_supported = 0;
18 : else
19 0 : got_error = 1;
20 0 : return 0;
21 : }
22 :
23 : int
24 8 : main(int argc, char *argv[])
25 : {
26 : LOGINREC *login;
27 : DBPROCESS *dbproc;
28 : int i;
29 : DBINT rowint;
30 : DBCHAR rowchar[2];
31 : DBCHAR rowdate[32];
32 :
33 : DBINT rowtype;
34 : DBINT computeint;
35 : DBCHAR computedate[32];
36 :
37 8 : set_malloc_options();
38 8 : read_login_info(argc, argv);
39 :
40 8 : printf("Starting %s\n", argv[0]);
41 :
42 : /* Fortify_EnterScope(); */
43 8 : dbinit();
44 :
45 8 : dberrhandle(syb_err_handler);
46 8 : dbmsghandle(syb_msg_handler);
47 :
48 8 : printf("About to logon\n");
49 :
50 8 : login = dblogin();
51 8 : DBSETLPWD(login, PASSWORD);
52 8 : DBSETLUSER(login, USER);
53 8 : DBSETLAPP(login, "t0023");
54 :
55 8 : printf("About to open\n");
56 :
57 8 : dbproc = dbopen(login, SERVER);
58 8 : if (strlen(DATABASE))
59 8 : dbuse(dbproc, DATABASE);
60 8 : dbloginfree(login);
61 :
62 8 : sql_cmd(dbproc);
63 8 : dbmsghandle(compute_msg_handler);
64 8 : i = dbsqlexec(dbproc);
65 8 : dbmsghandle(syb_msg_handler);
66 8 : if (!compute_supported) {
67 0 : printf("compute clause not supported, skip test!\n");
68 0 : dbexit();
69 0 : return 0;
70 : }
71 8 : if (got_error) {
72 0 : fprintf(stderr, "Unexpected error from query.\n");
73 0 : exit(1);
74 : }
75 16 : while ((i=dbresults(dbproc)) != NO_MORE_RESULTS) {
76 16 : while (dbnextrow(dbproc) != NO_MORE_ROWS)
77 8 : continue;
78 : }
79 :
80 8 : printf("creating table\n");
81 8 : sql_cmd(dbproc);
82 8 : dbsqlexec(dbproc);
83 8 : while (dbresults(dbproc) == SUCCEED) {
84 : /* nop */
85 : }
86 :
87 8 : printf("insert\n");
88 :
89 8 : sql_cmd(dbproc);
90 8 : dbsqlexec(dbproc);
91 8 : while (dbresults(dbproc) == SUCCEED) {
92 : /* nop */
93 : }
94 8 : sql_cmd(dbproc);
95 8 : dbsqlexec(dbproc);
96 8 : while (dbresults(dbproc) == SUCCEED) {
97 : /* nop */
98 : }
99 8 : sql_cmd(dbproc);
100 8 : dbsqlexec(dbproc);
101 8 : while (dbresults(dbproc) == SUCCEED) {
102 : /* nop */
103 : }
104 8 : sql_cmd(dbproc);
105 8 : dbsqlexec(dbproc);
106 8 : while (dbresults(dbproc) == SUCCEED) {
107 : /* nop */
108 : }
109 8 : sql_cmd(dbproc);
110 8 : dbsqlexec(dbproc);
111 8 : while (dbresults(dbproc) == SUCCEED) {
112 : /* nop */
113 : }
114 :
115 8 : printf("select\n");
116 8 : sql_cmd(dbproc);
117 8 : dbsqlexec(dbproc);
118 :
119 8 : if (dbresults(dbproc) != SUCCEED) {
120 0 : fprintf(stderr, "Was expecting a result set.\n");
121 0 : exit(1);
122 : }
123 :
124 24 : for (i = 1; i <= dbnumcols(dbproc); i++)
125 24 : printf("col %d is %s\n", i, dbcolname(dbproc, i));
126 :
127 8 : printf("binding row columns\n");
128 8 : if (SUCCEED != dbbind(dbproc, 1, INTBIND, 0, (BYTE *) & rowint)) {
129 0 : fprintf(stderr, "Had problem with bind col1\n");
130 0 : abort();
131 : }
132 8 : if (SUCCEED != dbbind(dbproc, 2, STRINGBIND, 0, (BYTE *) rowchar)) {
133 0 : fprintf(stderr, "Had problem with bind col2\n");
134 0 : abort();
135 : }
136 8 : if (SUCCEED != dbbind(dbproc, 3, STRINGBIND, 0, (BYTE *) rowdate)) {
137 0 : fprintf(stderr, "Had problem with bind col3\n");
138 0 : abort();
139 : }
140 :
141 8 : printf("testing compute clause 1\n");
142 :
143 8 : if (dbnumalts(dbproc, 1) != 1) {
144 0 : fprintf(stderr, "Had problem with dbnumalts 1\n");
145 0 : abort();
146 : }
147 :
148 8 : if (dbalttype(dbproc, 1, 1) != SYBINT4) {
149 0 : fprintf(stderr, "Had problem with dbalttype 1, 1\n");
150 0 : abort();
151 : }
152 :
153 8 : if (dbaltcolid(dbproc, 1, 1) != 1) {
154 0 : fprintf(stderr, "Had problem with dbaltcolid 1, 1\n");
155 0 : abort();
156 : }
157 :
158 8 : if (dbaltop(dbproc, 1, 1) != SYBAOPSUM) {
159 0 : fprintf(stderr, "Had problem with dbaltop 1, 1\n");
160 0 : abort();
161 : }
162 :
163 8 : if (SUCCEED != dbaltbind(dbproc, 1, 1, INTBIND, 0, (BYTE *) & computeint)) {
164 0 : fprintf(stderr, "Had problem with dbaltbind 1, 1\n");
165 0 : abort();
166 : }
167 :
168 :
169 8 : printf("testing compute clause 2\n");
170 :
171 8 : if (dbnumalts(dbproc, 2) != 1) {
172 0 : fprintf(stderr, "Had problem with dbnumalts 2\n");
173 0 : abort();
174 : }
175 :
176 8 : if (dbalttype(dbproc, 2, 1) != SYBDATETIME) {
177 0 : fprintf(stderr, "Had problem with dbalttype 2, 1\n");
178 0 : abort();
179 : }
180 :
181 8 : if (dbaltcolid(dbproc, 2, 1) != 3) {
182 0 : fprintf(stderr, "Had problem with dbaltcolid 2, 1\n");
183 0 : abort();
184 : }
185 :
186 8 : if (dbaltop(dbproc, 2, 1) != SYBAOPMAX) {
187 0 : fprintf(stderr, "Had problem with dbaltop 2, 1\n");
188 0 : abort();
189 : }
190 :
191 8 : if (SUCCEED != dbaltbind(dbproc, 2, 1, STRINGBIND, -1, (BYTE *) computedate)) {
192 0 : fprintf(stderr, "Had problem with dbaltbind 2, 1\n");
193 0 : abort();
194 : }
195 :
196 72 : while ((rowtype = dbnextrow(dbproc)) != NO_MORE_ROWS) {
197 :
198 64 : if (rowtype == REG_ROW) {
199 40 : printf("gotten a regular row\n");
200 : }
201 :
202 64 : if (rowtype == 1) {
203 16 : printf("gotten a compute row for clause 1\n");
204 16 : printf("value of sum(col1) = %d\n", computeint);
205 : }
206 :
207 64 : if (rowtype == 2) {
208 8 : printf("gotten a compute row for clause 2\n");
209 8 : printf("value of max(col3) = %s\n", computedate);
210 :
211 : }
212 : }
213 :
214 8 : dbexit();
215 :
216 8 : printf("%s %s\n", __FILE__, "OK");
217 8 : return 0;
218 : }
|