diff options
Diffstat (limited to 'srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test')
13 files changed, 2776 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/DataTest.php b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/DataTest.php new file mode 100644 index 0000000..c12f576 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/DataTest.php @@ -0,0 +1,74 @@ +<?php +declare(strict_types = 1); +namespace Williamdes\MariaDBMySQLKBS\Test; + +use \PHPUnit\Framework\TestCase; +use \Swaggest\JsonSchema\Schema; +use \Swaggest\JsonSchema\Context; +use \stdClass; + +class DataTest extends TestCase +{ + + /** + * Validate json data + * + * @param stdClass $contents The file contents + * @param string $id The schema id + * @example validate($slimData, "urn:williamdes:mariadb-mysql-kbs:slimdata"); + * @return bool + */ + public static function validate(stdClass $contents, string $id): bool + { + $options = new Context(); + $options->setRemoteRefProvider(new RefProvider()); + $schema = Schema::import($id, $options); + $schema->in($contents); + return true;// No exception occured + } + + /** + * test files + * + * @return void + */ + public function testFileSample(): void + { + $slimDataTestData = json_decode((string) file_get_contents(__DIR__."/data/ultraSlimDataTestWithVariables.json")); + $this->assertTrue(self::validate($slimDataTestData, "urn:williamdes:mariadb-mysql-kbs:ultraslimdata")); + } + + /** + * test slim data + * + * @return void + */ + public function testFileSlim(): void + { + $slimData = json_decode((string) file_get_contents(__DIR__."/../dist/merged-slim.json")); + $this->assertTrue(self::validate($slimData, "urn:williamdes:mariadb-mysql-kbs:slimdata")); + } + + /** + * test ultra slim data + * + * @return void + */ + public function testFileUltraSlim(): void + { + $slimData = json_decode((string) file_get_contents(__DIR__."/../dist/merged-ultraslim.json")); + $this->assertTrue(self::validate($slimData, "urn:williamdes:mariadb-mysql-kbs:ultraslimdata")); + } + + /** + * test ultra slim data + * + * @return void + */ + public function testFileRaw(): void + { + $slimData = json_decode((string) file_get_contents(__DIR__."/../dist/merged-raw.json")); + $this->assertTrue(self::validate($slimData, "urn:williamdes:mariadb-mysql-kbs:rawdata")); + } + +} diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/RefProvider.php b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/RefProvider.php new file mode 100644 index 0000000..50b25cc --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/RefProvider.php @@ -0,0 +1,50 @@ +<?php +declare(strict_types = 1); +namespace Williamdes\MariaDBMySQLKBS\Test; + +use \Swaggest\JsonSchema\RemoteRefProvider; + +class RefProvider implements RemoteRefProvider +{ + + /** + * Preloaded urn schemas + * + * @var \stdClass[] + */ + private $urnSchemas = []; + + /** + * Create a new RefProvider instance + */ + public function __construct() + { + $files = glob(__DIR__ . "/../schemas/*.json"); + if ($files === false) { + return; + } else { + foreach ($files as $filename) { + $schema = json_decode((string) file_get_contents($filename)); + if (isset($schema) && isset($schema->{'$id'}) && $schema !== null) { + $this->urnSchemas[$schema->{'$id'}] = $schema; + } + } + } + } + + /** + * @param string $url The file url + * @return \stdClass|false json_decode of $url resource content + */ + public function getSchemaData($url) + { + if (isset($this->urnSchemas[$url])) {// Handle urn: urls + return $this->urnSchemas[$url]; + } elseif (is_file($url)) {// Handle file + return json_decode((string) file_get_contents($url)); + } else {// Handle URL + return json_decode((string) file_get_contents(rawurldecode($url))); + } + } + +} diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/SearchTest.php b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/SearchTest.php new file mode 100644 index 0000000..cc15ac9 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/SearchTest.php @@ -0,0 +1,178 @@ +<?php +declare(strict_types = 1); +namespace Williamdes\MariaDBMySQLKBS\Test; + +use \PHPUnit\Framework\TestCase; +use \Williamdes\MariaDBMySQLKBS\SlimData; +use \Williamdes\MariaDBMySQLKBS\Search; +use \Williamdes\MariaDBMySQLKBS\KBException; + +class SearchTest extends TestCase +{ + + /** + * Load slim data + * + * @return void + */ + public static function setUpBeforeClass(): void + { + $sd = new SlimData(); + $sd->addVariable("variable-1", "boolean", true); + $sd->addVariable("variable-2", null, null); + $sd->addVariable("variable-3", null, true); + $variable4 = $sd->addVariable("variable-4", null, false); + $variable4->addDocumentation("https://mariadb.com/testurl/for/variable/4", "myanchor"); + $variable4->addDocumentation("https://dev.mysql.com/testurl_for-variable/4", "my_anchor"); + Search::loadTestData($sd); + } + + /** + * test get by name + * + * @return void + */ + public function testGetByName(): void + { + $found = Search::getByName("variable-4"); + $this->assertEquals("https://mariadb.com/testurl/for/variable/4#myanchor", $found); + } + + /** + * test get by name for MySQL + * + * @return void + */ + public function testGetByNameMYSQL(): void + { + $found = Search::getByName("variable-4", Search::MYSQL); + $this->assertEquals("https://dev.mysql.com/testurl_for-variable/4#my_anchor", $found); + } + + /** + * test get by name for MARIADB + * + * @return void + */ + public function testGetByNameMARIADB(): void + { + $found = Search::getByName("variable-4", Search::MARIADB); + $this->assertEquals("https://mariadb.com/testurl/for/variable/4#myanchor", $found); + } + + /** + * test get by name + * + * + * @return void + */ + public function testException(): void + { + $this->expectException(KBException::class); + $this->expectExceptionCode(0); + $this->expectExceptionMessageRegExp('/(.+) does not exist for this type of documentation !/'); + Search::getByName("variable-3", Search::MARIADB); + } + + /** + * test get by name not found variable + * + * + * @return void + */ + public function testExceptionNoFoundGetVariableType(): void + { + $this->expectException(KBException::class); + $this->expectExceptionCode(0); + $this->expectExceptionMessageRegExp('/(.+) does not exist !/'); + Search::getVariableType("acbdefghi0202"); + } + + /** + * test get by name not found variable + * + * + * @return void + */ + public function testExceptionNoFound(): void + { + $this->expectException(KBException::class); + $this->expectExceptionCode(0); + $this->expectExceptionMessageRegExp('/(.+) does not exist !/'); + Search::getByName("acbdefghi0202", Search::MARIADB); + } + + /** + * test get by name not found variable + * + * + * @return void + */ + public function testExceptionNoFoundGetVariable(): void + { + $this->expectException(KBException::class); + $this->expectExceptionCode(0); + $this->expectExceptionMessageRegExp('/(.+) does not exist !/'); + Search::getVariable("acbdefghi0202"); + } + + /** + * test load data fail + * + * @runInSeparateProcess + * + * @return void + */ + public function testExceptionLoadData(): void + { + $this->expectException(KBException::class); + $this->expectExceptionCode(0); + $this->expectExceptionMessageRegExp('/(.+) does not exist !/'); + Search::$DATA_DIR = "."; + Search::$loaded = false; + Search::loadData(); + } + + /** + * test get variables with dynamic status + * + * @return void + */ + public function testGetVariablesWithDynamic(): void + { + $dynamic = Search::getVariablesWithDynamic(true); + $this->assertEquals($dynamic, Search::getDynamicVariables()); + $static = Search::getVariablesWithDynamic(false); + $this->assertEquals($static, Search::getStaticVariables()); + $this->assertEquals(2, count($dynamic)); + $this->assertEquals(1, count($static)); + $common = \array_intersect($dynamic, $static); + $this->assertEquals(0, count($common));// Impossible to be dynamic and not + } + + /** + * test Exception get variable type has no type + * + * + * @return void + */ + public function testExceptionGetVariableType(): void + { + $this->expectException(KBException::class); + $this->expectExceptionCode(0); + $this->expectExceptionMessageRegExp('/(.+) does have a known type !/'); + Search::getVariableType("variable-2"); + } + + /** + * test get variable type + * + * @return void + */ + public function testGetVariableType(): void + { + $type = Search::getVariableType("variable-1"); + $this->assertEquals("boolean", $type); + } + +} diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/SlimDataTest.php b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/SlimDataTest.php new file mode 100644 index 0000000..30a1d18 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/SlimDataTest.php @@ -0,0 +1,59 @@ +<?php +declare(strict_types = 1); +namespace Williamdes\MariaDBMySQLKBS\Test; + +use \PHPUnit\Framework\TestCase; +use \Williamdes\MariaDBMySQLKBS\SlimData; + +class SlimDataTest extends TestCase +{ + + /** + * Create an instance of SlimData + * + * @return SlimData + */ + public function testCreateInstance(): SlimData + { + $slimData = new SlimData(); + $this->assertInstanceOf(SlimData::class, $slimData); + return $slimData; + } + + /** + * Test json_encode empty object + * + * @param SlimData $slimData SlimData instance + * @depends testCreateInstance + * @return void + */ + public function testToJsonEmpty(SlimData $slimData): void + { + $this->assertEquals('{"version":1}', json_encode($slimData)); + } + + /** + * Test json_encode with variables + * + * @param SlimData $slimData SlimData instance + * @depends testCreateInstance + * @return void + */ + public function testToJsonWithVariables(SlimData $slimData): void + { + $slimData->addVariable("Test_var", "boolean", true); + $slimData->addVariable("another-variable", "string", false); + $kbe = $slimData->addVariable("doc-variable_ok", "integer", true); + $kbe->addDocumentation("https://example.org/williamdes/mariadb-mysql-kbs", "a_doc-variable_ok"); + $kbe->addDocumentation("https://example.org/williamdes/mariadb-mysql-kbs", "a_href_ok"); + $kbe->addDocumentation("https://example.org/williamdes/mariadb-mysql-kbs/_doc-variable_ok"); + $kbe->addDocumentation("https://dev.mysql.com/"); + $kbe->addDocumentation("https://mariadb.com/"); + $kbe->addDocumentation("https://mariadb.com/", "anchorname"); + $this->assertEquals( + file_get_contents(__DIR__."/data/ultraSlimDataTestWithVariables.json"), + json_encode($slimData, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT) + ); + } + +} diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/cleaner.js b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/cleaner.js new file mode 100644 index 0000000..007207e --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/cleaner.js @@ -0,0 +1,193 @@ +'use strict'; + +const expect = require('chai').expect; +const cleaner = require(__dirname + '/../src/cleaner'); + +module.exports = function() { + suite('cleaner', function() { + test('clean cli html code', function(done) { + const cli = cleaner.cleanCli('<code>--test-argument</code>'); + expect(cli).to.equal('--test-argument'); + done(); + }); + test('clean cli html code not closed', function(done) { + const cli = cleaner.cleanCli('<code>--test-argument'); + expect(cli).to.equal('--test-argument'); + done(); + }); + test('clean cli nothing to clean', function(done) { + const cli = cleaner.cleanCli('--test-argument'); + expect(cli).to.equal('--test-argument'); + done(); + }); + test('clean cli undefined', function(done) { + const cli = cleaner.cleanCli(undefined); + expect(cli).to.equal(undefined); + done(); + }); + test('clean range undefined', function(done) { + const range = cleaner.cleanRange(undefined); + expect(range).to.deep.equal(undefined); + done(); + }); + test('clean range.from typeof object (dataset-1)', function(done) { + const range = cleaner.cleanRange({ + from: null, + to: null, + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.from typeof object (dataset-2)', function(done) { + const range = cleaner.cleanRange({ + to: null, + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.from typeof object (dataset-3)', function(done) { + const range = cleaner.cleanRange({ + from: null, + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.from typeof object (dataset-4)', function(done) { + const range = cleaner.cleanRange({ + from: undefined, + to: undefined, + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.from typeof object (dataset-5)', function(done) { + const range = cleaner.cleanRange({ + to: undefined, + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.from typeof object (dataset-6)', function(done) { + const range = cleaner.cleanRange({ + from: undefined, + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.from typeof object (dataset-7)', function(done) { + const range = cleaner.cleanRange({ + from: NaN, + to: NaN, + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.from typeof int', function(done) { + const range = cleaner.cleanRange({ + from: 1024, + }); + expect(range).to.deep.equal({ + from: 1024, + }); + done(); + }); + test('clean range.from typeof string', function(done) { + const range = cleaner.cleanRange({ + from: '1024', + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.to typeof int', function(done) { + const range = cleaner.cleanRange({ + to: 1024, + }); + expect(range).to.deep.equal({ + to: 1024, + }); + done(); + }); + test('clean range.to typeof string', function(done) { + const range = cleaner.cleanRange({ + to: '1024', + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range.to typeof object', function(done) { + const range = cleaner.cleanRange({ + to: {}, + }); + expect(range).to.deep.equal({}); + done(); + }); + test('clean range to upwards', function(done) { + const range = cleaner.cleanRange({ + to: 'upwards', + }); + expect(range).to.deep.equal({ + to: 'upwards', + }); + done(); + }); + test('clean range to upwards match', function(done) { + const range = cleaner.cleanRange({ + to: '(128KB) upwards', + }); + expect(range).to.deep.equal({ + to: 'upwards', + }); + done(); + }); + test('clean binary types in bytes', function(done) { + const type = cleaner.cleanType('in bytes'); + expect(type).to.deep.equal('byte'); + done(); + }); + test('clean binary types size in mb', function(done) { + const type = cleaner.cleanType('size in mb'); + expect(type).to.deep.equal('byte'); + done(); + }); + test('clean binary types number of bytes', function(done) { + const type = cleaner.cleanType('number of bytes'); + expect(type).to.deep.equal('byte'); + done(); + }); + test('clean binary types number of', function(done) { + const type = cleaner.cleanType('number of'); + expect(type).to.deep.equal('integer'); + done(); + }); + test('clean binary types size of', function(done) { + const type = cleaner.cleanType('size of'); + expect(type).to.deep.equal('integer'); + done(); + }); + test('clean binary types in microseconds', function(done) { + const type = cleaner.cleanType('in microseconds'); + expect(type).to.deep.equal('integer'); + done(); + }); + test('clean binary types in seconds', function(done) { + const type = cleaner.cleanType('in seconds'); + expect(type).to.deep.equal('integer'); + done(); + }); + test('clean wtf type', function(done) { + const type = cleaner.cleanType('wtf'); + expect(type).to.deep.equal(undefined); + done(); + }); + test('clean enumeration type', function(done) { + const type = cleaner.cleanType('enumeration'); + expect(type).to.deep.equal('enumeration'); + done(); + }); + test('clean undefined type', function(done) { + const type = cleaner.cleanType(undefined); + expect(type).to.deep.equal(undefined); + done(); + }); + }); +}; diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_1.html b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_1.html new file mode 100644 index 0000000..5855c10 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_1.html @@ -0,0 +1,235 @@ +<html> + +<div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: disc; "> + <li class="listitem"> + <p><a name="option_mysqld_ndbcluster"></a> + <a class="indexterm" name="idm139716308207376"></a> + + <a class="indexterm" name="idm139716308205888"></a> + + <a class="link" href="mysql-cluster-options-variables.html#option_mysqld_ndbcluster"><code + class="option">--ndbcluster</code></a> + </p> + <div class="table"> + <a name="ndbcluster-detailtable"></a> + <p class="title"><b>Table 21.207 + Type and value information for ndbcluster</b></p> + <div class="table-contents"> + <table> + <colgroup> + <col width="35%"> + <col width="65%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row">Name</td> + <td><code + class="literal"><a class="link" href="mysql-cluster-options-variables.html#option_mysqld_ndbcluster">ndbcluster</a></code> + </td> + </tr> + <tr> + <td scope="row">Command Line</td> + <td>Yes</td> + </tr> + <tr> + <td scope="row">System Variable</td> + <td>No</td> + </tr> + <tr> + <td scope="row">Status Variable</td> + <td>No</td> + </tr> + <tr> + <td scope="row">Option File</td> + <td>Yes</td> + </tr> + <tr> + <td scope="row">Scope</td> + <td></td> + </tr> + <tr> + <td scope="row">Dynamic</td> + <td>No</td> + </tr> + <tr> + <td scope="row">Type</td> + <td></td> + </tr> + <tr> + <td scope="row">Default, Range</td> + <td>FALSE (Version: NDB 7.5-7.6)</td> + </tr> + <tr> + <td scope="row">Notes</td> + <td> + <p> + DESCRIPTION: Enable NDB Cluster (if this version + of MySQL supports it) + </p> + <p> + Disabled by + <a class="link" + href="mysql-cluster-options-variables.html#option_mysqld_skip-ndbcluster"><code + class="option">--skip-ndbcluster</code></a>. + </p> + </td> + </tr> + </tbody> + </table> + </div> + <div class="table-contents"> + <table cellpadding="0" cellspacing="0" + style="position: fixed; top: 0px; display: none; left: 431px; width: 705px;"> + <thead> + <tr> + <th scope="col" style="width: 247px;">Property</th> + <th scope="col" style="width: 457px;">Value</th> + </tr> + </thead> + </table> + </div> + + </div> + <br class="table-break"> + <p> + The <a class="link" href="mysql-cluster.html" + title="Chapter 21 MySQL NDB Cluster 7.5 and NDB Cluster 7.6"><code + class="literal">NDBCLUSTER</code></a> storage engine + is necessary for using NDB Cluster. If a + <a class="link" href="mysqld.html" title="4.3.1 mysqld β The MySQL Server"><span + class="command"><strong>mysqld</strong></span></a> binary includes support for the + <a class="link" href="mysql-cluster.html" + title="Chapter 21 MySQL NDB Cluster 7.5 and NDB Cluster 7.6"><code + class="literal">NDBCLUSTER</code></a> storage engine, + the engine is disabled by default. Use the + <a class="link" href="mysql-cluster-options-variables.html#option_mysqld_ndbcluster"><code + class="option">--ndbcluster</code></a> option to + enable it. Use <code class="option">--skip-ndbcluster</code> to + explicitly disable the engine. + </p> + <p> + It is not necessary or desirable to use this option + together with <a class="link" href="server-options.html#option_mysqld_initialize"><code + class="option">--initialize</code></a>. + Beginning with NDB 7.5.4, <code class="option">--ndbcluster</code> is + ignored (and the <code class="literal">NDB</code> storage engine is + <span class="emphasis"><em>not</em></span> enabled) if + <code class="option">--initialize</code> is also used. (Bug #81689, + Bug #23518923) + </p> + </li> + <li class="listitem"> + <p><a name="option_mysqld_ndb-allow-copying-alter-table"></a> + <a class="indexterm" name="idm139716308160304"></a> + + <a class="indexterm" name="idm139716308158800"></a> + + <code class="option">--ndb-allow-copying-alter-table=[ON|OFF]</code> + </p> + <div class="table"> + <a name="ndb-allow-copying-alter-table-detailtable"></a> + <p class="title"><b>Table 21.208 + Type and value information for ndb-allow-copying-alter-table</b></p> + <div class="table-contents"> + <table> + <colgroup> + <col width="35%"> + <col width="65%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row">Name</td> + <td><code + class="literal"><a class="link" href="mysql-cluster-options-variables.html#option_mysqld_ndb-allow-copying-alter-table">ndb-allow-copying-alter-table</a></code> + </td> + </tr> + <tr> + <td scope="row">Command Line</td> + <td>Yes</td> + </tr> + <tr> + <td scope="row">System Variable</td> + <td>Yes</td> + </tr> + <tr> + <td scope="row">Status Variable</td> + <td>No</td> + </tr> + <tr> + <td scope="row">Option File</td> + <td>Yes</td> + </tr> + <tr> + <td scope="row">Scope</td> + <td>Both</td> + </tr> + <tr> + <td scope="row">Dynamic</td> + <td>Yes</td> + </tr> + <tr> + <td scope="row">Type</td> + <td></td> + </tr> + <tr> + <td scope="row">Default, Range</td> + <td>ON (Version: NDB 7.5-7.6)</td> + </tr> + <tr> + <td scope="row">Notes</td> + <td> + <p> + DESCRIPTION: Set to OFF to keep ALTER TABLE from + using copying operations on NDB tables + </p> + </td> + </tr> + </tbody> + </table> + </div> + <div class="table-contents"> + <table cellpadding="0" cellspacing="0" + style="position: fixed; top: 0px; display: none; left: 431px; width: 911px;"> + <thead> + <tr> + <th scope="col" style="width: 319px;">Property</th> + <th scope="col" style="width: 591px;">Value</th> + </tr> + </thead> + </table> + </div> + + </div> + <br class="table-break"> + <p> + Let <a class="link" href="alter-table.html" title="13.1.8 ALTER TABLE Syntax"><code + class="literal">ALTER TABLE</code></a> and other + DDL statements use copying operations on + <code class="literal">NDB</code> tables. Set to + <code class="literal">OFF</code> to keep this from happening; doing + so may improve performance of critical applications. + </p> + </li> + <li class="listitem"> + <p><a name="option_mysqld_ndb-batch-size"></a> + <a class="indexterm" name="idm139716308121008"></a> + + <a class="indexterm" name="idm139716308119520"></a> + + <code class="option">--ndb-batch-size=<em class="replaceable"><code>#</code></em></code> + </p> + +</html> diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_2.html b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_2.html new file mode 100644 index 0000000..2c3c1c5 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_2.html @@ -0,0 +1,1211 @@ +<html> +<div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: disc; "> + <li class="listitem"> + <p><a name="sysvar_binlog_gtid_simple_recovery"></a> + <a class="indexterm" name="idm140532554077552"></a> + + <a class="indexterm" name="idm140532554076512"></a> + + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery</code></a> + </p> + <div class="informaltable"> + <table frame="box" rules="all" summary="Properties for binlog_gtid_simple_recovery"> + <colgroup> + <col width="30%"> + <col width="70%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row"><span class="bold"><strong>Command-Line Format</strong></span></td> + <td><code class="literal">--binlog-gtid-simple-recovery[={OFF|ON}]</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery">binlog_gtid_simple_recovery</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Global</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Type</strong></span></td> + <td>Boolean</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Default Value</strong></span></td> + <td><code class="literal">ON</code></td> + </tr> + </tbody> + </table> + </div> + <p> + This variable controls how binary log files are iterated + during the search for GTIDs when MySQL starts or restarts. + </p> + <p> + When + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery=TRUE</code></a>, + which is the default in MySQL 8.0, the values of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> and + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> are computed at + startup based on the values of + <code class="literal">Previous_gtids_log_event</code> in the most recent + and oldest binary log files. For a description of the + computation, see + <a class="xref" href="replication-gtids-lifecycle.html#replication-gtids-gtid-purged" + title="The gtid_purged System Variable">The <code class="literal">gtid_purged</code> System + Variable</a>. This setting + accesses only two binary log files during server restart. If + all binary logs on the server were generated using MySQL 5.7.8 + or later, + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery=TRUE</code></a> + can always safely be used. + + + </p> + <p> + If any binary logs from MySQL 5.7.7 or older are present on + the server (for example, following an upgrade of an older + server to MySQL 8.0), with + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery=TRUE</code></a>, + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> and + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> might be + initialized incorrectly in the following two situations: + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + The newest binary log was generated by MySQL 5.7.5 or + earlier, and <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode</code></a> + was <code class="literal">ON</code> for some binary logs but + <code class="literal">OFF</code> for the newest binary log. + </p> + </li> + <li class="listitem"> + <p> + A <code class="literal">SET @@GLOBAL.gtid_purged</code> statement + was issued on MySQL 5.7.7 or earlier, and the binary log + that was active at the time of the <code class="literal">SET + @@GLOBAL.gtid_purged</code> statement has not yet been + purged. + + + </p> + </li> + </ul> + </div> + <p> + If an incorrect GTID set is computed in either situation, it + will remain incorrect even if the server is later restarted + with + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery=FALSE</code></a>. + If either of these situations apply or might apply on the + server, set + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery=FALSE</code></a> + before starting or restarting the server. + </p> + <p> + When + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery=FALSE</code></a> + is set, the method of computing + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> and + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> as described in + <a class="xref" href="replication-gtids-lifecycle.html#replication-gtids-gtid-purged" + title="The gtid_purged System Variable">The <code class="literal">gtid_purged</code> System + Variable</a> is changed to + iterate the binary log files as follows: + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + Instead of using the value of + <code class="literal">Previous_gtids_log_event</code> and GTID log + events from the newest binary log file, the computation + for <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> + iterates from the newest binary log file, and uses the + value of <code class="literal">Previous_gtids_log_event</code> and + any GTID log events from the first binary log file where + it finds a <code class="literal">Previous_gtids_log_event</code> + value. If the server's most recent binary log files do not + have GTID log events, for example if + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode=ON</code></a> was used but + the server was later changed to + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode=OFF</code></a>, this + process can take a long time. + </p> + </li> + <li class="listitem"> + <p> + Instead of using the value of + <code class="literal">Previous_gtids_log_event</code> from the + oldest binary log file, the computation for + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> iterates from + the oldest binary log file, and uses the value of + <code class="literal">Previous_gtids_log_event</code> from the first + binary log file where it finds either a nonempty + <code class="literal">Previous_gtids_log_event</code> value, or at + least one GTID log event (indicating that the use of GTIDs + starts at that point). If the server's older binary log + files do not have GTID log events, for example if + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode=ON</code></a> was only set + recently on the server, this process can take a long time. + </p> + </li> + </ul> + </div> + </li> + <li class="listitem"> + <p><a name="sysvar_enforce_gtid_consistency"></a> + <a class="link" href="replication-options-gtids.html#sysvar_enforce_gtid_consistency"><code + class="literal">enforce_gtid_consistency</code></a> + </p><a class="indexterm" name="idm140532554003024"></a><a class="indexterm" name="idm140532554001920"></a> + <div class="informaltable"> + <table frame="box" rules="all" summary="Properties for enforce_gtid_consistency"> + <colgroup> + <col width="30%"> + <col width="70%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row"><span class="bold"><strong>Command-Line Format</strong></span></td> + <td><code class="literal">--enforce-gtid-consistency[=value]</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_enforce_gtid_consistency">enforce_gtid_consistency</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Global</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>Yes</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Type</strong></span></td> + <td>Enumeration</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Default Value</strong></span></td> + <td><code class="literal">OFF</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Valid Values</strong></span></td> + <td> + <p class="valid-value"><code class="literal">OFF</code></p> + <p class="valid-value"><code class="literal">ON</code></p> + <p class="valid-value"><code class="literal">WARN</code></p> + </td> + </tr> + </tbody> + </table> + </div> + <p> + Depending on the value of this variable, the server enforces + GTID consistency by allowing execution of only statements that + can be safely logged using a GTID. You + <span class="emphasis"><em>must</em></span> set this variable to + <code class="literal">ON</code> before enabling GTID based replication. + </p> + <p> + The values that + <a class="link" href="replication-options-gtids.html#sysvar_enforce_gtid_consistency"><code + class="literal">enforce_gtid_consistency</code></a> can + be configured to are: + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + <code class="literal">OFF</code>: all transactions are allowed to + violate GTID consistency. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">ON</code>: no transaction is allowed to + violate GTID consistency. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">WARN</code>: all transactions are allowed to + violate GTID consistency, but a warning is generated in + this case. + </p> + </li> + </ul> + </div> + <p> + Only statements that can be logged using GTID safe statements + can be logged when + <a class="link" href="replication-options-gtids.html#sysvar_enforce_gtid_consistency"><code + class="literal">enforce_gtid_consistency</code></a> is + set to <code class="literal">ON</code>, so the operations listed here + cannot be used with this option: + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + <a class="link" href="create-table-select.html" + title="13.1.20.5 CREATE TABLE ... SELECT Syntax"><code class="literal">CREATE + TABLE ... SELECT</code></a> statements + </p> + </li> + <li class="listitem"> + <p> + <a class="link" href="create-table.html" title="13.1.20 CREATE TABLE Syntax"><code + class="literal">CREATE + TEMPORARY TABLE</code></a> or + <a class="link" href="drop-table.html" title="13.1.32 DROP TABLE Syntax"><code + class="literal">DROP TEMPORARY + TABLE</code></a> statements inside transactions + </p> + </li> + <li class="listitem"> + <p> + Transactions or statements that update both transactional + and nontransactional tables. There is an exception that + nontransactional DML is allowed in the same transaction or + in the same statement as transactional DML, if all + <span class="emphasis"><em>nontransactional</em></span> tables are + temporary. + </p> + </li> + </ul> + </div> + <p> + <a class="link" href="replication-options-gtids.html#sysvar_enforce_gtid_consistency"><code + class="option">--enforce-gtid-consistency</code></a> only + takes effect if binary logging takes place for a statement. If + binary logging is disabled on the server, or if statements are + not written to the binary log because they are removed by a + filter, GTID consistency is not checked or enforced for the + statements that are not logged. + </p> + <p> + For more information, see + <a class="xref" href="replication-gtids-restrictions.html" + title="17.1.3.6 Restrictions on Replication with GTIDs">Section 17.1.3.6, βRestrictions on + Replication with GTIDsβ</a>. + </p> + <p> + Prior to MySQL 5.7 and in early releases in that release + series, the boolean + <a class="link" href="replication-options-gtids.html#sysvar_enforce_gtid_consistency"><code + class="literal">enforce_gtid_consistency</code></a> + defaulted to <code class="literal">OFF</code>. To maintain compatibility + with these earlier releases, the enumeration defaults to + <code class="literal">OFF</code>, and setting + <a class="link" href="replication-options-gtids.html#sysvar_enforce_gtid_consistency"><code + class="option">--enforce-gtid-consistency</code></a> + without a value is interpreted as setting the value to + <code class="literal">ON</code>. The variable also has multiple textual + aliases for the values: <code class="literal">0=OFF=FALSE</code>, + <code class="literal">1=ON=TRUE</code>,<code class="literal">2=WARN</code>. This + differs from other enumeration types but maintains + compatibility with the boolean type used in previous releases. + These changes impact on what is returned by the variable. + Using <code class="literal">SELECT @@ENFORCE_GTID_CONSISTENCY</code>, + <code class="literal">SHOW VARIABLES LIKE + 'ENFORCE_GTID_CONSISTENCY'</code>, and <code class="literal">SELECT * + FROM INFORMATION_SCHEMA.VARIABLES WHERE 'VARIABLE_NAME' = + 'ENFORCE_GTID_CONSISTENCY'</code>, all return the textual + form, not the numeric form. This is an incompatible change, + since <code class="literal">@@ENFORCE_GTID_CONSISTENCY</code> returns + the numeric form for booleans but returns the textual form for + <code class="literal">SHOW</code> and the Information Schema. + </p> + </li> + <li class="listitem"> + <p><a name="sysvar_gtid_executed"></a> + <a class="indexterm" name="idm140532553933872"></a> + + <a class="indexterm" name="idm140532553932816"></a> + + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> + </p> + <div class="informaltable"> + <table frame="box" rules="all" summary="Properties for gtid_executed"> + <colgroup> + <col width="30%"> + <col width="70%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_gtid_executed">gtid_executed</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_gtid_executed">gtid_executed</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Global</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Global, Session</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Type</strong></span></td> + <td>String</td> + </tr> + </tbody> + </table> + </div> + <p> + When used with global scope, this variable contains a + representation of the set of all transactions executed on the + server and GTIDs that have been set by a + <a class="link" href="set-variable.html" title="13.7.6.1 SET Syntax for Variable Assignment"><code + class="literal">SET</code></a> + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> statement. This + is the same as the value of the + <code class="literal">Executed_Gtid_Set</code> column in the output of + <a class="link" href="show-master-status.html" title="13.7.7.23 SHOW MASTER STATUS Syntax"><code + class="literal">SHOW MASTER STATUS</code></a> and + <a class="link" href="show-slave-status.html" title="13.7.7.34 SHOW SLAVE STATUS Syntax"><code + class="literal">SHOW SLAVE STATUS</code></a>. The value of + this variable is a GTID set, see + <a class="xref" href="replication-gtids-concepts.html#replication-gtids-concepts-gtid-sets" + title="GTID Sets">GTID Sets</a> for + more information. + </p> + <p> + When the server starts, + <code class="literal">@@GLOBAL.gtid_executed</code> is initialized. See + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery</code></a> + for more information on how binary logs are iterated to + populate <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a>. GTIDs + are then added to the set as transactions are executed, or if + any + <a class="link" href="set-variable.html" title="13.7.6.1 SET Syntax for Variable Assignment"><code + class="literal">SET</code></a> + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> statement is + executed. + </p> + <p> + The set of transactions that can be found in the binary logs + at any given time is equal to + <a class="link" href="gtid-functions.html#function_gtid-subtract"><code class="literal">GTID_SUBTRACT(@@GLOBAL.gtid_executed, + @@GLOBAL.gtid_purged)</code></a>; that is, to all transactions + in the binary log that have not yet been purged. + </p> + <p> + Issuing <a class="link" href="reset-master.html" title="13.4.1.2 RESET MASTER Syntax"><code + class="literal">RESET MASTER</code></a> causes the + global value (but not the session value) of this variable to + be reset to an empty string. GTIDs are not otherwise removed + from this set other than when the set is cleared due to + <code class="literal">RESET MASTER</code>. + </p> + <p> + In some older releases, this variable could also be used with + session scope, where it contained a representation of the set + of transactions that are written to the cache in the current + session. The session scope is now deprecated. + </p> + </li> + <li class="listitem"> + <p><a name="sysvar_gtid_executed_compression_period"></a> + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed_compression_period"><code + class="literal">gtid_executed_compression_period</code></a> + </p><a class="indexterm" name="idm140532553874368"></a><a class="indexterm" name="idm140532553873280"></a> + <div class="informaltable"> + <table frame="box" rules="all" summary="Properties for gtid_executed_compression_period"> + <colgroup> + <col width="30%"> + <col width="70%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row"><span class="bold"><strong>Command-Line Format</strong></span></td> + <td><code class="literal">--gtid-executed-compression-period=#</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_gtid_executed_compression_period">gtid_executed_compression_period</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Global</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>Yes</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Type</strong></span></td> + <td>Integer</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Default Value</strong></span></td> + <td><code class="literal">1000</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Minimum Value</strong></span></td> + <td><code class="literal">0</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Maximum Value</strong></span></td> + <td><code class="literal">4294967295</code></td> + </tr> + </tbody> + </table> + </div> + <p> + Compress the <code class="literal">mysql.gtid_executed</code> table each + time this many transactions have been processed. A setting of + 0 means that this table is not compressed. Since no + compression of the table occurs when using the binary log, + setting the value of the variable has no effect unless binary + logging is disabled. + </p> + <p> + See + <a class="xref" href="replication-gtids-concepts.html#replication-gtids-gtid-executed-table-compression" + title="mysql.gtid_executed Table Compression">mysql.gtid_executed Table Compression</a>, + for more information. + </p> + </li> + <li class="listitem"> + <p><a name="sysvar_gtid_mode"></a> + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode</code></a> + </p><a class="indexterm" name="idm140532553833104"></a><a class="indexterm" name="idm140532553832016"></a> + <div class="informaltable"> + <table frame="box" rules="all" summary="Properties for gtid_mode"> + <colgroup> + <col width="30%"> + <col width="70%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row"><span class="bold"><strong>Command-Line Format</strong></span></td> + <td><code class="literal">--gtid-mode=MODE</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_gtid_mode">gtid_mode</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Global</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>Yes</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Type</strong></span></td> + <td>Enumeration</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Default Value</strong></span></td> + <td><code class="literal">OFF</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Valid Values</strong></span></td> + <td> + <p class="valid-value"><code class="literal">OFF</code></p> + <p class="valid-value"><code class="literal">OFF_PERMISSIVE</code></p> + <p class="valid-value"><code class="literal">ON_PERMISSIVE</code></p> + <p class="valid-value"><code class="literal">ON</code></p> + </td> + </tr> + </tbody> + </table> + </div> + <p> + Controls whether GTID based logging is enabled and what type + of transactions the logs can contain. You must have privileges + sufficient to set global system variables. See + <a class="xref" href="system-variable-privileges.html" + title="5.1.9.1 System Variable Privileges">Section 5.1.9.1, βSystem Variable + Privilegesβ</a>. + <a class="link" href="replication-options-gtids.html#sysvar_enforce_gtid_consistency"><code + class="literal">enforce_gtid_consistency</code></a> must + be true before you can set + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode=ON</code></a>. Before + modifying this variable, see + <a class="xref" href="replication-mode-change-online.html" + title="17.1.5 Changing Replication Modes on Online Servers">Section 17.1.5, βChanging + Replication Modes on Online Serversβ</a>. + </p> + <p> + Logged transactions can be either anonymous or use GTIDs. + Anonymous transactions rely on binary log file and position to + identify specific transactions. GTID transactions have a + unique identifier that is used to refer to transactions. The + different modes are: + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + <code class="literal">OFF</code>: Both new and replicated + transactions must be anonymous. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">OFF_PERMISSIVE</code>: New transactions are + anonymous. Replicated transactions can be either anonymous + or GTID transactions. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">ON_PERMISSIVE</code>: New transactions are + GTID transactions. Replicated transactions can be either + anonymous or GTID transactions. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">ON</code>: Both new and replicated + transactions must be GTID transactions. + </p> + </li> + </ul> + </div> + <p> + Changes from one value to another can only be one step at a + time. For example, if + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode</code></a> is currently set to + <code class="literal">OFF_PERMISSIVE</code>, it is possible to change to + <code class="literal">OFF</code> or <code class="literal">ON_PERMISSIVE</code> but + not to <code class="literal">ON</code>. + </p> + <p> + The values of <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> and + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> are persistent + regardless of the value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode</code></a>. Therefore even + after changing the value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode</code></a>, these variables + contain the correct values. + </p> + </li> + <li class="listitem"> + <p><a name="sysvar_gtid_next"></a> + <a class="indexterm" name="idm140532553773568"></a> + + <a class="indexterm" name="idm140532553772512"></a> + + <a class="link" href="replication-options-gtids.html#sysvar_gtid_next"><code + class="literal">gtid_next</code></a> + </p> + <div class="informaltable"> + <table frame="box" rules="all" summary="Properties for gtid_next"> + <colgroup> + <col width="30%"> + <col width="70%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_gtid_next">gtid_next</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Session</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>Yes</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Type</strong></span></td> + <td>Enumeration</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Default Value</strong></span></td> + <td><code class="literal">AUTOMATIC</code></td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Valid Values</strong></span></td> + <td> + <p class="valid-value"><code class="literal">AUTOMATIC</code></p> + <p class="valid-value"><code class="literal">ANONYMOUS</code></p> + <p class="valid-value"><code class="literal">UUID:NUMBER</code></p> + </td> + </tr> + </tbody> + </table> + </div> + <p> + This variable is used to specify whether and how the next GTID + is obtained. + </p> + <p> + Setting the session value of this system variable is a + restricted operation. The session user must have either the + <a class="link" href="privileges-provided.html#priv_replication-applier"><code + class="literal">REPLICATION_APPLIER</code></a> privilege + (see <a class="xref" href="replication-privilege-checks.html" + title="17.3.3 Replication Privilege Checks">Section 17.3.3, βReplication Privilege + Checksβ</a>), or + privileges sufficient to set restricted session variables (see + <a class="xref" href="system-variable-privileges.html" + title="5.1.9.1 System Variable Privileges">Section 5.1.9.1, βSystem Variable + Privilegesβ</a>). + </p> + <p> + <code class="literal">gtid_next</code> can take any of the following + values: + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + <code class="literal">AUTOMATIC</code>: Use the next + automatically-generated global transaction ID. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">ANONYMOUS</code>: Transactions do not have + global identifiers, and are identified by file and + position only. + </p> + </li> + <li class="listitem"> + <p> + A global transaction ID in + <em class="replaceable"><code>UUID</code></em>:<em + class="replaceable"><code>NUMBER</code></em> + format. + </p> + </li> + </ul> + </div> + <p> + Exactly which of the above options are valid depends on the + setting of <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode</code></a>, see + <a class="xref" href="replication-mode-change-online-concepts.html" + title="17.1.5.1 Replication Mode Concepts">Section 17.1.5.1, βReplication Mode + Conceptsβ</a> for + more information. Setting this variable has no effect if + <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode"><code + class="literal">gtid_mode</code></a> is + <code class="literal">OFF</code>. + </p> + <p> + After this variable has been set to + <em class="replaceable"><code>UUID</code></em>:<em class="replaceable"><code>NUMBER</code></em>, + and a transaction has been committed or rolled back, an + explicit <code class="literal">SET GTID_NEXT</code> statement must again + be issued before any other statement. + </p> + <p> + <a class="link" href="drop-table.html" title="13.1.32 DROP TABLE Syntax"><code + class="literal">DROP TABLE</code></a> or + <a class="link" href="drop-table.html" title="13.1.32 DROP TABLE Syntax"><code class="literal">DROP TEMPORARY + TABLE</code></a> fails with an explicit error when used on a + combination of nontemporary tables with temporary tables, or + of temporary tables using transactional storage engines with + temporary tables using nontransactional storage engines. + </p> + </li> + <li class="listitem"> + <p><a name="sysvar_gtid_owned"></a> + <a class="indexterm" name="idm140532553718736"></a> + + <a class="indexterm" name="idm140532553717680"></a> + + <a class="link" href="replication-options-gtids.html#sysvar_gtid_owned"><code + class="literal">gtid_owned</code></a> + </p> + <div class="informaltable"> + <table frame="box" rules="all" summary="Properties for gtid_owned"> + <colgroup> + <col width="30%"> + <col width="70%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_gtid_owned">gtid_owned</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Global, Session</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Type</strong></span></td> + <td>String</td> + </tr> + </tbody> + </table> + </div> + <p> + This read-only variable is primarily for internal use. Its + contents depend on its scope. + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + When used with global scope, + <a class="link" href="replication-options-gtids.html#sysvar_gtid_owned"><code + class="literal">gtid_owned</code></a> holds a list + of all the GTIDs that are currently in use on the server, + with the IDs of the threads that own them. This variable + is mainly useful for a multi-threaded replication slave to + check whether a transaction is already being applied on + another thread. An applier thread takes ownership of a + transaction's GTID all the time it is processing the + transaction, so <code class="literal">@@global.gtid_owned</code> + shows the GTID and owner for the duration of processing. + When a transaction has been committed (or rolled back), + the applier thread releases ownership of the GTID. + </p> + </li> + <li class="listitem"> + <p> + When used with session scope, + <a class="link" href="replication-options-gtids.html#sysvar_gtid_owned"><code + class="literal">gtid_owned</code></a> holds a single + GTID that is currently in use by and owned by this + session. This variable is mainly useful for testing and + debugging the use of GTIDs when the client has explicitly + assigned a GTID for the transaction by setting + <a class="link" href="replication-options-gtids.html#sysvar_gtid_next"><code + class="literal">gtid_next</code></a>. In this case, + <code class="literal">@@session.gtid_owned</code> displays the GTID + all the time the client is processing the transaction, + until the transaction has been committed (or rolled back). + When the client has finished processing the transaction, + the variable is cleared. If + <a class="link" href="replication-options-gtids.html#sysvar_gtid_next"><code + class="literal">gtid_next=AUTOMATIC</code></a> is + used for the session, + <a class="link" href="replication-options-gtids.html#sysvar_gtid_owned"><code + class="literal">gtid_owned</code></a> is only + populated briefly during the execution of the commit + statement for the transaction, so it cannot be observed + from the session concerned, although it will be listed if + <code class="literal">@@global.gtid_owned</code> is read at the + right point. If you have a requirement to track the GTIDs + that are handled by a client in a session, you can enable + the session state tracker controlled by the + <a class="link" href="server-system-variables.html#sysvar_session_track_gtids"><code + class="literal">session_track_gtids</code></a> + system variable. + </p> + </li> + </ul> + </div> + </li> + <li class="listitem"> + <p><a name="sysvar_gtid_purged"></a> + <a class="indexterm" name="idm140532553678512"></a> + + <a class="indexterm" name="idm140532553677504"></a> + + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> + </p> + <div class="informaltable"> + <table frame="box" rules="all" summary="Properties for gtid_purged"> + <colgroup> + <col width="30%"> + <col width="70%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row"><span class="bold"><strong>System Variable</strong></span></td> + <td><code + class="literal"><a class="link" href="replication-options-gtids.html#sysvar_gtid_purged">gtid_purged</a></code> + </td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Scope</strong></span></td> + <td>Global</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Dynamic</strong></span></td> + <td>Yes</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong><a class="link" + href="optimizer-hints.html#optimizer-hints-set-var" + title="Variable-Setting Hint Syntax"><code + class="literal">SET_VAR</code></a> Hint Applies</strong></span></td> + <td>No</td> + </tr> + <tr> + <td scope="row"><span class="bold"><strong>Type</strong></span></td> + <td>String</td> + </tr> + </tbody> + </table> + </div> + <p> + The global value of the + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> system variable + (<code class="literal">@@GLOBAL.gtid_purged</code>) is a GTID set + consisting of the GTIDs of all the transactions that have been + committed on the server, but do not exist in any binary log + file on the server. + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> is a subset of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a>. The following + categories of GTIDs are in + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>: + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + GTIDs of replicated transactions that were committed with + binary logging disabled on the slave. + </p> + </li> + <li class="listitem"> + <p> + GTIDs of transactions that were written to a binary log + file that has now been purged. + </p> + </li> + <li class="listitem"> + <p> + GTIDs that were added explicitly to the set by the + statement <code class="literal">SET @@GLOBAL.gtid_purged</code>. + </p> + </li> + </ul> + </div> + <p> + When the server starts, the global value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> is initialized to + a set of GTIDs. For information on how this GTID set is + computed, see <a class="xref" href="replication-gtids-lifecycle.html#replication-gtids-gtid-purged" + title="The gtid_purged System Variable">The <code class="literal">gtid_purged</code> System + Variable</a>. + If binary logs from MySQL 5.7.7 or older are present on the + server, you might need to set + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery=FALSE</code></a> + in the server's configuration file to produce the correct + computation. See the description for + <a class="link" href="replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery"><code + class="literal">binlog_gtid_simple_recovery</code></a> + for details of the situations in which this setting is needed. + </p> + <p> + Issuing <a class="link" href="reset-master.html" title="13.4.1.2 RESET MASTER Syntax"><code + class="literal">RESET MASTER</code></a> causes the + value of <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> to be + reset to an empty string. + </p> + <p> + You can set the value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> in order to + record on the server that the transactions in a certain GTID + set have been applied, although they do not exist in any + binary log on the server. An example use case for this action + is when you are restoring a backup of one or more databases on + a server, but you do not have the relevant binary logs + containing the transactions on the server. + </p> + <p> + From MySQL 8.0, there are two ways to set the value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>. You can either + replace the value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> with your + specified GTID set, or you can append your specified GTID set + to the GTID set that is already held by + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>. If the server + has no existing GTIDs, for example an empty server that you + are provisioning with a backup of an existing database, both + methods have the same result. If you are restoring a backup + that overlaps the transactions that are already on the server, + for example replacing a corrupted table with a partial dump + from the master made using <a class="link" href="mysqldump.html" + title="4.5.4 mysqldump β A Database Backup Program"><span + class="command"><strong>mysqldump</strong></span></a> (which + includes the GTIDs of all the transactions on the server, even + though the dump is partial), use the first method of replacing + the value of <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>. If + you are restoring a backup that is disjoint from the + transactions that are already on the server, for example + provisioning a multi-source replication slave using dumps from + two different servers, use the second method of adding to the + value of <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>. + </p> + <div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: circle; "> + <li class="listitem"> + <p> + To replace the value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> with your + specified GTID set, use the following statement: + </p> + <div class="copytoclipboard-wrapper" style="position: relative;"> + <pre + class="programlisting line-numbers one-line language-sql"><div class="docs-select-all right" id="sa5949024"><div class="copy-help left">Press CTRL+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class=" language-sql"><span class="token keyword">SET</span> <span class="token variable">@@GLOBAL.gtid_purged</span> <span class="token operator">=</span> <span class="token string">'gtid_set'</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> + </div> + <p> + <code class="literal">gtid_set</code> must be a superset of the + current value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>, and must not + intersect with + <code class="literal">gtid_subtract(gtid_executed,gtid_purged)</code>. + In other words, the new GTID set + <span class="bold"><strong>must</strong></span> include any GTIDs + that were already in + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>, and + <span class="bold"><strong>must not</strong></span> include any + GTIDs in <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> + that have not yet been purged. <code class="literal">gtid_set</code> + also cannot include any GTIDs that are in + <code class="literal">@@global.gtid_owned</code>, that is, the GTIDs + for transactions that are currently being processed on the + server. + </p> + <p> + The result is that the global value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a> is set equal + to <code class="literal">gtid_set</code>, and the value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> becomes the + union of <code class="literal">gtid_set</code> and the previous + value of <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a>. + </p> + </li> + <li class="listitem"> + <p> + To append your specified GTID set to + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>, use the + following statement with a plus sign (+) before the GTID + set: + </p> + <div class="copytoclipboard-wrapper" style="position: relative;"> + <pre + class="programlisting line-numbers one-line language-sql"><div class="docs-select-all right" id="sa42319597"><div class="copy-help left">Press CTRL+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class=" language-sql"><span class="token keyword">SET</span> <span class="token variable">@@GLOBAL.gtid_purged</span> <span class="token operator">=</span> <span class="token string">'+gtid_set'</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> + </div> + <p> + <code class="literal">gtid_set</code> <span class="bold"><strong>must + not</strong></span> intersect with the current value of + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a>. In other + words, the new GTID set must not include any GTIDs in + <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a>, including + transactions that are already also in + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>. + <code class="literal">gtid_set</code> also cannot include any GTIDs + that are in <code class="literal">@@global.gtid_owned</code>, that + is, the GTIDs for transactions that are currently being + processed on the server. + </p> + <p> + The result is that <code class="literal">gtid_set</code> is added to + both <a class="link" href="replication-options-gtids.html#sysvar_gtid_executed"><code + class="literal">gtid_executed</code></a> and + <a class="link" href="replication-options-gtids.html#sysvar_gtid_purged"><code + class="literal">gtid_purged</code></a>. + </p> + </li> + </ul> + </div> + </li> + </ul> +</div> + +</html> diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_3.html b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_3.html new file mode 100644 index 0000000..8e48a2b --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/mysql_test_case_3.html @@ -0,0 +1,339 @@ +<html> +<div class="itemizedlist"> + <ul class="itemizedlist" style="list-style-type: disc; "> + <li class="listitem"><a name="sysvar_ndb_join_pushdown"></a><a class="indexterm" + name="idm139716306421824"></a><a class="indexterm" name="idm139716306420752"></a><a class="indexterm" + name="idm139716306419680"></a> + <p> + <a class="link" href="mysql-cluster-options-variables.html#sysvar_ndb_join_pushdown"><code + class="literal">ndb_join_pushdown</code></a> + </p> + <div class="table"> + <a name="ndb_join_pushdown-detailtable"></a> + <p class="title"><b>Table 21.249 + Type and value information for ndb_join_pushdown</b></p> + <div class="table-contents"> + <table> + <colgroup> + <col width="35%"> + <col width="65%"> + </colgroup> + <thead> + <tr> + <th scope="col">Property</th> + <th scope="col">Value</th> + </tr> + </thead> + <tbody> + <tr> + <td scope="row">Name</td> + <td><code + class="literal"><a class="link" href="mysql-cluster-options-variables.html#sysvar_ndb_join_pushdown">ndb_join_pushdown</a></code> + </td> + </tr> + <tr> + <td scope="row">Command Line</td> + <td>No</td> + </tr> + <tr> + <td scope="row">System Variable</td> + <td>Yes</td> + </tr> + <tr> + <td scope="row">Status Variable</td> + <td>No</td> + </tr> + <tr> + <td scope="row">Option File</td> + <td>No</td> + </tr> + <tr> + <td scope="row">Scope</td> + <td>Both</td> + </tr> + <tr> + <td scope="row">Dynamic</td> + <td>Yes</td> + </tr> + <tr> + <td scope="row">Type</td> + <td></td> + </tr> + <tr> + <td scope="row">Default, Range</td> + <td>TRUE (Version: 5.1.51-ndb-7.2.0)</td> + </tr> + <tr> + <td scope="row">Notes</td> + <td> + <p> + DESCRIPTION: Enables pushing down of joins to data + nodes + </p> + </td> + </tr> + </tbody> + </table> + </div> + <div class="table-contents"> + <table cellpadding="0" cellspacing="0" + style="position: fixed; top: 0px; display: none; left: 431px; width: 594px;"> + <thead> + <tr> + <th scope="col" style="width: 208px;">Property</th> + <th scope="col" style="width: 385px;">Value</th> + </tr> + </thead> + </table> + </div> + + </div> + <br class="table-break"> + <p> + This variable controls whether joins on + <a class="link" href="mysql-cluster.html" + title="Chapter 21 MySQL NDB Cluster 7.5 and NDB Cluster 7.6"><code + class="literal">NDB</code></a> tables are pushed down to + the NDB kernel (data nodes). Previously, a join was + handled using multiple accesses of + <a class="link" href="mysql-cluster.html" + title="Chapter 21 MySQL NDB Cluster 7.5 and NDB Cluster 7.6"><code + class="literal">NDB</code></a> by the SQL node; however, + when <a class="link" href="mysql-cluster-options-variables.html#sysvar_ndb_join_pushdown"><code + class="literal">ndb_join_pushdown</code></a> is + enabled, a pushable join is sent in its entirety to the + data nodes, where it can be distributed among the data + nodes and executed in parallel on multiple copies of the + data, with a single, merged result being returned to + <a class="link" href="mysqld.html" title="4.3.1 mysqld β The MySQL Server"><span + class="command"><strong>mysqld</strong></span></a>. This can reduce greatly the + number of round trips between an SQL node and the data + nodes required to handle such a join. + </p> + <p> + By default, + <a class="link" href="mysql-cluster-options-variables.html#sysvar_ndb_join_pushdown"><code + class="literal">ndb_join_pushdown</code></a> is + enabled. + </p> + <p><a name="ndb_join_pushdown-conditions"></a><b>Conditions for NDB pushdown joins. </b> + In order for a join to be pushable, it must meet the + following conditions: + </p> + <div class="orderedlist"> + <ol class="orderedlist" type="1"> + <li class="listitem"> + <p> + Only columns can be compared, and all columns to be + joined must use <span class="emphasis"><em>exactly</em></span> the same + data type. + </p> + <p> + This means that expressions such as <code class="literal">t1.a = + t2.a + <em class="replaceable"><code>constant</code></em></code> + cannot be pushed down, and that (for example) a join + on an <a class="link" href="integer-types.html" + title="11.2.1 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT"><code + class="literal">INT</code></a> column and a + <a class="link" href="integer-types.html" + title="11.2.1 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT"><code + class="literal">BIGINT</code></a> column also + cannot be pushed down. + </p> + </li> + <li class="listitem"> + <p> + Queries referencing + <a class="link" href="blob.html" title="11.4.3 The BLOB and TEXT Types"><code + class="literal">BLOB</code></a> or + <a class="link" href="blob.html" title="11.4.3 The BLOB and TEXT Types"><code + class="literal">TEXT</code></a> columns are not + supported. + </p> + </li> + <li class="listitem"> + <p> + Explicit locking is not supported; however, the + <a class="link" href="mysql-cluster.html" + title="Chapter 21 MySQL NDB Cluster 7.5 and NDB Cluster 7.6"><code + class="literal">NDB</code></a> storage engine's + characteristic implicit row-based locking is enforced. + </p> + <p> + This means that a join using <code class="literal">FOR + UPDATE</code> cannot be pushed down. + </p> + </li> + <li class="listitem"> + <p> + In order for a join to be pushed down, child tables in + the join must be accessed using one of the + <a class="link" href="explain-output.html#jointype_ref"><code + class="literal">ref</code></a>, + <a class="link" href="explain-output.html#jointype_eq_ref"><code + class="literal">eq_ref</code></a>, or + <a class="link" href="explain-output.html#jointype_const"><code + class="literal">const</code></a> access methods, + or some combination of these methods. + </p> + <p> + Outer joined child tables can only be pushed using + <a class="link" href="explain-output.html#jointype_eq_ref"><code + class="literal">eq_ref</code></a>. + </p> + <p> + If the root of the pushed join is an + <a class="link" href="explain-output.html#jointype_eq_ref"><code + class="literal">eq_ref</code></a> or + <a class="link" href="explain-output.html#jointype_const"><code + class="literal">const</code></a>, only child + tables joined by + <a class="link" href="explain-output.html#jointype_eq_ref"><code + class="literal">eq_ref</code></a> can be + appended. (A table joined by + <a class="link" href="explain-output.html#jointype_ref"><code class="literal">ref</code></a> + is likely to + become the root of another pushed join.) + </p> + <p> + If the query optimizer decides on <code class="literal">Using join + cache</code> for a candidate child table, that + table cannot be pushed as a child. However, it may be + the root of another set of pushed tables. + </p> + </li> + <li class="listitem"> + <p> + Joins referencing tables explicitly partitioned by + <code class="literal">[LINEAR] HASH</code>, + <code class="literal">LIST</code>, or <code class="literal">RANGE</code> + currently cannot be pushed down. + </p> + </li> + </ol> + </div> + <p> + You can see whether a given join can be pushed down by + checking it with <a class="link" href="explain.html" title="13.8.2 EXPLAIN Syntax"><code + class="literal">EXPLAIN</code></a>; + when the join can be pushed down, you can see references + to the <code class="literal">pushed join</code> in the + <code class="literal">Extra</code> column of the output, as shown in + this example: + </p> + <div class="copytoclipboard-wrapper" style="position: relative;"> + <pre + class="programlisting line-numbers language-sql"><div class="docs-select-all right" id="sa30355511"><div class="copy-help left">Press CTRL+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class=" language-sql"><span class="token prompt">mysql></span> <span class="token keyword">EXPLAIN</span> + <span class="token prompt"> -></span> <span class="token keyword">SELECT</span> e<span class="token punctuation">.</span>first_name<span class="token punctuation">,</span> e<span class="token punctuation">.</span>last_name<span class="token punctuation">,</span> t<span class="token punctuation">.</span>title<span class="token punctuation">,</span> d<span class="token punctuation">.</span>dept_name + <span class="token prompt"> -></span> <span class="token keyword">FROM</span> employees e + <span class="token prompt"> -></span> <span class="token keyword">JOIN</span> dept_emp de <span class="token keyword">ON</span> e<span class="token punctuation">.</span>emp_no<span class="token operator">=</span>de<span class="token punctuation">.</span>emp_no + <span class="token prompt"> -></span> <span class="token keyword">JOIN</span> departments d <span class="token keyword">ON</span> d<span class="token punctuation">.</span>dept_no<span class="token operator">=</span>de<span class="token punctuation">.</span>dept_no + <span class="token prompt"> -></span> <span class="token keyword">JOIN</span> titles t <span class="token keyword">ON</span> e<span class="token punctuation">.</span>emp_no<span class="token operator">=</span>t<span class="token punctuation">.</span>emp_no\G + <span class="token output"><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span> 1. row <span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span> + id<span class="token punctuation">:</span> 1 + select_type<span class="token punctuation">:</span> SIMPLE + table<span class="token punctuation">:</span> d + type<span class="token punctuation">:</span> ALL + possible_keys<span class="token punctuation">:</span> PRIMARY + key<span class="token punctuation">:</span> NULL + key_len<span class="token punctuation">:</span> NULL + ref<span class="token punctuation">:</span> NULL + rows<span class="token punctuation">:</span> 9 + Extra<span class="token punctuation">:</span> Parent of 4 pushed join@1 + <span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span> 2. row <span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span> + id<span class="token punctuation">:</span> 1 + select_type<span class="token punctuation">:</span> SIMPLE + table<span class="token punctuation">:</span> de + type<span class="token punctuation">:</span> ref + possible_keys<span class="token punctuation">:</span> PRIMARY,emp_no,dept_no + key<span class="token punctuation">:</span> dept_no + key_len<span class="token punctuation">:</span> 4 + ref<span class="token punctuation">:</span> employees.d.dept_no + rows<span class="token punctuation">:</span> 5305 + Extra<span class="token punctuation">:</span> Child of 'd' in pushed join@1 + <span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span> 3. row <span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span> + id<span class="token punctuation">:</span> 1 + select_type<span class="token punctuation">:</span> SIMPLE + table<span class="token punctuation">:</span> e + type<span class="token punctuation">:</span> eq_ref + possible_keys<span class="token punctuation">:</span> PRIMARY + key<span class="token punctuation">:</span> PRIMARY + key_len<span class="token punctuation">:</span> 4 + ref<span class="token punctuation">:</span> employees.de.emp_no + rows<span class="token punctuation">:</span> 1 + Extra<span class="token punctuation">:</span> Child of 'de' in pushed join@1 + <span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span> 4. row <span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span><span class="token punctuation">*</span> + id<span class="token punctuation">:</span> 1 + select_type<span class="token punctuation">:</span> SIMPLE + table<span class="token punctuation">:</span> t + type<span class="token punctuation">:</span> ref + possible_keys<span class="token punctuation">:</span> PRIMARY,emp_no + key<span class="token punctuation">:</span> emp_no + key_len<span class="token punctuation">:</span> 4 + ref<span class="token punctuation">:</span> employees.de.emp_no + rows<span class="token punctuation">:</span> 19 + Extra<span class="token punctuation">:</span> Child of 'e' in pushed join@1 + </span><span class="token output">4 rows in set (0.00 sec)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> + </div> + <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> + + <div class="admon-title"> + Note + </div> + <p> + If inner joined child tables are joined by + <a class="link" href="explain-output.html#jointype_ref"><code class="literal">ref</code></a>, + <span class="emphasis"><em>and</em></span> the result is ordered or + grouped by a sorted index, this index cannot provide + sorted rows, which forces writing to a sorted tempfile. + </p> + </div> + <p> + Two additional sources of information about pushed join + performance are available: + </p> + <div class="orderedlist"> + <ol class="orderedlist" type="1"> + <li class="listitem"> + <p> + The status variables + <a class="link" + href="mysql-cluster-options-variables.html#statvar_Ndb_pushed_queries_defined"><code + class="literal">Ndb_pushed_queries_defined</code></a>, + <a class="link" + href="mysql-cluster-options-variables.html#statvar_Ndb_pushed_queries_dropped"><code + class="literal">Ndb_pushed_queries_dropped</code></a>, + <a class="link" + href="mysql-cluster-options-variables.html#statvar_Ndb_pushed_queries_executed"><code + class="literal">Ndb_pushed_queries_executed</code></a>, + and + <a class="link" href="mysql-cluster-options-variables.html#statvar_Ndb_pushed_reads"><code + class="literal">Ndb_pushed_reads</code></a>. + </p> + </li> + <li class="listitem"> + <p> + The counters in the + <a class="link" href="mysql-cluster-ndbinfo-counters.html" + title="21.5.10.10 The ndbinfo counters Table"><code + class="literal">ndbinfo.counters</code></a> + table that belong to the <code class="literal">DBSPJ</code> + kernel block. See + <a class="xref" href="mysql-cluster-ndbinfo-counters.html" + title="21.5.10.10 The ndbinfo counters Table">Section 21.5.10.10, βThe ndbinfo + counters Tableβ</a>, for + information about these counters. See also + <a class="ulink" + href="https://dev.mysql.com/doc/ndb-internals/en/ndb-internals-kernel-blocks-dbspj.html" + target="_top">The DBSPJ Block</a>, + in the <em class="citetitle">NDB Cluster API Developer + Guide</em>. + </p> + </li> + </ol> + </div> + </li> + </ul> +</div> + +</html> diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/ultraSlimDataTestWithVariables.json b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/ultraSlimDataTestWithVariables.json new file mode 100644 index 0000000..1294c9e --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/data/ultraSlimDataTestWithVariables.json @@ -0,0 +1,51 @@ +{ + "vars": { + "Test_var": { + "d": true, + "t": 2 + }, + "another-variable": { + "d": false, + "t": 1 + }, + "doc-variable_ok": { + "d": true, + "t": 3, + "a": [ + { + "t": 1, + "u": 0 + }, + { + "t": 2, + "u": 1 + }, + { + "a": "anchorname", + "t": 2, + "u": 1 + } + ] + } + }, + "version": 1, + "types": { + "1": "MYSQL", + "2": "MARIADB" + }, + "varTypes": { + "1": "string", + "2": "boolean", + "3": "integer", + "4": "numeric", + "5": "enumeration", + "6": "set", + "7": "directory name", + "8": "file name", + "9": "byte" + }, + "urls": [ + "https://dev.mysql.com/", + "https://mariadb.com/" + ] +}
\ No newline at end of file diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/index.js b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/index.js new file mode 100644 index 0000000..b5294d6 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/index.js @@ -0,0 +1,12 @@ +'use strict'; + +process.env.TZ = 'UTC'; +const templates = require(__dirname + '/templates'); +const cleaner = require(__dirname + '/cleaner'); +const parser = require(__dirname + '/parser'); + +suite('MariaDB MySQL KBS', function() { + templates(); + cleaner(); + parser(); +}); diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/parser.js b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/parser.js new file mode 100644 index 0000000..14b6596 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/parser.js @@ -0,0 +1,129 @@ +'use strict'; + +const expect = require('chai').expect; +const MySQL = require(__dirname + '/../src/MySQL'); +const cheerio = require('cheerio'); +const fs = require('fs'); + +module.exports = function() { + suite('parser', function() { + test('test case 1', function(done) { + const $ = cheerio.load(fs.readFileSync(__dirname + '/data/mysql_test_case_1.html')); + MySQL.parsePage($, function(resultData) { + expect(resultData).to.deep.equal([ + { + cli: '--ndbcluster', + default: 'FALSE (Version: NDB 7.5-7.6)', + dynamic: false, + id: 'option_mysqld_ndbcluster', + name: 'ndbcluster', + }, + { + cli: '--ndb-allow-copying-alter-table=[ON|OFF]', + default: 'ON (Version: NDB 7.5-7.6)', + dynamic: true, + id: 'option_mysqld_ndb-allow-copying-alter-table', + name: 'ndb-allow-copying-alter-table', + scope: ['global', 'session'], + }, + ]); + done(); + }); + }); + test('test case 2', function(done) { + const $ = cheerio.load(fs.readFileSync(__dirname + '/data/mysql_test_case_2.html')); + MySQL.parsePage($, function(resultData) { + expect(resultData).to.deep.equal([ + { + cli: '--binlog-gtid-simple-recovery[={OFF|ON}]', + default: 'ON', + dynamic: false, + id: 'sysvar_binlog_gtid_simple_recovery', + name: 'binlog_gtid_simple_recovery', + scope: ['global'], + type: 'boolean', + }, + { + cli: '--enforce-gtid-consistency[=value]', + default: 'OFF', + dynamic: true, + id: 'sysvar_enforce_gtid_consistency', + name: 'enforce_gtid_consistency', + scope: ['global'], + type: 'enumeration', + validValues: ['OFF', 'ON', 'WARN'], + }, + { + dynamic: false, + id: 'sysvar_gtid_executed', + name: 'gtid_executed', + scope: ['global', 'session'], + type: 'string', + }, + { + cli: '--gtid-executed-compression-period=#', + default: '1000', + dynamic: true, + id: 'sysvar_gtid_executed_compression_period', + name: 'gtid_executed_compression_period', + range: { + from: 0, + to: 4294967295, + }, + scope: ['global'], + type: 'integer', + }, + { + cli: '--gtid-mode=MODE', + default: 'OFF', + dynamic: true, + id: 'sysvar_gtid_mode', + name: 'gtid_mode', + scope: ['global'], + type: 'enumeration', + validValues: ['OFF', 'OFF_PERMISSIVE', 'ON_PERMISSIVE', 'ON'], + }, + { + default: 'AUTOMATIC', + dynamic: true, + id: 'sysvar_gtid_next', + name: 'gtid_next', + scope: ['session'], + type: 'enumeration', + validValues: ['AUTOMATIC', 'ANONYMOUS', 'UUID:NUMBER'], + }, + { + dynamic: false, + id: 'sysvar_gtid_owned', + name: 'gtid_owned', + scope: ['global', 'session'], + type: 'string', + }, + { + dynamic: true, + id: 'sysvar_gtid_purged', + name: 'gtid_purged', + scope: ['global'], + type: 'string', + }, + ]); + done(); + }); + }); + test('test case 3', function(done) { + const $ = cheerio.load(fs.readFileSync(__dirname + '/data/mysql_test_case_3.html')); + MySQL.parsePage($, function(resultData) { + expect(resultData).to.deep.equal([ + { + default: 'TRUE (Version: 5.1.51-ndb-7.2.0)', + dynamic: true, + id: 'sysvar_ndb_join_pushdown', + name: 'ndb_join_pushdown', + scope: ['global', 'session'], + }, + ]); + done(); + }); + }); + }); +}; diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/phpunit.xml b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/phpunit.xml new file mode 100644 index 0000000..a04a13b --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/phpunit.xml @@ -0,0 +1,27 @@ +<phpunit + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.4/phpunit.xsd" + colors="true" + backupGlobals="false" + bootstrap="../vendor/autoload.php" + stderr="true" +> + + <filter> + <whitelist> + <directory>../src</directory> + </whitelist> + </filter> + + <logging> + <log type="coverage-html" target="../build/coverage/html/"/> + <log type="coverage-clover" target="../build/logs/clover.xml"/> + </logging> + + <testsuites> + <testsuite name="Unit tests"> + <directory suffix=".php">../test/</directory> + </testsuite> + </testsuites> + +</phpunit> diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/templates.js b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/templates.js new file mode 100644 index 0000000..94119c2 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/test/templates.js @@ -0,0 +1,218 @@ +'use strict'; + +const expect = require('chai').expect; +const templates = require(__dirname + '/../scripts/sudo-bot/template.js'); + +module.exports = function() { + suite('pr message', function() { + test('prMessage for lambda files', function(done) { + const commmitMsg = templates.prMessage(['a.json', 'ab/cd/ef.json', 'README.md']); + expect(commmitMsg).to.equal('π€ Some updates to review π€'); + done(); + }); + test('prMessage for MariaDB files', function(done) { + const commmitMsg = templates.prMessage(['data/mariadb-aria-server-status-variables.json']); + expect(commmitMsg).to.equal('π€ [MariaDB] updates'); + done(); + }); + test('prMessage for MariaDB files and merged', function(done) { + const commmitMsg = templates.prMessage([ + 'dist/merged-raw.json', + 'dist/merged-raw.md', + 'dist/merged-slim.json', + 'dist/merged-ultraslim.json', + 'dist/merged-ultraslim.php', + 'data/mariadb-aria-server-status-variables.json', + ]); + expect(commmitMsg).to.equal('π€ [MariaDB] updates'); + done(); + }); + test('prMessage for MariaDB files and others', function(done) { + const commmitMsg = templates.prMessage([ + 'a.json', + 'ab/cd/ef.json', + 'README.md', + 'data/mariadb-aria-server-status-variables.json', + ]); + expect(commmitMsg).to.equal('π€ [MariaDB] updates π¨π¨'); + done(); + }); + test('prMessage for MariaDB files and others and merged', function(done) { + const commmitMsg = templates.prMessage([ + 'dist/merged-raw.json', + 'dist/merged-raw.md', + 'dist/merged-slim.json', + 'dist/merged-ultraslim.json', + 'dist/merged-ultraslim.php', + 'a.json', + 'ab/cd/ef.json', + 'README.md', + 'data/mariadb-aria-server-status-variables.json', + ]); + expect(commmitMsg).to.equal('π€ [MariaDB] updates π¨π¨'); + done(); + }); + test('prMessage for MySQL files', function(done) { + const commmitMsg = templates.prMessage(['data/mysql-server-options.json']); + expect(commmitMsg).to.equal('π€ [MySQL] updates'); + done(); + }); + test('prMessage for MySQL files and merged', function(done) { + const commmitMsg = templates.prMessage([ + 'dist/merged-raw.json', + 'dist/merged-raw.md', + 'dist/merged-slim.json', + 'dist/merged-ultraslim.json', + 'dist/merged-ultraslim.php', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('π€ [MySQL] updates'); + done(); + }); + test('prMessage for MySQL files and others', function(done) { + const commmitMsg = templates.prMessage([ + 'a.json', + 'ab/cd/ef.json', + 'README.md', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('π€ [MySQL] updates π¨π¨'); + done(); + }); + test('prMessage for MySQL files and others and merged', function(done) { + const commmitMsg = templates.prMessage([ + 'dist/merged-raw.json', + 'dist/merged-raw.md', + 'dist/merged-slim.json', + 'dist/merged-ultraslim.json', + 'dist/merged-ultraslim.php', + 'a.json', + 'ab/cd/ef.json', + 'README.md', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('π€ [MySQL] updates π¨π¨'); + done(); + }); + test('prMessage for MySQL and MariaDB files', function(done) { + const commmitMsg = templates.prMessage([ + 'data/mariadb-aria-server-status-variables.json', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('π€ [MariaDB] && [MySQL] updates'); + done(); + }); + test('prMessage for MySQL and MariaDB files and merged', function(done) { + const commmitMsg = templates.prMessage([ + 'dist/merged-raw.json', + 'dist/merged-raw.md', + 'dist/merged-slim.json', + 'dist/merged-ultraslim.json', + 'dist/merged-ultraslim.php', + 'data/mariadb-aria-server-status-variables.json', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('π€ [MariaDB] && [MySQL] updates'); + done(); + }); + test('prMessage for MySQL and MariaDB files and others', function(done) { + const commmitMsg = templates.prMessage([ + 'a.json', + 'ab/cd/ef.json', + 'README.md', + 'data/mariadb-aria-server-status-variables.json', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('π€ [MariaDB] && [MySQL] updates π¨π¨'); + done(); + }); + }); + suite('commit message', function() { + test('commitMessage for lambda files', function(done) { + const commmitMsg = templates.commitMessage(['a.json', 'ab/cd/ef.json', 'README.md']); + expect(commmitMsg).to.equal('update: π€ Some updates π€'); + done(); + }); + test('commitMessage for MariaDB files', function(done) { + const commmitMsg = templates.commitMessage(['data/mariadb-aria-server-status-variables.json']); + expect(commmitMsg).to.equal('update: [MariaDB] updates'); + done(); + }); + test('commitMessage for MariaDB files and others', function(done) { + const commmitMsg = templates.commitMessage([ + 'a.json', + 'ab/cd/ef.json', + 'README.md', + 'data/mariadb-aria-server-status-variables.json', + ]); + expect(commmitMsg).to.equal('update: [MariaDB] updates and other changes'); + done(); + }); + test('commitMessage for MySQL files', function(done) { + const commmitMsg = templates.commitMessage(['data/mysql-server-options.json']); + expect(commmitMsg).to.equal('update: [MySQL] updates'); + done(); + }); + test('commitMessage for MySQL files and others', function(done) { + const commmitMsg = templates.commitMessage([ + 'a.json', + 'ab/cd/ef.json', + 'README.md', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('update: [MySQL] updates and other changes'); + done(); + }); + test('commitMessage for MySQL and MariaDB files', function(done) { + const commmitMsg = templates.commitMessage([ + 'data/mariadb-aria-server-status-variables.json', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('update: [MariaDB] && [MySQL] updates'); + done(); + }); + test('commitMessage for MySQL and MariaDB files and others', function(done) { + const commmitMsg = templates.commitMessage([ + 'a.json', + 'ab/cd/ef.json', + 'README.md', + 'data/mariadb-aria-server-status-variables.json', + 'data/mysql-server-options.json', + ]); + expect(commmitMsg).to.equal('update: [MariaDB] && [MySQL] updates and other changes'); + done(); + }); + }); + suite('pr', function() { + test('prContent', function(done) { + const prContent = templates.prContent([ + 'a.json', + 'ab/cd/ef.json', + 'data/mariadb-aria-server-status-variables.json', + 'dist/merged-raw.json', + 'dist/merged-raw.md', + 'dist/merged-slim.json', + 'dist/merged-ultraslim.json', + 'dist/merged-ultraslim.php', + 'data/mysql-server-options.json', + 'README.md', + ]); + expect(prContent).to.equal( + 'Dear human π», after running my task the following files where updated:\n- `a.json` π½\n- `ab/cd/ef.json` π½\n- `data/mariadb-aria-server-status-variables.json` π³\n- `dist/merged-raw.json` π¦\n- `dist/merged-raw.md` π¦\n- `dist/merged-slim.json` π¦\n- `dist/merged-ultraslim.json` π¦\n- `dist/merged-ultraslim.php` π¦\n- `data/mysql-server-options.json` π¬\n- `README.md` π½\n' + ); + done(); + }); + test('prContent one file', function(done) { + const prContent = templates.prContent(['README.md']); + expect(prContent).to.equal( + 'Dear human π», after running my task the following file was updated:\n- `README.md` π½\n' + ); + done(); + }); + test('prBranch', function(done) { + const prBranch = templates.prBranch([]); + expect(prBranch).to.match(/^refs\/heads\/update\/[0-9]{13}$/); + done(); + }); + }); +}; |
