Skip to content

Commit a6498d1

Browse files
authored
Add get multi level parent method. (#6460)
* Add get multi level parent method. * Add get multi level parent method.
1 parent d7d5d49 commit a6498d1

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

core/src/main/java/com/alibaba/druid/sql/ast/SQLObject.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ default void setSource(int column, int line) {
3737
SQLObject clone();
3838

3939
SQLObject getParent();
40+
SQLObject getParent(int level);
4041

4142
void setParent(SQLObject parent);
4243

core/src/main/java/com/alibaba/druid/sql/ast/SQLObjectImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,19 @@ public String toString() {
108108
public SQLObject getParent() {
109109
return parent;
110110
}
111+
public SQLObject getParent(int level) {
112+
if (level <= 0) {
113+
throw new IllegalArgumentException("Get parent level should be greater than 0.");
114+
}
115+
SQLObject parent = this;
116+
while (level-- > 0) {
117+
if (parent == null) {
118+
return null;
119+
}
120+
parent = parent.getParent();
121+
}
122+
return parent;
123+
}
111124

112125
public void setParent(SQLObject parent) {
113126
this.parent = parent;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.alibaba.druid.bvt.sql;
2+
3+
import com.alibaba.druid.sql.ast.SQLObject;
4+
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
5+
import org.junit.Assert;
6+
import org.junit.Test;
7+
8+
public class GetParentTest {
9+
@Test
10+
public void test() {
11+
SQLObject obj1 = new SQLIdentifierExpr("1");
12+
SQLObject obj2 = new SQLIdentifierExpr("2");
13+
obj2.setParent(obj1);
14+
SQLObject obj3 = new SQLIdentifierExpr("3");
15+
obj3.setParent(obj2);
16+
Assert.assertEquals(obj2, obj3.getParent(1));
17+
Assert.assertEquals(obj1, obj3.getParent(2));
18+
Assert.assertNull(obj3.getParent(3));
19+
Assert.assertNull(obj3.getParent(4));
20+
}
21+
}

0 commit comments

Comments
 (0)