Skip to content

Commit 800a8e6

Browse files
committed
Updates documentation URL and adds since tag
Updates the documentation URL to reflect the latest PostgreSQL documentation (version 17). Adds a `@since` tag to indicate the version in which these functions were introduced. Minor corrections to tests
1 parent a456d1e commit 800a8e6

File tree

12 files changed

+85
-40
lines changed

12 files changed

+85
-40
lines changed

src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToChar.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
/**
88
* Implementation of PostgreSQL to_char().
99
*
10-
* @see https://www.postgresql.org/docs/current/functions-formatting.html
10+
* @see https://www.postgresql.org/docs/17/functions-formatting.html
11+
* @since 3.3.0
1112
*/
1213
class ToChar extends BaseFunction
1314
{

src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToDate.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
/**
88
* Implementation of PostgreSQL to_date().
99
*
10-
* @see https://www.postgresql.org/docs/current/functions-formatting.html
10+
* @see https://www.postgresql.org/docs/17/functions-formatting.html
11+
* @since 3.3.0
1112
*/
1213
class ToDate extends BaseFunction
1314
{

src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToNumber.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
/**
88
* Implementation of PostgreSQL to_number().
99
*
10-
* @see https://www.postgresql.org/docs/current/functions-formatting.html
10+
* @see https://www.postgresql.org/docs/17/functions-formatting.html
11+
* @since 3.3.0
1112
*/
1213
class ToNumber extends BaseFunction
1314
{

src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTimestamp.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
/**
88
* Implementation of PostgreSQL to_timestamp().
99
*
10-
* @see https://www.postgresql.org/docs/current/functions-formatting.html
10+
* @see https://www.postgresql.org/docs/17/functions-formatting.html
11+
* @since 3.3.0
1112
*/
1213
class ToTimestamp extends BaseFunction
1314
{

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToCharTest.php

Lines changed: 56 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
use Doctrine\ORM\Query\QueryException;
99
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToChar;
1010
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToTimestamp;
11+
use Tests\Integration\MartinGeorgiev\TestCase;
1112

12-
class ToCharTest extends DateTestCase
13+
class ToCharTest extends TestCase
1314
{
1415
protected function setUp(): void
1516
{
1617
parent::setUp();
17-
$this->createSimpleNumericTableWithDateFixture();
18+
$this->createContainsDatesTableWithFixture();
19+
$this->createContainsNumericsTableWithFixture();
1820
}
1921

2022
protected function getStringFunctions(): array
@@ -55,65 +57,96 @@ public function test_tochar_for_numeric_literal(): void
5557

5658
public function test_tochar_for_numeric_literal_negative(): void
5759
{
58-
$dql = "SELECT to_char(125.80, '999D99S') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1";
60+
$dql = "SELECT to_char(-125.80, '999D99S') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1";
5961
$result = $this->executeDqlQuery($dql);
60-
static::assertSame('125.80+', $result[0]['result']);
62+
static::assertSame('125.80-', $result[0]['result']);
6163
}
6264

63-
public function test_tochar_with_timestamp_function(): void
65+
public function test_tochar_with_subfunction(): void
6466
{
6567
$dql = "SELECT to_char(to_timestamp('05 Dec 2000 at 11:55 and 32 seconds', 'DD Mon YYYY tt HH24:MI ttt SS ttttttt'), 'HH24:MI:SS') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1";
6668
$result = $this->executeDqlQuery($dql);
6769
static::assertSame('11:55:32', $result[0]['result']);
6870
}
6971

70-
public function test_todate_with_invalid_input(): void
72+
public function test_todate_throws_with_invalid_input(): void
7173
{
7274
$this->expectException(QueryException::class);
7375
$dql = "SELECT to_date('invalid_date', 'DD Mon YYYY') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";
7476
$this->executeDqlQuery($dql);
7577
}
7678

77-
public function test_todate_with_invalid_format(): void
79+
public function test_todate_throws_with_invalid_format(): void
7880
{
7981
$this->expectException(Exception::class);
8082
$dql = "SELECT to_char(t.decimal1, 'invalid_format') FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1";
8183
$this->executeDqlQuery($dql);
8284
}
8385

84-
public function test_tochar_invalid_input(): void
86+
public function test_tochar_throws_with_unsupported_null_input(): void
8587
{
8688
$this->expectException(QueryException::class);
8789
$dql = "SELECT to_char(NULL, '999D99S') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1";
8890
$this->executeDqlQuery($dql);
8991
}
9092

91-
protected function createSimpleNumericTableWithDateFixture(): void
93+
private function createContainsDatesTableWithFixture(): void
94+
{
95+
$tableName = 'containsdates';
96+
97+
$this->createTestSchema();
98+
$this->dropTestTableIfItExists($tableName);
99+
100+
$fullTableName = \sprintf('%s.%s', self::DATABASE_SCHEMA, $tableName);
101+
$sql = \sprintf('
102+
CREATE TABLE %s (
103+
id SERIAL PRIMARY KEY,
104+
date1 DATE,
105+
date2 DATE,
106+
datetime1 TIMESTAMP,
107+
datetime2 TIMESTAMP,
108+
time1 TIME,
109+
time2 TIME,
110+
datetimetz1 TIMESTAMPTZ,
111+
datetimetz2 TIMESTAMPTZ,
112+
dateinterval1 INTERVAL
113+
)
114+
', $fullTableName);
115+
116+
$this->connection->executeStatement($sql);
117+
118+
$sql = \sprintf('
119+
INSERT INTO %s.containsdates (date1, date2, datetime1, datetime2, time1, time2, datetimetz1, datetimetz2, dateinterval1) VALUES
120+
(\'2023-06-15\', \'2023-06-16\', \'2023-06-15 10:30:00\', \'2023-06-16 11:45:00\', \'10:30:00\', \'11:45:00\', \'2023-06-15 10:30:00+00\', \'2023-06-16 11:45:00+00\', \'15h 2m 12s\')
121+
', self::DATABASE_SCHEMA);
122+
$this->connection->executeStatement($sql);
123+
}
124+
125+
private function createContainsNumericsTableWithFixture(): void
92126
{
93127
$tableName = 'containsnumerics';
94128

95129
$this->dropTestTableIfItExists($tableName);
96130

97131
$fullTableName = \sprintf('%s.%s', self::DATABASE_SCHEMA, $tableName);
98-
$sql = \sprintf(
99-
'
132+
$sql = \sprintf('
100133
CREATE TABLE %s (
101-
id serial PRIMARY KEY,
102-
decimal1 DECIMAL
134+
id SERIAL PRIMARY KEY,
135+
integer1 INTEGER,
136+
integer2 INTEGER,
137+
bigint1 BIGINT,
138+
bigint2 BIGINT,
139+
decimal1 DECIMAL,
140+
decimal2 DECIMAL
103141
)
104-
',
105-
$fullTableName
106-
);
142+
', $fullTableName);
107143

108144
$this->connection->executeStatement($sql);
109145

110-
$sql = \sprintf(
111-
'
112-
INSERT INTO %s.containsnumerics (decimal1) VALUES
113-
(-125.8)
114-
',
115-
self::DATABASE_SCHEMA
116-
);
146+
$sql = \sprintf('
147+
INSERT INTO %s.containsnumerics (integer1, integer2, bigint1, bigint2, decimal1, decimal2) VALUES
148+
(10, 20, 1000, 2000, -125.8, 20.5)
149+
', self::DATABASE_SCHEMA);
117150
$this->connection->executeStatement($sql);
118151
}
119152
}

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToDateTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function test_todate(): void
2424
static::assertSame('2000-12-05', $result[0]['result']);
2525
}
2626

27-
public function test_todate_with_invalid_input(): void
27+
public function test_todate_throws_with_invalid_input(): void
2828
{
2929
$this->expectException(DriverException::class);
3030
$dql = "SELECT to_date('invalid_date', 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";
@@ -38,14 +38,14 @@ public function test_todate_with_invalid_format(): void
3838
static::assertSame('2005-01-01', $result[0]['result']);
3939
}
4040

41-
public function test_todate_with_wrong_type_format(): void
41+
public function test_todate_throws_with_unsupported_format_type(): void
4242
{
4343
$this->expectException(QueryException::class);
4444
$dql = "SELECT to_date('05 Dec 2000', 1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";
4545
$this->executeDqlQuery($dql);
4646
}
4747

48-
public function test_todate_with_wrong_type_input(): void
48+
public function test_todate_throws_with_unsupported_null_input(): void
4949
{
5050
$this->expectException(QueryException::class);
5151
$dql = "SELECT to_date(null, 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToNumberTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,21 @@ public function test_tonumber(): void
2424
static::assertSame('-12454.8', $result[0]['result']);
2525
}
2626

27-
public function test_tonumber_with_invalid_format(): void
27+
public function test_tonumber_throws_with_invalid_format(): void
2828
{
2929
$this->expectException(Exception::class);
3030
$dql = "SELECT to_number('12,454.8-', 'invalid_format') FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";
3131
$this->executeDqlQuery($dql);
3232
}
3333

34-
public function test_tonumber_with_wrong_type_format(): void
34+
public function test_tonumber_throws_with_unsupported_null_format(): void
3535
{
3636
$this->expectException(QueryException::class);
3737
$dql = "SELECT to_number('12,454.8-', null) FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";
3838
$this->executeDqlQuery($dql);
3939
}
4040

41-
public function test_tonumber_with_wrong_type_input(): void
41+
public function test_tonumber_throws_with_unsupported_input_type(): void
4242
{
4343
$this->expectException(QueryException::class);
4444
$dql = "SELECT to_number(123456, '999D99S') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTimestampTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function test_totimestamp(): void
2424
static::assertSame('2000-12-05 11:55:32+00', $result[0]['result']);
2525
}
2626

27-
public function test_totimestamp_with_invalid_input(): void
27+
public function test_totimestamp_throws_with_invalid_input(): void
2828
{
2929
$this->expectException(DriverException::class);
3030
$dql = "SELECT to_timestamp('invalid_date', 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";
@@ -38,14 +38,14 @@ public function test_totimestamp_with_invalid_format(): void
3838
static::assertSame('2005-01-01 00:00:00+00', $result[0]['result']);
3939
}
4040

41-
public function test_totimestamp_with_wrong_type_format(): void
41+
public function test_totimestamp_throws_with_unsupported_format_type(): void
4242
{
4343
$this->expectException(QueryException::class);
4444
$dql = "SELECT to_timestamp('05 Dec 2000', 1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";
4545
$this->executeDqlQuery($dql);
4646
}
4747

48-
public function test_totimestamp_with_wrong_type_input(): void
48+
public function test_totimestamp_throws_with_unsupported_null_input(): void
4949
{
5050
$this->expectException(QueryException::class);
5151
$dql = "SELECT to_timestamp(null, 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1";

tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToCharTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
99
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDecimals;
1010
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToChar;
11+
use PHPUnit\Framework\Attributes\Test;
1112

1213
class ToCharTest extends TestCase
1314
{
@@ -36,7 +37,8 @@ protected function getDqlStatements(): array
3637
];
3738
}
3839

39-
public function test_missing_format_throws_exception(): void
40+
#[Test]
41+
public function throws_exception_when_argument_missing(): void
4042
{
4143
$this->expectException(QueryException::class);
4244

tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToDateTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Doctrine\ORM\Query\QueryException;
88
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
99
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToDate;
10+
use PHPUnit\Framework\Attributes\Test;
1011

1112
class ToDateTest extends TestCase
1213
{
@@ -31,7 +32,8 @@ protected function getDqlStatements(): array
3132
];
3233
}
3334

34-
public function test_missing_format_throws_exception(): void
35+
#[Test]
36+
public function throws_exception_when_argument_missing(): void
3537
{
3638
$this->expectException(QueryException::class);
3739

0 commit comments

Comments
 (0)