1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-07 02:42:49 +03:00

Merge branch '3.1' into 3.3

This commit is contained in:
Georg Richter
2023-04-25 15:08:28 +02:00
6 changed files with 77 additions and 70 deletions

View File

@@ -34,9 +34,6 @@
((stmt)->mysql->extension->mariadb_server_capabilities & \ ((stmt)->mysql->extension->mariadb_server_capabilities & \
(MARIADB_CLIENT_STMT_BULK_OPERATIONS >> 32)))) (MARIADB_CLIENT_STMT_BULK_OPERATIONS >> 32))))
#define SET_CLIENT_STMT_ERROR(a, b, c, d, ...) \
stmt_set_error((a),(b),(c),(d), ##__VA_ARGS__)
#define CLEAR_CLIENT_STMT_ERROR(a) \ #define CLEAR_CLIENT_STMT_ERROR(a) \
do { \ do { \
(a)->last_errno= 0;\ (a)->last_errno= 0;\

View File

@@ -1562,7 +1562,6 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
MA_PVIO_CINFO cinfo= {NULL, NULL, 0, -1, NULL}; MA_PVIO_CINFO cinfo= {NULL, NULL, 0, -1, NULL};
MARIADB_PVIO *pvio= NULL; MARIADB_PVIO *pvio= NULL;
char *scramble_data; char *scramble_data;
my_bool is_maria= 0;
const char *scramble_plugin; const char *scramble_plugin;
uint pkt_length, scramble_len, pkt_scramble_len= 0; uint pkt_length, scramble_len, pkt_scramble_len= 0;
NET *net= &mysql->net; NET *net= &mysql->net;
@@ -1843,7 +1842,6 @@ restart:
if (strncmp(end, MA_RPL_VERSION_HACK, sizeof(MA_RPL_VERSION_HACK) - 1) == 0) if (strncmp(end, MA_RPL_VERSION_HACK, sizeof(MA_RPL_VERSION_HACK) - 1) == 0)
{ {
mysql->server_version= strdup(end + sizeof(MA_RPL_VERSION_HACK) - 1); mysql->server_version= strdup(end + sizeof(MA_RPL_VERSION_HACK) - 1);
is_maria= 1;
} }
else else
{ {
@@ -1852,7 +1850,6 @@ restart:
SET_CLIENT_ERROR(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); SET_CLIENT_ERROR(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
goto error; goto error;
} }
is_maria= mariadb_connection(mysql);
} }
end+= strlen(end) + 1; end+= strlen(end) + 1;
@@ -1883,7 +1880,7 @@ restart:
pkt_scramble_len= uint1korr(end + 7); pkt_scramble_len= uint1korr(end + 7);
/* check if MariaD2B specific capabilities are available */ /* check if MariaD2B specific capabilities are available */
if (is_maria && !(mysql->server_capabilities & CLIENT_MYSQL)) if (mariadb_connection(mysql) && !(mysql->server_capabilities & CLIENT_MYSQL))
{ {
mysql->extension->mariadb_server_capabilities= (ulonglong) uint4korr(end + 14); mysql->extension->mariadb_server_capabilities= (ulonglong) uint4korr(end + 14);
} }
@@ -2110,7 +2107,7 @@ my_bool STDCALL mariadb_reconnect(MYSQL *mysql)
if (stmt->state != MYSQL_STMT_INITTED) if (stmt->state != MYSQL_STMT_INITTED)
{ {
stmt->state= MYSQL_STMT_INITTED; stmt->state= MYSQL_STMT_INITTED;
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
} }
} }
@@ -2147,7 +2144,7 @@ void ma_invalidate_stmts(MYSQL *mysql, const char *function_name)
{ {
MYSQL_STMT *stmt= (MYSQL_STMT *)li_stmt->data; MYSQL_STMT *stmt= (MYSQL_STMT *)li_stmt->data;
stmt->mysql= NULL; stmt->mysql= NULL;
SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, function_name); stmt_set_error(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, function_name);
} }
mysql->stmts= NULL; mysql->stmts= NULL;
} }

View File

