jirutka/rsql-parser : 如何定义一个没有参数的运算符? (=空=, =notEmpty=)
jirutka/rsql-parser : How to define an operator that has no argument? (=empty=, =notEmpty=)
我定义了两个新的自定义运算符,分别命名为 =empty=
和 =notEmpty=
,就像我一直使用的那样。
public abstract class RsqlParserOperators extends RSQLOperators {
...
public static final ComparisonOperator LIKE = new ComparisonOperator("=like=", true);
...
public static final ComparisonOperator EMPTY = new ComparisonOperator("=empty=", false);
public static final ComparisonOperator NOT_EMPTY = new ComparisonOperator("=notEmpty=", false);
public static Set<ComparisonOperator> operators() {
Set<ComparisonOperator> set = defaultOperators();
...
set.add(LIKE);
...
set.add(EMPTY);
set.add(NOT_EMPTY);
return set;
}
}
这些新运算符的独特之处在于它们不需要参数。
当我尝试使用其中之一时,例如使用像 serie=empty=
这样的过滤器,我最终遇到了以下异常。
cz.jirutka.rsql.parser.ParseException: Encountered "<EOF>" at line 1, column 12.
Was expecting one of:
<UNRESERVED_STR> ...
<SINGLE_QUOTED_STR> ...
<DOUBLE_QUOTED_STR> ...
"(" ...
关于如何定义无参数运算符有什么想法吗?
谢谢。
RSQL grammar 不允许无参数比较。
Comparison is composed of a selector, an operator and an argument.
comparison = selector, comparison-op, arguments;
我不确定允许空参数是否是个好主意,但我会考虑的。
您可以定义一个特殊参数来代替自定义运算符,例如null
,并在您的转换器中进行处理。
我遇到了完全相同的问题,最终创建了一个名为 IS_EMPTY 的新 ComparisonOperator。
public static final ComparisonOperator IS_EMPTY = new ComparisonOperator("=isEmpty=", false);
它接受一个真或假的参数
final Node rootNode = new RSQLParser(RsqlParserOperators.operators()).parse("subEntity=isEmpty=true");
当然,您仍然需要在转换器中将参数从字符串转换为布尔值。
我定义了两个新的自定义运算符,分别命名为 =empty=
和 =notEmpty=
,就像我一直使用的那样。
public abstract class RsqlParserOperators extends RSQLOperators {
...
public static final ComparisonOperator LIKE = new ComparisonOperator("=like=", true);
...
public static final ComparisonOperator EMPTY = new ComparisonOperator("=empty=", false);
public static final ComparisonOperator NOT_EMPTY = new ComparisonOperator("=notEmpty=", false);
public static Set<ComparisonOperator> operators() {
Set<ComparisonOperator> set = defaultOperators();
...
set.add(LIKE);
...
set.add(EMPTY);
set.add(NOT_EMPTY);
return set;
}
}
这些新运算符的独特之处在于它们不需要参数。
当我尝试使用其中之一时,例如使用像 serie=empty=
这样的过滤器,我最终遇到了以下异常。
cz.jirutka.rsql.parser.ParseException: Encountered "<EOF>" at line 1, column 12.
Was expecting one of:
<UNRESERVED_STR> ...
<SINGLE_QUOTED_STR> ...
<DOUBLE_QUOTED_STR> ...
"(" ...
关于如何定义无参数运算符有什么想法吗?
谢谢。
RSQL grammar 不允许无参数比较。
Comparison is composed of a selector, an operator and an argument.
comparison = selector, comparison-op, arguments;
我不确定允许空参数是否是个好主意,但我会考虑的。
您可以定义一个特殊参数来代替自定义运算符,例如null
,并在您的转换器中进行处理。
我遇到了完全相同的问题,最终创建了一个名为 IS_EMPTY 的新 ComparisonOperator。
public static final ComparisonOperator IS_EMPTY = new ComparisonOperator("=isEmpty=", false);
它接受一个真或假的参数
final Node rootNode = new RSQLParser(RsqlParserOperators.operators()).parse("subEntity=isEmpty=true");
当然,您仍然需要在转换器中将参数从字符串转换为布尔值。