1 #include <config.h>
2
3 #if HAVE_STRING_H
4 #include <string.h>
5 #endif /* HAVE_STRING_H */
6
7 #include <stdio.h>
8 #include <ctpublic.h>
9 #include <bkpublic.h>
10 #include "common.h"
11
12 /* Testing: array binding of result set */
13 int
main(int argc,char * argv[])14 main(int argc, char *argv[])
15 {
16 CS_CONTEXT *ctx;
17 CS_CONNECTION *conn;
18 CS_COMMAND *cmd;
19 CS_BLKDESC *blkdesc;
20 int verbose = 0;
21
22 CS_RETCODE ret;
23
24 CS_DATAFMT datafmt;
25 CS_INT count = 0;
26
27 CS_INT col1[2];
28 CS_CHAR col2[2][5];
29 CS_CHAR col3[2][32];
30 CS_INT lencol1[2];
31 CS_SMALLINT indcol1[2];
32 CS_INT lencol2[2];
33 CS_SMALLINT indcol2[2];
34 CS_INT lencol3[2];
35 CS_SMALLINT indcol3[2];
36
37 int i;
38
39
40 printf("%s: Retrieve data using array binding \n", __FILE__);
41 if (verbose) {
42 printf("Trying login\n");
43 }
44 ret = try_ctlogin(&ctx, &conn, &cmd, verbose);
45 if (ret != CS_SUCCEED) {
46 fprintf(stderr, "Login failed\n");
47 return 1;
48 }
49
50 /* do not test error */
51 ret = run_command(cmd, "IF OBJECT_ID('tempdb..#ctlibarray') IS NOT NULL DROP TABLE #ctlibarray");
52
53 ret = run_command(cmd, "CREATE TABLE #ctlibarray (col1 int null, col2 char(4) not null, col3 datetime not null)");
54 if (ret != CS_SUCCEED)
55 return 1;
56
57 ret = run_command(cmd, "insert into #ctlibarray values (1, 'AAAA', 'Jan 1 2002 10:00:00AM')");
58 if (ret != CS_SUCCEED)
59 return 1;
60
61 ret = run_command(cmd, "insert into #ctlibarray values (2, 'BBBB', 'Jan 2 2002 10:00:00AM')");
62 if (ret != CS_SUCCEED)
63 return 1;
64
65 ret = run_command(cmd, "insert into #ctlibarray values (3, 'CCCC', 'Jan 3 2002 10:00:00AM')");
66 if (ret != CS_SUCCEED)
67 return 1;
68
69 ret = run_command(cmd, "insert into #ctlibarray values (8, 'DDDD', 'Jan 4 2002 10:00:00AM')");
70 if (ret != CS_SUCCEED)
71 return 1;
72
73 ret = run_command(cmd, "insert into #ctlibarray values (NULL, 'EEEE', 'Jan 5 2002 10:00:00AM')");
74 if (ret != CS_SUCCEED)
75 return 1;
76
77 ret = blk_alloc(conn, BLK_VERSION_100, &blkdesc);
78 if (ret != CS_SUCCEED) {
79 fprintf(stderr, "blk_alloc() failed\n");
80 return 1;
81 }
82
83 ret = blk_init(blkdesc, CS_BLK_OUT, "#ctlibarray", CS_NULLTERM );
84
85 if (ret != CS_SUCCEED) {
86 fprintf(stderr, "blk_init() failed\n");
87 return 1;
88 }
89
90
91 ret = blk_describe(blkdesc, 1, &datafmt);
92 if (ret != CS_SUCCEED) {
93 fprintf(stderr, "blk_describe(1) failed");
94 return 1;
95 }
96
97 datafmt.format = CS_FMT_UNUSED;
98 if (datafmt.maxlength > 1024) {
99 datafmt.maxlength = 1024;
100 }
101
102 datafmt.count = 2;
103
104 ret = blk_bind(blkdesc, 1, &datafmt, &col1[0], &lencol1[0], &indcol1[0]);
105 if (ret != CS_SUCCEED) {
106 fprintf(stderr, "blk_bind() failed\n");
107 return 1;
108 }
109
110
111 ret = blk_describe(blkdesc, 2, &datafmt);
112 if (ret != CS_SUCCEED) {
113 fprintf(stderr, "blk_describe(2) failed");
114 return 1;
115 }
116
117 datafmt.format = CS_FMT_NULLTERM;
118 datafmt.maxlength = 5;
119 datafmt.count = 2;
120
121 ret = blk_bind(blkdesc, 2, &datafmt, col2[0], &lencol2[0], &indcol2[0]);
122 if (ret != CS_SUCCEED) {
123 fprintf(stderr, "blk_bind() failed\n");
124 return 1;
125 }
126
127 ret = blk_describe(blkdesc, 3, &datafmt);
128 if (ret != CS_SUCCEED) {
129 fprintf(stderr, "blk_describe() failed");
130 return 1;
131 }
132
133 datafmt.datatype = CS_CHAR_TYPE;
134 datafmt.format = CS_FMT_NULLTERM;
135 datafmt.maxlength = 32;
136 datafmt.count = 2;
137
138 ret = blk_bind(blkdesc, 3, &datafmt, col3[0], &lencol3[0], &indcol3[0]);
139 if (ret != CS_SUCCEED) {
140 fprintf(stderr, "ct_bind() failed\n");
141 return 1;
142 }
143
144 while((ret = blk_rowxfer_mult(blkdesc, &count)) == CS_SUCCEED) {
145 for(i = 0; i < count; i++) {
146 printf("retrieved %d (%d,%d) %s (%d,%d) %s (%d,%d)\n",
147 col1[i], lencol1[i], indcol1[i],
148 col2[i], lencol2[i], indcol2[i],
149 col3[i], lencol3[i], indcol3[i] );
150 }
151 }
152 switch (ret) {
153 case CS_END_DATA:
154 for(i = 0; i < count; i++) {
155 printf("retrieved %d (%d,%d) %s (%d,%d) %s (%d,%d)\n",
156 col1[i], lencol1[i], indcol1[i],
157 col2[i], lencol2[i], indcol2[i],
158 col3[i], lencol3[i], indcol3[i] );
159 }
160 break;
161 case CS_FAIL:
162 case CS_ROW_FAIL:
163 fprintf(stderr, "blk_rowxfer_mult() failed\n");
164 return 1;
165 }
166
167 blk_drop(blkdesc);
168
169 ret = try_ctlogout(ctx, conn, cmd, verbose);
170 if (ret != CS_SUCCEED) {
171 fprintf(stderr, "Logout failed\n");
172 return 1;
173 }
174
175 return 0;
176 }
177