Skip to content

Commit

Permalink
subquery alias #266
Browse files Browse the repository at this point in the history
  • Loading branch information
yanhuqing666 committed Sep 29, 2017
1 parent 38a0cac commit 8e14546
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,16 @@ public ReplaceableStringBuilder getSql() {

public abstract void visit();

/**
* @param tableNode
*/

protected void buildTableName(TableNode tableNode, StringBuilder sb) {
sb.append(" `").append(tableNode.getPureName()).append("`");
String alias = tableNode.getAlias();
if (alias != null) {
sb.append(" `").append(alias).append("`");
} else if (tableNode.getSubAlias() != null) {
sb.append(" `").append(tableNode.getSubAlias()).append("`");
if (tableNode.getSubAlias() != null) {
if (alias != null) {
sb.append(" `").append(alias).append("`");
} else {
sb.append(" `").append(tableNode.getSubAlias()).append("`");
}
}
List<SQLHint> hintList = tableNode.getHintList();
if (hintList != null && !hintList.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,14 @@ public static PlanNode optimize(PlanNode qtn) {
/**
* find query node in qtn ,change to other 3 type node
*
* @param qtn
* @return
*/
private static PlanNode tryTransformerQuery(PlanNode qtn, BoolPtr boolptr) {
boolean childMerged = false;
for (int index = 0; index < qtn.getChildren().size(); index++) {
PlanNode child = qtn.getChildren().get(index);
BoolPtr cbptr = new BoolPtr(false);
PlanNode newChild = tryTransformerQuery(child, cbptr);
if (cbptr.get())
BoolPtr boolPtr = new BoolPtr(false);
PlanNode newChild = tryTransformerQuery(child, boolPtr);
if (boolPtr.get())
childMerged = true;
qtn.getChildren().set(index, newChild);
}
Expand All @@ -64,13 +62,11 @@ private static PlanNode tryTransformerQuery(PlanNode qtn, BoolPtr boolptr) {
/**
* transformerQuery
*
* @param query
* @return
*/
private static PlanNode transformerQuery(QueryNode query, BoolPtr boolptr) {
boolean canBeMerged = ViewUtil.canBeMerged(query.getChild());
if (canBeMerged) {
// merge viewnode's property to view's child
// merge view node's property to view's child
PlanNode newNode = mergeNode(query, query.getChild());
boolptr.set(true);
return newNode;
Expand All @@ -83,18 +79,15 @@ private static PlanNode transformerQuery(QueryNode query, BoolPtr boolptr) {
* merge parent's property to child,and return new child,
* of course ,the child is canBeMerged
*
* @param parent
* @param child
* @return
*/
private static PlanNode mergeNode(PlanNode parent, PlanNode child) {
final List<Item> newSels = mergeSelect(parent, child);
final List<Item> newSelects = mergeSelect(parent);
mergeWhere(parent, child);
mergeGroupBy(parent, child);
mergeHaving(parent, child);
mergeOrderBy(parent, child);
mergeLimit(parent, child);
child.setColumnsSelected(newSels);
child.setColumnsSelected(newSelects);
if (!StringUtils.isEmpty(parent.getAlias())) {
child.setAlias(parent.getAlias());
} else if (!StringUtils.isEmpty(parent.getSubAlias())) {
Expand All @@ -110,14 +103,12 @@ private static PlanNode mergeNode(PlanNode parent, PlanNode child) {
* sql:select idd + 1 from v_t1 ==> select (id+1) + 1 from t1 tt1 order by
* id+1
*
* @return child should contains new select's infos
* @notice
*/

private static List<Item> mergeSelect(PlanNode parent, PlanNode child) {
List<Item> pSels = parent.getColumnsSelected();
List<Item> cNewSels = new ArrayList<>();
for (Item pSel : pSels) {
private static List<Item> mergeSelect(PlanNode parent) {
List<Item> pSelects = parent.getColumnsSelected();
List<Item> cNewSelects = new ArrayList<>();
for (Item pSel : pSelects) {
Item pSel0 = PlanUtil.pushDownItem(parent, pSel, true);
String selName = pSel.getAlias();
if (StringUtils.isEmpty(selName)) {
Expand All @@ -128,9 +119,9 @@ private static List<Item> mergeSelect(PlanNode parent, PlanNode child) {
selName = Item.FNAF + selName;
}
pSel0.setAlias(selName);
cNewSels.add(pSel0);
cNewSelects.add(pSel0);
}
return cNewSels;
return cNewSelects;
}

private static void mergeWhere(PlanNode parent, PlanNode child) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,9 @@ public boolean visit(SQLSubqueryTableSource subQueryTables) {
this.tableNode.setSubQuery(true);
if (subQueryTables.getAlias() != null) {
tableNode.alias(subQueryTables.getAlias());
if (tableNode.getSubAlias() == null) {
tableNode.setSubAlias(tableNode.getAlias());
}
}
return true;
}
Expand Down

0 comments on commit 8e14546

Please sign in to comment.