@@ -61,7 +61,7 @@
#define UPDATE_STMT_ERROR(stmt)\ #define UPDATE_STMT_ERROR(stmt)\
SET_CLIENT_STMT_ERROR((stmt), (stmt)->mysql->net.last_errno, (stmt)->mysql->net.sqlstate, (stmt)->mysql->net.last_error) stmt_set_error((stmt), (stmt)->mysql->net.last_errno, (stmt)->mysql->net.sqlstate, (stmt)->mysql->net.last_error)
#define STMT_NUM_OFS(type, a, r) (((type *)(a))[r]) #define STMT_NUM_OFS(type, a, r) (((type *)(a))[r])
#define MADB_RESET_ERROR 1 #define MADB_RESET_ERROR 1
@@ -224,7 +224,7 @@ int mthd_stmt_read_all_rows(MYSQL_STMT *stmt)
/* allocate space for rows */ /* allocate space for rows */
if (!(current= (MYSQL_ROWS *)ma_alloc_root(&result->alloc, sizeof(MYSQL_ROWS) + packet_len))) if (!(current= (MYSQL_ROWS *)ma_alloc_root(&result->alloc, sizeof(MYSQL_ROWS) + packet_len)))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
current->data= (MYSQL_ROW)(current + 1); current->data= (MYSQL_ROW)(current + 1);
@@ -316,7 +316,7 @@ int mthd_stmt_read_all_rows(MYSQL_STMT *stmt)
} }
} }
stmt->result_cursor= 0; stmt->result_cursor= 0;
SET_CLIENT_STMT_ERROR(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate, stmt_set_error(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate,
stmt->mysql->net.last_error); stmt->mysql->net.last_error);
return(1); return(1);
} }
@@ -328,7 +328,7 @@ static int stmt_cursor_fetch(MYSQL_STMT *stmt, uchar **row)
if (stmt->state < MYSQL_STMT_USE_OR_STORE_CALLED) if (stmt->state < MYSQL_STMT_USE_OR_STORE_CALLED)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -702,7 +702,7 @@ int store_param(MYSQL_STMT *stmt, int column, unsigned char **p, unsigned long r
default: default:
/* unsupported parameter type */ /* unsupported parameter type */
SET_CLIENT_STMT_ERROR(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0);
return 1; return 1;
} }
return 0; return 0;
@@ -882,7 +882,7 @@ unsigned char* ma_stmt_execute_generate_simple_request(MYSQL_STMT *stmt, size_t
*request_len = (size_t)(p - start); *request_len = (size_t)(p - start);
return start; return start;
mem_error: mem_error:
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
free(start); free(start);
*request_len= 0; *request_len= 0;
return NULL; return NULL;
@@ -956,8 +956,7 @@ unsigned char* ma_stmt_execute_generate_bulk_request(MYSQL_STMT *stmt, size_t *r
/* preallocate length bytes */ /* preallocate length bytes */
if (!(start= p= (uchar *)malloc(length))) if (!(start= p= (uchar *)malloc(length)))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); goto mem_error;
goto error;
} }
int4store(p, stmt->stmt_id); int4store(p, stmt->stmt_id);
@@ -991,8 +990,7 @@ unsigned char* ma_stmt_execute_generate_bulk_request(MYSQL_STMT *stmt, size_t *r
length= offset + stmt->param_count * 2 + 20; length= offset + stmt->param_count * 2 + 20;
if (!(tmp_start= (uchar *)realloc(start, length))) if (!(tmp_start= (uchar *)realloc(start, length)))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); goto mem_error;
goto error;
} }
start= tmp_start; start= tmp_start;
p= start + offset; p= start + offset;
@@ -1015,7 +1013,7 @@ unsigned char* ma_stmt_execute_generate_bulk_request(MYSQL_STMT *stmt, size_t *r
{ {
if (stmt->param_callback(stmt->user_data, stmt->params, j)) if (stmt->param_callback(stmt->user_data, stmt->params, j))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_ERR_STMT_PARAM_CALLBACK, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_ERR_STMT_PARAM_CALLBACK, SQLSTATE_UNKNOWN, 0);
goto error; goto error;
} }
} }
@@ -1087,7 +1085,7 @@ unsigned char* ma_stmt_execute_generate_bulk_request(MYSQL_STMT *stmt, size_t *r
length= MAX(2 * length, offset + size + 20); length= MAX(2 * length, offset + size + 20);
if (!(tmp_start= (uchar *)realloc(start, length))) if (!(tmp_start= (uchar *)realloc(start, length)))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
goto error; goto error;
} }
start= tmp_start; start= tmp_start;
@@ -1106,6 +1104,8 @@ unsigned char* ma_stmt_execute_generate_bulk_request(MYSQL_STMT *stmt, size_t *r
stmt->send_types_to_server= 0; stmt->send_types_to_server= 0;
*request_len = (size_t)(p - start); *request_len = (size_t)(p - start);
return start; return start;
mem_error:
stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
error: error:
free(start); free(start);
*request_len= 0; *request_len= 0;
@@ -1203,7 +1203,7 @@ my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type a
case STMT_ATTR_CURSOR_TYPE: case STMT_ATTR_CURSOR_TYPE:
if (*(ulong *)value > (unsigned long) CURSOR_TYPE_READ_ONLY) if (*(ulong *)value > (unsigned long) CURSOR_TYPE_READ_ONLY)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
stmt->flags = *(ulong *)value; stmt->flags = *(ulong *)value;
@@ -1240,7 +1240,7 @@ my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type a
stmt->user_data= (void *)value; stmt->user_data= (void *)value;
break; break;
default: default:
SET_CLIENT_STMT_ERROR(stmt, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
return(0); return(0);
@@ -1252,7 +1252,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
if (!mysql) if (!mysql)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1266,7 +1266,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
{ {
if (!(stmt->params= (MYSQL_BIND *)ma_alloc_root(&stmt->mem_root, stmt->prebind_params * sizeof(MYSQL_BIND)))) if (!(stmt->params= (MYSQL_BIND *)ma_alloc_root(&stmt->mem_root, stmt->prebind_params * sizeof(MYSQL_BIND))))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
memset(stmt->params, '\0', stmt->prebind_params * sizeof(MYSQL_BIND)); memset(stmt->params, '\0', stmt->prebind_params * sizeof(MYSQL_BIND));
@@ -1274,7 +1274,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
stmt->param_count= stmt->prebind_params; stmt->param_count= stmt->prebind_params;
} }
else if (stmt->state < MYSQL_STMT_PREPARED) { else if (stmt->state < MYSQL_STMT_PREPARED) {
SET_CLIENT_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1290,7 +1290,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
if (stmt->mysql->methods->db_supported_buffer_type && if (stmt->mysql->methods->db_supported_buffer_type &&
!stmt->mysql->methods->db_supported_buffer_type(stmt->params[i].buffer_type)) !stmt->mysql->methods->db_supported_buffer_type(stmt->params[i].buffer_type))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
if (!stmt->params[i].is_null) if (!stmt->params[i].is_null)
@@ -1342,7 +1342,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
case MYSQL_TYPE_NEWDECIMAL: case MYSQL_TYPE_NEWDECIMAL:
break; break;
default: default:
SET_CLIENT_STMT_ERROR(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
break; break;
} }
@@ -1360,13 +1360,13 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
if (stmt->state < MYSQL_STMT_PREPARED) if (stmt->state < MYSQL_STMT_PREPARED)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
if (!stmt->field_count) if (!stmt->field_count)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_NO_STMT_METADATA, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_NO_STMT_METADATA, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1383,7 +1383,7 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
&((MADB_STMT_EXTENSION *)stmt->extension)->fields_ma_alloc_root; &((MADB_STMT_EXTENSION *)stmt->extension)->fields_ma_alloc_root;
if (!(stmt->bind= (MYSQL_BIND *)ma_alloc_root(fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND)))) if (!(stmt->bind= (MYSQL_BIND *)ma_alloc_root(fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND))))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
} }
@@ -1395,7 +1395,7 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
if (stmt->mysql->methods->db_supported_buffer_type && if (stmt->mysql->methods->db_supported_buffer_type &&
!stmt->mysql->methods->db_supported_buffer_type(bind[i].buffer_type)) !stmt->mysql->methods->db_supported_buffer_type(bind[i].buffer_type))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_UNSUPPORTED_PARAM_TYPE, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1536,13 +1536,13 @@ int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt)
if (stmt->state <= MYSQL_STMT_EXECUTED) if (stmt->state <= MYSQL_STMT_EXECUTED)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
if (stmt->state < MYSQL_STMT_WAITING_USE_OR_STORE || !stmt->field_count) if (stmt->state < MYSQL_STMT_WAITING_USE_OR_STORE || !stmt->field_count)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} else if (stmt->state== MYSQL_STMT_WAITING_USE_OR_STORE) } else if (stmt->state== MYSQL_STMT_WAITING_USE_OR_STORE)
{ {
@@ -1572,7 +1572,7 @@ int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind, unsigned
{ {
if (stmt->state < MYSQL_STMT_USER_FETCHING || column >= stmt->field_count || if (stmt->state < MYSQL_STMT_USER_FETCHING || column >= stmt->field_count ||
stmt->state == MYSQL_STMT_FETCH_DONE) { stmt->state == MYSQL_STMT_FETCH_DONE) {
SET_CLIENT_STMT_ERROR(stmt, CR_NO_DATA, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_NO_DATA, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1699,14 +1699,14 @@ my_bool mthd_stmt_read_prepare_response(MYSQL_STMT *stmt)
{ {
if (stmt->prebind_params != stmt->param_count) if (stmt->prebind_params != stmt->param_count)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_INVALID_PARAMETER_NO, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_INVALID_PARAMETER_NO, SQLSTATE_UNKNOWN, 0);
stmt->param_count= stmt->prebind_params; stmt->param_count= stmt->prebind_params;
return 1; return 1;
} }
} else { } else {
if (!(stmt->params= (MYSQL_BIND *)ma_alloc_root(&stmt->mem_root, stmt->param_count * sizeof(MYSQL_BIND)))) if (!(stmt->params= (MYSQL_BIND *)ma_alloc_root(&stmt->mem_root, stmt->param_count * sizeof(MYSQL_BIND))))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return 1; return 1;
} }
memset(stmt->params, '\0', stmt->param_count * sizeof(MYSQL_BIND)); memset(stmt->params, '\0', stmt->param_count * sizeof(MYSQL_BIND));
@@ -1718,7 +1718,7 @@ my_bool mthd_stmt_read_prepare_response(MYSQL_STMT *stmt)
MA_MEM_ROOT *fields_ma_alloc_root= &((MADB_STMT_EXTENSION *)stmt->extension)->fields_ma_alloc_root; MA_MEM_ROOT *fields_ma_alloc_root= &((MADB_STMT_EXTENSION *)stmt->extension)->fields_ma_alloc_root;
if (!(stmt->bind= (MYSQL_BIND *)ma_alloc_root(fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND)))) if (!(stmt->bind= (MYSQL_BIND *)ma_alloc_root(fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND))))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return 1; return 1;
} }
memset(stmt->bind, 0, sizeof(MYSQL_BIND) * stmt->field_count); memset(stmt->bind, 0, sizeof(MYSQL_BIND) * stmt->field_count);
@@ -1767,7 +1767,7 @@ int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, unsigned lon
if (!stmt->mysql) if (!stmt->mysql)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1836,7 +1836,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
if (!stmt->mysql) if (!stmt->mysql)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1850,7 +1850,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
if (stmt->state < MYSQL_STMT_EXECUTED) if (stmt->state < MYSQL_STMT_EXECUTED)
{ {
SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1873,7 +1873,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
else if (stmt->mysql->status != MYSQL_STATUS_STMT_RESULT) else if (stmt->mysql->status != MYSQL_STATUS_STMT_RESULT)
{ {
SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -1927,15 +1927,15 @@ static int madb_alloc_stmt_fields(MYSQL_STMT *stmt)
mysql->fields, mysql->field_count, mysql->fields, mysql->field_count,
fields_ma_alloc_root))) fields_ma_alloc_root)))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
if (!(stmt->bind= (MYSQL_BIND *) ma_alloc_root( if (!(stmt->bind= (MYSQL_BIND *) ma_alloc_root(
fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND)))) fields_ma_alloc_root, stmt->field_count * sizeof(MYSQL_BIND))))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return (1); return (1);
} }
} }
memset(stmt->bind, 0, stmt->field_count * sizeof(MYSQL_BIND)); memset(stmt->bind, 0, stmt->field_count * sizeof(MYSQL_BIND));
stmt->bind_result_done= 0; stmt->bind_result_done= 0;
@@ -1977,7 +1977,7 @@ int mthd_stmt_read_execute_response(MYSQL_STMT *stmt)
stmt->fields, stmt->field_count, &mysql->field_alloc); stmt->fields, stmt->field_count, &mysql->field_alloc);
if (!mysql->fields) if (!mysql->fields)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return (1); return (1);
} }
} }
@@ -1987,7 +1987,7 @@ int mthd_stmt_read_execute_response(MYSQL_STMT *stmt)
if (ret) if (ret)
{ {
SET_CLIENT_STMT_ERROR(stmt, mysql->net.last_errno, mysql->net.sqlstate, stmt_set_error(stmt, mysql->net.last_errno, mysql->net.sqlstate,
mysql->net.last_error); mysql->net.last_error);
/* if mariadb_stmt_execute_direct was used, we need to send the number /* if mariadb_stmt_execute_direct was used, we need to send the number
of parameters to the specified prebinded value to prevent possible of parameters to the specified prebinded value to prevent possible
@@ -2027,7 +2027,7 @@ int mthd_stmt_read_execute_response(MYSQL_STMT *stmt)
!(stmt->fields= (MYSQL_FIELD *)ma_alloc_root(fields_ma_alloc_root, !(stmt->fields= (MYSQL_FIELD *)ma_alloc_root(fields_ma_alloc_root,
sizeof(MYSQL_FIELD) * mysql->field_count))) sizeof(MYSQL_FIELD) * mysql->field_count)))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
memset(stmt->bind, 0, sizeof(MYSQL_BIND) * mysql->field_count); memset(stmt->bind, 0, sizeof(MYSQL_BIND) * mysql->field_count);
@@ -2112,7 +2112,7 @@ int mthd_stmt_read_execute_response(MYSQL_STMT *stmt)
} else } else
{ {
/* table was altered, see test_wl4166_2 */ /* table was altered, see test_wl4166_2 */
SET_CLIENT_STMT_ERROR(stmt, CR_NEW_STMT_METADATA, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_NEW_STMT_METADATA, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
} }
@@ -2128,20 +2128,20 @@ int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt)
if (!stmt->mysql) if (!stmt->mysql)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
if (stmt->state < MYSQL_STMT_PREPARED) if (stmt->state < MYSQL_STMT_PREPARED)
{ {
SET_CLIENT_ERROR(mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); SET_CLIENT_ERROR(mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
if (stmt->param_count && !stmt->bind_param_done) if (stmt->param_count && !stmt->bind_param_done)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_PARAMS_NOT_BOUND, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_PARAMS_NOT_BOUND, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -2199,7 +2199,7 @@ static my_bool madb_reset_stmt(MYSQL_STMT *stmt, unsigned int flags)
if (!stmt->mysql) if (!stmt->mysql)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -2285,7 +2285,7 @@ static my_bool mysql_stmt_internal_reset(MYSQL_STMT *stmt, my_bool is_close)
{ {
/* connection could be invalid, e.g. after mysql_stmt_close or failed reconnect /* connection could be invalid, e.g. after mysql_stmt_close or failed reconnect
attempt (see bug CONC-97) */ attempt (see bug CONC-97) */
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -2343,7 +2343,7 @@ MYSQL_RES * STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt)
/* allocate result set structure and copy stmt information */ /* allocate result set structure and copy stmt information */
if (!(res= (MYSQL_RES *)calloc(1, sizeof(MYSQL_RES)))) if (!(res= (MYSQL_RES *)calloc(1, sizeof(MYSQL_RES))))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
return(NULL); return(NULL);
} }
@@ -2394,13 +2394,13 @@ my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number,
if (stmt->state < MYSQL_STMT_PREPARED || !stmt->params) if (stmt->state < MYSQL_STMT_PREPARED || !stmt->params)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_NO_PREPARE_STMT, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
if (param_number >= stmt->param_count) if (param_number >= stmt->param_count)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_INVALID_PARAMETER_NO, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_INVALID_PARAMETER_NO, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -2460,14 +2460,14 @@ int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt)
if (!stmt->mysql) if (!stmt->mysql)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
if (stmt->state < MYSQL_STMT_EXECUTED) if (stmt->state < MYSQL_STMT_EXECUTED)
{ {
SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); SET_CLIENT_ERROR(stmt->mysql, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
return(1); return(1);
} }
@@ -2482,7 +2482,7 @@ int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt)
if (mysql_next_result(stmt->mysql)) if (mysql_next_result(stmt->mysql))
{ {
stmt->state= MYSQL_STMT_FETCH_DONE; stmt->state= MYSQL_STMT_FETCH_DONE;
SET_CLIENT_STMT_ERROR(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate, stmt_set_error(stmt, stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate,
stmt->mysql->net.last_error); stmt->mysql->net.last_error);
return(1); return(1);
} }
@@ -2522,7 +2522,7 @@ int STDCALL mariadb_stmt_execute_direct(MYSQL_STMT *stmt,
mysql= stmt->mysql; mysql= stmt->mysql;
if (!mysql) if (!mysql)
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_SERVER_LOST, SQLSTATE_UNKNOWN, 0);
return 1; return 1;
} }
@@ -2544,7 +2544,7 @@ int STDCALL mariadb_stmt_execute_direct(MYSQL_STMT *stmt,
if (ma_multi_command(mysql, COM_MULTI_ENABLED)) if (ma_multi_command(mysql, COM_MULTI_ENABLED))
{ {
SET_CLIENT_STMT_ERROR(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, CR_COMMANDS_OUT_OF_SYNC, SQLSTATE_UNKNOWN, 0);
return 1; return 1;
} }

View File

@@ -811,16 +811,16 @@ static int test_conc624(MYSQL *mysql)
MYSQL_STMT *stmt= mysql_stmt_init(mysql); MYSQL_STMT *stmt= mysql_stmt_init(mysql);
char errmsg[MYSQL_ERRMSG_SIZE]; char errmsg[MYSQL_ERRMSG_SIZE];
SET_CLIENT_STMT_ERROR(stmt, 9000, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, 9000, SQLSTATE_UNKNOWN, 0);
snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 9000); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 9000);
diag("stmt_error: %s", mysql_stmt_error(stmt)); diag("stmt_error: %s", mysql_stmt_error(stmt));
FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 9000"); FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 9000");
SET_CLIENT_STMT_ERROR(stmt, 0, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, 0, SQLSTATE_UNKNOWN, 0);
snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 0); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 0);
FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 0"); FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 0");
SET_CLIENT_STMT_ERROR(stmt, 4999, SQLSTATE_UNKNOWN, 0); stmt_set_error(stmt, 4999, SQLSTATE_UNKNOWN, 0);
snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 4999); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 4999);
FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 4999"); FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error 4999");
@@ -836,8 +836,8 @@ static int test_conc624(MYSQL *mysql)
snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 9000); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 9000);
FAIL_IF(strcmp(mysql_error(mysql), errmsg), "expected undefined error 9000"); FAIL_IF(strcmp(mysql_error(mysql), errmsg), "expected undefined error 9000");
/* test if SET_CLIENT_STMT_ERROR works with variadic arguments */ /* test if stmt_set_error works with variadic arguments */
SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, "foobar"); stmt_set_error(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, "foobar");
snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER(CR_STMT_CLOSED), "foobar"); snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER(CR_STMT_CLOSED), "foobar");
FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "error when passing variadic arguments to prepared stmt error function"); FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "error when passing variadic arguments to prepared stmt error function");

