svn: /pecl/mysqlnd_ms/trunk/ mysqlnd_ms.c tests/mysqlnd_ms_gtid_invalid_on_commit.phpt
| From: | Ulf Wendel | Date: | Mon, 05 Dec 2011 18:19:36 +0000 |
| Subject: | svn: /pecl/mysqlnd_ms/trunk/ mysqlnd_ms.c tests/mysqlnd_ms_gtid_invalid_on_commit.phpt | ||
| Groups: | php.pecl.cvs | ||
| Request: | Send a blank email to pecl-cvs+get-17268@lists.php.net to get a copy of this message | ||
uw Mon, 05 Dec 2011 18:19:36 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=320452
Log:
Use same error type as for other config issues, e.g. wrong port
Changed paths:
U pecl/mysqlnd_ms/trunk/mysqlnd_ms.c
A pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_gtid_invalid_on_commit.phpt
Modified: pecl/mysqlnd_ms/trunk/mysqlnd_ms.c
===================================================================
--- pecl/mysqlnd_ms/trunk/mysqlnd_ms.c 2011-12-05 18:11:41 UTC (rev 320451)
+++ pecl/mysqlnd_ms/trunk/mysqlnd_ms.c 2011-12-05 18:19:36 UTC (rev 320452)
@@ -628,12 +628,11 @@
json_value = mysqlnd_ms_config_json_string_from_section(g_trx_section, SECT_G_TRX_ON_COMMIT,
sizeof(SECT_G_TRX_ON_COMMIT) - 1, 0, &entry_exists, &entry_is_list TSRMLS_CC);
if (entry_exists && json_value) {
if (entry_is_list) {
- /* TODO: Do we want to use E_ERROR ? */
char error_buf[128];
snprintf(error_buf, sizeof(error_buf), MYSQLND_MS_ERROR_PREFIX " '%s' from
'%s' must be a string", SECT_G_TRX_ON_COMMIT, SECT_G_TRX_NAME);
error_buf[sizeof(error_buf) - 1] = '\0';
SET_CLIENT_ERROR(MYSQLND_MS_ERROR_INFO(conn), CR_UNKNOWN_ERROR, UNKNOWN_SQLSTATE, error_buf);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "%s", error_buf);
+ php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "%s", error_buf);
} else {
json_value_len = strlen(json_value);
trx->on_commit = mnd_pestrndup(json_value, json_value_len, persistent);
@@ -645,12 +644,11 @@
json_value = mysqlnd_ms_config_json_string_from_section(g_trx_section,
SECT_G_TRX_FETCH_LAST_GTID, sizeof(SECT_G_TRX_FETCH_LAST_GTID) - 1, 0, &entry_exists,
&entry_is_list TSRMLS_CC);
if (entry_exists && json_value) {
if (entry_is_list) {
- /* TODO: Do we want to use E_ERROR ? */
char error_buf[128];
snprintf(error_buf, sizeof(error_buf), MYSQLND_MS_ERROR_PREFIX " '%s' from
'%s' must be a string", SECT_G_TRX_FETCH_LAST_GTID, SECT_G_TRX_NAME);
error_buf[sizeof(error_buf) - 1] = '\0';
SET_CLIENT_ERROR(MYSQLND_MS_ERROR_INFO(conn), CR_UNKNOWN_ERROR, UNKNOWN_SQLSTATE, error_buf);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "%s", error_buf);
+ php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "%s", error_buf);
} else {
json_value_len = strlen(json_value);
trx->fetch_last_gtid = mnd_pestrndup(json_value, json_value_len, persistent);
@@ -662,12 +660,11 @@
json_value = mysqlnd_ms_config_json_string_from_section(g_trx_section, SECT_G_TRX_CHECK_FOR_GTID,
sizeof(SECT_G_TRX_CHECK_FOR_GTID) - 1, 0, &entry_exists, &entry_is_list TSRMLS_CC);
if (entry_exists && json_value) {
if (entry_is_list) {
- /* TODO: Do we want to use E_ERROR ? */
char error_buf[128];
snprintf(error_buf, sizeof(error_buf), MYSQLND_MS_ERROR_PREFIX " '%s' from
'%s' must be a string", SECT_G_TRX_CHECK_FOR_GTID, SECT_G_TRX_NAME);
error_buf[sizeof(error_buf) - 1] = '\0';
SET_CLIENT_ERROR(MYSQLND_MS_ERROR_INFO(conn), CR_UNKNOWN_ERROR, UNKNOWN_SQLSTATE, error_buf);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "%s", error_buf);
+ php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "%s", error_buf);
} else {
json_value_len = strlen(json_value);
trx->check_for_gtid = mnd_pestrndup(json_value, json_value_len, persistent);
Added: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_gtid_invalid_on_commit.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_gtid_invalid_on_commit.phpt (rev
0)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_gtid_invalid_on_commit.phpt 2011-12-05 18:19:36 UTC (rev
320452)
@@ -0,0 +1,82 @@
+--TEST--
+GTID, config, invalid on_commit
+--SKIPIF--
+<?php
+if (version_compare(PHP_VERSION, '5.3.99-dev', '<'))
+ die(sprintf("SKIP Requires PHP >= 5.3.99, using " . PHP_VERSION));
+
+require_once('skipif.inc');
+ require_once("connect.inc");
+
+_skipif_check_extensions(array("mysqli"));
+_skipif_connect($emulated_master_host_only, $user, $passwd, $db, $emulated_master_port,
$emulated_master_socket);
+_skipif_connect($emulated_slave_host_only, $user, $passwd, $db, $emulated_slave_port,
$emulated_slave_socket);
+
+include_once("util.inc");
+$sql = mst_get_gtid_sql($db);
+
+$settings = array(
+ "myapp" => array(
+ 'master' => array(
+ "master1" => array(
+ 'host' => $emulated_master_host_only,
+ 'port' => (int)$emulated_master_port,
+ 'socket' => $emulated_master_socket,
+ ),
+ ),
+ 'slave' => array(
+ "slave1" => array(
+ 'host' => $emulated_slave_host_only,
+ 'port' => (int)$emulated_slave_port,
+ 'socket' => $emulated_slave_socket,
+ ),
+ ),
+
+ 'global_transaction_id_injection' => array(
+ 'on_commit' => array($sql['update']),
+ ),
+
+ 'lazy_connections' => 1,
+ 'trx_stickiness' => 'disabled',
+ 'filters' => array(
+ "roundrobin" => array(),
+ ),
+ ),
+
+);
+if ($error = mst_create_config("test_mysqlnd_ms_gtid_invalid_on_commit.ini", $settings))
+ die(sprintf("SKIP %s\n", $error));
+?>
+--INI--
+mysqlnd_ms.enable=1
+mysqlnd_ms.ini_file=test_mysqlnd_ms_gtid_invalid_on_commit.ini
+--FILE--
+<?php
+ require_once("connect.inc");
+ require_once("util.inc");
+
+ $link = mst_mysqli_connect("myapp", $user, $passwd, $db, $port, $socket);
+ if (mysqli_connect_errno()) {
+ printf("[002] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
+ }
+ /* we need an extra non-MS link for checking GTID. If we use MS link, the check itself will change
GTID */
+ $emulated_master_link = mst_mysqli_connect($emulated_master_host_only, $user, $passwd, $db,
$emulated_master_port, $emulated_master_socket);
+
+ /* auto commit on (default) */
+ $gtid = mst_mysqli_fetch_gtid(3, $emulated_master_link, $db);
+ mst_mysqli_query(4, $link, "SET @myrole = 'Master'");
+ $new_gtid = mst_mysqli_fetch_gtid(6, $emulated_master_link, $db);
+ if ($new_gtid <= $gtid) {
+ printf("[007] GTID has not been incremented on master in auto commit mode\n");
+ }
+ $gtid = $new_gtid;
+
+ print "done!";
+?>
+--CLEAN--
+<?php
+ if (!unlink("test_mysqlnd_ms_gtid_invalid_on_commit.ini"))
+ printf("[clean] Cannot unlink ini file
'test_mysqlnd_ms_gtid_invalid_on_commit.ini'.\n");
+?>
+--EXPECTF--
+Catchable fatal error: mysqli_real_connect(): (mysqlnd_ms) 'on_commit' from
'global_transaction_id_injection' must be a string in %s on line %d
\ No newline at end of file