1 /*
2 */
3
4 #include "my_test.h"
5
execute_direct(MYSQL * mysql)6 static int execute_direct(MYSQL *mysql)
7 {
8 int rc= 0;
9 long i= 0;
10 MYSQL_STMT *stmt;
11 MYSQL_BIND bind;
12 unsigned int param_count= 1;
13 MYSQL_RES *res= NULL;
14
15 stmt= mysql_stmt_init(mysql);
16
17 rc= mariadb_stmt_execute_direct(stmt, "DROP TABLE IF EXISTS t1", -1);
18 check_stmt_rc(rc, stmt);
19
20 rc= mariadb_stmt_execute_direct(stmt, "SELECT 1", -1);
21 check_stmt_rc(rc, stmt);
22
23 while (!mysql_stmt_fetch(stmt));
24
25 rc= mariadb_stmt_execute_direct(stmt, "SELECT 1", -1);
26 check_stmt_rc(rc, stmt);
27
28 rc= mariadb_stmt_execute_direct(stmt, "CREATE TABLE t1 (a int)", -1);
29 check_stmt_rc(rc, stmt);
30
31 rc= mysql_query(mysql, "FLUSH TABLES");
32 check_mysql_rc(rc, mysql);
33
34 memset(&bind, 0, sizeof(MYSQL_BIND));
35
36 bind.buffer= &i;
37 bind.buffer_type= MYSQL_TYPE_LONG;
38 bind.buffer_length= sizeof(long);
39
40 mysql_stmt_close(stmt);
41 stmt= mysql_stmt_init(mysql);
42 mysql_stmt_attr_set(stmt, STMT_ATTR_PREBIND_PARAMS, ¶m_count);
43
44 rc= mysql_stmt_bind_param(stmt, &bind);
45 check_stmt_rc(rc, stmt);
46 rc= mariadb_stmt_execute_direct(stmt, "INSERT INTO t1 VALUES (?)", -1);
47 check_stmt_rc(rc, stmt);
48
49 rc= mysql_query(mysql, "START TRANSACTION");
50 check_mysql_rc(rc, mysql);
51
52 for (i=1; i < 1000; i++)
53 {
54 rc= mysql_stmt_execute(stmt);
55 check_stmt_rc(rc, stmt);
56 }
57 rc= mysql_stmt_close(stmt);
58 check_mysql_rc(rc, mysql);
59
60 rc= mysql_query(mysql, "SELECT * FROM t1");
61 check_mysql_rc(rc, mysql);
62
63 res= mysql_store_result(mysql);
64 FAIL_IF(mysql_num_rows(res) != 1000, "Expected 1000 rows");
65
66 mysql_free_result(res);
67 rc= mysql_query(mysql, "COMMIT");
68 check_mysql_rc(rc, mysql);
69
70 rc= mysql_query(mysql, "DROP TABLE t1");
71 check_mysql_rc(rc, mysql);
72
73 return OK;
74 }
75
execute_direct_example(MYSQL * mysql)76 static int execute_direct_example(MYSQL *mysql)
77 {
78 MYSQL_STMT *stmt= mysql_stmt_init(mysql);
79 MYSQL_BIND bind[2];
80 int intval= 1;
81 int param_count= 2;
82 int rc;
83 const char *strval= "execute_direct_example1";
84
85 /* Direct execution without parameters */
86 rc= mariadb_stmt_execute_direct(stmt, "DROP TABLE IF EXISTS execute_direct", -1);
87 check_stmt_rc(rc, stmt);
88 rc= mariadb_stmt_execute_direct(stmt, "CREATE TABLE execute_direct (a int, b varchar(20))", -1);
89 rc= mysql_stmt_close(stmt);
90 stmt= mysql_stmt_init(mysql);
91 check_stmt_rc(rc, stmt);
92 memset(bind, 0, sizeof(MYSQL_BIND) * 2);
93 bind[0].buffer_type= MYSQL_TYPE_SHORT;
94 bind[0].buffer= &intval;
95 bind[1].buffer_type= MYSQL_TYPE_STRING;
96 bind[1].buffer= (char *)strval;
97 bind[1].buffer_length= (unsigned long)strlen(strval);
98
99 /* set number of parameters */
100 rc= mysql_stmt_attr_set(stmt, STMT_ATTR_PREBIND_PARAMS, ¶m_count);
101 check_stmt_rc(rc, stmt);
102
103 /* bind parameters */
104 rc= mysql_stmt_bind_param(stmt, bind);
105 check_stmt_rc(rc, stmt);
106
107 rc= mariadb_stmt_execute_direct(stmt, "INSERT INTO execute_direct VALUES (?,?)", -1);
108 check_stmt_rc(rc, stmt);
109
110 mysql_stmt_close(stmt);
111
112 rc= mysql_query(mysql, "DROP TABLE execute_direct");
113 check_mysql_rc(rc, mysql);
114 return OK;
115 }
116
conc_213(MYSQL * mysql)117 static int conc_213(MYSQL *mysql)
118 {
119 MYSQL_BIND bind;
120 unsigned int param_count= 1;
121 long id= 1234;
122 MYSQL_STMT *stmt;
123
124 stmt = mysql_stmt_init(mysql);
125
126 memset(&bind, '\0', sizeof(bind));
127
128 bind.buffer_type = MYSQL_TYPE_LONG;
129 bind.buffer = (void *)&id;
130 bind.buffer_length = sizeof(long);
131 /* bind.is_null = &is_null;
132 bind.length = &length;
133 bind.error = &error; */
134
135 mysql_stmt_attr_set(stmt, STMT_ATTR_PREBIND_PARAMS, ¶m_count);
136 check_stmt_rc(mysql_stmt_bind_param(stmt, &bind), stmt);
137 check_stmt_rc(mariadb_stmt_execute_direct(stmt, "SELECT ?", -1), stmt);
138 check_stmt_rc(mysql_stmt_store_result(stmt), stmt);
139 check_stmt_rc(mysql_stmt_free_result(stmt), stmt);
140
141 mysql_stmt_close(stmt);
142
143 return OK;
144 }
145
conc_212(MYSQL * mysql)146 static int conc_212(MYSQL *mysql)
147 {
148 MYSQL_STMT *stmt= mysql_stmt_init(mysql);
149 int rc;
150
151 rc= mariadb_stmt_execute_direct(stmt, "SELECT 1, 2", -1);
152 check_stmt_rc(rc, stmt);
153 mysql_stmt_store_result(stmt);
154 mysql_stmt_free_result(stmt);
155
156 rc= mariadb_stmt_execute_direct(stmt, "SELECT 1, 2", -1);
157 check_stmt_rc(rc, stmt);
158 mysql_stmt_store_result(stmt);
159 mysql_stmt_free_result(stmt);
160
161 rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
162 check_mysql_rc(rc,mysql);
163
164
165 rc= mysql_stmt_close(stmt);
166
167 return OK;
168 }
169
conc_218(MYSQL * mysql)170 static int conc_218(MYSQL *mysql)
171 {
172 MYSQL_STMT *stmt= mysql_stmt_init(mysql);
173 MYSQL_BIND bind[2];
174 int id=1;
175 my_bool is_null= 0, error= 0;
176 unsigned int param_count= 1;
177
178 memset(bind, 0, 2 * sizeof(MYSQL_BIND));
179 bind[0].buffer_type = MYSQL_TYPE_LONG;
180 bind[0].buffer = (void *)&id;
181 bind[0].buffer_length = 4;
182 bind[0].is_null = &is_null;
183 bind[0].error = &error;
184
185 mysql_stmt_attr_set(stmt, STMT_ATTR_PREBIND_PARAMS, ¶m_count);
186 check_stmt_rc(mysql_stmt_bind_param(stmt, bind), stmt);
187 check_stmt_rc(mariadb_stmt_execute_direct(stmt, "SELECT ?", -1), stmt);
188 check_stmt_rc(mysql_stmt_store_result(stmt), stmt);
189
190 check_stmt_rc(mysql_stmt_free_result(stmt), stmt);
191
192 param_count= 1;
193 mysql_stmt_attr_set(stmt, STMT_ATTR_PREBIND_PARAMS, ¶m_count);
194 check_stmt_rc(mysql_stmt_bind_param(stmt, bind), stmt);
195 check_stmt_rc(mariadb_stmt_execute_direct(stmt, "SELECT ?", -1), stmt);
196 mysql_stmt_close(stmt);
197
198 return OK;
199 }
200
test_cursor(MYSQL * mysql)201 static int test_cursor(MYSQL *mysql)
202 {
203 int rc;
204 MYSQL_STMT *stmt;
205 unsigned long prefetch_rows= 1;
206 unsigned long cursor_type= CURSOR_TYPE_READ_ONLY;
207
208 stmt= mysql_stmt_init(mysql);
209 rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, &cursor_type);
210 check_stmt_rc(rc, stmt);
211 rc= mysql_stmt_attr_set(stmt, STMT_ATTR_PREFETCH_ROWS, &prefetch_rows);
212 check_stmt_rc(rc, stmt);
213 rc= mariadb_stmt_execute_direct(stmt, "SELECT 1 FROM DUAL UNION SELECT 2 FROM DUAL", -1);
214 check_stmt_rc(rc, stmt);
215 rc= mysql_stmt_fetch(stmt);
216 check_stmt_rc(rc, stmt);
217 rc= mariadb_stmt_execute_direct(stmt, "SELECT 1 FROM DUAL UNION SELECT 2 FROM DUAL", -1);
218 check_stmt_rc(rc, stmt);
219 mysql_stmt_close(stmt);
220 return OK;
221 }
222
223
224 struct my_tests_st my_tests[] = {
225 {"test_cursor", test_cursor, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
226 {"conc_218", conc_218, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
227 {"conc_212", conc_212, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
228 {"conc_213", conc_213, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
229 {"execute_direct", execute_direct, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
230 {"execute_direct_example", execute_direct_example, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
231 {NULL, NULL, 0, 0, NULL, NULL}
232 };
233
234
main(int argc,char ** argv)235 int main(int argc, char **argv)
236 {
237
238 mysql_library_init(0,0,NULL);
239
240 if (argc > 1)
241 get_options(argc, argv);
242
243 get_envvars();
244
245 run_tests(my_tests);
246
247 mysql_server_end();
248 return(exit_status());
249 }
250