use of com.alibaba.druid.sql.ast.SQLObject in project druid by alibaba.
the class WallVisitorUtils method isTopFromDenySchema.
private static boolean isTopFromDenySchema(WallVisitor visitor, SQLMethodInvokeExpr x) {
SQLObject parent = x.getParent();
for (; ; ) {
if (parent instanceof SQLExpr || parent instanceof Item || parent instanceof SQLSelectItem) {
parent = parent.getParent();
} else {
break;
}
}
if (parent instanceof SQLSelectQueryBlock) {
SQLSelectQueryBlock queryBlock = (SQLSelectQueryBlock) parent;
if (!(queryBlock.getParent() instanceof SQLSelect)) {
return false;
}
SQLSelect select = (SQLSelect) queryBlock.getParent();
if (!(select.getParent() instanceof SQLSelectStatement)) {
return false;
}
SQLSelectStatement stmt = (SQLSelectStatement) select.getParent();
if (stmt.getParent() != null) {
return false;
}
SQLTableSource from = queryBlock.getFrom();
if (from instanceof SQLExprTableSource) {
SQLExpr fromExpr = ((SQLExprTableSource) from).getExpr();
if (fromExpr instanceof SQLName) {
String fromTableName = fromExpr.toString();
return visitor.isDenyTable(fromTableName);
}
}
return false;
}
return false;
}
use of com.alibaba.druid.sql.ast.SQLObject in project druid by alibaba.
the class WallVisitorUtils method isFirstSelectTableSource.
private static boolean isFirstSelectTableSource(SQLObject x) {
for (; ; ) {
if (x instanceof SQLExpr) {
x = x.getParent();
} else {
break;
}
}
if (!(x instanceof SQLExprTableSource)) {
return false;
}
SQLSelectQueryBlock queryBlock = null;
SQLObject parent = x.getParent();
while (parent != null) {
if (parent instanceof SQLSelectQueryBlock) {
queryBlock = (SQLSelectQueryBlock) parent;
break;
}
x = parent;
parent = x.getParent();
}
if (queryBlock == null) {
return false;
}
boolean isWhereQueryExpr = false;
boolean isSelectItem = false;
do {
x = parent;
parent = parent.getParent();
if (parent instanceof SQLUnionQuery) {
SQLUnionQuery union = (SQLUnionQuery) parent;
if (union.getRight() == x && hasTableSource(union.getLeft())) {
return false;
}
} else if (parent instanceof SQLQueryExpr || parent instanceof SQLInSubQueryExpr || parent instanceof SQLExistsExpr) {
isWhereQueryExpr = isWhereOrHaving(parent);
} else if (parent instanceof SQLSelectItem) {
isSelectItem = true;
} else if ((isWhereQueryExpr || isSelectItem) && parent instanceof SQLSelectQueryBlock) {
if (hasTableSource((SQLSelectQueryBlock) parent)) {
return false;
}
}
} while (parent != null);
return true;
}
use of com.alibaba.druid.sql.ast.SQLObject in project druid by alibaba.
the class WallVisitorUtils method isSelectStatmentForMultiTenant.
private static boolean isSelectStatmentForMultiTenant(SQLSelectQueryBlock queryBlock) {
SQLObject parent = queryBlock.getParent();
while (parent != null) {
if (parent instanceof SQLUnionQuery) {
SQLObject x = parent;
parent = x.getParent();
} else {
break;
}
}
if (!(parent instanceof SQLSelect)) {
return false;
}
parent = ((SQLSelect) parent).getParent();
if (parent instanceof SQLSelectStatement) {
return true;
}
return false;
}
Aggregations