Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 39b8d4d

Browse files
committed
Merge commit '5b3be8f7684e5fc93e3a4f87c790cf101bf4020c' into elastic2.0
2 parents 27611a8 + 5b3be8f commit 39b8d4d

File tree

5 files changed

+84
-8
lines changed

5 files changed

+84
-8
lines changed

src/main/java/org/elasticsearch/plugin/nlpcn/ElasticJoinExecutor.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,9 @@ protected Map<String,Object> mapWithAliases(Map<String, Object> source, String a
137137
return mapWithAliases;
138138
}
139139

140-
protected void onlyReturnedFields(Map<String, Object> fieldsMap, List<Field> required) {
140+
protected void onlyReturnedFields(Map<String, Object> fieldsMap, List<Field> required,boolean allRequired) {
141141
HashMap<String,Object> filteredMap = new HashMap<>();
142-
if(allFieldsReturn) {
142+
if(allFieldsReturn || allRequired) {
143143
filteredMap.putAll(fieldsMap);
144144
return;
145145
}
@@ -214,7 +214,9 @@ protected InternalSearchHit createUnmachedResult( List<Field> secondTableReturne
214214
protected Map<String, Object> createNullsSource(List<Field> secondTableReturnedFields) {
215215
Map<String,Object> nulledSource = new HashMap<>();
216216
for(Field field : secondTableReturnedFields){
217-
nulledSource.put(field.getName(),null);
217+
if(!field.getName().equals("*")){
218+
nulledSource.put(field.getName(),null);
219+
}
218220
}
219221
return nulledSource;
220222
}

src/main/java/org/elasticsearch/plugin/nlpcn/HashJoinElasticExecutor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ private List<InternalSearchHit> createCombinedResults( TableInJoinRequestBuilder
157157

158158
Map<String,Object> copiedSource = new HashMap<String,Object>();
159159
copyMaps(copiedSource,secondTableHit.sourceAsMap());
160-
onlyReturnedFields(copiedSource, secondTableRequest.getReturnedFields());
160+
onlyReturnedFields(copiedSource, secondTableRequest.getReturnedFields(),secondTableRequest.getOriginalSelect().isSelectAll());
161161

162162

163163

@@ -211,7 +211,7 @@ private void createKeyToResultsAndFillOptimizationStructure(Map<String,Map<Strin
211211
InternalSearchHit searchHit = new InternalSearchHit(resultIds, hit.id(), new StringText(hit.getType()), hit.getFields());
212212
searchHit.sourceRef(hit.getSourceRef());
213213

214-
onlyReturnedFields(searchHit.sourceAsMap(), firstTableRequest.getReturnedFields());
214+
onlyReturnedFields(searchHit.sourceAsMap(), firstTableRequest.getReturnedFields(),firstTableRequest.getOriginalSelect().isSelectAll());
215215
resultIds++;
216216
this.hashJoinComparisonStructure.insertIntoComparisonHash(comparisonID, key, searchHit);
217217
}

src/main/java/org/elasticsearch/plugin/nlpcn/NestedLoopsElasticExecutor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ private int combineResultsFromMultiResponses(List<InternalSearchHit> combinedRes
8686

8787
for(int j =0 ; j < responses.length && currentCombinedResults < totalLimit ; j++){
8888
SearchHit hitFromFirstTable = hits[currentIndex+j];
89-
onlyReturnedFields(hitFromFirstTable.sourceAsMap(), nestedLoopsRequest.getFirstTable().getReturnedFields());
89+
onlyReturnedFields(hitFromFirstTable.sourceAsMap(), nestedLoopsRequest.getFirstTable().getReturnedFields(),nestedLoopsRequest.getFirstTable().getOriginalSelect().isSelectAll());
9090

9191
SearchResponse multiItemResponse = responses[j].getResponse();
9292
updateMetaSearchResults(multiItemResponse);
@@ -114,7 +114,7 @@ private int combineResultsFromMultiResponses(List<InternalSearchHit> combinedRes
114114
}
115115

116116
private InternalSearchHit getMergedHit(int currentCombinedResults, String t1Alias, String t2Alias, SearchHit hitFromFirstTable, SearchHit matchedHit) {
117-
onlyReturnedFields(matchedHit.sourceAsMap(), nestedLoopsRequest.getSecondTable().getReturnedFields());
117+
onlyReturnedFields(matchedHit.sourceAsMap(), nestedLoopsRequest.getSecondTable().getReturnedFields(),nestedLoopsRequest.getSecondTable().getOriginalSelect().isSelectAll());
118118
InternalSearchHit searchHit = new InternalSearchHit(currentCombinedResults, hitFromFirstTable.id() + "|" + matchedHit.getId(), new StringText(hitFromFirstTable.getType() + "|" + matchedHit.getType()), hitFromFirstTable.getFields());
119119
searchHit.sourceRef(hitFromFirstTable.getSourceRef());
120120
searchHit.sourceAsMap().clear();

src/main/java/org/nlpcn/es4sql/domain/Select.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class Select extends Query {
2626
private boolean containsSubQueries;
2727
private List<SubQueryExpression> subQueries;
2828
public boolean isQuery = false;
29+
private boolean selectAll = false;
2930

3031
public boolean isAgg = false;
3132

@@ -80,9 +81,12 @@ public void addOrderBy(String name, String type) {
8081

8182

8283
public void addField(Field field) {
83-
if (field == null || field.getName() == "*") {
84+
if (field == null ) {
8485
return;
8586
}
87+
if(field.getName().equals("*")){
88+
this.selectAll = true;
89+
}
8690

8791
if(field instanceof MethodField && aggsFunctions.contains(field.getName().toUpperCase())) {
8892
isAgg = true;
@@ -137,5 +141,9 @@ public List<SubQueryExpression> getSubQueries() {
137141
public boolean isOrderdSelect(){
138142
return this.getOrderBys()!=null && this.getOrderBys().size() >0 ;
139143
}
144+
145+
public boolean isSelectAll() {
146+
return selectAll;
147+
}
140148
}
141149

src/test/java/org/nlpcn/es4sql/JoinTests.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,72 @@ private void joinWithOrderFirstTable(boolean useNestedLoops) throws SQLFeatureNo
469469
}
470470

471471

472+
@Test
473+
public void joinWithAllFromSecondTableHASH() throws SQLFeatureNotSupportedException, IOException, SqlParseException {
474+
joinWithAllFromSecondTable(false);
475+
}
476+
@Test
477+
public void joinWithAllFromSecondTableNL() throws SQLFeatureNotSupportedException, IOException, SqlParseException {
478+
joinWithAllFromSecondTable(true);
479+
}
480+
private void joinWithAllFromSecondTable(boolean useNestedLoops) throws SQLFeatureNotSupportedException, IOException, SqlParseException {
481+
String query = String.format("select c.name.firstname , d.* from %s/gotCharacters c " +
482+
"JOIN %s/gotHouses d on d.name = c.house "
483+
, TEST_INDEX, TEST_INDEX);
484+
if(useNestedLoops) query = query.replace("select","select /*! USE_NL*/ ");
485+
SearchHit[] hits = joinAndGetHits(query);
486+
Assert.assertEquals(4, hits.length);
487+
Assert.assertEquals(5,hits[0].sourceAsMap().size());
488+
}
489+
490+
491+
@Test
492+
public void joinWithAllFromFirstTableHASH() throws SQLFeatureNotSupportedException, IOException, SqlParseException {
493+
joinWithAllFromFirstTable(false);
494+
}
495+
@Test
496+
public void joinWithAllFromFirstTableNL() throws SQLFeatureNotSupportedException, IOException, SqlParseException {
497+
joinWithAllFromFirstTable(true);
498+
}
499+
500+
private void joinWithAllFromFirstTable(boolean useNestedLoops) throws SQLFeatureNotSupportedException, IOException, SqlParseException {
501+
String query = String.format("select d.* , c.name.firstname from %s/gotHouses d " +
502+
"JOIN %s/gotCharacters c on c.house = d.name "
503+
, TEST_INDEX, TEST_INDEX);
504+
if(useNestedLoops) query = query.replace("select","select /*! USE_NL*/ ");
505+
SearchHit[] hits = joinAndGetHits(query);
506+
Assert.assertEquals(4, hits.length);
507+
Assert.assertEquals(5,hits[0].sourceAsMap().size());
508+
}
509+
510+
@Test
511+
public void leftJoinWithAllFromSecondTableHASH() throws SQLFeatureNotSupportedException, IOException, SqlParseException {
512+
leftJoinWithAllFromSecondTable(false);
513+
}
514+
@Test
515+
public void leftJoinWithAllFromSecondTableNL() throws SQLFeatureNotSupportedException, IOException, SqlParseException {
516+
leftJoinWithAllFromSecondTable(true);
517+
}
518+
private void leftJoinWithAllFromSecondTable(boolean useNestedLoops) throws SQLFeatureNotSupportedException, IOException, SqlParseException {
519+
String query = String.format("select c.name.firstname , d.* from %s/gotCharacters c " +
520+
"LEFT JOIN %s/gotHouses d on d.name = c.house " +
521+
"where d.sigil <> 'direwolf'"
522+
, TEST_INDEX, TEST_INDEX);
523+
if(useNestedLoops) query = query.replace("select","select /*! USE_NL*/ ");
524+
SearchHit[] hits = joinAndGetHits(query);
525+
Assert.assertEquals(4, hits.length);
526+
for (SearchHit hit : hits) {
527+
if(hit.getId().endsWith("0")){
528+
Assert.assertEquals(1,hit.sourceAsMap().size());
529+
}
530+
else {
531+
Assert.assertEquals(5,hit.sourceAsMap().size());
532+
}
533+
}
534+
535+
}
536+
537+
472538
private String hashJoinRunAndExplain(String query) throws IOException, SqlParseException, SQLFeatureNotSupportedException {
473539
SearchDao searchDao = MainTestSuite.getSearchDao();
474540
HashJoinElasticRequestBuilder explain = (HashJoinElasticRequestBuilder) searchDao.explain(query).explain();

0 commit comments

Comments
 (0)