org.nlpcn.es4sql.query.join.ESJoinQueryAction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch-sql Show documentation
Show all versions of elasticsearch-sql Show documentation
Query elasticsearch using SQL
package org.nlpcn.es4sql.query.join;
import org.elasticsearch.client.Client;
import org.nlpcn.es4sql.domain.Field;
import org.nlpcn.es4sql.domain.JoinSelect;
import org.nlpcn.es4sql.domain.Select;
import org.nlpcn.es4sql.domain.TableOnJoinSelect;
import org.nlpcn.es4sql.domain.hints.Hint;
import org.nlpcn.es4sql.domain.hints.HintType;
import org.nlpcn.es4sql.exception.SqlParseException;
import org.nlpcn.es4sql.query.DefaultQueryAction;
import org.nlpcn.es4sql.query.QueryAction;
import org.nlpcn.es4sql.query.SqlElasticRequestBuilder;
import java.util.List;
/**
* Created by Eliran on 15/9/2015.
*/
public abstract class ESJoinQueryAction extends QueryAction {
protected JoinSelect joinSelect;
public ESJoinQueryAction(Client client, JoinSelect joinSelect) {
super(client, null);
this.joinSelect = joinSelect;
}
@Override
public SqlElasticRequestBuilder explain() throws SqlParseException {
JoinRequestBuilder requestBuilder = createSpecificBuilder();
fillBasicJoinRequestBuilder(requestBuilder);
fillSpecificRequestBuilder(requestBuilder);
return requestBuilder;
}
protected abstract void fillSpecificRequestBuilder(JoinRequestBuilder requestBuilder) throws SqlParseException;
protected abstract JoinRequestBuilder createSpecificBuilder();
private void fillBasicJoinRequestBuilder(JoinRequestBuilder requestBuilder) throws SqlParseException {
fillTableInJoinRequestBuilder(requestBuilder.getFirstTable(), joinSelect.getFirstTable());
fillTableInJoinRequestBuilder(requestBuilder.getSecondTable(), joinSelect.getSecondTable());
requestBuilder.setJoinType(joinSelect.getJoinType());
requestBuilder.setTotalLimit(joinSelect.getTotalLimit());
updateRequestWithHints(requestBuilder);
}
protected void updateRequestWithHints(JoinRequestBuilder requestBuilder){
for(Hint hint : joinSelect.getHints()) {
if (hint.getType() == HintType.JOIN_LIMIT) {
Object[] params = hint.getParams();
requestBuilder.getFirstTable().setHintLimit((Integer) params[0]);
requestBuilder.getSecondTable().setHintLimit((Integer) params[1]);
}
}
}
private void fillTableInJoinRequestBuilder(TableInJoinRequestBuilder requestBuilder, TableOnJoinSelect tableOnJoinSelect) throws SqlParseException {
List connectedFields = tableOnJoinSelect.getConnectedFields();
addFieldsToSelectIfMissing(tableOnJoinSelect,connectedFields);
requestBuilder.setOriginalSelect(tableOnJoinSelect);
DefaultQueryAction queryAction = new DefaultQueryAction(client,tableOnJoinSelect);
queryAction.explain();
requestBuilder.setRequestBuilder(queryAction.getRequestBuilder());
requestBuilder.setReturnedFields(tableOnJoinSelect.getSelectedFields());
requestBuilder.setAlias(tableOnJoinSelect.getAlias());
}
private void addFieldsToSelectIfMissing(Select select, List fields) {
//this means all fields
if(select.getFields() == null || select.getFields().size() == 0) return;
List selectedFields = select.getFields();
for(Field field : fields){
if(!selectedFields.contains(field)){
selectedFields.add(field);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy