Skip to content

Commit f89c7f6

Browse files
no message
1 parent ada5563 commit f89c7f6

File tree

8 files changed

+23
-34
lines changed

8 files changed

+23
-34
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class FlaggedRegexpLike extends BaseFunction
1818
{
1919
protected function customizeFunction(): void
2020
{
21-
$this->setFunctionPrototype('regexp_like(%s, %s, 1, %s)');
21+
$this->setFunctionPrototype('regexp_like(%s, %s, %s)');
2222
$this->addNodeMapping('StringPrimary');
2323
$this->addNodeMapping('StringPrimary');
2424
$this->addNodeMapping('StringPrimary');

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,14 @@
1414
*
1515
* @author Martin Georgiev <martin.georgiev@gmail.com>
1616
*
17-
* @example Using it in DQL: "SELECT REGEXP_LIKE(e.text, 'pattern', 3, 'i') FROM Entity e"
17+
* @example Using it in DQL: "SELECT REGEXP_LIKE(e.text, 'pattern', 'i') FROM Entity e"
1818
*/
1919
class RegexpLike extends BaseVariadicFunction
2020
{
2121
protected function getNodeMappingPattern(): array
2222
{
2323
return [
24-
'StringPrimary,StringPrimary,ArithmeticPrimary,StringPrimary',
25-
'StringPrimary,StringPrimary,ArithmeticPrimary',
26-
'StringPrimary,StringPrimary,StringPrimary',
27-
'StringPrimary,StringPrimary',
24+
'StringPrimary',
2825
];
2926
}
3027

@@ -40,6 +37,6 @@ protected function getMinArgumentCount(): int
4037

4138
protected function getMaxArgumentCount(): int
4239
{
43-
return 4;
40+
return 3;
4441
}
4542
}

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,14 @@
1414
*
1515
* @author Martin Georgiev <martin.georgiev@gmail.com>
1616
*
17-
* @example Using it in DQL: "SELECT REGEXP_MATCH(e.text, 'pattern', 3, 'i') FROM Entity e"
17+
* @example Using it in DQL: "SELECT REGEXP_MATCH(e.text, 'pattern', 'i') FROM Entity e"
1818
*/
1919
class RegexpMatch extends BaseVariadicFunction
2020
{
2121
protected function getNodeMappingPattern(): array
2222
{
2323
return [
24-
'StringPrimary,StringPrimary,ArithmeticPrimary,StringPrimary',
25-
'StringPrimary,StringPrimary,ArithmeticPrimary',
26-
'StringPrimary,StringPrimary,StringPrimary',
27-
'StringPrimary,StringPrimary',
24+
'StringPrimary',
2825
];
2926
}
3027

@@ -40,6 +37,6 @@ protected function getMinArgumentCount(): int
4037

4138
protected function getMaxArgumentCount(): int
4239
{
43-
return 4;
40+
return 3;
4441
}
4542
}

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,25 @@
1313
* @since 2.5
1414
*
1515
* @author Colin Doig
16+
* @author Martin Georgiev <martin.georgiev@gmail.com>
1617
*
1718
* @example Using it in DQL: "SELECT REGEXP_REPLACE(e.text, 'pattern', 'replacement', 3, 2, 'i') FROM Entity e"
1819
*/
1920
class RegexpReplace extends BaseVariadicFunction
2021
{
2122
protected function getNodeMappingPattern(): array
2223
{
24+
/*
25+
* PostgreSQL overloads the 4th argument depending on its type:
26+
* - if the 4th arg is a string, it’s taken as flags.
27+
* - if the 4th arg is an integer, it’s taken as start position. This can be extended with the Nth argument.
28+
*/
2329
return [
24-
'StringPrimary,StringPrimary,StringPrimary,ArithmeticPrimary,ArithmeticPrimary,StringPrimary',
25-
'StringPrimary,StringPrimary,StringPrimary,ArithmeticPrimary,ArithmeticPrimary',
26-
'StringPrimary,StringPrimary,StringPrimary,ArithmeticPrimary,StringPrimary',
27-
'StringPrimary,StringPrimary,StringPrimary,ArithmeticPrimary',
28-
'StringPrimary,StringPrimary,StringPrimary,StringPrimary',
29-
'StringPrimary,StringPrimary,StringPrimary',
30+
'StringPrimary,StringPrimary,StringPrimary,ArithmeticPrimary,ArithmeticPrimary,StringPrimary', // with start, N and flags: regexp_replace(string, pattern, replacement, 3, 2, 'i')
31+
'StringPrimary,StringPrimary,StringPrimary,ArithmeticPrimary,ArithmeticPrimary', // with start and N: regexp_replace(string, pattern, replacement, 3, 2)
32+
'StringPrimary,StringPrimary,StringPrimary,ArithmeticPrimary', // with start: regexp_replace(string, pattern, replacement, 3)
33+
'StringPrimary,StringPrimary,StringPrimary,StringPrimary', // with flags: regexp_replace(string, pattern, replacement, 'i')
34+
'StringPrimary,StringPrimary,StringPrimary', // basic replacement: regexp_replace(string, pattern, replacement)
3035
];
3136
}
3237

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpLikeTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
"SELECT regexp_like(c0_.text1, 'pattern', 1, 'i') AS sclr_0 FROM ContainsTexts c0_",
22+
"SELECT regexp_like(c0_.text1, 'pattern', 'i') AS sclr_0 FROM ContainsTexts c0_",
2323
];
2424
}
2525

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ protected function getExpectedSqlStatements(): array
2828
return [
2929
'basic match' => "SELECT regexp_like(c0_.text1, 'pattern') AS sclr_0 FROM ContainsTexts c0_",
3030
'with flags' => "SELECT regexp_like(c0_.text1, 'pattern', 'i') AS sclr_0 FROM ContainsTexts c0_",
31-
'with start position' => "SELECT regexp_like(c0_.text1, 'pattern', 3) AS sclr_0 FROM ContainsTexts c0_",
32-
'with start position and flags' => "SELECT regexp_like(c0_.text1, 'pattern', 3, 'i') AS sclr_0 FROM ContainsTexts c0_",
3331
];
3432
}
3533

