Add a helper function to create new table

[MAILPOET-4835]
This commit is contained in:
Jan Jakes
2022-11-21 09:35:23 +01:00
committed by Aschepikov
parent 5598f0af19
commit d1df2d4f42
3 changed files with 21 additions and 9 deletions

View File

@@ -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;

View File

@@ -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};
");
}
} }

View File

@@ -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();