87 lines
2.0 KiB
C++
87 lines
2.0 KiB
C++
#include "testconnections.h"
|
|
#include <iostream>
|
|
|
|
using namespace std;
|
|
|
|
void print_stmt_error(MYSQL_STMT* stmt, const char* msg)
|
|
{
|
|
cout << "Error: " << msg << ": " << mysql_stmt_error(stmt) << endl;
|
|
}
|
|
|
|
static int test_long_data(MYSQL* conn, int sqlsize)
|
|
{
|
|
int data1size = sqlsize / 2;
|
|
|
|
char* data1 = (char*) malloc(data1size);
|
|
memset(data1, 97, data1size);
|
|
char* data3 = (char*) malloc(sqlsize);
|
|
memset(data3, 99, sqlsize);
|
|
|
|
MYSQL_STMT* stmt;
|
|
stmt = mysql_stmt_init(conn);
|
|
int int_data;
|
|
MYSQL_RES* result;
|
|
MYSQL_BIND my_bind[1];
|
|
|
|
mysql_autocommit(conn, 1);
|
|
|
|
if (NULL == stmt)
|
|
{
|
|
fprintf(stderr, "%s", mysql_error(conn));
|
|
return 0;
|
|
}
|
|
if (mysql_stmt_prepare(stmt, "select ?", strlen("select ?")) != 0)
|
|
{
|
|
print_stmt_error(stmt, "stmt prepare fail");
|
|
return 0;
|
|
}
|
|
|
|
memset((char*) my_bind, 0, sizeof(my_bind));
|
|
|
|
my_bind[0].buffer = (void*)&int_data;
|
|
my_bind[0].buffer_type = MYSQL_TYPE_STRING;
|
|
|
|
if (mysql_stmt_bind_param(stmt, my_bind) != 0)
|
|
{
|
|
print_stmt_error(stmt, "bind param error");
|
|
return 0;
|
|
}
|
|
|
|
/* supply data in pieces */
|
|
if (mysql_stmt_send_long_data(stmt, 0, data1, data1size) != 0)
|
|
{
|
|
print_stmt_error(stmt, "send long data1 failed");
|
|
return 0;
|
|
}
|
|
if (mysql_stmt_send_long_data(stmt, 0, data3, sqlsize) != 0)
|
|
{
|
|
print_stmt_error(stmt, "send long data3 failed");
|
|
return 0;
|
|
}
|
|
|
|
/* execute */
|
|
if (mysql_stmt_execute(stmt) != 0)
|
|
{
|
|
print_stmt_error(stmt, "execute prepare stmt failed");
|
|
return 0;
|
|
}
|
|
/* get the result */
|
|
result = mysql_store_result(conn);
|
|
mysql_free_result(result);
|
|
mysql_stmt_close(stmt);
|
|
free(data1);
|
|
free(data3);
|
|
return 1;
|
|
}
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
TestConnections test(argc, argv);
|
|
|
|
test.maxscales->connect();
|
|
test.expect(test_long_data(test.maxscales->conn_rwsplit[0], 123456), "Test should work");
|
|
test.maxscales->disconnect();
|
|
|
|
return test.global_result;
|
|
}
|