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) {
|
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;
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user