From a1ec78bf0dc93d0e05e5f066f1949dc3baecea06 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 14:44:51 +0200 Subject: Adding upstream version 0.20.0. Signed-off-by: Daniel Baumann --- vendor/gipfl/db-migration/src/Migration.php | 73 +++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 vendor/gipfl/db-migration/src/Migration.php (limited to 'vendor/gipfl/db-migration/src/Migration.php') 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 @@ +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; + } +} -- cgit v1.2.3