From 176b1a88958c9c6e327eceb9cbb22c22b776bfb6 Mon Sep 17 00:00:00 2001 From: Patrik Votocek Date: Mon, 24 Mar 2014 15:37:25 +0100 Subject: [PATCH] Add support for DateTimeInterface --- dibi/drivers/DibiFirebirdDriver.php | 2 +- dibi/drivers/DibiMsSql2005Driver.php | 2 +- dibi/drivers/DibiMsSqlDriver.php | 2 +- dibi/drivers/DibiMySqlDriver.php | 2 +- dibi/drivers/DibiMySqliDriver.php | 2 +- dibi/drivers/DibiOdbcDriver.php | 2 +- dibi/drivers/DibiOracleDriver.php | 2 +- dibi/drivers/DibiPdoDriver.php | 2 +- dibi/drivers/DibiPostgreDriver.php | 2 +- dibi/drivers/DibiSqlite3Driver.php | 2 +- dibi/drivers/DibiSqliteDriver.php | 2 +- dibi/libs/DibiTranslator.php | 4 ++-- .../DibiTranslator.DateTimeInterface.phpt | 22 +++++++++++++++++++ 13 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 tests/dibi/DibiTranslator.DateTimeInterface.phpt diff --git a/dibi/drivers/DibiFirebirdDriver.php b/dibi/drivers/DibiFirebirdDriver.php index c9b64d11..f27fbe83 100644 --- a/dibi/drivers/DibiFirebirdDriver.php +++ b/dibi/drivers/DibiFirebirdDriver.php @@ -278,7 +278,7 @@ class DibiFirebirdDriver extends DibiObject implements IDibiDriver, IDibiResultD case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? "'Y-m-d H:i:s'" : "'Y-m-d'"); diff --git a/dibi/drivers/DibiMsSql2005Driver.php b/dibi/drivers/DibiMsSql2005Driver.php index 5ea74823..23731cc8 100644 --- a/dibi/drivers/DibiMsSql2005Driver.php +++ b/dibi/drivers/DibiMsSql2005Driver.php @@ -234,7 +234,7 @@ class DibiMsSql2005Driver extends DibiObject implements IDibiDriver, IDibiResult case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? "'Y-m-d H:i:s'" : "'Y-m-d'"); diff --git a/dibi/drivers/DibiMsSqlDriver.php b/dibi/drivers/DibiMsSqlDriver.php index 9ba26bd2..aeae95dc 100644 --- a/dibi/drivers/DibiMsSqlDriver.php +++ b/dibi/drivers/DibiMsSqlDriver.php @@ -219,7 +219,7 @@ class DibiMsSqlDriver extends DibiObject implements IDibiDriver, IDibiResultDriv case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? "'Y-m-d H:i:s'" : "'Y-m-d'"); diff --git a/dibi/drivers/DibiMySqlDriver.php b/dibi/drivers/DibiMySqlDriver.php index 1d932240..84f0f6df 100644 --- a/dibi/drivers/DibiMySqlDriver.php +++ b/dibi/drivers/DibiMySqlDriver.php @@ -313,7 +313,7 @@ class DibiMySqlDriver extends DibiObject implements IDibiDriver, IDibiResultDriv case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? "'Y-m-d H:i:s'" : "'Y-m-d'"); diff --git a/dibi/drivers/DibiMySqliDriver.php b/dibi/drivers/DibiMySqliDriver.php index b8a1948f..c012c4af 100644 --- a/dibi/drivers/DibiMySqliDriver.php +++ b/dibi/drivers/DibiMySqliDriver.php @@ -301,7 +301,7 @@ class DibiMySqliDriver extends DibiObject implements IDibiDriver, IDibiResultDri case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? "'Y-m-d H:i:s'" : "'Y-m-d'"); diff --git a/dibi/drivers/DibiOdbcDriver.php b/dibi/drivers/DibiOdbcDriver.php index 74dcf6f8..6b00d3aa 100644 --- a/dibi/drivers/DibiOdbcDriver.php +++ b/dibi/drivers/DibiOdbcDriver.php @@ -242,7 +242,7 @@ class DibiOdbcDriver extends DibiObject implements IDibiDriver, IDibiResultDrive case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? "#m/d/Y H:i:s#" : "#m/d/Y#"); diff --git a/dibi/drivers/DibiOracleDriver.php b/dibi/drivers/DibiOracleDriver.php index 9e5b5884..53c6e3b7 100644 --- a/dibi/drivers/DibiOracleDriver.php +++ b/dibi/drivers/DibiOracleDriver.php @@ -236,7 +236,7 @@ class DibiOracleDriver extends DibiObject implements IDibiDriver, IDibiResultDri case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? $this->fmtDateTime : $this->fmtDate); diff --git a/dibi/drivers/DibiPdoDriver.php b/dibi/drivers/DibiPdoDriver.php index 9a4338f7..165a6156 100644 --- a/dibi/drivers/DibiPdoDriver.php +++ b/dibi/drivers/DibiPdoDriver.php @@ -279,7 +279,7 @@ class DibiPdoDriver extends DibiObject implements IDibiDriver, IDibiResultDriver case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? "'Y-m-d H:i:s'" : "'Y-m-d'"); diff --git a/dibi/drivers/DibiPostgreDriver.php b/dibi/drivers/DibiPostgreDriver.php index 3e66bf18..5ebcd694 100644 --- a/dibi/drivers/DibiPostgreDriver.php +++ b/dibi/drivers/DibiPostgreDriver.php @@ -294,7 +294,7 @@ class DibiPostgreDriver extends DibiObject implements IDibiDriver, IDibiResultDr case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? "'Y-m-d H:i:s'" : "'Y-m-d'"); diff --git a/dibi/drivers/DibiSqlite3Driver.php b/dibi/drivers/DibiSqlite3Driver.php index 856281da..83310b8d 100644 --- a/dibi/drivers/DibiSqlite3Driver.php +++ b/dibi/drivers/DibiSqlite3Driver.php @@ -235,7 +235,7 @@ class DibiSqlite3Driver extends DibiObject implements IDibiDriver, IDibiResultDr case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? $this->fmtDateTime : $this->fmtDate); diff --git a/dibi/drivers/DibiSqliteDriver.php b/dibi/drivers/DibiSqliteDriver.php index d9cce772..7d61e84c 100644 --- a/dibi/drivers/DibiSqliteDriver.php +++ b/dibi/drivers/DibiSqliteDriver.php @@ -240,7 +240,7 @@ class DibiSqliteDriver extends DibiObject implements IDibiDriver, IDibiResultDri case dibi::DATE: case dibi::DATETIME: - if (!$value instanceof DateTime) { + if (!$value instanceof DateTime && !$value instanceof DateTimeInterface) { $value = new DibiDateTime($value); } return $value->format($type === dibi::DATETIME ? $this->fmtDateTime : $this->fmtDate); diff --git a/dibi/libs/DibiTranslator.php b/dibi/libs/DibiTranslator.php index df933689..2d295ed4 100644 --- a/dibi/libs/DibiTranslator.php +++ b/dibi/libs/DibiTranslator.php @@ -326,7 +326,7 @@ final class DibiTranslator extends DibiObject // with modifier procession if ($modifier) { - if ($value !== NULL && !is_scalar($value) && !($value instanceof DateTime)) { // array is already processed + if ($value !== NULL && !is_scalar($value) && !$value instanceof DateTime && !$value instanceof DateTimeInterface) { // array is already processed $this->hasError = TRUE; return '**Unexpected type ' . gettype($value) . '**'; } @@ -444,7 +444,7 @@ final class DibiTranslator extends DibiObject } elseif ($value === NULL) { return 'NULL'; - } elseif ($value instanceof DateTime) { + } elseif ($value instanceof DateTime || $value instanceof DateTimeInterface) { return $this->driver->escape($value, dibi::DATETIME); } elseif ($value instanceof DibiLiteral) { diff --git a/tests/dibi/DibiTranslator.DateTimeInterface.phpt b/tests/dibi/DibiTranslator.DateTimeInterface.phpt new file mode 100644 index 00000000..b4d1610d --- /dev/null +++ b/tests/dibi/DibiTranslator.DateTimeInterface.phpt @@ -0,0 +1,22 @@ + 'sqlite3', + 'database' => ':memory:', +)); +$translator = new DibiTranslator($connection); + +$datetime = new DateTime('1978-01-23 00:00:00'); + +Assert::equal($datetime->format('U'), $translator->formatValue(new DateTime($datetime->format('c')), NULL)); +Assert::equal($datetime->format('U'), $translator->formatValue(new DateTimeImmutable($datetime->format('c')), NULL));