#29 and other SET Syntax response

This commit is contained in:
yanhuqing666
2017-03-07 17:35:27 +08:00
parent b6404d69a6
commit d2d2d4c044
9 changed files with 66 additions and 47 deletions

View File

@@ -71,9 +71,9 @@ public class RouteService {
String cacheKey = null;
/**
* SELECT 类型的SQL, 检测
* SELECT 类型的SQL, 检测,debug 模式下不缓存
*/
if (sqlType == ServerParse.SELECT) {
if (sqlType == ServerParse.SELECT && !LOGGER.isDebugEnabled()) {
cacheKey = (schema == null ? "NULL_" : schema.getName()) + stmt;
rrs = (RouteResultset) sqlRouteCache.get(cacheKey);
if (rrs != null) {
@@ -135,7 +135,7 @@ public class RouteService {
charset, sc, tableId2DataNodeCache);
}
if (rrs != null && sqlType == ServerParse.SELECT && rrs.isCacheAble()) {
if (rrs != null && sqlType == ServerParse.SELECT && rrs.isCacheAble()&&!LOGGER.isDebugEnabled()) {
sqlRouteCache.putIfAbsent(cacheKey, rrs);
}
return rrs;

View File

@@ -12,9 +12,7 @@ import io.mycat.config.model.SchemaConfig;
import io.mycat.config.model.SystemConfig;
import io.mycat.route.RouteResultset;
import io.mycat.route.RouteStrategy;
import io.mycat.route.util.RouterUtil;
import io.mycat.server.ServerConnection;
import io.mycat.server.parser.ServerParse;
import io.mycat.sqlengine.mpp.LoadData;
public abstract class AbstractRouteStrategy implements RouteStrategy {
@@ -52,8 +50,6 @@ public abstract class AbstractRouteStrategy implements RouteStrategy {
if (schema == null) {
rrs = routeNormalSqlWithAST(schema, stmt, rrs, charset, cachePool);
} else if (schema.isNoSharding() && ServerParse.SHOW != sqlType) {
rrs = RouterUtil.routeToSingleNode(rrs, schema.getDataNode());
} else {
RouteResultset returnedSet = routeSystemInfo(schema, sqlType, stmt, rrs);
if (returnedSet == null) {

View File

@@ -63,7 +63,7 @@ public class DruidParserFactory
} else if (statement instanceof SQLDropIndexStatement) {
parser = new DruidDropIndexParser();
} else {
String msg = "THE DLL is not supported :" + statement;
String msg = "THE DDL is not supported :" + statement;
throw new SQLNonTransientException(msg);
}
} else {

View File

@@ -94,8 +94,12 @@ public class DefaultDruidParser implements DruidParser {
String key = entry.getKey();
String value = entry.getValue();
if (MycatServer.getInstance().getConfig().getSystem().isLowerCaseTableNames()) {
key = key.toLowerCase();
value = value.toLowerCase();
if (key != null){
key = key.toLowerCase();
}
if (value != null){
value = value.toLowerCase();
}
}
if (key != null && key.indexOf("`") >= 0) {
key = key.replaceAll("`", "");

View File

@@ -27,7 +27,16 @@ import io.mycat.route.parser.util.ParseUtil;
import io.mycat.server.ServerConnection;
import io.mycat.server.parser.ServerParse;
import io.mycat.server.parser.ServerParseSelect;
import io.mycat.server.response.*;
import io.mycat.server.response.SelectDatabase;
import io.mycat.server.response.SelectIdentity;
import io.mycat.server.response.SelectLastInsertId;
import io.mycat.server.response.SelectTxReadOnly;
import io.mycat.server.response.SelectUser;
import io.mycat.server.response.SelectVariables;
import io.mycat.server.response.SelectVersion;
import io.mycat.server.response.SelectVersionComment;
import io.mycat.server.response.SessionIncrement;
import io.mycat.server.response.SessionIsolation;
/**
* @author mycat
@@ -95,11 +104,11 @@ public final class SelectHandler {
offset = ServerParseSelect.skipAs(stmt, offset);
SelectIdentity.response(c, stmt, offset, orgName);
break;
case ServerParseSelect.SELECT_VAR_ALL:
SelectVariables.execute(c,stmt);
break;
case ServerParseSelect.SESSION_TX_READ_ONLY:
SelectTxReadOnly.response(c);
case ServerParseSelect.SELECT_VAR_ALL:
SelectVariables.execute(c, stmt);
break;
case ServerParseSelect.SESSION_TX_READ_ONLY:
SelectTxReadOnly.response(c);
break;
default:
c.execute(stmt, ServerParse.SELECT);

View File

@@ -162,9 +162,12 @@ public final class SetHandler {
boolean ignore = SetIgnoreUtil.isIgnoreStmt(stmt);
if ( !ignore ) {
StringBuilder s = new StringBuilder();
logger.warn(s.append(c).append(stmt).append(" is not recoginized and ignored").toString());
}
c.write(c.writeToBuffer(OkPacket.OK, c.allocate()));
String warn = stmt+ " is not recoginized and ignored";
logger.warn(s.append(c).append(warn).toString());
c.writeErrMessage(ErrorCode.ERR_NOT_SUPPORTED, warn);
} else {
c.write(c.writeToBuffer(OkPacket.OK, c.allocate()));
}
}
}
}

View File

@@ -95,22 +95,17 @@ public final class ServerParseSelect {
* @return
*/
private static int sessionVarCheck(String stmt, int offset) {
String s = stmt.substring(offset).toLowerCase();
if (s.startsWith("session.auto_increment_increment")) {
if(s.contains("@@"))
{
return SELECT_VAR_ALL;
}
String s = stmt.substring(offset).toLowerCase();
if (s.startsWith("session.auto_increment_increment")) {
if (s.contains("@@")) {
return SELECT_VAR_ALL;
}
return SESSION_INCREMENT;
} else if (s
.startsWith("session.tx_isolation")) {
} else if (s.startsWith("session.tx_isolation")) {
return SESSION_ISOLATION;
}
else if (s
.startsWith("session.tx_read_only")) {
} else if (s.startsWith("session.tx_read_only")) {
return SESSION_TX_READ_ONLY;
}
else {
} else {
return OTHER;
}
}

View File

@@ -23,29 +23,24 @@
*/
package io.mycat.server.response;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Splitter;
import io.mycat.backend.BackendConnection;
import io.mycat.backend.mysql.PacketUtil;
import io.mycat.config.Fields;
import io.mycat.net.mysql.EOFPacket;
import io.mycat.net.mysql.FieldPacket;
import io.mycat.net.mysql.ResultSetHeaderPacket;
import io.mycat.net.mysql.RowDataPacket;
import io.mycat.server.NonBlockingSession;
import io.mycat.server.ServerConnection;
import io.mycat.util.LongUtil;
import io.mycat.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author mycat

View File

@@ -27,6 +27,7 @@ import java.nio.ByteBuffer;
import io.mycat.backend.mysql.PacketUtil;
import io.mycat.config.Fields;
import io.mycat.config.Isolations;
import io.mycat.net.mysql.EOFPacket;
import io.mycat.net.mysql.FieldPacket;
import io.mycat.net.mysql.ResultSetHeaderPacket;
@@ -61,7 +62,23 @@ public class SessionIsolation {
buffer = eof.write(buffer, c,true);
byte packetId = eof.packetId;
RowDataPacket row = new RowDataPacket(FIELD_COUNT);
row.add(StringUtil.encode("REPEATABLE-READ",c.getCharset()));
String value = "";
switch (c.getTxIsolation()) {
case Isolations.READ_COMMITTED:
value = "READ-COMMITTED";
break;
case Isolations.READ_UNCOMMITTED:
value = "READ-UNCOMMITTED";
break;
case Isolations.REPEATED_READ:
value = "REPEATED-READ";
break;
case Isolations.SERIALIZABLE:
value = "SERIALIZABLE";
break;
}
row.add(StringUtil.encode(value,c.getCharset()));
row.packetId = ++packetId;
buffer = row.write(buffer, c,true);
EOFPacket lastEof = new EOFPacket();