mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-10 23:50:38 +08:00
Fix #19816: Explicitly pass $fallbackToMaster as true to getSlavePdo() to ensure it is not affected by child class with changed defaults
This commit is contained in:
@@ -25,6 +25,7 @@ Yii Framework 2 Change Log
|
|||||||
- Enh #19794: Add caching in `yii\web\Request` for `getUserIP()` and `getSecureForwardedHeaderTrustedParts()` (rhertogh)
|
- Enh #19794: Add caching in `yii\web\Request` for `getUserIP()` and `getSecureForwardedHeaderTrustedParts()` (rhertogh)
|
||||||
- Bug #19795: Fix `yii\web\Response::redirect()` to prevent setting headers with URL containing new line character (bizley)
|
- Bug #19795: Fix `yii\web\Response::redirect()` to prevent setting headers with URL containing new line character (bizley)
|
||||||
- Enh #19804: Remove the unnecessary call to `$this->oldAttributes` in `BaseActiveRecord::getDirtyAttributes()` (thiagotalma)
|
- Enh #19804: Remove the unnecessary call to `$this->oldAttributes` in `BaseActiveRecord::getDirtyAttributes()` (thiagotalma)
|
||||||
|
- Enh #19816: Explicitly pass `$fallbackToMaster` as `true` to `getSlavePdo()` to ensure it is not affected by child class with changed defaults (developedsoftware)
|
||||||
|
|
||||||
2.0.47 November 18, 2022
|
2.0.47 November 18, 2022
|
||||||
------------------------
|
------------------------
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ class Command extends Component
|
|||||||
$forRead = false;
|
$forRead = false;
|
||||||
}
|
}
|
||||||
if ($forRead || $forRead === null && $this->db->getSchema()->isReadQuery($sql)) {
|
if ($forRead || $forRead === null && $this->db->getSchema()->isReadQuery($sql)) {
|
||||||
$pdo = $this->db->getSlavePdo();
|
$pdo = $this->db->getSlavePdo(true);
|
||||||
} else {
|
} else {
|
||||||
$pdo = $this->db->getMasterPdo();
|
$pdo = $this->db->getMasterPdo();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1013,7 +1013,7 @@ class Connection extends Component
|
|||||||
if (($pos = strpos((string)$this->dsn, ':')) !== false) {
|
if (($pos = strpos((string)$this->dsn, ':')) !== false) {
|
||||||
$this->_driverName = strtolower(substr($this->dsn, 0, $pos));
|
$this->_driverName = strtolower(substr($this->dsn, 0, $pos));
|
||||||
} else {
|
} else {
|
||||||
$this->_driverName = strtolower($this->getSlavePdo()->getAttribute(PDO::ATTR_DRIVER_NAME));
|
$this->_driverName = strtolower($this->getSlavePdo(true)->getAttribute(PDO::ATTR_DRIVER_NAME));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -458,7 +458,7 @@ abstract class Schema extends BaseObject
|
|||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mb_stripos($this->db->dsn, 'odbc:') === false && ($value = $this->db->getSlavePdo()->quote($str)) !== false) {
|
if (mb_stripos($this->db->dsn, 'odbc:') === false && ($value = $this->db->getSlavePdo(true)->quote($str)) !== false) {
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -695,7 +695,7 @@ abstract class Schema extends BaseObject
|
|||||||
public function getServerVersion()
|
public function getServerVersion()
|
||||||
{
|
{
|
||||||
if ($this->_serverVersion === null) {
|
if ($this->_serverVersion === null) {
|
||||||
$this->_serverVersion = $this->db->getSlavePdo()->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
$this->_serverVersion = $this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
||||||
}
|
}
|
||||||
return $this->_serverVersion;
|
return $this->_serverVersion;
|
||||||
}
|
}
|
||||||
@@ -809,7 +809,7 @@ abstract class Schema extends BaseObject
|
|||||||
*/
|
*/
|
||||||
protected function normalizePdoRowKeyCase(array $row, $multiple)
|
protected function normalizePdoRowKeyCase(array $row, $multiple)
|
||||||
{
|
{
|
||||||
if ($this->db->getSlavePdo()->getAttribute(\PDO::ATTR_CASE) !== \PDO::CASE_UPPER) {
|
if ($this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_CASE) !== \PDO::CASE_UPPER) {
|
||||||
return $row;
|
return $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
|
|||||||
*/
|
*/
|
||||||
protected function findTableNames($schema = '')
|
protected function findTableNames($schema = '')
|
||||||
{
|
{
|
||||||
$pdo = $this->db->getSlavePdo();
|
$pdo = $this->db->getSlavePdo(true);
|
||||||
$tables = $pdo->cubrid_schema(\PDO::CUBRID_SCH_TABLE);
|
$tables = $pdo->cubrid_schema(\PDO::CUBRID_SCH_TABLE);
|
||||||
$tableNames = [];
|
$tableNames = [];
|
||||||
foreach ($tables as $table) {
|
foreach ($tables as $table) {
|
||||||
@@ -110,7 +110,7 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
|
|||||||
*/
|
*/
|
||||||
protected function loadTableSchema($name)
|
protected function loadTableSchema($name)
|
||||||
{
|
{
|
||||||
$pdo = $this->db->getSlavePdo();
|
$pdo = $this->db->getSlavePdo(true);
|
||||||
|
|
||||||
$tableInfo = $pdo->cubrid_schema(\PDO::CUBRID_SCH_TABLE, $name);
|
$tableInfo = $pdo->cubrid_schema(\PDO::CUBRID_SCH_TABLE, $name);
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
|
|||||||
*/
|
*/
|
||||||
protected function loadTablePrimaryKey($tableName)
|
protected function loadTablePrimaryKey($tableName)
|
||||||
{
|
{
|
||||||
$primaryKey = $this->db->getSlavePdo()->cubrid_schema(\PDO::CUBRID_SCH_PRIMARY_KEY, $tableName);
|
$primaryKey = $this->db->getSlavePdo(true)->cubrid_schema(\PDO::CUBRID_SCH_PRIMARY_KEY, $tableName);
|
||||||
if (empty($primaryKey)) {
|
if (empty($primaryKey)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -183,7 +183,7 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
|
|||||||
3 => 'SET NULL',
|
3 => 'SET NULL',
|
||||||
];
|
];
|
||||||
|
|
||||||
$foreignKeys = $this->db->getSlavePdo()->cubrid_schema(\PDO::CUBRID_SCH_IMPORTED_KEYS, $tableName);
|
$foreignKeys = $this->db->getSlavePdo(true)->cubrid_schema(\PDO::CUBRID_SCH_IMPORTED_KEYS, $tableName);
|
||||||
$foreignKeys = ArrayHelper::index($foreignKeys, null, 'FK_NAME');
|
$foreignKeys = ArrayHelper::index($foreignKeys, null, 'FK_NAME');
|
||||||
ArrayHelper::multisort($foreignKeys, 'KEY_SEQ', SORT_ASC, SORT_NUMERIC);
|
ArrayHelper::multisort($foreignKeys, 'KEY_SEQ', SORT_ASC, SORT_NUMERIC);
|
||||||
$result = [];
|
$result = [];
|
||||||
@@ -386,7 +386,7 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
|
|||||||
*/
|
*/
|
||||||
private function loadTableConstraints($tableName, $returnType)
|
private function loadTableConstraints($tableName, $returnType)
|
||||||
{
|
{
|
||||||
$constraints = $this->db->getSlavePdo()->cubrid_schema(\PDO::CUBRID_SCH_CONSTRAINT, $tableName);
|
$constraints = $this->db->getSlavePdo(true)->cubrid_schema(\PDO::CUBRID_SCH_CONSTRAINT, $tableName);
|
||||||
$constraints = ArrayHelper::index($constraints, null, ['TYPE', 'NAME']);
|
$constraints = ArrayHelper::index($constraints, null, ['TYPE', 'NAME']);
|
||||||
ArrayHelper::multisort($constraints, 'KEY_ORDER', SORT_ASC, SORT_NUMERIC);
|
ArrayHelper::multisort($constraints, 'KEY_ORDER', SORT_ASC, SORT_NUMERIC);
|
||||||
$result = [
|
$result = [
|
||||||
|
|||||||
@@ -410,7 +410,7 @@ class QueryBuilder extends \yii\db\QueryBuilder
|
|||||||
}
|
}
|
||||||
$version = $cache ? $cache->get($key) : null;
|
$version = $cache ? $cache->get($key) : null;
|
||||||
if (!$version) {
|
if (!$version) {
|
||||||
$version = $this->db->getSlavePdo()->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
$version = $this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
||||||
if ($cache) {
|
if ($cache) {
|
||||||
$cache->set($key, $version, $this->db->schemaCacheDuration);
|
$cache->set($key, $version, $this->db->schemaCacheDuration);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -484,7 +484,7 @@ SQL;
|
|||||||
protected function isOldMysql()
|
protected function isOldMysql()
|
||||||
{
|
{
|
||||||
if ($this->_oldMysql === null) {
|
if ($this->_oldMysql === null) {
|
||||||
$version = $this->db->getSlavePdo()->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
$version = $this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
||||||
$this->_oldMysql = version_compare($version, '5.1', '<=');
|
$this->_oldMysql = version_compare($version, '5.1', '<=');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -469,7 +469,7 @@ abstract class ConnectionTest extends DatabaseTestCase
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test whether slave connection is recovered when call getSlavePdo() after close().
|
* Test whether slave connection is recovered when call getSlavePdo(true) after close().
|
||||||
*
|
*
|
||||||
* @see https://github.com/yiisoft/yii2/issues/14165
|
* @see https://github.com/yiisoft/yii2/issues/14165
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -757,7 +757,7 @@ abstract class SchemaTest extends DatabaseTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
$connection = $this->getConnection(false);
|
$connection = $this->getConnection(false);
|
||||||
$connection->getSlavePdo()->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
|
$connection->getSlavePdo(true)->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
|
||||||
$constraints = $connection->getSchema()->{'getTable' . ucfirst($type)}($tableName, true);
|
$constraints = $connection->getSchema()->{'getTable' . ucfirst($type)}($tableName, true);
|
||||||
$this->assertMetadataEquals($expected, $constraints);
|
$this->assertMetadataEquals($expected, $constraints);
|
||||||
}
|
}
|
||||||
@@ -775,7 +775,7 @@ abstract class SchemaTest extends DatabaseTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
$connection = $this->getConnection(false);
|
$connection = $this->getConnection(false);
|
||||||
$connection->getSlavePdo()->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
|
$connection->getSlavePdo(true)->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
|
||||||
$constraints = $connection->getSchema()->{'getTable' . ucfirst($type)}($tableName, true);
|
$constraints = $connection->getSchema()->{'getTable' . ucfirst($type)}($tableName, true);
|
||||||
$this->assertMetadataEquals($expected, $constraints);
|
$this->assertMetadataEquals($expected, $constraints);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class QueryBuilderTest extends \yiiunit\framework\db\QueryBuilderTest
|
|||||||
|
|
||||||
public function testCommentColumn()
|
public function testCommentColumn()
|
||||||
{
|
{
|
||||||
$version = $this->getQueryBuilder(false)->db->getSlavePdo()->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
$version = $this->getQueryBuilder(false)->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
||||||
if (version_compare($version, '10.0', '<')) {
|
if (version_compare($version, '10.0', '<')) {
|
||||||
$this->markTestSkipped('Comments on columns are supported starting with CUBRID 10.0.');
|
$this->markTestSkipped('Comments on columns are supported starting with CUBRID 10.0.');
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ class QueryBuilderTest extends \yiiunit\framework\db\QueryBuilderTest
|
|||||||
/**
|
/**
|
||||||
* @link https://github.com/yiisoft/yii2/issues/14367
|
* @link https://github.com/yiisoft/yii2/issues/14367
|
||||||
*/
|
*/
|
||||||
$mysqlVersion = $this->getDb()->getSlavePdo()->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
$mysqlVersion = $this->getDb()->getSlavePdo(true)->getAttribute(\PDO::ATTR_SERVER_VERSION);
|
||||||
$supportsFractionalSeconds = version_compare($mysqlVersion,'5.6.4', '>=');
|
$supportsFractionalSeconds = version_compare($mysqlVersion,'5.6.4', '>=');
|
||||||
if ($supportsFractionalSeconds) {
|
if ($supportsFractionalSeconds) {
|
||||||
$expectedValues = [
|
$expectedValues = [
|
||||||
|
|||||||
Reference in New Issue
Block a user