package org.infinispan.query.remote.impl;
import java.util.Map;
import org.infinispan.AdvancedCache;
import org.infinispan.objectfilter.Matcher;
import org.infinispan.protostream.SerializationContext;
import org.infinispan.protostream.descriptors.Descriptor;
import org.infinispan.query.dsl.embedded.impl.EmbeddedQueryFactory;
import org.infinispan.query.dsl.embedded.impl.LuceneQueryMaker;
import org.infinispan.query.dsl.embedded.impl.QueryEngine;
import org.infinispan.query.dsl.embedded.impl.ResultProcessor;
import org.infinispan.query.dsl.impl.BaseQuery;
import org.infinispan.query.remote.impl.indexing.ProtobufValueWrapper;
/**
* @author anistor@redhat.com
* @since 9.0
*/
class BaseRemoteQueryEngine extends QueryEngine<Descriptor> {
private final SerializationContext serializationContext;
private final EmbeddedQueryFactory queryFactory = new EmbeddedQueryFactory(this);
protected BaseRemoteQueryEngine(AdvancedCache<?, ?> cache, boolean isIndexed, Class<? extends Matcher> matcherImplClass, LuceneQueryMaker.FieldBridgeAndAnalyzerProvider<Descriptor> fieldBridgeAndAnalyzerProvider) {
super(cache, isIndexed, matcherImplClass, fieldBridgeAndAnalyzerProvider);
serializationContext = ProtobufMetadataManagerImpl.getSerializationContextInternal(cache.getCacheManager());
}
protected SerializationContext getSerializationContext() {
return serializationContext;
}
protected BaseQuery makeQuery(String queryString, Map<String, Object> namedParameters, long startOffset, int maxResults) {
BaseQuery query = queryFactory.create(queryString);
query.startOffset(startOffset);
query.maxResults(maxResults);
if (namedParameters != null) {
query.setParameters(namedParameters);
}
return query;
}
@Override
protected ResultProcessor makeResultProcessor(ResultProcessor in) {
return result -> {
if (result instanceof ProtobufValueWrapper) {
result = ((ProtobufValueWrapper) result).getBinary();
}
return in != null ? in.process(result) : result;
};
}
}