inject string compressor during query parsing
This commit is contained in:
@@ -285,7 +285,7 @@ public class DataStore implements AutoCloseable {
|
||||
private PartitionLongList executeQuery(final Query query) {
|
||||
final long start = System.nanoTime();
|
||||
synchronized (docIdToDoc) {
|
||||
final Expression expression = QueryLanguageParser.parse(query.getQuery());
|
||||
final Expression expression = QueryLanguageParser.parse(query.getQuery(), stringCompressor);
|
||||
final ExpressionToDocIdVisitor visitor = new ExpressionToDocIdVisitor(query.getDateRange(), tagToDocsId,
|
||||
diskStorage, stringCompressor);
|
||||
final PartitionLongList docIdsList = expression.visit(visitor);
|
||||
@@ -371,7 +371,7 @@ public class DataStore implements AutoCloseable {
|
||||
|
||||
public List<Proposal> propose(final QueryWithCaretMarker query) {
|
||||
|
||||
final NewProposerParser newProposerParser = new NewProposerParser(queryCompletionIndex);
|
||||
final NewProposerParser newProposerParser = new NewProposerParser(queryCompletionIndex, stringCompressor);
|
||||
final List<Proposal> proposals = newProposerParser.propose(query);
|
||||
LOGGER.debug("Proposals for query {}: {}", query, proposals);
|
||||
return proposals;
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
package org.lucares.pdb.datastore.lang;
|
||||
|
||||
import org.lucares.pdb.api.Tags;
|
||||
import org.lucares.pdb.api.StringCompressor;
|
||||
import org.lucares.pdb.datastore.lang.Expression.InExpression;
|
||||
import org.lucares.pdb.datastore.lang.Expression.Property;
|
||||
|
||||
public class ExpressionValidationVisitor extends IdentityExpressionVisitor {
|
||||
|
||||
private final StringCompressor stringCompressor;
|
||||
|
||||
public ExpressionValidationVisitor(final StringCompressor stringCompressor) {
|
||||
this.stringCompressor = stringCompressor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expression visit(final Property expression) {
|
||||
|
||||
@@ -27,13 +33,13 @@ public class ExpressionValidationVisitor extends IdentityExpressionVisitor {
|
||||
}
|
||||
|
||||
private void assertValueExists(final String value) {
|
||||
if (Tags.STRING_COMPRESSOR.getIfPresent(value) < 0) {
|
||||
if (stringCompressor.getIfPresent(value) < 0) {
|
||||
throw new UnkownTokenSyntaxException(value);
|
||||
}
|
||||
}
|
||||
|
||||
public static void validate(final Expression expression) {
|
||||
expression.visit(new ExpressionValidationVisitor());
|
||||
public static void validate(final Expression expression, final StringCompressor stringCompressor) {
|
||||
expression.visit(new ExpressionValidationVisitor(stringCompressor));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.lucares.pdb.api.DateTimeRange;
|
||||
import org.lucares.pdb.api.QueryConstants;
|
||||
import org.lucares.pdb.api.QueryWithCaretMarker;
|
||||
import org.lucares.pdb.api.QueryWithCaretMarker.ResultMode;
|
||||
import org.lucares.pdb.api.StringCompressor;
|
||||
import org.lucares.pdb.datastore.Proposal;
|
||||
import org.lucares.pdb.datastore.internal.QueryCompletionIndex;
|
||||
import org.lucares.utils.CollectionUtils;
|
||||
@@ -34,8 +35,11 @@ public class NewProposerParser implements QueryConstants {
|
||||
|
||||
private final QueryCompletionIndex queryCompletionIndex;
|
||||
|
||||
public NewProposerParser(final QueryCompletionIndex queryCompletionIndex) {
|
||||
private final StringCompressor stringCompressor;
|
||||
|
||||
public NewProposerParser(final QueryCompletionIndex queryCompletionIndex, final StringCompressor stringCompressor) {
|
||||
this.queryCompletionIndex = queryCompletionIndex;
|
||||
this.stringCompressor = stringCompressor;
|
||||
}
|
||||
|
||||
public List<Proposal> propose(final QueryWithCaretMarker query) {
|
||||
@@ -159,7 +163,7 @@ public class NewProposerParser implements QueryConstants {
|
||||
final String queryWithCaretMarker = query.getQueryWithCaretMarker();
|
||||
|
||||
// parse the query
|
||||
final Expression expression = QueryLanguageParser.parse(queryWithCaretMarker);
|
||||
final Expression expression = QueryLanguageParser.parse(queryWithCaretMarker, stringCompressor);
|
||||
|
||||
// normalize it, so that we can use the queryCompletionIndex to search for
|
||||
// candidate values
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package org.lucares.pdb.datastore.lang;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.lucares.pdb.api.StringCompressor;
|
||||
|
||||
public class QueryLanguageParser {
|
||||
public static Expression parse(final String query) {
|
||||
public static Expression parse(final String query, final StringCompressor stringCompressor) {
|
||||
|
||||
final Expression result;
|
||||
if (StringUtils.isEmpty(query)) {
|
||||
@@ -12,7 +13,7 @@ public class QueryLanguageParser {
|
||||
final QueryLanguage lang = new QueryLanguage();
|
||||
result = lang.parse(query);
|
||||
}
|
||||
ExpressionValidationVisitor.validate(result);
|
||||
ExpressionValidationVisitor.validate(result, stringCompressor);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user