@@ -1110,45 +1110,43 @@ extern char * mysqli_escape_string_for_tx_name_in_comment(const char * const nam
1110
1110
static int mysqli_begin_transaction_libmysql (MYSQL * conn , const unsigned int mode , const char * const name )
1111
1111
{
1112
1112
int ret ;
1113
- zend_bool err = FALSE;
1114
1113
smart_str tmp_str = {0 };
1114
+ char * name_esc ;
1115
+ char * query ;
1116
+ unsigned int query_len ;
1115
1117
if (mode & TRANS_START_WITH_CONSISTENT_SNAPSHOT ) {
1116
1118
if (tmp_str .s ) {
1117
1119
smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1118
1120
}
1119
1121
smart_str_appendl (& tmp_str , "WITH CONSISTENT SNAPSHOT" , sizeof ("WITH CONSISTENT SNAPSHOT" ) - 1 );
1120
1122
}
1121
- if (mode & (TRANS_START_READ_WRITE | TRANS_START_READ_ONLY )) {
1122
- if (mysql_get_server_version (conn ) < 50605L ) {
1123
- php_error_docref (NULL , E_WARNING , "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required" );
1124
- err = TRUE;
1125
- } else if (mode & TRANS_START_READ_WRITE ) {
1126
- if (tmp_str .s ) {
1127
- smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1128
- }
1129
- smart_str_appendl (& tmp_str , "READ WRITE" , sizeof ("READ WRITE" ) - 1 );
1130
- } else if (mode & TRANS_START_READ_ONLY ) {
1131
- if (tmp_str .s ) {
1132
- smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1133
- }
1134
- smart_str_appendl (& tmp_str , "READ ONLY" , sizeof ("READ ONLY" ) - 1 );
1123
+ if (mode & TRANS_START_READ_WRITE ) {
1124
+ if (tmp_str .s ) {
1125
+ smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1135
1126
}
1127
+ smart_str_appendl (& tmp_str , "READ WRITE" , sizeof ("READ WRITE" ) - 1 );
1128
+ } else if (mode & TRANS_START_READ_ONLY ) {
1129
+ if (tmp_str .s ) {
1130
+ smart_str_appendl (& tmp_str , ", " , sizeof (", " ) - 1 );
1131
+ }
1132
+ smart_str_appendl (& tmp_str , "READ ONLY" , sizeof ("READ ONLY" ) - 1 );
1136
1133
}
1137
1134
smart_str_0 (& tmp_str );
1138
1135
1139
- if (err == FALSE){
1140
- char * name_esc = mysqli_escape_string_for_tx_name_in_comment (name );
1141
- char * query ;
1142
- unsigned int query_len = spprintf (& query , 0 , "START TRANSACTION%s %s" ,
1143
- name_esc ? name_esc :"" , tmp_str .s ? ZSTR_VAL (tmp_str .s ):"" );
1136
+ name_esc = mysqli_escape_string_for_tx_name_in_comment (name );
1137
+ query_len = spprintf (& query , 0 , "START TRANSACTION%s %s" ,
1138
+ name_esc ? name_esc :"" , tmp_str .s ? ZSTR_VAL (tmp_str .s ):"" );
1144
1139
1145
- smart_str_free (& tmp_str );
1146
- if (name_esc ) {
1147
- efree (name_esc );
1148
- }
1140
+ smart_str_free (& tmp_str );
1141
+ if (name_esc ) {
1142
+ efree (name_esc );
1143
+ }
1144
+
1145
+ ret = mysql_real_query (conn , query , query_len );
1146
+ efree (query );
1149
1147
1150
- ret = mysql_real_query ( conn , query , query_len );
1151
- efree ( query );
1148
+ if ( ret && mode & ( TRANS_START_READ_WRITE | TRANS_START_READ_ONLY ) && mysql_errno ( conn ) == 1064 ) {
1149
+ php_error_docref ( NULL , E_WARNING , "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required" );
1152
1150
}
1153
1151
return ret ;
1154
1152
}
0 commit comments