Skip to content

Commit ef35b0c

Browse files
author
gituser
committed
Merge branch 'hotfix_1.10_4.0.x_32973' into 1.10_release_4.0.x
2 parents 8d6cc79 + 797e716 commit ef35b0c

File tree

2 files changed

+19
-28
lines changed

2 files changed

+19
-28
lines changed

core/src/main/java/com/dtstack/flink/sql/side/JoinNodeDealer.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ private JoinInfo dealNestJoin(SqlJoin joinNode,
294294
SqlBasicCall buildAs = TableUtils.buildAsNodeByJoinInfo(joinInfo, null, null);
295295

296296
if(rightIsSide){
297-
addSideInfoToExeQueue(queueInfo, joinInfo, joinNode, parentSelectList, parentGroupByList, parentWhere, tableRef);
297+
addSideInfoToExeQueue(queueInfo, joinInfo, joinNode, parentSelectList, parentGroupByList, parentWhere, tableRef, fieldRef);
298298
}
299299

300300
SqlNode newLeftNode = joinNode.getLeft();
@@ -307,7 +307,7 @@ private JoinInfo dealNestJoin(SqlJoin joinNode,
307307

308308
//替换leftNode 为新的查询
309309
joinNode.setLeft(buildAs);
310-
replaceSelectAndWhereField(buildAs, leftJoinNode, tableRef, parentSelectList, parentGroupByList, parentWhere);
310+
replaceSelectAndWhereField(buildAs, leftJoinNode, tableRef, fieldRef, parentSelectList, parentGroupByList, parentWhere);
311311
}
312312

313313
return joinInfo;
@@ -330,7 +330,8 @@ public void addSideInfoToExeQueue(Queue<Object> queueInfo,
330330
SqlNodeList parentSelectList,
331331
SqlNodeList parentGroupByList,
332332
SqlNode parentWhere,
333-
Map<String, String> tableRef){
333+
Map<String, String> tableRef,
334+
Map<String, String> fieldRef){
334335
//只处理维表
335336
if(!joinInfo.isRightIsSideTable()){
336337
return;
@@ -342,7 +343,7 @@ public void addSideInfoToExeQueue(Queue<Object> queueInfo,
342343
//替换左表为新的表名称
343344
joinNode.setLeft(buildAs);
344345

345-
replaceSelectAndWhereField(buildAs, leftJoinNode, tableRef, parentSelectList, parentGroupByList, parentWhere);
346+
replaceSelectAndWhereField(buildAs, leftJoinNode, tableRef, fieldRef, parentSelectList, parentGroupByList, parentWhere);
346347
}
347348

348349
/**
@@ -357,6 +358,7 @@ public void addSideInfoToExeQueue(Queue<Object> queueInfo,
357358
public void replaceSelectAndWhereField(SqlBasicCall buildAs,
358359
SqlNode leftJoinNode,
359360
Map<String, String> tableRef,
361+
Map<String, String> fieldRef,
360362
SqlNodeList parentSelectList,
361363
SqlNodeList parentGroupByList,
362364
SqlNode parentWhere){
@@ -370,23 +372,22 @@ public void replaceSelectAndWhereField(SqlBasicCall buildAs,
370372
}
371373

372374
//替换select field 中的对应字段
373-
HashBiMap<String, String> fieldReplaceRef = HashBiMap.create();
374375
for(SqlNode sqlNode : parentSelectList.getList()){
375376
for(String tbTmp : fromTableNameSet) {
376-
TableUtils.replaceSelectFieldTable(sqlNode, tbTmp, newLeftTableName, fieldReplaceRef);
377+
TableUtils.replaceSelectFieldTable(sqlNode, tbTmp, newLeftTableName, fieldRef);
377378
}
378379
}
379380

380381
//TODO 应该根据上面的查询字段的关联关系来替换
381382
//替换where 中的条件相关
382383
for(String tbTmp : fromTableNameSet){
383-
TableUtils.replaceWhereCondition(parentWhere, tbTmp, newLeftTableName, fieldReplaceRef);
384+
TableUtils.replaceWhereCondition(parentWhere, tbTmp, newLeftTableName, fieldRef);
384385
}
385386

386387
if(parentGroupByList != null){
387388
for(SqlNode sqlNode : parentGroupByList.getList()){
388389
for(String tbTmp : fromTableNameSet) {
389-
TableUtils.replaceSelectFieldTable(sqlNode, tbTmp, newLeftTableName, fieldReplaceRef);
390+
TableUtils.replaceSelectFieldTable(sqlNode, tbTmp, newLeftTableName, fieldRef);
390391
}
391392
}
392393
}
@@ -444,16 +445,15 @@ private void extractTemporaryQuery(SqlNode node, String tableAlias,
444445
queueInfo.offer(sqlBasicCall);
445446

446447
//替换select中的表结构
447-
HashBiMap<String, String> fieldReplaceRef = HashBiMap.create();
448448
for(SqlNode tmpSelect : parentSelectList.getList()){
449449
for(String tbTmp : fromTableNameSet) {
450-
TableUtils.replaceSelectFieldTable(tmpSelect, tbTmp, tableAlias, fieldReplaceRef);
450+
TableUtils.replaceSelectFieldTable(tmpSelect, tbTmp, tableAlias, fieldRef);
451451
}
452452
}
453453

454454
//替换where 中的条件相关
455455
for(String tbTmp : fromTableNameSet){
456-
TableUtils.replaceWhereCondition(parentWhere, tbTmp, tableAlias, fieldReplaceRef);
456+
TableUtils.replaceWhereCondition(parentWhere, tbTmp, tableAlias, fieldRef);
457457
}
458458

459459
for(String tbTmp : fromTableNameSet){

core/src/main/java/com/dtstack/flink/sql/util/TableUtils.java

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ public static void getFromTableInfo(SqlNode fromTable, Set<String> tableNameSet)
312312
public static void replaceSelectFieldTable(SqlNode selectNode,
313313
String oldTbName,
314314
String newTbName,
315-
HashBiMap<String, String> fieldReplaceRef) {
315+
Map<String, String> fieldReplaceRef) {
316316
if (selectNode.getKind() == AS) {
317317
SqlNode leftNode = ((SqlBasicCall) selectNode).getOperands()[0];
318318
replaceSelectFieldTable(leftNode, oldTbName, newTbName, fieldReplaceRef);
@@ -406,22 +406,13 @@ public static void replaceSelectFieldTable(SqlNode selectNode,
406406
private static void replaceOneSelectField(SqlIdentifier sqlIdentifier,
407407
String newTbName,
408408
String oldTbName,
409-
HashBiMap<String, String> fieldReplaceRef){
409+
Map<String, String> fieldReplaceRef){
410410
SqlIdentifier newField = sqlIdentifier.setName(0, newTbName);
411411
String fieldName = sqlIdentifier.names.get(1);
412-
String fieldKey = oldTbName + "_" + fieldName;
413-
414-
if(!fieldReplaceRef.containsKey(fieldKey)){
415-
if(fieldReplaceRef.inverse().get(fieldName) != null){
416-
//换一个名字
417-
String mappingFieldName = ParseUtils.dealDuplicateFieldName(fieldReplaceRef, fieldName);
418-
newField = newField.setName(1, mappingFieldName);
419-
fieldReplaceRef.put(fieldKey, mappingFieldName);
420-
} else {
421-
fieldReplaceRef.put(fieldKey, fieldName);
422-
}
423-
}else {
424-
newField = newField.setName(1, fieldReplaceRef.get(fieldKey));
412+
String fieldKey = oldTbName + "." + fieldName;
413+
if(fieldReplaceRef.get(fieldKey) != null){
414+
String newFieldName = fieldReplaceRef.get(fieldKey).split("\\.")[1];
415+
newField = newField.setName(1, newFieldName);
425416
}
426417

427418
sqlIdentifier.assignNamesFrom(newField);
@@ -522,7 +513,7 @@ public static String getTargetRefField(Map<String, String> refFieldMap, String c
522513
return preFieldName;
523514
}
524515

525-
public static void replaceWhereCondition(SqlNode parentWhere, String oldTbName, String newTbName, HashBiMap<String, String> fieldReplaceRef){
516+
public static void replaceWhereCondition(SqlNode parentWhere, String oldTbName, String newTbName, Map<String, String> fieldReplaceRef){
526517

527518
if(parentWhere == null){
528519
return;
@@ -538,7 +529,7 @@ public static void replaceWhereCondition(SqlNode parentWhere, String oldTbName,
538529
}
539530
}
540531

541-
private static void replaceConditionNode(SqlNode selectNode, String oldTbName, String newTbName, HashBiMap<String, String> fieldReplaceRef) {
532+
private static void replaceConditionNode(SqlNode selectNode, String oldTbName, String newTbName, Map<String, String> fieldReplaceRef) {
542533
if(selectNode.getKind() == IDENTIFIER){
543534
SqlIdentifier sqlIdentifier = (SqlIdentifier) selectNode;
544535

0 commit comments

Comments
 (0)