Skip to content

Commit 029edbf

Browse files
Allowes JdbcParameter or JdbcNamedParameter for MySQL FullTextSearch
Fixes issue #1223
1 parent f85b4b6 commit 029edbf

File tree

3 files changed

+68
-12
lines changed

3 files changed

+68
-12
lines changed

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,16 @@
1717
import java.util.Optional;
1818
import net.sf.jsqlparser.expression.Expression;
1919
import net.sf.jsqlparser.expression.ExpressionVisitor;
20+
import net.sf.jsqlparser.expression.JdbcNamedParameter;
21+
import net.sf.jsqlparser.expression.JdbcParameter;
2022
import net.sf.jsqlparser.expression.StringValue;
2123
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
2224
import net.sf.jsqlparser.schema.Column;
2325

2426
public class FullTextSearch extends ASTNodeAccessImpl implements Expression {
2527

2628
private List<Column> _matchColumns;
27-
private StringValue _againstValue;
29+
private Expression _againstValue;
2830
private String _searchModifier;
2931

3032
public FullTextSearch() {
@@ -42,8 +44,16 @@ public List<Column> getMatchColumns() {
4244
public void setAgainstValue(StringValue val) {
4345
this._againstValue = val;
4446
}
47+
48+
public void setAgainstValue(JdbcNamedParameter val) {
49+
this._againstValue = val;
50+
}
51+
52+
public void setAgainstValue(JdbcParameter val) {
53+
this._againstValue = val;
54+
}
4555

46-
public StringValue getAgainstValue() {
56+
public Expression getAgainstValue() {
4757
return this._againstValue;
4858
}
4959

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

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4149,22 +4149,31 @@ FullTextSearch FullTextSearch() : {
41494149
Column col;
41504150
Token searchModifier;
41514151
Token againstValue;
4152+
JdbcParameter jdbcParameter;
4153+
JdbcNamedParameter jdbcNamedParameter;
41524154
FullTextSearch fs = new FullTextSearch();
41534155
List<Column> matchedColumns = new ArrayList<Column>();
41544156
List<Expression> expList = new ArrayList<Expression>();
41554157
}
41564158
{
41574159
<K_MATCH> "(" col=Column() { matchedColumns.add(col); } ("," col=Column() { matchedColumns.add(col); } )* ")" <K_AGAINST>
4158-
"(" againstValue=<S_CHAR_LITERAL> { fs.setAgainstValue(new StringValue(againstValue.image)); }
4159-
[
4160-
(
4161-
searchModifier="IN NATURAL LANGUAGE MODE"
4162-
| searchModifier="IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION"
4163-
| searchModifier="IN BOOLEAN MODE"
4164-
| searchModifier="WITH QUERY EXPANSION"
4165-
)
4166-
{ fs.setSearchModifier(searchModifier.image); }
4167-
]
4160+
"("
4161+
(
4162+
againstValue=<S_CHAR_LITERAL> { fs.setAgainstValue(new StringValue(againstValue.image)); }
4163+
|
4164+
jdbcParameter=SimpleJdbcParameter() { fs.setAgainstValue( jdbcParameter ); }
4165+
|
4166+
jdbcNamedParameter=SimpleJdbcNamedParameter() { fs.setAgainstValue( jdbcNamedParameter ); }
4167+
)
4168+
[
4169+
(
4170+
searchModifier="IN NATURAL LANGUAGE MODE"
4171+
| searchModifier="IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION"
4172+
| searchModifier="IN BOOLEAN MODE"
4173+
| searchModifier="WITH QUERY EXPANSION"
4174+
)
4175+
{ fs.setSearchModifier(searchModifier.image); }
4176+
]
41684177
")"
41694178
{
41704179
fs.setMatchColumns(matchedColumns);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2021 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
11+
package net.sf.jsqlparser.expression.operators.relational;
12+
13+
import net.sf.jsqlparser.JSQLParserException;
14+
import net.sf.jsqlparser.test.TestUtils;
15+
import org.junit.Test;
16+
17+
/**
18+
*
19+
* @author <a href="mailto:andreas@manticore-projects.com">Andreas Reichel</a>
20+
*/
21+
public class FullTextSearchExpressionTest {
22+
@Test
23+
public void testFullTextSearchExpressionWithParameters() throws JSQLParserException {
24+
TestUtils.assertSqlCanBeParsedAndDeparsed(
25+
"select match (name) against (?) as full_text from commodity", true);
26+
TestUtils.assertSqlCanBeParsedAndDeparsed(
27+
"select match (name) against (:parameter) as full_text from commodity", true);
28+
}
29+
30+
@Test
31+
public void testIssue1223() throws JSQLParserException {
32+
TestUtils.assertSqlCanBeParsedAndDeparsed("select\n" + "c.*,\n"
33+
+ "match (name) against (?) as full_text\n" + "from\n" + "commodity c\n" + "where\n"
34+
+ "match (name) against (?)\n" + "and c.deleted = 0\n" + "order by\n" + "full_text desc",
35+
true);
36+
}
37+
}

0 commit comments

Comments
 (0)