diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-14 13:23:16 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-14 13:23:16 +0000 |
commit | 3e97c51418e6d27e9a81906f347fcb7c78e27d4f (patch) | |
tree | ee596ce1bc9840661386f96f9b8d1f919a106317 /vendor/gipfl/db-migration/src/Migration.php | |
parent | Initial commit. (diff) | |
download | icingaweb2-module-incubator-3e97c51418e6d27e9a81906f347fcb7c78e27d4f.tar.xz icingaweb2-module-incubator-3e97c51418e6d27e9a81906f347fcb7c78e27d4f.zip |
Adding upstream version 0.20.0.upstream/0.20.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/gipfl/db-migration/src/Migration.php')
-rw-r--r-- | vendor/gipfl/db-migration/src/Migration.php | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/vendor/gipfl/db-migration/src/Migration.php b/vendor/gipfl/db-migration/src/Migration.php new file mode 100644 index 0000000..2e6c586 --- /dev/null +++ b/vendor/gipfl/db-migration/src/Migration.php @@ -0,0 +1,73 @@ +<?php + +namespace gipfl\DbMigration; + +use Exception; +use gipfl\ZfDb\Adapter\Pdo\PdoAdapter as Db; +use InvalidArgumentException; +use RuntimeException; +use Zend_Db_Adapter_Pdo_Abstract as ZfDb; + +class Migration +{ + /** + * @var string + */ + protected $sql; + + /** + * @var int + */ + protected $version; + + public function __construct($version, $sql) + { + $this->version = $version; + $this->sql = $sql; + } + + /** + * @param Db|ZfDb $db + * @return $this + */ + public function apply($db) + { + if (! ($db instanceof Db || $db instanceof ZfDb)) { + throw new InvalidArgumentException('$db must be an valid Zend_Db PDO adapter'); + } + // TODO: this is fragile and depends on accordingly written schema files: + $sql = preg_replace('/-- .*$/m', '', $this->sql); + $queries = preg_split( + '/[\n\s\t]*;[\n\s\t]+/s', + $sql, + -1, + PREG_SPLIT_NO_EMPTY + ); + + if (empty($queries)) { + throw new RuntimeException(sprintf( + 'Migration %d has no queries', + $this->version + )); + } + + try { + foreach ($queries as $query) { + if (preg_match('/^(?:OPTIMIZE|EXECUTE) /i', $query)) { + $db->query($query); + } else { + $db->exec($query); + } + } + } catch (Exception $e) { + throw new RuntimeException(sprintf( + 'Migration %d failed (%s) while running %s', + $this->version, + $e->getMessage(), + $query + )); + } + + return $this; + } +} |