Skip to content

Commit

Permalink
[需求](Issues MyCATApache#1261) 解析select for update时当做是更新语句
Browse files Browse the repository at this point in the history
  • Loading branch information
HashJang committed Dec 9, 2016
1 parent 074e585 commit d6100be
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 3 deletions.
10 changes: 10 additions & 0 deletions src/main/java/io/mycat/route/RouteResultset.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,16 @@ public final class RouteResultset implements Serializable {
//key=dataNode value=slot
private Map<String,Integer> dataNodeSlotMap=new HashMap<>();

private boolean selectForUpdate;

public boolean isSelectForUpdate() {
return selectForUpdate;
}

public void setSelectForUpdate(boolean selectForUpdate) {
this.selectForUpdate = selectForUpdate;
}

public Map<String, Integer> getDataNodeSlotMap() {
return dataNodeSlotMap;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import java.util.List;
import java.util.Map;

import com.alibaba.druid.sql.ast.statement.SQLSelectQuery;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;

import com.alibaba.druid.sql.ast.SQLStatement;
Expand Down Expand Up @@ -95,7 +98,16 @@ public void visitorParse(RouteResultset rrs, SQLStatement stmt,MycatSchemaStatVi

stmt.accept(visitor);
ctx.setVisitor(visitor);


if(stmt instanceof SQLSelectStatement){
SQLSelectQuery query = ((SQLSelectStatement) stmt).getSelect().getQuery();
if(query instanceof MySqlSelectQueryBlock){
if(((MySqlSelectQueryBlock)query).isForUpdate()){
rrs.setSelectForUpdate(true);
}
}
}

List<List<Condition>> mergedConditionList = new ArrayList<List<Condition>>();
if(visitor.hasOrCondition()) {//包含or语句
//TODO
Expand Down
1 change: 0 additions & 1 deletion src/main/java/io/mycat/server/NonBlockingSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ public void execute(RouteResultset rrs, int type) {
} else {
multiNodeHandler.execute();
}

} catch (Exception e) {
LOGGER.warn(new StringBuilder().append(source).append(rrs).toString(), e);
source.writeErrMessage(ErrorCode.ERR_HANDLE_DATA, e.toString());
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/mycat/server/ServerConnection.java
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ public void routeEndExecuteSQL(String sql, int type, SchemaConfig schema) {
}
if (rrs != null) {
// session执行
session.execute(rrs, type);
session.execute(rrs, rrs.isSelectForUpdate()?ServerParse.UPDATE:type);
}
}

Expand Down

0 comments on commit d6100be

Please sign in to comment.