Search in sources :

Example 21 with SQLObject

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;
}
Also used : Item(com.alibaba.druid.sql.ast.expr.SQLCaseExpr.Item) SQLObject(com.alibaba.druid.sql.ast.SQLObject) SQLName(com.alibaba.druid.sql.ast.SQLName) SQLExpr(com.alibaba.druid.sql.ast.SQLExpr)

Example 22 with SQLObject

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;
}
Also used : SQLObject(com.alibaba.druid.sql.ast.SQLObject) SQLQueryExpr(com.alibaba.druid.sql.ast.expr.SQLQueryExpr) SQLExistsExpr(com.alibaba.druid.sql.ast.expr.SQLExistsExpr) SQLInSubQueryExpr(com.alibaba.druid.sql.ast.expr.SQLInSubQueryExpr) SQLExpr(com.alibaba.druid.sql.ast.SQLExpr)

Example 23 with SQLObject

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;
}
Also used : SQLObject(com.alibaba.druid.sql.ast.SQLObject)

Aggregations

SQLObject (com.alibaba.druid.sql.ast.SQLObject)23 SQLExpr (com.alibaba.druid.sql.ast.SQLExpr)8 Column (com.alibaba.druid.stat.TableStat.Column)4 SQLName (com.alibaba.druid.sql.ast.SQLName)3 SQLBinaryOpExpr (com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr)3 SQLPropertyExpr (com.alibaba.druid.sql.ast.expr.SQLPropertyExpr)3 SQLCommentHint (com.alibaba.druid.sql.ast.SQLCommentHint)2 SQLIdentifierExpr (com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr)2 SQLInSubQueryExpr (com.alibaba.druid.sql.ast.expr.SQLInSubQueryExpr)2 SQLVariantRefExpr (com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr)2 MySqlForceIndexHint (com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint)2 MySqlIgnoreIndexHint (com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint)2 MySqlUseIndexHint (com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint)2 WallContext (com.alibaba.druid.wall.WallContext)2 Map (java.util.Map)2 DruidRuntimeException (com.alibaba.druid.DruidRuntimeException)1 SQLLimit (com.alibaba.druid.sql.ast.SQLLimit)1 SQLOrderBy (com.alibaba.druid.sql.ast.SQLOrderBy)1 SQLOrderingSpecification (com.alibaba.druid.sql.ast.SQLOrderingSpecification)1 SQLStatement (com.alibaba.druid.sql.ast.SQLStatement)1