Add a helper function to create new table
[MAILPOET-4835]
This commit is contained in:
@@ -5,6 +5,15 @@ namespace MailPoet\Migrations;
|
|||||||
use MailPoet\Config\Env;
|
use MailPoet\Config\Env;
|
||||||
use MailPoet\Migrator\Migration;
|
use MailPoet\Migrator\Migration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The "created_at" column must be NULL in some tables to avoid "there can be only one
|
||||||
|
* TIMESTAMP column with CURRENT_TIMESTAMP" error on MySQL version < 5.6.5 that occurs
|
||||||
|
* even when other timestamp is simply "NOT NULL".
|
||||||
|
*
|
||||||
|
* Additionally, having multiple timestamp columns with "NOT NULL" seems to produce the
|
||||||
|
* following error in some SQL modes:
|
||||||
|
* SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'updated_at'"
|
||||||
|
*/
|
||||||
class Migration_20221110_151621 extends Migration {
|
class Migration_20221110_151621 extends Migration {
|
||||||
public function run(): void {
|
public function run(): void {
|
||||||
$prefix = Env::$dbPrefix;
|
$prefix = Env::$dbPrefix;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Migrator;
|
namespace MailPoet\Migrator;
|
||||||
|
|
||||||
|
use MailPoet\Config\Env;
|
||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Connection;
|
use MailPoetVendor\Doctrine\DBAL\Connection;
|
||||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||||
@@ -25,4 +26,15 @@ abstract class Migration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract public function run(): void;
|
abstract public function run(): void;
|
||||||
|
|
||||||
|
protected function createTable(string $tableName, array $attributes): void {
|
||||||
|
$prefix = Env::$dbPrefix;
|
||||||
|
$charsetCollate = Env::$dbCharsetCollate;
|
||||||
|
$sql = implode(",\n", $attributes);
|
||||||
|
$this->connection->executeStatement("
|
||||||
|
CREATE TABLE IF NOT EXISTS {$prefix}{$tableName} (
|
||||||
|
$sql
|
||||||
|
) {$charsetCollate};
|
||||||
|
");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,15 +16,6 @@ use MailPoet\Settings\SettingsRepository;
|
|||||||
use MailPoet\Subscription\Captcha;
|
use MailPoet\Subscription\Captcha;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
/**
|
|
||||||
* The "created_at" column must be NULL in some tables to avoid "there can be only one
|
|
||||||
* TIMESTAMP column with CURRENT_TIMESTAMP" error on MySQL version < 5.6.5 that occurs
|
|
||||||
* even when other timestamp is simply "NOT NULL".
|
|
||||||
*
|
|
||||||
* Additionally, having multiple timestamp columns with "NOT NULL" seems to produce the
|
|
||||||
* following error in some SQL modes:
|
|
||||||
* SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'updated_at'"
|
|
||||||
*/
|
|
||||||
class SetupTest extends \MailPoetTest {
|
class SetupTest extends \MailPoetTest {
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
|
Reference in New Issue
Block a user