From 9bbc731b25e7b97650614c45d0871361c07b04fa Mon Sep 17 00:00:00 2001 From: k-holy Date: Wed, 5 Apr 2023 14:08:50 +0900 Subject: [PATCH] =?UTF-8?q?DateTimeImmutable=E3=81=B8=E3=81=AE=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Adapter/Mysql/MysqlParameterBuilder.php | 6 ++--- src/Adapter/Sqlite/SqliteParameterBuilder.php | 4 ++-- .../Mysql/MysqlParameterBuilderTest.php | 24 +++++++++++++++++++ .../Sqlite/SqliteParameterBuilderTest.php | 16 +++++++++++++ 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/Adapter/Mysql/MysqlParameterBuilder.php b/src/Adapter/Mysql/MysqlParameterBuilder.php index 2900251..2969c88 100644 --- a/src/Adapter/Mysql/MysqlParameterBuilder.php +++ b/src/Adapter/Mysql/MysqlParameterBuilder.php @@ -170,7 +170,7 @@ public function toDate(mixed $value): string } // DateTime - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("STR_TO_DATE('%s', '%s')", $value->format(sprintf('Y%sm%sd', self::$dateDelimiter, @@ -258,7 +258,7 @@ public function toTimestamp(mixed $value): string $value->setTimezone(new \DateTimeZone(date_default_timezone_get())); } - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("STR_TO_DATE('%s', '%s')", $value->format(sprintf('Y%sm%sd%sH%si%ss', self::$dateDelimiter, @@ -360,7 +360,7 @@ public function toTime(mixed $value): string } // DateTime - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("'%s'", $value->format(sprintf('H%si%ss', self::$timeDelimiter, self::$timeDelimiter diff --git a/src/Adapter/Sqlite/SqliteParameterBuilder.php b/src/Adapter/Sqlite/SqliteParameterBuilder.php index fbe654b..a69f87f 100644 --- a/src/Adapter/Sqlite/SqliteParameterBuilder.php +++ b/src/Adapter/Sqlite/SqliteParameterBuilder.php @@ -148,7 +148,7 @@ public function toDate(mixed $value): string // DateTime // SQLiteの日付関数は固定書式 - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("date('%s')", $value->format('Y-m-d')); } @@ -218,7 +218,7 @@ public function toTimestamp(mixed $value): string // DateTime // SQLiteの日付関数は固定書式 - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return sprintf("datetime('%s')", $value->format('Y-m-d H:i:s')); } diff --git a/tests/Volcanus/QueryBuilder/Test/Adapter/Mysql/MysqlParameterBuilderTest.php b/tests/Volcanus/QueryBuilder/Test/Adapter/Mysql/MysqlParameterBuilderTest.php index a9ef687..16599ef 100644 --- a/tests/Volcanus/QueryBuilder/Test/Adapter/Mysql/MysqlParameterBuilderTest.php +++ b/tests/Volcanus/QueryBuilder/Test/Adapter/Mysql/MysqlParameterBuilderTest.php @@ -363,6 +363,14 @@ public function testToDateForDateTime() $this->assertEquals("STR_TO_DATE('2013-01-02', '%Y-%m-%d')", $builder->ToDate(new \DateTime('2013-01-02'))); } + public function testToDateForDateTimeImmutable() + { + $builder = new MysqlParameterBuilder( + new PdoDriver($this->getPdo(), new MysqlMetaDataProcessor()) + ); + $this->assertEquals("STR_TO_DATE('2013-01-02', '%Y-%m-%d')", $builder->ToDate(new \DateTimeImmutable('2013-01-02'))); + } + public function testToDateForUnixTimestamp() { $builder = new MysqlParameterBuilder( @@ -490,6 +498,14 @@ public function testToTimestampForDateTime() $this->assertEquals("STR_TO_DATE('2013-01-02 03:04:05', '%Y-%m-%d %H:%i:%s')", $builder->toTimestamp(new \DateTime('2013-01-02 03:04:05'))); } + public function testToTimestampForDateTimeImmutable() + { + $builder = new MysqlParameterBuilder( + new PdoDriver($this->getPdo(), new MysqlMetaDataProcessor()) + ); + $this->assertEquals("STR_TO_DATE('2013-01-02 03:04:05', '%Y-%m-%d %H:%i:%s')", $builder->toTimestamp(new \DateTimeImmutable('2013-01-02 03:04:05'))); + } + public function testToTimestampForUnixTimestamp() { $builder = new MysqlParameterBuilder( @@ -596,6 +612,14 @@ public function testToTimeForDateTime() $this->assertEquals("'03:04:05'", $builder->toTime(new \DateTime('2013-01-02 03:04:05'))); } + public function testToTimeForDateTimeImmutable() + { + $builder = new MysqlParameterBuilder( + new PdoDriver($this->getPdo(), new MysqlMetaDataProcessor()) + ); + $this->assertEquals("'03:04:05'", $builder->toTime(new \DateTimeImmutable('2013-01-02 03:04:05'))); + } + public function testToTimeForUnixTimestamp() { $builder = new MysqlParameterBuilder( diff --git a/tests/Volcanus/QueryBuilder/Test/Adapter/Sqlite/SqliteParameterBuilderTest.php b/tests/Volcanus/QueryBuilder/Test/Adapter/Sqlite/SqliteParameterBuilderTest.php index 25a38d3..a4c3f65 100644 --- a/tests/Volcanus/QueryBuilder/Test/Adapter/Sqlite/SqliteParameterBuilderTest.php +++ b/tests/Volcanus/QueryBuilder/Test/Adapter/Sqlite/SqliteParameterBuilderTest.php @@ -285,6 +285,14 @@ public function testToDateForDateTime() $this->assertEquals("date('2013-01-02')", $builder->ToDate(new \DateTime('2013-01-02'))); } + public function testToDateForDateTimeImmutable() + { + $builder = new SqliteParameterBuilder( + new PdoDriver($this->getPdo(), new SqliteMetaDataProcessor()) + ); + $this->assertEquals("date('2013-01-02')", $builder->ToDate(new \DateTimeImmutable('2013-01-02'))); + } + public function testToDateForUnixTimestamp() { $builder = new SqliteParameterBuilder( @@ -397,6 +405,14 @@ public function testToTimestampForDateTime() $this->assertEquals("datetime('2013-01-02 03:04:05')", $builder->toTimestamp(new \DateTime('2013-01-02 03:04:05'))); } + public function testToTimestampForDateTimeImmutable() + { + $builder = new SqliteParameterBuilder( + new PdoDriver($this->getPdo(), new SqliteMetaDataProcessor()) + ); + $this->assertEquals("datetime('2013-01-02 03:04:05')", $builder->toTimestamp(new \DateTimeImmutable('2013-01-02 03:04:05'))); + } + public function testToTimestampForUnixTimestamp() { $builder = new SqliteParameterBuilder(