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) { private PartitionLongList executeQuery(final Query query) {
final long start = System.nanoTime(); final long start = System.nanoTime();
synchronized (docIdToDoc) { 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, final ExpressionToDocIdVisitor visitor = new ExpressionToDocIdVisitor(query.getDateRange(), tagToDocsId,
diskStorage, stringCompressor); diskStorage, stringCompressor);
final PartitionLongList docIdsList = expression.visit(visitor); final PartitionLongList docIdsList = expression.visit(visitor);
@@ -371,7 +371,7 @@ public class DataStore implements AutoCloseable {
public List<Proposal> propose(final QueryWithCaretMarker query) { 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); final List<Proposal> proposals = newProposerParser.propose(query);
LOGGER.debug("Proposals for query {}: {}", query, proposals); LOGGER.debug("Proposals for query {}: {}", query, proposals);
return proposals; return proposals;

View File

@@ -1,11 +1,17 @@
package org.lucares.pdb.datastore.lang; 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.InExpression;
import org.lucares.pdb.datastore.lang.Expression.Property; import org.lucares.pdb.datastore.lang.Expression.Property;
public class ExpressionValidationVisitor extends IdentityExpressionVisitor { public class ExpressionValidationVisitor extends IdentityExpressionVisitor {
private final StringCompressor stringCompressor;
public ExpressionValidationVisitor(final StringCompressor stringCompressor) {
this.stringCompressor = stringCompressor;
}
@Override @Override
public Expression visit(final Property expression) { public Expression visit(final Property expression) {
@@ -27,13 +33,13 @@ public class ExpressionValidationVisitor extends IdentityExpressionVisitor {
} }
private void assertValueExists(final String value) { private void assertValueExists(final String value) {
if (Tags.STRING_COMPRESSOR.getIfPresent(value) < 0) { if (stringCompressor.getIfPresent(value) < 0) {
throw new UnkownTokenSyntaxException(value); throw new UnkownTokenSyntaxException(value);
} }
} }
public static void validate(final Expression expression) { public static void validate(final Expression expression, final StringCompressor stringCompressor) {
expression.visit(new ExpressionValidationVisitor()); 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.QueryConstants;
import org.lucares.pdb.api.QueryWithCaretMarker; import org.lucares.pdb.api.QueryWithCaretMarker;
import org.lucares.pdb.api.QueryWithCaretMarker.ResultMode; import org.lucares.pdb.api.QueryWithCaretMarker.ResultMode;
import org.lucares.pdb.api.StringCompressor;
import org.lucares.pdb.datastore.Proposal; import org.lucares.pdb.datastore.Proposal;
import org.lucares.pdb.datastore.internal.QueryCompletionIndex; import org.lucares.pdb.datastore.internal.QueryCompletionIndex;
import org.lucares.utils.CollectionUtils; import org.lucares.utils.CollectionUtils;
@@ -34,8 +35,11 @@ public class NewProposerParser implements QueryConstants {
private final QueryCompletionIndex queryCompletionIndex; 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.queryCompletionIndex = queryCompletionIndex;
this.stringCompressor = stringCompressor;
} }
public List<Proposal> propose(final QueryWithCaretMarker query) { public List<Proposal> propose(final QueryWithCaretMarker query) {
@@ -159,7 +163,7 @@ public class NewProposerParser implements QueryConstants {
final String queryWithCaretMarker = query.getQueryWithCaretMarker(); final String queryWithCaretMarker = query.getQueryWithCaretMarker();
// parse the query // 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 // normalize it, so that we can use the queryCompletionIndex to search for
// candidate values // candidate values

View File

@@ -1,9 +1,10 @@
package org.lucares.pdb.datastore.lang; package org.lucares.pdb.datastore.lang;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.lucares.pdb.api.StringCompressor;
public class QueryLanguageParser { public class QueryLanguageParser {
public static Expression parse(final String query) { public static Expression parse(final String query, final StringCompressor stringCompressor) {
final Expression result; final Expression result;
if (StringUtils.isEmpty(query)) { if (StringUtils.isEmpty(query)) {
@@ -12,7 +13,7 @@ public class QueryLanguageParser {
final QueryLanguage lang = new QueryLanguage(); final QueryLanguage lang = new QueryLanguage();
result = lang.parse(query); result = lang.parse(query);
} }
ExpressionValidationVisitor.validate(result); ExpressionValidationVisitor.validate(result, stringCompressor);
return result; return result;
} }
} }