diff --git a/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsNumerics.php b/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsNumerics.php new file mode 100644 index 00000000..c44676be --- /dev/null +++ b/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsNumerics.php @@ -0,0 +1,30 @@ + */ -class Daterange extends BaseFunction +class Daterange extends BaseVariadicFunction { - protected function customizeFunction(): void + protected function getFunctionName(): string { - $this->setFunctionPrototype('daterange(%s, %s)'); - $this->addNodeMapping('StringPrimary'); - $this->addNodeMapping('StringPrimary'); + return 'daterange'; + } + + /** + * @return array + */ + protected function getNodeMappingPattern(): array + { + return ['StringPrimary']; + } + + protected function getMinArgumentCount(): int + { + return 2; + } + + protected function getMaxArgumentCount(): int + { + return 3; } } diff --git a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4range.php b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4range.php index 914acc27..0640aafe 100644 --- a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4range.php +++ b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4range.php @@ -12,12 +12,28 @@ * * @author Martin Georgiev */ -class Int4range extends BaseFunction +class Int4range extends BaseVariadicFunction { - protected function customizeFunction(): void + protected function getFunctionName(): string { - $this->setFunctionPrototype('int4range(%s, %s)'); - $this->addNodeMapping('StringPrimary'); - $this->addNodeMapping('StringPrimary'); + return 'int4range'; + } + + /** + * @return array + */ + protected function getNodeMappingPattern(): array + { + return ['StringPrimary']; + } + + protected function getMinArgumentCount(): int + { + return 2; + } + + protected function getMaxArgumentCount(): int + { + return 3; } } diff --git a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8range.php b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8range.php index 17ff66e4..24ee8f91 100644 --- a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8range.php +++ b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8range.php @@ -12,12 +12,28 @@ * * @author Martin Georgiev */ -class Int8range extends BaseFunction +class Int8range extends BaseVariadicFunction { - protected function customizeFunction(): void + protected function getFunctionName(): string { - $this->setFunctionPrototype('int8range(%s, %s)'); - $this->addNodeMapping('StringPrimary'); - $this->addNodeMapping('StringPrimary'); + return 'int8range'; + } + + /** + * @return array + */ + protected function getNodeMappingPattern(): array + { + return ['StringPrimary']; + } + + protected function getMinArgumentCount(): int + { + return 2; + } + + protected function getMaxArgumentCount(): int + { + return 3; } } diff --git a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Numrange.php b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Numrange.php index 6c0a22c4..92ccf4b4 100644 --- a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Numrange.php +++ b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Numrange.php @@ -12,12 +12,28 @@ * * @author Martin Georgiev */ -class Numrange extends BaseFunction +class Numrange extends BaseVariadicFunction { - protected function customizeFunction(): void + protected function getFunctionName(): string { - $this->setFunctionPrototype('numrange(%s, %s)'); - $this->addNodeMapping('StringPrimary'); - $this->addNodeMapping('StringPrimary'); + return 'numrange'; + } + + /** + * @return array + */ + protected function getNodeMappingPattern(): array + { + return ['StringPrimary']; + } + + protected function getMinArgumentCount(): int + { + return 2; + } + + protected function getMaxArgumentCount(): int + { + return 3; } } diff --git a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Tsrange.php b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Tsrange.php index 5e2e2b33..2cfd5c8d 100644 --- a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Tsrange.php +++ b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Tsrange.php @@ -12,12 +12,28 @@ * * @author Martin Georgiev */ -class Tsrange extends BaseFunction +class Tsrange extends BaseVariadicFunction { - protected function customizeFunction(): void + protected function getFunctionName(): string { - $this->setFunctionPrototype('tsrange(%s, %s)'); - $this->addNodeMapping('StringPrimary'); - $this->addNodeMapping('StringPrimary'); + return 'tsrange'; + } + + /** + * @return array + */ + protected function getNodeMappingPattern(): array + { + return ['StringPrimary']; + } + + protected function getMinArgumentCount(): int + { + return 2; + } + + protected function getMaxArgumentCount(): int + { + return 3; } } diff --git a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Tstzrange.php b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Tstzrange.php index 0289dab0..f2eecef8 100644 --- a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Tstzrange.php +++ b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Tstzrange.php @@ -12,12 +12,28 @@ * * @author Martin Georgiev */ -class Tstzrange extends BaseFunction +class Tstzrange extends BaseVariadicFunction { - protected function customizeFunction(): void + protected function getFunctionName(): string { - $this->setFunctionPrototype('tstzrange(%s, %s)'); - $this->addNodeMapping('StringPrimary'); - $this->addNodeMapping('StringPrimary'); + return 'tstzrange'; + } + + /** + * @return array + */ + protected function getNodeMappingPattern(): array + { + return ['StringPrimary']; + } + + protected function getMinArgumentCount(): int + { + return 2; + } + + protected function getMaxArgumentCount(): int + { + return 3; } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateTestCase.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateTestCase.php index 5c38ee6f..b97e46ec 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateTestCase.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateTestCase.php @@ -31,7 +31,9 @@ protected function createTestTableForDateFixture(): void datetime1 TIMESTAMP, datetime2 TIMESTAMP, time1 TIME, - time2 TIME + time2 TIME, + datetimetz1 TIMESTAMPTZ, + datetimetz2 TIMESTAMPTZ ) ', $fullTableName); @@ -41,8 +43,8 @@ protected function createTestTableForDateFixture(): void protected function insertTestDataForDateFixture(): void { $sql = \sprintf(' - INSERT INTO %s.containsdates (date1, date2, datetime1, datetime2, time1, time2) VALUES - (\'2023-06-15\', \'2023-06-16\', \'2023-06-15 10:30:00\', \'2023-06-16 11:45:00\', \'10:30:00\', \'11:45:00\') + INSERT INTO %s.containsdates (date1, date2, datetime1, datetime2, time1, time2, datetimetz1, datetimetz2) VALUES + (\'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\') ', self::DATABASE_SCHEMA); $this->connection->executeStatement($sql); } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php new file mode 100644 index 00000000..a2c86071 --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php @@ -0,0 +1,37 @@ + Daterange::class, + ]; + } + + public function test_daterange(): void + { + $dql = 'SELECT DATERANGE(t.date1, t.date2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates t WHERE t.id = 1'; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('[2023-06-15,2023-06-16)', $result[0]['result']); + } + + public function test_daterange_with_bounds(): void + { + $dql = "SELECT DATERANGE(t.date1, t.date2, '[)') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('[2023-06-15,2023-06-16)', $result[0]['result']); + } +} diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php new file mode 100644 index 00000000..b241c618 --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php @@ -0,0 +1,37 @@ + Int4range::class, + ]; + } + + public function test_int4range(): void + { + $dql = 'SELECT INT4RANGE(t.integer1, t.integer2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('[10,20)', $result[0]['result']); + } + + public function test_int4range_with_bounds(): void + { + $dql = "SELECT INT4RANGE(t.integer1, t.integer2, '[)') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('[10,20)', $result[0]['result']); + } +} diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php new file mode 100644 index 00000000..fc36f27f --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php @@ -0,0 +1,37 @@ + Int8range::class, + ]; + } + + public function test_int8range(): void + { + $dql = 'SELECT INT8RANGE(t.bigint1, t.bigint2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('[1000,2000)', $result[0]['result']); + } + + public function test_int8range_with_bounds(): void + { + $dql = "SELECT INT8RANGE(t.bigint1, t.bigint2, '[)') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('[1000,2000)', $result[0]['result']); + } +} diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumericTestCase.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumericTestCase.php new file mode 100644 index 00000000..6e5f92b3 --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumericTestCase.php @@ -0,0 +1,49 @@ +createTestTableForNumericFixture(); + $this->insertTestDataForNumericFixture(); + } + + protected function createTestTableForNumericFixture(): void + { + $tableName = 'containsnumerics'; + + $this->createTestSchema(); + $this->dropTestTableIfItExists($tableName); + + $fullTableName = \sprintf('%s.%s', self::DATABASE_SCHEMA, $tableName); + $sql = \sprintf(' + CREATE TABLE %s ( + id SERIAL PRIMARY KEY, + integer1 INTEGER, + integer2 INTEGER, + bigint1 BIGINT, + bigint2 BIGINT, + decimal1 DECIMAL, + decimal2 DECIMAL + ) + ', $fullTableName); + + $this->connection->executeStatement($sql); + } + + protected function insertTestDataForNumericFixture(): void + { + $sql = \sprintf(' + INSERT INTO %s.containsnumerics (integer1, integer2, bigint1, bigint2, decimal1, decimal2) VALUES + (10, 20, 1000, 2000, 10.5, 20.5) + ', self::DATABASE_SCHEMA); + $this->connection->executeStatement($sql); + } +} diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php new file mode 100644 index 00000000..86aaca22 --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php @@ -0,0 +1,37 @@ + Numrange::class, + ]; + } + + public function test_numrange(): void + { + $dql = 'SELECT NUMRANGE(t.decimal1, t.decimal2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('[10.5,20.5)', $result[0]['result']); + } + + public function test_numrange_with_bounds(): void + { + $dql = "SELECT NUMRANGE(t.decimal1, t.decimal2, '[)') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('[10.5,20.5)', $result[0]['result']); + } +} diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php new file mode 100644 index 00000000..8fa15dab --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php @@ -0,0 +1,37 @@ + Tsrange::class, + ]; + } + + public function test_tsrange(): void + { + $dql = 'SELECT TSRANGE(t.datetime1, t.datetime2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates t WHERE t.id = 1'; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('["2023-06-15 10:30:00","2023-06-16 11:45:00")', $result[0]['result']); + } + + public function test_tsrange_with_bounds(): void + { + $dql = "SELECT TSRANGE(t.datetime1, t.datetime2, '[)') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('["2023-06-15 10:30:00","2023-06-16 11:45:00")', $result[0]['result']); + } +} diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php new file mode 100644 index 00000000..d37c5346 --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php @@ -0,0 +1,37 @@ + Tstzrange::class, + ]; + } + + public function test_tstzrange(): void + { + $dql = 'SELECT TSTZRANGE(t.datetimetz1, t.datetimetz2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates t WHERE t.id = 1'; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('["2023-06-15 10:30:00+00","2023-06-16 11:45:00+00")', $result[0]['result']); + } + + public function test_tstzrange_with_bounds(): void + { + $dql = "SELECT TSTZRANGE(t.datetimetz1, t.datetimetz2, '[)') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertIsArray($result); + $this->assertNotEmpty($result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertSame('["2023-06-15 10:30:00+00","2023-06-16 11:45:00+00")', $result[0]['result']); + } +} diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php index 5f531fe9..3893d0dd 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php @@ -19,14 +19,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT daterange(c0_.date1, c0_.date2) AS sclr_0 FROM ContainsDates c0_', + 'basic range with default bounds' => 'SELECT daterange(c0_.date1, c0_.date2) AS sclr_0 FROM ContainsDates c0_', + 'range with explicit bounds' => "SELECT daterange(c0_.date1, c0_.date2, '[)') AS sclr_0 FROM ContainsDates c0_", ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT DATERANGE(e.date1, e.date2) FROM %s e', ContainsDates::class), + 'basic range with default bounds' => \sprintf('SELECT DATERANGE(e.date1, e.date2) FROM %s e', ContainsDates::class), + 'range with explicit bounds' => \sprintf("SELECT DATERANGE(e.date1, e.date2, '[)') FROM %s e", ContainsDates::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php index 49de6921..036e6e83 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php @@ -19,14 +19,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT int4range(c0_.integer1, c0_.integer2) AS sclr_0 FROM ContainsIntegers c0_', + 'basic range with default bounds' => 'SELECT int4range(c0_.integer1, c0_.integer2) AS sclr_0 FROM ContainsIntegers c0_', + 'range with explicit bounds' => "SELECT int4range(c0_.integer1, c0_.integer2, '[)') AS sclr_0 FROM ContainsIntegers c0_", ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT INT4RANGE(e.integer1, e.integer2) FROM %s e', ContainsIntegers::class), + 'basic range with default bounds' => \sprintf('SELECT INT4RANGE(e.integer1, e.integer2) FROM %s e', ContainsIntegers::class), + 'range with explicit bounds' => \sprintf("SELECT INT4RANGE(e.integer1, e.integer2, '[)') FROM %s e", ContainsIntegers::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php index e580d0ce..0a7dab6b 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php @@ -19,14 +19,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT int8range(c0_.integer1, c0_.integer2) AS sclr_0 FROM ContainsIntegers c0_', + 'basic range with default bounds' => 'SELECT int8range(c0_.integer1, c0_.integer2) AS sclr_0 FROM ContainsIntegers c0_', + 'range with explicit bounds' => "SELECT int8range(c0_.integer1, c0_.integer2, '[)') AS sclr_0 FROM ContainsIntegers c0_", ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT INT8RANGE(e.integer1, e.integer2) FROM %s e', ContainsIntegers::class), + 'basic range with default bounds' => \sprintf('SELECT INT8RANGE(e.integer1, e.integer2) FROM %s e', ContainsIntegers::class), + 'range with explicit bounds' => \sprintf("SELECT INT8RANGE(e.integer1, e.integer2, '[)') FROM %s e", ContainsIntegers::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php index ea702025..c01eb56a 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php @@ -19,14 +19,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT numrange(c0_.decimal1, c0_.decimal2) AS sclr_0 FROM ContainsDecimals c0_', + 'basic range with default bounds' => 'SELECT numrange(c0_.decimal1, c0_.decimal2) AS sclr_0 FROM ContainsDecimals c0_', + 'range with explicit bounds' => "SELECT numrange(c0_.decimal1, c0_.decimal2, '[)') AS sclr_0 FROM ContainsDecimals c0_", ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT NUMRANGE(e.decimal1, e.decimal2) FROM %s e', ContainsDecimals::class), + 'basic range with default bounds' => \sprintf('SELECT NUMRANGE(e.decimal1, e.decimal2) FROM %s e', ContainsDecimals::class), + 'range with explicit bounds' => \sprintf("SELECT NUMRANGE(e.decimal1, e.decimal2, '[)') FROM %s e", ContainsDecimals::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php index a4b95911..8c2996bc 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php @@ -19,14 +19,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT tsrange(c0_.datetime1, c0_.datetime2) AS sclr_0 FROM ContainsDates c0_', + 'basic range with default bounds' => 'SELECT tsrange(c0_.datetime1, c0_.datetime2) AS sclr_0 FROM ContainsDates c0_', + 'range with explicit bounds' => "SELECT tsrange(c0_.datetime1, c0_.datetime2, '[)') AS sclr_0 FROM ContainsDates c0_", ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT TSRANGE(e.datetime1, e.datetime2) FROM %s e', ContainsDates::class), + 'basic range with default bounds' => \sprintf('SELECT TSRANGE(e.datetime1, e.datetime2) FROM %s e', ContainsDates::class), + 'range with explicit bounds' => \sprintf("SELECT TSRANGE(e.datetime1, e.datetime2, '[)') FROM %s e", ContainsDates::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php index 7abaffd3..eeb911ad 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php @@ -19,14 +19,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT tstzrange(c0_.datetimetz1, c0_.datetimetz2) AS sclr_0 FROM ContainsDates c0_', + 'basic range with default bounds' => 'SELECT tstzrange(c0_.datetimetz1, c0_.datetimetz2) AS sclr_0 FROM ContainsDates c0_', + 'range with explicit bounds' => "SELECT tstzrange(c0_.datetimetz1, c0_.datetimetz2, '[)') AS sclr_0 FROM ContainsDates c0_", ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT TSTZRANGE(e.datetimetz1, e.datetimetz2) FROM %s e', ContainsDates::class), + 'basic range with default bounds' => \sprintf('SELECT TSTZRANGE(e.datetimetz1, e.datetimetz2) FROM %s e', ContainsDates::class), + 'range with explicit bounds' => \sprintf("SELECT TSTZRANGE(e.datetimetz1, e.datetimetz2, '[)') FROM %s e", ContainsDates::class), ]; } }