Merge branch 'PHP-7.4'
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 17 Sep 2020 14:05:33 +0000 (16:05 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 17 Sep 2020 14:09:41 +0000 (16:09 +0200)
* PHP-7.4:
  Fix mysqli_release_savepoint() on mysqlnd

1  2 
ext/mysqli/mysqli_nonapi.c
ext/mysqli/tests/mysqli_release_savepoint.phpt

index 47079e0a3e99bda7c3d06f8dfab77ef9383c8605,582ce79553191e96904b2f092caef7d03609dfe4..03e975462e6ffb7d07e5564a1ff560d2a4a63518
@@@ -1237,20 -1248,20 +1237,20 @@@ PHP_FUNCTION(mysqli_release_savepoint
        MY_MYSQL        *mysql;
        zval            *mysql_link;
        char *          name = NULL;
 -      size_t                  name_len = -1;
 +      size_t                  name_len;
  
        if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &name, &name_len) == FAILURE) {
 -              return;
 +              RETURN_THROWS();
        }
        MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);
 -      if (!name || !name_len) {
 -              php_error_docref(NULL, E_WARNING, "Savepoint name cannot be empty");
 -              RETURN_FALSE;
 +      if (name_len == 0) {
 +              zend_argument_value_error(ERROR_ARG_POS(2), "cannot be empty");
 +              RETURN_THROWS();
        }
 -#if !defined(MYSQLI_USE_MYSQLND)
 +#ifndef MYSQLI_USE_MYSQLND
        if (mysqli_savepoint_libmysql(mysql->mysql, name, TRUE)) {
  #else
-       if (FAIL == mysqlnd_savepoint(mysql->mysql, name)) {
+       if (FAIL == mysqlnd_release_savepoint(mysql->mysql, name)) {
  #endif
                RETURN_FALSE;
        }
index fa46366e7cac8b471b5fc9c438d8e85aa36c3ecd,8f395ef6f81e3bba708cab26c7ae6f482dcd5153..76afa7a31291018bf896f15164cd080c4ab5bd15
@@@ -15,50 -15,61 +15,50 @@@ if (!have_innodb($link)
  ?>
  --FILE--
  <?php
 -      require_once("connect.inc");
 -       /* {{{ proto bool mysqli_release_savepoint(object link, string name) */
 -      $tmp    = NULL;
 -      $link   = NULL;
 +    require_once("connect.inc");
 +    $tmp    = NULL;
 +    $link   = NULL;
  
 -      if (!is_null($tmp = @mysqli_release_savepoint()))
 -              printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
 +    if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
 +        printf("[003] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
 +            $host, $user, $db, $port, $socket);
  
 -      if (!is_null($tmp = @mysqli_release_savepoint($link)))
 -              printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
 +    try {
 +        mysqli_release_savepoint($link, '');
 +    } catch (\ValueError $e) {
 +        echo $e->getMessage() . \PHP_EOL;
 +    }
  
 -      if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
 -              printf("[003] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
 -                      $host, $user, $db, $port, $socket);
 +    if (!mysqli_query($link, 'DROP TABLE IF EXISTS test'))
 +        printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  
 -      $name = array();
 -      if (!is_null($tmp = @mysqli_release_savepoint($link, $name)))
 -              printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
 +    if (!mysqli_query($link, 'CREATE TABLE test(id INT) ENGINE = InnoDB'))
 +        printf("[008] Cannot create test table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  
 -      if (!is_null($tmp = @mysqli_release_savepoint($link, 'foo', $link)))
 -              printf("[005] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
 +    if (true !== ($tmp = mysqli_autocommit($link, false)))
 +        printf("[009] Cannot turn off autocommit, expecting true, got %s/%s\n", gettype($tmp), $tmp);
  
 -      if (false !== ($tmp = mysqli_release_savepoint($link, '')))
 -              printf("[006] Expecting false, got %s/%s\n", gettype($tmp), $tmp);
 +    /* note that there is no savepoint my... */
-     if (true !== ($tmp = mysqli_release_savepoint($link, 'my')))
++    if (false !== ($tmp = mysqli_release_savepoint($link, 'my')))
 +        printf("[010] Got %s - [%d] %s\n", var_dump($tmp, true), mysqli_errno($link), mysqli_error($link));
  
 -      if (!mysqli_query($link, 'DROP TABLE IF EXISTS test'))
 -              printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 +    if (!mysqli_query($link, 'INSERT INTO test(id) VALUES (1)'))
 +        printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  
 -      if (!mysqli_query($link, 'CREATE TABLE test(id INT) ENGINE = InnoDB'))
 -              printf("[008] Cannot create test table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 +    $tmp = mysqli_commit($link);
 +    if ($tmp !== true)
 +        printf("[012] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
  
 -      if (true !== ($tmp = mysqli_autocommit($link, false)))
 -              printf("[009] Cannot turn off autocommit, expecting true, got %s/%s\n", gettype($tmp), $tmp);
 +    if (true !== ($tmp = mysqli_savepoint($link, 'my')))
 +        printf("[013] Got %s - [%d] %s\n", var_dump($tmp, true), mysqli_errno($link), mysqli_error($link));
  
 -      /* note that there is no savepoint my... */
 -      if (false !== ($tmp = mysqli_release_savepoint($link, 'my')))
 -              printf("[010] Got %s - [%d] %s\n", var_dump($tmp, true), mysqli_errno($link), mysqli_error($link));
 +    $res = mysqli_query($link, "SELECT * FROM test");
 +    var_dump($res->fetch_assoc());
  
 -      if (!mysqli_query($link, 'INSERT INTO test(id) VALUES (1)'))
 -              printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
 +    if (true !== ($tmp = mysqli_release_savepoint($link, 'my')))
 +        printf("[014] Got %s - [%d] %s\n", var_dump($tmp, true), mysqli_errno($link), mysqli_error($link));
  
 -      $tmp = mysqli_commit($link);
 -      if ($tmp !== true)
 -              printf("[012] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
 -
 -      if (true !== ($tmp = mysqli_savepoint($link, 'my')))
 -              printf("[013] Got %s - [%d] %s\n", var_dump($tmp, true), mysqli_errno($link), mysqli_error($link));
 -
 -      $res = mysqli_query($link, "SELECT * FROM test");
 -      var_dump($res->fetch_assoc());
 -
 -      if (true !== ($tmp = mysqli_release_savepoint($link, 'my')))
 -              printf("[014] Got %s - [%d] %s\n", var_dump($tmp, true), mysqli_errno($link), mysqli_error($link));
 -
 -      print "done!";
 +    print "done!";
  ?>
  --CLEAN--
  <?php