@@ -38,8 +36,6 @@ protected function getDqlStatements(): array
3836
return [
3937
'basic match' => \sprintf("SELECT REGEXP_LIKE(e.text1, 'pattern') FROM %s e", ContainsTexts::class),
4038
'with flags' => \sprintf("SELECT REGEXP_LIKE(e.text1, 'pattern', 'i') FROM %s e", ContainsTexts::class),
41-
'with start position' => \sprintf("SELECT REGEXP_LIKE(e.text1, 'pattern', 3) FROM %s e", ContainsTexts::class),
42-
'with start position and flags' => \sprintf("SELECT REGEXP_LIKE(e.text1, 'pattern', 3, 'i') FROM %s e", ContainsTexts::class),
4339
];
4440
}
4541

@@ -55,9 +51,9 @@ public function test_too_few_arguments_throws_exception(): void
5551
public function test_too_many_arguments_throws_exception(): void
5652
{
5753
$this->expectException(InvalidArgumentForVariadicFunctionException::class);
58-
$this->expectExceptionMessage('regexp_like() requires between 2 and 4 arguments');
54+
$this->expectExceptionMessage('regexp_like() requires between 2 and 3 arguments');
5955

60-
$dql = \sprintf("SELECT REGEXP_LIKE(e.text1, 'pattern', 3, 'i', 'extra_arg') FROM %s e", ContainsTexts::class);
56+
$dql = \sprintf("SELECT REGEXP_LIKE(e.text1, 'pattern', 'i', 'extra_arg') FROM %s e", ContainsTexts::class);
6157
$this->buildEntityManager()->createQuery($dql)->getSQL();
6258
}
6359
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpMatchTest.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ protected function getExpectedSqlStatements(): array
2828
return [
2929
'basic match' => "SELECT regexp_match(c0_.text1, 'pattern') AS sclr_0 FROM ContainsTexts c0_",
3030
'with flags' => "SELECT regexp_match(c0_.text1, 'pattern', 'i') AS sclr_0 FROM ContainsTexts c0_",
31-
'with start position' => "SELECT regexp_match(c0_.text1, 'pattern', 3) AS sclr_0 FROM ContainsTexts c0_",
32-
'with start position and flags' => "SELECT regexp_match(c0_.text1, 'pattern', 3, 'i') AS sclr_0 FROM ContainsTexts c0_",
3331
];
3432
}
3533

