Skip to content

Commit e6c91b6

Browse files
Allowes JdbcParameter or JdbcNamedParameter for MySQL FullTextSearch (#1278)
Fixes issue #1223
1 parent c89cf21 commit e6c91b6

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
@@ -4247,22 +4247,31 @@ FullTextSearch FullTextSearch() : {
42474247
Column col;
42484248
Token searchModifier;
42494249
Token againstValue;
4250+
JdbcParameter jdbcParameter;
4251+
JdbcNamedParameter jdbcNamedParameter;
42504252
FullTextSearch fs = new FullTextSearch();
42514253
List<Column> matchedColumns = new ArrayList<Column>();
42524254
List<Expression> expList = new ArrayList<Expression>();
42534255
}
42544256
{
42554257
<K_MATCH> "(" col=Column() { matchedColumns.add(col); } ("," col=Column() { matchedColumns.add(col); } )* ")" <K_AGAINST>
4256-
"(" againstValue=<S_CHAR_LITERAL> { fs.setAgainstValue(new StringValue(againstValue.image)); }
4257-
[
4258-
(
4259-
searchModifier="IN NATURAL LANGUAGE MODE"
4260-
| searchModifier="IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION"
4261-
| searchModifier="IN BOOLEAN MODE"
4262-
| searchModifier="WITH QUERY EXPANSION"
4263-
)
4264-
{ fs.setSearchModifier(searchModifier.image); }
4265-
]
4258+
"("
4259+
(
4260+
againstValue=<S_CHAR_LITERAL> { fs.setAgainstValue(new StringValue(againstValue.image)); }
4261+
|
4262+
jdbcParameter=SimpleJdbcParameter() { fs.setAgainstValue( jdbcParameter ); }
4263+
|
4264+
jdbcNamedParameter=SimpleJdbcNamedParameter() { fs.setAgainstValue( jdbcNamedParameter ); }
4265+
)
4266+
[
4267+
(
4268+
searchModifier="IN NATURAL LANGUAGE MODE"
4269+
| searchModifier="IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION"
4270+
| searchModifier="IN BOOLEAN MODE"
4271+
| searchModifier="WITH QUERY EXPANSION"
4272+
)
4273+
{ fs.setSearchModifier(searchModifier.image); }
4274+
]
42664275
")"
42674276
{
42684277
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)