From 3e0d7ec68ba0ede10747e92225a27417012d00d0 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Wed, 21 Oct 2020 19:31:42 +0200 Subject: [PATCH] add db formats --- .../Database/Connection/MysqlConnection.php | 5 +++++ .../Connection/PostgresConnection.php | 5 +++++ .../Database/Connection/SQLiteConnection.php | 5 +++++ .../Connection/SqlServerConnection.php | 5 +++++ DataStorage/Database/DataMapperAbstract.php | 13 ++++++++++- DataStorage/Database/GrammarAbstract.php | 22 +++++++++++++++++++ .../Database/Query/Grammar/Grammar.php | 2 +- Utils/IO/Zip/Tar.php | 5 ++++- Utils/IO/Zip/Zip.php | 5 ++++- 9 files changed, 63 insertions(+), 4 deletions(-) diff --git a/DataStorage/Database/Connection/MysqlConnection.php b/DataStorage/Database/Connection/MysqlConnection.php index 61eb14b09..d996c0d19 100644 --- a/DataStorage/Database/Connection/MysqlConnection.php +++ b/DataStorage/Database/Connection/MysqlConnection.php @@ -48,6 +48,11 @@ final class MysqlConnection extends ConnectionAbstract $this->grammar = new MysqlGrammar(); $this->schemaGrammar = new MysqlSchemaGrammar(); + if (isset($dbdata['datetimeformat'])) { + $this->grammar->setDateTimeFormat($dbdata['datetimeformat']); + $this->schemaGrammar->setDateTimeFormat($dbdata['datetimeformat']); + } + $this->dbdata = $dbdata; } diff --git a/DataStorage/Database/Connection/PostgresConnection.php b/DataStorage/Database/Connection/PostgresConnection.php index 8e8bbca5b..b7172187a 100644 --- a/DataStorage/Database/Connection/PostgresConnection.php +++ b/DataStorage/Database/Connection/PostgresConnection.php @@ -48,6 +48,11 @@ final class PostgresConnection extends ConnectionAbstract $this->grammar = new PostgresGrammar(); $this->schemaGrammar = new PostgresSchemaGrammar(); + if (isset($dbdata['datetimeformat'])) { + $this->grammar->setDateTimeFormat($dbdata['datetimeformat']); + $this->schemaGrammar->setDateTimeFormat($dbdata['datetimeformat']); + } + $this->dbdata = $dbdata; } diff --git a/DataStorage/Database/Connection/SQLiteConnection.php b/DataStorage/Database/Connection/SQLiteConnection.php index 1d3eb8002..7281fe963 100644 --- a/DataStorage/Database/Connection/SQLiteConnection.php +++ b/DataStorage/Database/Connection/SQLiteConnection.php @@ -48,6 +48,11 @@ final class SQLiteConnection extends ConnectionAbstract $this->grammar = new SQLiteGrammar(); $this->schemaGrammar = new SQLiteSchemaGrammar(); + if (isset($dbdata['datetimeformat'])) { + $this->grammar->setDateTimeFormat($dbdata['datetimeformat']); + $this->schemaGrammar->setDateTimeFormat($dbdata['datetimeformat']); + } + $this->dbdata = $dbdata; } diff --git a/DataStorage/Database/Connection/SqlServerConnection.php b/DataStorage/Database/Connection/SqlServerConnection.php index 382069f8d..36b5444b9 100644 --- a/DataStorage/Database/Connection/SqlServerConnection.php +++ b/DataStorage/Database/Connection/SqlServerConnection.php @@ -48,6 +48,11 @@ final class SqlServerConnection extends ConnectionAbstract $this->grammar = new SqlServerGrammar(); $this->schemaGrammar = new SqlServerSchemaGrammar(); + if (isset($dbdata['datetimeformat'])) { + $this->grammar->setDateTimeFormat($dbdata['datetimeformat']); + $this->schemaGrammar->setDateTimeFormat($dbdata['datetimeformat']); + } + $this->dbdata = $dbdata; } diff --git a/DataStorage/Database/DataMapperAbstract.php b/DataStorage/Database/DataMapperAbstract.php index cd90858d6..1affa76b1 100644 --- a/DataStorage/Database/DataMapperAbstract.php +++ b/DataStorage/Database/DataMapperAbstract.php @@ -230,6 +230,17 @@ class DataMapperAbstract implements DataMapperInterface */ protected static int $relations = RelationType::ALL; + /** + * Datetime format of the database datetime + * + * This is only for the datetime stored in the database not the generated query. + * For the query check the datetime in Grammar:$datetimeFormat + * + * @var string + * @since 1.0.0 + */ + protected static string $datetimeFormat = 'Y-m-d H:i:s'; + /** * Constructor. * @@ -1064,7 +1075,7 @@ class DataMapperAbstract implements DataMapperInterface } elseif ($type === 'bool') { return (bool) $value; } elseif ($type === 'DateTime' || $type === 'DateTimeImmutable') { - return $value === null ? null : $value->format('Y-m-d H:i:s'); + return $value === null ? null : $value->format(self::$datetimeFormat); } elseif ($type === 'Json' || $value instanceof \JsonSerializable) { return (string) \json_encode($value); } elseif ($type === 'Serializable') { diff --git a/DataStorage/Database/GrammarAbstract.php b/DataStorage/Database/GrammarAbstract.php index 2234e3aac..6a54a9a08 100644 --- a/DataStorage/Database/GrammarAbstract.php +++ b/DataStorage/Database/GrammarAbstract.php @@ -86,6 +86,28 @@ abstract class GrammarAbstract 'MIN(', ]; + /** + * Datetime format. + * + * @var string + * @since 1.0.0 + */ + protected string $datetimeFormat = 'Y-m-d H:i:s'; + + /** + * Set the datetime format + * + * @param string $format Datetime format + * + * @return void + * + * @since 1.0.0 + */ + public function setDateTimeFormat(string $format) : void + { + $this->datetimeFormat = $format; + } + /** * Compile to query. * diff --git a/DataStorage/Database/Query/Grammar/Grammar.php b/DataStorage/Database/Query/Grammar/Grammar.php index 701937ba5..45e69aec9 100644 --- a/DataStorage/Database/Query/Grammar/Grammar.php +++ b/DataStorage/Database/Query/Grammar/Grammar.php @@ -340,7 +340,7 @@ class Grammar extends GrammarAbstract return '(' . \rtrim($values, ', ') . ')'; } elseif ($value instanceof \DateTime) { - return $query->quote($value->format('Y-m-d H:i:s')); + return $query->quote($value->format($this->datetimeFormat)); } elseif ($value === null) { return 'NULL'; } elseif (\is_bool($value)) { diff --git a/Utils/IO/Zip/Tar.php b/Utils/IO/Zip/Tar.php index bd4f0c339..62a859792 100644 --- a/Utils/IO/Zip/Tar.php +++ b/Utils/IO/Zip/Tar.php @@ -49,6 +49,9 @@ class Tar implements ArchiveInterface $source = $relative; } + $source = \str_replace('\\', '/', $source); + $relative = \str_replace('\\', '/', $relative); + if (\is_dir($source)) { $files = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($source), @@ -67,7 +70,7 @@ class Tar implements ArchiveInterface $absolute = \realpath($file); $absolute = \str_replace('\\', '/', (string) $absolute); - $dir = \str_replace($source . '/', '', $relative . '/' . $absolute); + $dir = \str_replace($source . '/', '', \rtrim($relative, '/\\') . '/' . \ltrim($absolute, '/\\')); if (\is_dir($absolute)) { $tar->addEmptyDir($dir . '/'); diff --git a/Utils/IO/Zip/Zip.php b/Utils/IO/Zip/Zip.php index eba06bf01..b4f736878 100644 --- a/Utils/IO/Zip/Zip.php +++ b/Utils/IO/Zip/Zip.php @@ -54,6 +54,9 @@ class Zip implements ArchiveInterface $source = $relative; } + $source = \str_replace('\\', '/', $source); + $relative = \str_replace('\\', '/', $relative); + if (\is_dir($source)) { $files = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($source), @@ -72,7 +75,7 @@ class Zip implements ArchiveInterface $absolute = \realpath($file); $absolute = \str_replace('\\', '/', (string) $absolute); - $dir = \str_replace($source . '/', '', $relative . '/' . $absolute); + $dir = \str_replace($source . '/', '', \rtrim($relative, '/\\') . '/' . \ltrim($absolute, '/\\')); if (\is_dir($absolute)) { $zip->addEmptyDir($dir . '/');