View File

@@ -617,6 +617,12 @@ int test_conc21(MYSQL *mysql)
int major=0, minor= 0, patch=0; int major=0, minor= 0, patch=0;
SKIP_MAXSCALE; SKIP_MAXSCALE;
if (strlen(mysql_get_server_info(mysql)) > 63)
{
diag("server name is too long - skip until rpl hack was removed");
return SKIP;
}
rc= mysql_query(mysql, "SELECT @@version"); rc= mysql_query(mysql, "SELECT @@version");
check_mysql_rc(rc, mysql); check_mysql_rc(rc, mysql);
@@ -1199,6 +1205,7 @@ static int test_auth256(MYSQL *my)
if (!my_test_connect(mysql, hostname, "sha256user", "foo", NULL, port, socketname, 0)) if (!my_test_connect(mysql, hostname, "sha256user", "foo", NULL, port, socketname, 0))
{ {
diag("error: %s", mysql_error(mysql)); diag("error: %s", mysql_error(mysql));
diag("host: %s", this_host);
mysql_close(mysql); mysql_close(mysql);
return FAIL; return FAIL;
} }
@@ -2269,7 +2276,9 @@ static int test_conc632(MYSQL *my __attribute__((unused)))
return FAIL; return FAIL;
} }
rc= mysql_query(mysql, "CREATE OR REPLACE PROCEDURE conc632() " rc= mysql_query(mysql, "DROP PROCEDURE conc632");
rc= mysql_query(mysql, "CREATE PROCEDURE conc632() "
"BEGIN " "BEGIN "
" SELECT 1;" " SELECT 1;"
" SELECT 2;" " SELECT 2;"

View File

@@ -5639,9 +5639,13 @@ static int test_conc623(MYSQL *mysql)
static int test_conc627(MYSQL *mysql) static int test_conc627(MYSQL *mysql)
{ {
MYSQL_STMT *stmt= mysql_stmt_init(mysql); MYSQL_STMT *stmt;
int rc; int rc;
SKIP_MYSQL(mysql);
stmt= mysql_stmt_init(mysql);
rc= mysql_stmt_prepare(stmt, SL("show grants for mysqltest_8")); rc= mysql_stmt_prepare(stmt, SL("show grants for mysqltest_8"));
check_stmt_rc(rc, stmt); check_stmt_rc(rc, stmt);