Skip to content

Commit 7ca9e77

Browse files
committed
feat: add support MATCH_ANY MATCH_ALL MATCH_PHRASE MATCH_PHRASE_PREFIX MATCH_REGEXP
1 parent 3900464 commit 7ca9e77

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

src/main/java/net/sf/jsqlparser/expression/operators/relational/LikeExpression.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public LikeExpression withRightExpression(Expression arg0) {
117117
}
118118

119119
public enum KeyWord {
120-
LIKE, ILIKE, RLIKE, REGEXP_LIKE, REGEXP, SIMILAR_TO;
120+
LIKE, ILIKE, RLIKE, REGEXP_LIKE, REGEXP, SIMILAR_TO, MATCH_ANY, MATCH_ALL, MATCH_PHRASE, MATCH_PHRASE_PREFIX, MATCH_REGEXP;
121121

122122
public static KeyWord from(String keyword) {
123123
return Enum.valueOf(KeyWord.class, keyword.toUpperCase().replaceAll("\\s+", "_"));

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,11 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
336336
| <K_LOW : "LOW">
337337
| <K_LOW_PRIORITY : "LOW_PRIORITY">
338338
| <K_MATCH: "MATCH">
339+
| <K_MATCH_ANY: "MATCH_ANY">
340+
| <K_MATCH_ALL: "MATCH_ALL">
341+
| <K_MATCH_PHRASE: "MATCH_PHRASE">
342+
| <K_MATCH_PHRASE_PREFIX: "MATCH_PHRASE_PREFIX">
343+
| <K_MATCH_REGEXP: "MATCH_REGEXP">
339344
| <K_MATCHED: "MATCHED">
340345
| <K_MATERIALIZED:"MATERIALIZED">
341346
| <K_MAX: "MAX">
@@ -4220,6 +4225,11 @@ Expression LikeExpression(Expression leftExpression) #LikeExpression:
42204225
| token = <K_REGEXP_LIKE>
42214226
| token = <K_REGEXP>
42224227
| token = <K_SIMILAR_TO>
4228+
| token = <K_MATCH_ANY>
4229+
| token = <K_MATCH_ALL>
4230+
| token = <K_MATCH_PHRASE>
4231+
| token = <K_MATCH_PHRASE_PREFIX>
4232+
| token = <K_MATCH_REGEXP>
42234233
) { result.setLikeKeyWord( LikeExpression.KeyWord.from(token.image)); }
42244234
[ LOOKAHEAD(2) <K_BINARY> {result.setUseBinary(true); } ]
42254235
rightExpression=SimpleExpression()

src/test/java/net/sf/jsqlparser/expression/operators/relational/LikeExpressionTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,34 @@ void testDuckDBSimuilarTo() throws JSQLParserException {
5858
+ " ORDER BY v;";
5959
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);
6060
}
61+
62+
@Test
63+
public void testMatchAny() throws JSQLParserException {
64+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v MATCH_ANY 'keyword1 keyword2'", true);
65+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v NOT MATCH_ANY 'keyword1 keyword2'", true);
66+
}
67+
68+
@Test
69+
public void testMatchAll() throws JSQLParserException {
70+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v MATCH_ALL 'keyword1 keyword2'", true);
71+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v NOT MATCH_ALL 'keyword1 keyword2'", true);
72+
}
73+
74+
@Test
75+
public void testMatchPhrase() throws JSQLParserException {
76+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v MATCH_PHRASE 'keyword1 keyword2'", true);
77+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v NOT MATCH_PHRASE 'keyword1 keyword2'", true);
78+
}
79+
80+
@Test
81+
public void testMatchPhrasePrefix() throws JSQLParserException {
82+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v MATCH_PHRASE_PREFIX 'keyword1 keyword2'", true);
83+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v NOT MATCH_PHRASE_PREFIX 'keyword1 keyword2'", true);
84+
}
85+
86+
@Test
87+
public void testMatchRegexp() throws JSQLParserException {
88+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v MATCH_REGEXP 'keyword1 keyword2'", true);
89+
TestUtils.assertSqlCanBeParsedAndDeparsed("select * from dual where v NOT MATCH_REGEXP 'keyword1 keyword2'", true);
90+
}
6191
}

0 commit comments

Comments
 (0)