@@ -38,8 +36,6 @@ protected function getDqlStatements(): array
3836
return [
3937
'basic match' => \sprintf("SELECT REGEXP_MATCH(e.text1, 'pattern') FROM %s e", ContainsTexts::class),
4038
'with flags' => \sprintf("SELECT REGEXP_MATCH(e.text1, 'pattern', 'i') FROM %s e", ContainsTexts::class),
41-
'with start position' => \sprintf("SELECT REGEXP_MATCH(e.text1, 'pattern', 3) FROM %s e", ContainsTexts::class),
42-
'with start position and flags' => \sprintf("SELECT REGEXP_MATCH(e.text1, 'pattern', 3, 'i') FROM %s e", ContainsTexts::class),
4339
];
4440
}
4541

@@ -55,9 +51,9 @@ public function test_too_few_arguments_throws_exception(): void
5551
public function test_too_many_arguments_throws_exception(): void
5652
{
5753
$this->expectException(InvalidArgumentForVariadicFunctionException::class);
58-
$this->expectExceptionMessage('regexp_match() requires between 2 and 4 arguments');
54+
$this->expectExceptionMessage('regexp_match() requires between 2 and 3 arguments');
5955

60-
$dql = \sprintf("SELECT REGEXP_MATCH(e.text1, 'pattern', 3, 'i', 'extra_arg') FROM %s e", ContainsTexts::class);
56+
$dql = \sprintf("SELECT REGEXP_MATCH(e.text1, 'pattern', 'i', 'extra_arg') FROM %s e", ContainsTexts::class);
6157
$this->buildEntityManager()->createQuery($dql)->getSQL();
6258
}
6359
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ protected function getExpectedSqlStatements(): array
2929
'basic replacement' => "SELECT regexp_replace(c0_.text1, 'pattern', 'replacement') AS sclr_0 FROM ContainsTexts c0_",
3030
'with flags but no start position' => "SELECT regexp_replace(c0_.text1, 'pattern', 'replacement', 'i') AS sclr_0 FROM ContainsTexts c0_",
3131
'with start position' => "SELECT regexp_replace(c0_.text1, 'pattern', 'replacement', 3) AS sclr_0 FROM ContainsTexts c0_",
32-
'with start position and flags' => "SELECT regexp_replace(c0_.text1, 'pattern', 'replacement', 3, 'i') AS sclr_0 FROM ContainsTexts c0_",
3332
'with occurrence count but no flags' => "SELECT regexp_replace(c0_.text1, 'pattern', 'replacement', 3, 2) AS sclr_0 FROM ContainsTexts c0_",
3433
'with occurrence count and flags' => "SELECT regexp_replace(c0_.text1, 'pattern', 'replacement', 3, 2, 'i') AS sclr_0 FROM ContainsTexts c0_",
3534
];
@@ -41,7 +40,6 @@ protected function getDqlStatements(): array
4140
'basic replacement' => \sprintf("SELECT REGEXP_REPLACE(e.text1, 'pattern', 'replacement') FROM %s e", ContainsTexts::class),
4241
'with flags but no start position' => \sprintf("SELECT REGEXP_REPLACE(e.text1, 'pattern', 'replacement', 'i') FROM %s e", ContainsTexts::class),
4342
'with start position' => \sprintf("SELECT REGEXP_REPLACE(e.text1, 'pattern', 'replacement', 3) FROM %s e", ContainsTexts::class),
44-
'with start position and flags' => \sprintf("SELECT REGEXP_REPLACE(e.text1, 'pattern', 'replacement', 3, 'i') FROM %s e", ContainsTexts::class),
4543
'with occurrence count but no flags' => \sprintf("SELECT REGEXP_REPLACE(e.text1, 'pattern', 'replacement', 3, 2) FROM %s e", ContainsTexts::class),
4644
'with occurrence count and flags' => \sprintf("SELECT REGEXP_REPLACE(e.text1, 'pattern', 'replacement', 3, 2, 'i') FROM %s e", ContainsTexts::class),
4745
];

0 commit comments

Comments
 (0)