From 171e546afe12df90e075c8709d26d56beff26f35 Mon Sep 17 00:00:00 2001 From: Marko Korhonen Date: Mon, 20 Jan 2025 09:30:20 +0200 Subject: [PATCH] Use env SQL_MODE to set it forcefully --- README.md | 15 +++++++++++++++ src/DumpSettings.php | 8 +++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e6e8b51b..42bed55d 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,21 @@ $dumper->setTableLimits([ 'users' => [20, 10], //MySql query equivalent "... LIMIT 20 OFFSET 10" ]); ``` + +## SQL mode + +Environment variable `SQL_MODE` can be used to set it forcefully e.g.: + +```dotenv +SQL_MODE=REAL_AS_FLOAT,PIPES_AS_CONCAT,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,STRICT_ALL_TABLES +``` + +This will do basically following: + +```php +SET SESSION sql_mode='" . getenv('SQL_MODE') . "'"; +``` + ## Dump Settings Dump settings can be changed from default values with 4th argument for Mysqldump constructor: diff --git a/src/DumpSettings.php b/src/DumpSettings.php index 5b003ac9..01a944d5 100644 --- a/src/DumpSettings.php +++ b/src/DumpSettings.php @@ -45,7 +45,7 @@ class DumpSettings 'skip-definer' => false, 'where' => '', /* deprecated */ - 'disable-foreign-keys-check' => true + 'disable-foreign-keys-check' => true, ]; private array $settings; @@ -62,6 +62,12 @@ public function __construct(array $settings) $this->settings['init_commands'][] = "SET TIME_ZONE='+00:00'"; } + $sqlMode = getenv('SQL_MODE') ?? null; + + if ($sqlMode && is_string($sqlMode)) { + $this->settings['init_commands'][] = "SET SESSION sql_mode='" . $sqlMode . "'"; + } + $diff = array_diff(array_keys($this->settings), array_keys(self::$defaults)); if (count($diff) > 0) {