add wall test

This commit is contained in:
温少
2012-03-16 00:46:06 +08:00
7 changed files with 120 additions and 20 deletions
@@ -209,6 +209,19 @@ public class WallVisitorUtils {
return ((String) firstValue).length();
}
}
if ("if".equalsIgnoreCase(methodName) && x.getParameters().size() == 3) {
SQLExpr first = x.getParameters().get(0);
Object firstResult = getValue(first);
if (Boolean.TRUE == firstResult) {
return getValue(x.getParameters().get(1));
}
if (Boolean.FALSE == firstResult) {
getValue(x.getParameters().get(2));
}
}
return null;
}
@@ -277,6 +290,8 @@ public class WallVisitorUtils {
if (propExpr.getOwner() instanceof SQLIdentifierExpr) {
String ownerName = ((SQLIdentifierExpr) propExpr.getOwner()).getName();
ownerName = form(ownerName);
if (visitor.getPermitSchemas().contains(ownerName.toLowerCase())) {
visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x)));
@@ -327,6 +342,9 @@ public class WallVisitorUtils {
if (name.startsWith("\"") && name.endsWith("\"")) {
name = name.substring(1, name.length() - 1);
}
if (name.startsWith("`") && name.endsWith("`")) {
name = name.substring(1, name.length() - 1);
}
name = name.toLowerCase();
return name;
@@ -273,9 +273,9 @@ public class SQLExprParser extends SQLParser {
accept(Token.RPAREN);
notTarget = exprRest(notTarget);
sqlExpr = new SQLNotExpr(notTarget);
return primaryRest(sqlExpr);
} else {
SQLExpr restExpr = expr();
@@ -468,6 +468,11 @@ public class SQLExprParser extends SQLParser {
if (lexer.token() == Token.DOT) {
lexer.nextToken();
if (expr instanceof SQLCharExpr) {
String text = ((SQLCharExpr) expr).getText();
expr = new SQLIdentifierExpr(text);
}
expr = dotRest(expr);
return primaryRest(expr);
} else if (lexer.token() == Token.COLONEQ) {
@@ -635,7 +640,11 @@ public class SQLExprParser extends SQLParser {
throw new ParserException("error, " + lexer.token());
}
name = new SQLPropertyExpr(name, lexer.stringVal());
if (lexer.token() == Token.LITERAL_ALIAS) {
name = new SQLPropertyExpr(name, '"' + lexer.stringVal() + '"');
} else {
name = new SQLPropertyExpr(name, lexer.stringVal());
}
lexer.nextToken();
}
@@ -227,6 +227,11 @@ public class SQLSelectParser extends SQLParser {
}
private void parseTableSourceQueryTableExpr(SQLExprTableSource tableReference) throws ParserException {
if (lexer.token() == Token.LITERAL_ALIAS || lexer.token() == Token.IDENTIFIED || lexer.token() == Token.LITERAL_CHARS) {
tableReference.setExpr(this.createExprParser().name());
return;
}
tableReference.setExpr(expr());
}