Merge pull request #18322 from kamil-tekiela/Memoize-Relation

Memoize Relation
This commit is contained in:
Maurício Meneghini Fauth 2023-04-04 16:06:23 -03:00 committed by GitHub
commit 5837fb699f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 255 additions and 129 deletions

View File

@ -57,6 +57,9 @@ use const SQL_DIR;
*/
class Relation
{
/** @var RelationParameters[] $cache */
private static array $cache = [];
public function __construct(public DatabaseInterface $dbi)
{
}
@ -65,6 +68,10 @@ class Relation
{
$server = $GLOBALS['server'];
if (isset(self::$cache[$server])) {
return self::$cache[$server];
}
if (! isset($_SESSION['relation']) || ! is_array($_SESSION['relation'])) {
$_SESSION['relation'] = [];
}
@ -74,13 +81,15 @@ class Relation
&& isset($_SESSION['relation'][$server]['version'])
&& $_SESSION['relation'][$server]['version'] === Version::VERSION
) {
return RelationParameters::fromArray($_SESSION['relation'][$server]);
self::$cache[$server] = RelationParameters::fromArray($_SESSION['relation'][$server]);
return self::$cache[$server];
}
$relationParameters = RelationParameters::fromArray($this->checkRelationsParam());
$_SESSION['relation'][$server] = $relationParameters->toArray();
self::$cache[$server] = RelationParameters::fromArray($this->checkRelationsParam());
$_SESSION['relation'][$server] = self::$cache[$server]->toArray();
return $relationParameters;
return self::$cache[$server];
}
/**
@ -1501,6 +1510,7 @@ class Relation
// This is the case when the DB could be created but no tables just after
// So just purge the cache and show the new configuration storage state
unset($_SESSION['relation'][$GLOBALS['server']]);
unset(self::$cache[$GLOBALS['server']]);
$this->getRelationParameters();
return true;
@ -1620,6 +1630,7 @@ class Relation
$GLOBALS['cfg']['Server']['pmadb'] = $db;
unset($_SESSION['relation'][$GLOBALS['server']]);
unset(self::$cache[$GLOBALS['server']]);
$relationParameters = $this->getRelationParameters();
if (

View File

@ -6,6 +6,7 @@ namespace PhpMyAdmin\Tests;
use PhpMyAdmin\Cache;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Core;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Dbal\DbiExtension;
@ -82,6 +83,8 @@ abstract class AbstractTestCase extends TestCase
// Config before DBI
$this->setGlobalConfig();
Cache::purge();
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
}
protected function loadContainerBuilder(): void

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use ReflectionClass;
use function implode;
@ -236,6 +237,7 @@ class RelationTest extends AbstractTestCase
$dummyDbi->addSelectDb('db_pma');
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$relation->fixPmaTables('db_pma', false);
@ -513,6 +515,7 @@ class RelationTest extends AbstractTestCase
$this->assertSame('', $GLOBALS['cfg']['Server']['pmadb']);
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$relation->fixPmaTables('db_pma', true);
$this->assertArrayNotHasKey('message', $GLOBALS);
@ -799,6 +802,7 @@ class RelationTest extends AbstractTestCase
$this->assertSame('db_pma', $GLOBALS['cfg']['Server']['pmadb']);
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$dummyDbi->addSelectDb('db_pma');
$dummyDbi->addSelectDb('db_pma');
@ -877,6 +881,7 @@ class RelationTest extends AbstractTestCase
$this->assertSame('', $GLOBALS['cfg']['Server']['pmadb']);
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$relation->fixPmaTables('db_pma', true);
@ -1441,6 +1446,7 @@ class RelationTest extends AbstractTestCase
);
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$relation = new Relation($dbi);
$relation->initRelationParamsCache();
@ -1510,6 +1516,7 @@ class RelationTest extends AbstractTestCase
);
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$dummyDbi->addSelectDb('phpmyadmin');
$relation = new Relation($dbi);
@ -1601,6 +1608,7 @@ class RelationTest extends AbstractTestCase
$dummyDbi->addResult('SELECT NULL FROM `pma__userconfig` LIMIT 0', false);
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$dummyDbi->addSelectDb('phpmyadmin');
$relation = new Relation($dbi);
@ -1697,6 +1705,7 @@ class RelationTest extends AbstractTestCase
$dummyDbi->addSelectDb('PMA-storage');
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$relation = new Relation($dbi);
$relation->initRelationParamsCache();
@ -1726,6 +1735,7 @@ class RelationTest extends AbstractTestCase
$dummyDbi->addSelectDb('PMA-storage');
/** @psalm-suppress EmptyArrayAccess */
unset($_SESSION['relation'][$GLOBALS['server']]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$relationData = $relation->getRelationParameters();
$dummyDbi->assertAllSelectsConsumed();
@ -1777,8 +1787,10 @@ class RelationTest extends AbstractTestCase
$relation = new Relation($dbi);
$GLOBALS['server'] = 1;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray($params)->toArray();
$relationParameters = RelationParameters::fromArray($params);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
foreach ($queries as $query) {
$dummyDbi->addResult($query, []);
@ -1839,14 +1851,16 @@ class RelationTest extends AbstractTestCase
$relation = new Relation($dbi);
$GLOBALS['server'] = 1;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'user' => 'user',
'db' => 'pma`db',
'pdfwork' => true,
'pdf_pages' => 'pdf_pages',
'table_coords' => 'table`coords',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$dummyDbi->addResult(
'UPDATE `pma``db`.`table``coords` SET db_name = \'db\\\'1\', table_name = \'table\\\'2\''

View File

@ -4,12 +4,14 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests\Controllers\Console\Bookmark;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\Controllers\Console\Bookmark\AddController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use ReflectionClass;
/** @covers \PhpMyAdmin\Controllers\Console\Bookmark\AddController */
class AddControllerTest extends AbstractTestCase
@ -34,7 +36,7 @@ class AddControllerTest extends AbstractTestCase
public function testWithoutRelationParameters(): void
{
$GLOBALS['cfg']['Server']['user'] = 'user';
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$dbi = $this->createDatabaseInterface();
$GLOBALS['dbi'] = $dbi;
$response = new ResponseRenderer();
@ -54,13 +56,15 @@ class AddControllerTest extends AbstractTestCase
{
$GLOBALS['cfg']['Server']['user'] = 'test_user';
$GLOBALS['server'] = 1;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'user' => 'test_user',
'db' => 'pmadb',
'bookmarkwork' => true,
'bookmark' => 'bookmark',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$dbiDummy = $this->createDbiDummy();
// phpcs:ignore Generic.Files.LineLength.TooLong

View File

@ -15,6 +15,7 @@ use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use ReflectionClass;
/** @covers \PhpMyAdmin\Controllers\Export\Template\CreateController */
class CreateControllerTest extends AbstractTestCase
@ -37,12 +38,14 @@ class CreateControllerTest extends AbstractTestCase
$GLOBALS['server'] = 1;
$GLOBALS['text_dir'] = 'ltr';
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'exporttemplateswork' => true,
'db' => 'db',
'export_templates' => 'table',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$GLOBALS['cfg']['Server']['user'] = 'user';

View File

@ -14,6 +14,7 @@ use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use ReflectionClass;
/** @covers \PhpMyAdmin\Controllers\Export\Template\LoadController */
class LoadControllerTest extends AbstractTestCase
@ -36,12 +37,14 @@ class LoadControllerTest extends AbstractTestCase
$GLOBALS['server'] = 1;
$GLOBALS['text_dir'] = 'ltr';
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'exporttemplateswork' => true,
'db' => 'db',
'export_templates' => 'table',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$GLOBALS['cfg']['Server']['user'] = 'user';

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests\Controllers\Table;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\Sql\SqlController;
use PhpMyAdmin\Controllers\Table\RecentFavoriteController;
use PhpMyAdmin\DatabaseInterface;
@ -13,6 +14,7 @@ use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use ReflectionClass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
/**
@ -41,7 +43,7 @@ class RecentFavoriteControllerTest extends AbstractTestCase
$GLOBALS['text_dir'] = 'ltr';
$_REQUEST['db'] = 'test_db';
$_REQUEST['table'] = 'test_table';
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$_SESSION['tmpval'] = [];
$_SESSION['tmpval']['recentTables'][2] = [['db' => 'test_db', 'table' => 'test_table']];
@ -72,7 +74,7 @@ class RecentFavoriteControllerTest extends AbstractTestCase
$GLOBALS['text_dir'] = 'ltr';
$_REQUEST['db'] = 'invalid_db';
$_REQUEST['table'] = 'invalid_table';
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$_SESSION['tmpval'] = [];
$_SESSION['tmpval']['recentTables'][2] = [['db' => 'invalid_db', 'table' => 'invalid_table']];

View File

@ -22,6 +22,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use PhpMyAdmin\Transformations;
use ReflectionClass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
/** @covers \PhpMyAdmin\Controllers\Table\ReplaceController */
@ -46,8 +47,7 @@ class ReplaceControllerTest extends AbstractTestCase
$GLOBALS['cfg']['Server']['user'] = 'user';
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'table_coords' => 'table_name',
'displaywork' => true,
'db' => 'information_schema',
@ -62,7 +62,10 @@ class ReplaceControllerTest extends AbstractTestCase
'bookmark' => 'bookmark',
'uiprefswork' => true,
'table_uiprefs' => 'table_uiprefs',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
}
public function testReplace(): void

View File

@ -16,6 +16,7 @@ use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use PhpMyAdmin\Transformations;
use PhpMyAdmin\Util;
use ReflectionClass;
/** @covers \PhpMyAdmin\Controllers\Table\StructureController */
class StructureControllerTest extends AbstractTestCase
@ -44,7 +45,7 @@ class StructureControllerTest extends AbstractTestCase
$GLOBALS['cfg']['Server']['DisableIS'] = true;
$GLOBALS['cfg']['ShowStats'] = false;
$GLOBALS['cfg']['ShowPropertyComments'] = false;
$_SESSION['relation'] = [];
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
$this->dummyDbi->addSelectDb('test_db');
$this->dummyDbi->addSelectDb('test_db');

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests\Database;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\Database\CentralColumns;
use PhpMyAdmin\DatabaseInterface;
@ -11,6 +12,7 @@ use PhpMyAdmin\Dbal\Connection;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Types;
use ReflectionClass;
use function array_slice;
@ -108,14 +110,16 @@ class CentralColumnsTest extends AbstractTestCase
$GLOBALS['table'] = 'PMA_table';
$GLOBALS['server'] = 1;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'centralcolumnswork' => true,
'relwork' => true,
'db' => 'phpmyadmin',
'relation' => 'relation',
'central_columns' => 'pma_central_columns',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
// mock DBI
$dbi = $this->getMockBuilder(DatabaseInterface::class)

View File

@ -13,6 +13,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Version;
use ReflectionClass;
use function sprintf;
@ -349,11 +350,13 @@ class CommonTest extends AbstractTestCase
{
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['cfg']['NaturalOrder'] = false;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'relation' => 'rel db',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->dummyDbi = $this->createDbiDummy();
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
@ -371,12 +374,14 @@ class CommonTest extends AbstractTestCase
{
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['cfg']['NaturalOrder'] = false;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'relwork' => true,
'relation' => 'rel db',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->dummyDbi = $this->createDbiDummy();
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
@ -413,12 +418,14 @@ class CommonTest extends AbstractTestCase
{
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['cfg']['NaturalOrder'] = false;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'relwork' => true,
'relation' => 'rel db',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->dummyDbi = $this->createDbiDummy();
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
@ -475,12 +482,14 @@ class CommonTest extends AbstractTestCase
{
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['cfg']['NaturalOrder'] = false;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'relwork' => true,
'relation' => 'rel db',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->dummyDbi = $this->createDbiDummy();
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests\Display;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Display\DeleteLinkEnum;
@ -22,6 +23,7 @@ use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Transformations;
use ReflectionClass;
use stdClass;
use function count;
@ -654,12 +656,14 @@ class ResultsTest extends AbstractTestCase
{
// Fake relation settings
$_SESSION['tmpval']['relational_display'] = 'K';
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'db',
'mimework' => true,
'column_info' => 'column_info',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$GLOBALS['cfg']['BrowseMIME'] = true;
// Basic data

View File

@ -4,12 +4,14 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests\Navigation\Nodes;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\Navigation\Nodes\NodeDatabase;
use PhpMyAdmin\Navigation\Nodes\NodeDatabaseChild;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Url;
use PHPUnit\Framework\MockObject\MockObject;
use ReflectionClass;
/**
* @covers \PhpMyAdmin\Navigation\Nodes\NodeDatabaseChild
@ -39,12 +41,14 @@ class NodeDatabaseChildTest extends AbstractTestCase
$GLOBALS['cfg']['DefaultTabDatabase'] = 'structure';
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['ServerDefault'] = 1;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'navwork' => true,
'navigationhiding' => 'navigationhiding',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->object = $this->getMockForAbstractClass(
NodeDatabaseChild::class,
['child'],

View File

@ -19,6 +19,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Transformations;
use ReflectionClass;
use ReflectionMethod;
use ReflectionProperty;
@ -421,15 +422,17 @@ class ExportHtmlwordTest extends AbstractTestCase
->with($columns, ['name1'])
->will($this->returnValue('1'));
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'relwork' => true,
'commwork' => true,
'mimework' => true,
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$result = $this->object->getTableDef('database', '', true, true, true);
@ -490,15 +493,17 @@ class ExportHtmlwordTest extends AbstractTestCase
$GLOBALS['dbi'] = $dbi;
$this->object->relation = new Relation($dbi);
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'relwork' => true,
'commwork' => true,
'mimework' => true,
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$result = $this->object->getTableDef('database', '', true, true, true);
@ -532,12 +537,14 @@ class ExportHtmlwordTest extends AbstractTestCase
$GLOBALS['dbi'] = $dbi;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$result = $this->object->getTableDef('database', '', false, false, false);

View File

@ -18,6 +18,7 @@ use PhpMyAdmin\Properties\Plugins\ExportPluginProperties;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Transformations;
use ReflectionClass;
use ReflectionMethod;
use function __;
@ -588,15 +589,17 @@ class ExportLatexTest extends AbstractTestCase
unset($GLOBALS['latex_caption']);
}
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'relwork' => true,
'commwork' => true,
'mimework' => true,
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
ob_start();
$this->assertTrue(
@ -677,15 +680,17 @@ class ExportLatexTest extends AbstractTestCase
$GLOBALS['dbi'] = $dbi;
$this->object->relation = new Relation($dbi);
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'relwork' => true,
'commwork' => true,
'mimework' => true,
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
ob_start();
$this->assertTrue(
@ -738,12 +743,14 @@ class ExportLatexTest extends AbstractTestCase
$GLOBALS['cfg']['Server']['host'] = 'localhost';
$GLOBALS['cfg']['Server']['verbose'] = 'verb';
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
ob_start();
$this->assertTrue(

View File

@ -21,6 +21,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Transformations;
use ReflectionClass;
use ReflectionMethod;
use stdClass;
@ -615,15 +616,17 @@ class ExportOdtTest extends AbstractTestCase
->with(['Field' => 'fieldname'])
->will($this->returnValue('1'));
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'relwork' => true,
'commwork' => true,
'mimework' => true,
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->assertTrue(
$this->object->getTableDef(
@ -696,15 +699,17 @@ class ExportOdtTest extends AbstractTestCase
$GLOBALS['dbi'] = $dbi;
$this->object->relation = new Relation($dbi);
$GLOBALS['odt_buffer'] = '';
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'relwork' => true,
'commwork' => true,
'mimework' => true,
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->assertTrue(
$this->object->getTableDef(

View File

@ -25,6 +25,7 @@ use PhpMyAdmin\Table;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Transformations;
use ReflectionClass;
use ReflectionMethod;
use stdClass;
@ -877,15 +878,17 @@ SQL;
public function testGetTableComments(): void
{
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'relwork' => true,
'commwork' => true,
'mimework' => true,
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$GLOBALS['sql_include_comments'] = true;
$dbi = $this->getMockBuilder(DatabaseInterface::class)

View File

@ -18,6 +18,7 @@ use PhpMyAdmin\Properties\Plugins\ExportPluginProperties;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Transformations;
use ReflectionClass;
use ReflectionMethod;
use ReflectionProperty;
@ -297,15 +298,17 @@ class ExportTexytextTest extends AbstractTestCase
->with(['Field' => 'fname', 'Comment' => 'comm'], ['cname'])
->will($this->returnValue('1'));
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'relwork' => true,
'commwork' => true,
'mimework' => true,
'db' => 'database',
'relation' => 'rel',
'column_info' => 'col',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$result = $this->object->getTableDef('db', 'table', 'example.com', true, true, true);

View File

@ -21,6 +21,7 @@ use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use ReflectionClass;
use ReflectionMethod;
use function __;
@ -1137,13 +1138,15 @@ class PrivilegesTest extends AbstractTestCase
public function testGetUserGroupForUser(): void
{
$GLOBALS['server'] = 1;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'users' => 'users',
'usergroups' => 'usergroups',
'menuswork' => true,
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$dummyDbi = $this->createDbiDummy();
$dummyDbi->addResult(
@ -1163,15 +1166,17 @@ class PrivilegesTest extends AbstractTestCase
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['server'] = 1;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'users' => 'users',
'usergroups' => 'usergroups',
'menuswork' => true,
'trackingwork' => true,
'tracking' => 'tracking',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$dummyDbi = $this->createDbiDummy();
$dummyDbi->addResult('SELECT * FROM `pmadb`.`users`', []);
@ -1265,8 +1270,10 @@ class PrivilegesTest extends AbstractTestCase
$_POST['change_copy'] = 'change_copy';
$_POST['old_hostname'] = 'old_hostname';
$_POST['old_username'] = 'old_username';
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([])->toArray();
$relationParameters = RelationParameters::fromArray([]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$queries = [];

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Encoding;
@ -12,6 +13,7 @@ use PhpMyAdmin\SqlQueryForm;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Url;
use ReflectionClass;
use function __;
use function htmlspecialchars;
@ -70,15 +72,15 @@ class SqlQueryFormTest extends AbstractTestCase
$GLOBALS['cfg']['CodemirrorEnable'] = true;
$GLOBALS['cfg']['DefaultForeignKeyChecks'] = 'default';
$_SESSION['relation'] = [];
$_SESSION['relation'][0] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'table_coords' => 'table_name',
'displaywork' => true,
'db' => 'information_schema',
'table_info' => 'table_info',
'relwork' => true,
'relation' => 'relation',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$relationParameters]);
$GLOBALS['cfg']['Server']['user'] = 'user';
$GLOBALS['cfg']['Server']['pmadb'] = 'pmadb';

View File

@ -4,11 +4,13 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\SystemColumn;
use PhpMyAdmin\SystemDatabase;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use ReflectionClass;
/** @covers \PhpMyAdmin\SystemDatabase */
class SystemDatabaseTest extends AbstractTestCase
@ -47,8 +49,7 @@ class SystemDatabaseTest extends AbstractTestCase
return "'" . $string . "'";
}));
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'table_coords' => 'table_name',
'displaywork' => true,
'db' => 'information_schema',
@ -59,7 +60,10 @@ class SystemDatabaseTest extends AbstractTestCase
'mimework' => true,
'column_info' => 'column_info',
'relation' => 'relation',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->sysDb = new SystemDatabase($dbi);
}

View File

@ -75,7 +75,6 @@ SQL;
$GLOBALS['col_priv'] = true;
$GLOBALS['is_reload_priv'] = true;
$GLOBALS['mime_map'] = null;
$_SESSION['relation'] = [];
$actual = $columnsDefinition->displayForm('/table/structure/save', 1, null, ['actor_id'], [$columnMeta]);

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests\Tracking;
use PhpMyAdmin\Cache;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Dbal\Connection;
@ -12,6 +13,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Tracking\Tracker;
use PhpMyAdmin\Util;
use ReflectionClass;
use ReflectionMethod;
/** @covers \PhpMyAdmin\Tracking\Tracker */
@ -41,12 +43,14 @@ class TrackerTest extends AbstractTestCase
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['export_type'] = null;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'trackingwork' => true,
'tracking' => 'tracking',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$dbi = $this->getMockBuilder(DatabaseInterface::class)
->disableOriginalConstructor()
@ -84,19 +88,23 @@ class TrackerTest extends AbstractTestCase
Tracker::enable();
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([])->toArray();
$relationParameters = RelationParameters::fromArray([]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->assertFalse(
Tracker::isActive(),
);
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'trackingwork' => true,
'db' => 'pmadb',
'tracking' => 'tracking',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->assertTrue(
Tracker::isActive(),
@ -144,19 +152,23 @@ class TrackerTest extends AbstractTestCase
Tracker::enable();
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([])->toArray();
$relationParameters = RelationParameters::fromArray([]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->assertFalse(
Tracker::isTracked('', ''),
);
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'trackingwork' => true,
'db' => 'pmadb',
'tracking' => 'tracking',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->assertTrue(
Tracker::isTracked('pma_test_db', 'pma_test_table'),

View File

@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tracking\TrackedTable;
use PhpMyAdmin\Tracking\Tracker;
use PhpMyAdmin\Tracking\TrackingChecker;
use ReflectionClass;
/** @covers \PhpMyAdmin\Tracking\TrackingChecker */
class TrackingCheckerTest extends AbstractTestCase
@ -27,12 +28,14 @@ class TrackingCheckerTest extends AbstractTestCase
$GLOBALS['dbi'] = $this->createDatabaseInterface();
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'tracking' => 'tracking',
'trackingwork' => true,
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$this->trackingChecker = new TrackingChecker(
$GLOBALS['dbi'],

View File

@ -14,6 +14,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tracking\Tracking;
use PhpMyAdmin\Tracking\TrackingChecker;
use PhpMyAdmin\Url;
use ReflectionClass;
use function __;
use function _pgettext;
@ -48,12 +49,14 @@ class TrackingTest extends AbstractTestCase
$GLOBALS['cfg']['Server']['DisableIS'] = true;
$GLOBALS['cfg']['Server']['tracking_default_statements'] = 'DELETE';
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relationParameters = RelationParameters::fromArray([
'db' => 'pmadb',
'tracking' => 'tracking',
'trackingwork' => true,
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue(
[$GLOBALS['server'] => $relationParameters],
);
$template = new Template();
$this->tracking = new Tracking(

View File

@ -4,10 +4,12 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Transformations;
use ReflectionClass;
/** @covers \PhpMyAdmin\Transformations */
class TransformationsTest extends AbstractTestCase
@ -165,13 +167,13 @@ class TransformationsTest extends AbstractTestCase
*/
public function testGetMime(): void
{
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relation = RelationParameters::fromArray([
'db' => 'pmadb',
'mimework' => true,
'trackingwork' => true,
'column_info' => 'column_info',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$GLOBALS['server'] => $relation]);
$this->assertEquals(
[
'o' => [
@ -209,16 +211,18 @@ class TransformationsTest extends AbstractTestCase
->will($this->returnValue($this->createStub(DummyResult::class)));
$GLOBALS['dbi'] = $dbi;
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([]);
// Case 1 : no configuration storage
$actual = $this->transformations->clear('db');
$this->assertFalse($actual);
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relation = RelationParameters::fromArray([
'db' => 'pmadb',
'mimework' => true,
'column_info' => 'column_info',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$GLOBALS['server'] => $relation]);
// Case 2 : database delete
$actual = $this->transformations->clear('db');

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\ConfigStorage\RelationParameters;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Dbal\Connection;
@ -12,6 +13,7 @@ use PhpMyAdmin\Message;
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPreferences;
use ReflectionClass;
use function json_encode;
use function time;
@ -55,8 +57,8 @@ class UserPreferencesTest extends AbstractNetworkTestCase
*/
public function testLoad(): void
{
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([])->toArray();
$relation = RelationParameters::fromArray([]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$GLOBALS['server'] => $relation]);
unset($_SESSION['userconfig']);
@ -80,13 +82,13 @@ class UserPreferencesTest extends AbstractNetworkTestCase
$this->assertEquals('session', $result['type']);
// case 2
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relation = RelationParameters::fromArray([
'user' => 'user',
'db' => "pma'db",
'userconfig' => 'testconf',
'userconfigwork' => true,
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$GLOBALS['server'] => $relation]);
$dbi = $this->getMockBuilder(DatabaseInterface::class)
->disableOriginalConstructor()
@ -125,8 +127,8 @@ class UserPreferencesTest extends AbstractNetworkTestCase
{
$GLOBALS['cfg']['Server']['DisableIS'] = true;
$GLOBALS['server'] = 2;
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([])->toArray();
$relation = RelationParameters::fromArray([]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$GLOBALS['server'] => $relation]);
unset($_SESSION['userconfig']);
@ -159,13 +161,13 @@ class UserPreferencesTest extends AbstractNetworkTestCase
$this->assertTrue($assert);
// case 2
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
$relation = RelationParameters::fromArray([
'userconfigwork' => true,
'db' => 'pmadb',
'userconfig' => 'testconf',
'user' => 'user',
])->toArray();
]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$GLOBALS['server'] => $relation]);
$query1 = 'SELECT `username` FROM `pmadb`.`testconf` WHERE `username` = \'user\'';
@ -287,15 +289,15 @@ class UserPreferencesTest extends AbstractNetworkTestCase
*/
public function testPersistOption(): void
{
$_SESSION['relation'] = [];
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([])->toArray();
$relation = RelationParameters::fromArray([]);
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$GLOBALS['server'] => $relation]);
$_SESSION['userconfig'] = [];
$_SESSION['userconfig']['ts'] = '123';
$_SESSION['userconfig']['db'] = ['Server/hide_db' => true, 'Server/only_db' => true];
$GLOBALS['server'] = 2;
$_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([])->toArray();
(new ReflectionClass(Relation::class))->getProperty('cache')->setValue([$GLOBALS['server'] => $relation]);
$userPreferences = new UserPreferences($GLOBALS['dbi']);
$this->assertTrue(