Line data Source code
1 : #include <config.h>
2 :
3 : #include <stdio.h>
4 :
5 : #if HAVE_STRING_H
6 : #include <string.h>
7 : #endif /* HAVE_STRING_H */
8 :
9 : #include <ctpublic.h>
10 : #include "common.h"
11 :
12 : /* Testing: Retrieve CS_TEXT_TYPE using ct_bind() */
13 : int
14 8 : main(int argc, char **argv)
15 : {
16 : CS_CONTEXT *ctx;
17 : CS_CONNECTION *conn;
18 : CS_COMMAND *cmd;
19 8 : int i, verbose = 0;
20 :
21 : CS_RETCODE ret;
22 : CS_RETCODE results_ret;
23 : CS_INT result_type;
24 : CS_INT num_cols;
25 :
26 : CS_DATAFMT datafmt;
27 : CS_INT datalength;
28 : CS_SMALLINT ind;
29 8 : CS_INT count, row_count = 0;
30 :
31 : CS_CHAR name[1024];
32 : char large_sql[1024];
33 : char len600[601];
34 : char temp[11];
35 :
36 8 : len600[0] = 0;
37 8 : name[0] = 0;
38 488 : for (i = 0; i < 60; i++) {
39 480 : sprintf(temp, "_abcde_%03d", (i + 1) * 10);
40 480 : strcat(len600, temp);
41 : }
42 8 : len600[600] = '\0';
43 :
44 8 : printf("%s: Retrieve CS_TEXT_TYPE using ct_bind()\n", __FILE__);
45 : if (verbose) {
46 : printf("Trying login\n");
47 : }
48 8 : ret = try_ctlogin(&ctx, &conn, &cmd, verbose);
49 8 : if (ret != CS_SUCCEED) {
50 0 : fprintf(stderr, "Login failed\n");
51 0 : return 1;
52 : }
53 :
54 8 : ret = run_command(cmd, "CREATE TABLE #test_table (id int, name text)");
55 8 : if (ret != CS_SUCCEED)
56 : return 1;
57 : /*
58 : ret = run_command(cmd, "INSERT #test_table (id, name) VALUES (1, 'name1')");
59 : if (ret != CS_SUCCEED) return 1;
60 : */
61 8 : sprintf(large_sql, "INSERT #test_table (id, name) VALUES (2, '%s')", len600);
62 8 : ret = run_command(cmd, large_sql);
63 8 : if (ret != CS_SUCCEED)
64 : return 1;
65 :
66 8 : ret = ct_command(cmd, CS_LANG_CMD, "SELECT name FROM #test_table", CS_NULLTERM, CS_UNUSED);
67 8 : if (ret != CS_SUCCEED) {
68 0 : fprintf(stderr, "ct_command() failed\n");
69 0 : return 1;
70 : }
71 8 : ret = ct_send(cmd);
72 8 : if (ret != CS_SUCCEED) {
73 0 : fprintf(stderr, "ct_send() failed\n");
74 0 : return 1;
75 : }
76 24 : while ((results_ret = ct_results(cmd, &result_type)) == CS_SUCCEED) {
77 16 : switch ((int) result_type) {
78 : case CS_CMD_SUCCEED:
79 : break;
80 : case CS_CMD_DONE:
81 : break;
82 0 : case CS_CMD_FAIL:
83 0 : fprintf(stderr, "ct_results() result_type CS_CMD_FAIL.\n");
84 0 : return 1;
85 8 : case CS_ROW_RESULT:
86 8 : ret = ct_res_info(cmd, CS_NUMDATA, &num_cols, CS_UNUSED, NULL);
87 8 : if (ret != CS_SUCCEED) {
88 0 : fprintf(stderr, "ct_res_info() failed");
89 0 : return 1;
90 : }
91 8 : if (num_cols != 1) {
92 0 : fprintf(stderr, "num_cols %d != 1", num_cols);
93 0 : return 1;
94 : }
95 8 : ret = ct_describe(cmd, 1, &datafmt);
96 8 : if (ret != CS_SUCCEED) {
97 0 : fprintf(stderr, "ct_describe() failed");
98 0 : return 1;
99 : }
100 8 : datafmt.format = CS_FMT_NULLTERM;
101 8 : if (datafmt.maxlength > 1024) {
102 8 : datafmt.maxlength = 1024;
103 : }
104 8 : ret = ct_bind(cmd, 1, &datafmt, name, &datalength, &ind);
105 8 : if (ret != CS_SUCCEED) {
106 0 : fprintf(stderr, "ct_bind() failed\n");
107 0 : return 1;
108 : }
109 :
110 16 : while (((ret = ct_fetch(cmd, CS_UNUSED, CS_UNUSED, CS_UNUSED, &count)) == CS_SUCCEED)
111 8 : || (ret == CS_ROW_FAIL)) {
112 8 : row_count += count;
113 8 : if (ret == CS_ROW_FAIL) {
114 0 : fprintf(stderr, "ct_fetch() CS_ROW_FAIL on row %d.\n", row_count);
115 0 : return 1;
116 : } else { /* ret == CS_SUCCEED */
117 : if (verbose) {
118 : printf("name = '%s'\n", name);
119 : }
120 8 : if (strcmp(name, len600)) {
121 0 : fprintf(stderr, "Bad return:\n'%s'\n! =\n'%s'\n", name, len600);
122 0 : return 1;
123 : }
124 8 : if (datalength != strlen(name) + 1) {
125 0 : fprintf(stderr, "Bad count:\n'%ld'\n! =\n'%d'\n", (long) strlen(name) + 1, count);
126 0 : return 1;
127 : }
128 : }
129 : }
130 8 : switch ((int) ret) {
131 : case CS_END_DATA:
132 : break;
133 0 : case CS_FAIL:
134 0 : fprintf(stderr, "ct_fetch() returned CS_FAIL.\n");
135 0 : return 1;
136 0 : default:
137 0 : fprintf(stderr, "ct_fetch() unexpected return.\n");
138 0 : return 1;
139 : }
140 : break;
141 0 : case CS_COMPUTE_RESULT:
142 0 : fprintf(stderr, "ct_results() unexpected CS_COMPUTE_RESULT.\n");
143 0 : return 1;
144 0 : default:
145 0 : fprintf(stderr, "ct_results() unexpected result_type.\n");
146 0 : return 1;
147 : }
148 : }
149 8 : switch ((int) results_ret) {
150 : case CS_END_RESULTS:
151 : break;
152 0 : case CS_FAIL:
153 0 : fprintf(stderr, "ct_results() failed.\n");
154 0 : return 1;
155 : break;
156 0 : default:
157 0 : fprintf(stderr, "ct_results() unexpected return.\n");
158 0 : return 1;
159 : }
160 :
161 : if (verbose) {
162 : printf("Trying logout\n");
163 : }
164 8 : ret = try_ctlogout(ctx, conn, cmd, verbose);
165 8 : if (ret != CS_SUCCEED) {
166 0 : fprintf(stderr, "Logout failed\n");
167 0 : return 1;
168 : }
169 :
170 : return 0;
171 : }
|