@Override
public void exitLike_predicate(BQLParser.Like_predicateContext ctx) {
if (ctx.PLACEHOLDER() != null) {
return;
}
String col = unescapeColumnName(ctx.column_name());
Map.Entry<String, LindenType> fieldNameAndType = getFieldNameAndType(col);
LindenType type = fieldNameAndType.getValue();
if (type != LindenType.STRING && type != LindenType.FACET) {
throw new ParseCancellationException(new SemanticException(ctx.column_name(),
"Non-string type column \"" + col
+ "\" can not be used in LIKE predicates."));
}
col = fieldNameAndType.getKey();
String likeString = unescapeStringLiteral(ctx.STRING_LITERAL());
LindenWildcardQuery wildcardQuery = new LindenWildcardQuery().setField(col)
.setQuery(likeString);
if (inQueryWhere) {
if (ctx.NOT() != null) {
LindenBooleanQueryBuilder builder = new LindenBooleanQueryBuilder();
builder.addQuery(LindenRangeQueryBuilder.buildMatchAllQuery(), LindenBooleanClause.MUST);
builder.addQuery(new LindenQuery().setWildcardQuery(wildcardQuery), LindenBooleanClause.MUST_NOT);
queryProperty.put(ctx, builder.build());
} else {
queryProperty.put(ctx, new LindenQuery().setWildcardQuery(wildcardQuery));
}
} else {
LindenFilter filter = new LindenFilter().setQueryFilter(
new LindenQueryFilter().setQuery(new LindenQuery().setWildcardQuery(wildcardQuery)));
if (ctx.NOT() != null) {
LindenBooleanFilter booleanFilter = new LindenBooleanFilter();
booleanFilter.addToFilters(new LindenBooleanSubFilter().setFilter(filter)
.setClause(LindenBooleanClause.MUST_NOT));
filter = new LindenFilter().setBooleanFilter(booleanFilter);
}
filterProperty.put(ctx, filter);
}
}
BQLCompilerAnalyzer.java 文件源码
java
阅读 26
收藏 0
点赞 0
评论 0
项目:linden
作者:
评论列表
文章目录