inject string compressor during query parsing

This commit is contained in:
2021-10-12 18:36:15 +02:00
parent 21ab103fd2
commit 1f40411587
4 changed files with 21 additions and 10 deletions

View File

@@ -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;

View File

@@ -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));
}
}

View File

@@ -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

View File

@@ -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;
}
}