com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement Java Examples
The following examples show how to use
com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: DruidMycatRouteStrategy.java From Mycat2 with GNU General Public License v3.0 | 5 votes |
/** * 检验不支持的SQLStatement类型 :不支持的类型直接抛SQLSyntaxErrorException异常 * @param statement * @throws SQLSyntaxErrorException */ private void checkUnSupportedStatement(SQLStatement statement) throws SQLSyntaxErrorException { //不支持replace语句 if(statement instanceof MySqlReplaceStatement) { throw new SQLSyntaxErrorException(" ReplaceStatement can't be supported,use insert into ...on duplicate key update... instead "); } }
Example #2
Source File: MycatPrivileges.java From Mycat2 with GNU General Public License v3.0 | 4 votes |
@Override public boolean checkDmlPrivilege(String user, String schema, String sql) { if ( schema == null ) { return true; } boolean isPassed = false; MycatConfig conf = MycatServer.getInstance().getConfig(); UserConfig userConfig = conf.getUsers().get(user); if (userConfig != null) { UserPrivilegesConfig userPrivilege = userConfig.getPrivilegesConfig(); if ( userPrivilege != null && userPrivilege.isCheck() ) { UserPrivilegesConfig.SchemaPrivilege schemaPrivilege = userPrivilege.getSchemaPrivilege( schema ); if ( schemaPrivilege != null ) { String tableName = null; int index = -1; //TODO 此处待优化,寻找更优SQL 解析器 //修复bug // https://github.com/alibaba/druid/issues/1309 //com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'begin',expect END, actual EOF begin if ( sql != null && sql.length() == 5 && sql.equalsIgnoreCase("begin") ) { return true; } SQLStatementParser parser = new MycatStatementParser(sql); SQLStatement stmt = parser.parseStatement(); if (stmt instanceof MySqlReplaceStatement || stmt instanceof SQLInsertStatement ) { index = 0; } else if (stmt instanceof SQLUpdateStatement ) { index = 1; } else if (stmt instanceof SQLSelectStatement ) { index = 2; } else if (stmt instanceof SQLDeleteStatement ) { index = 3; } if ( index > -1) { SchemaStatVisitor schemaStatVisitor = new MycatSchemaStatVisitor(); stmt.accept(schemaStatVisitor); String key = schemaStatVisitor.getCurrentTable(); if ( key != null ) { if (key.contains("`")) { key = key.replaceAll("`", ""); } int dotIndex = key.indexOf("."); if (dotIndex > 0) { tableName = key.substring(dotIndex + 1); } else { tableName = key; } //获取table 权限, 此处不需要检测空值, 无设置则自动继承父级权限 UserPrivilegesConfig.TablePrivilege tablePrivilege = schemaPrivilege.getTablePrivilege( tableName ); if ( tablePrivilege.getDml()[index] > 0 ) { isPassed = true; } } else { //skip isPassed = true; } } else { //skip isPassed = true; } } else { //skip isPassed = true; } } else { //skip isPassed = true; } } else { //skip isPassed = true; } if( !isPassed ) { ALARM.error(new StringBuilder().append(Alarms.DML_ATTACK ).append("[sql=").append( sql ) .append(",user=").append(user).append(']').toString()); } return isPassed; }