mirror of
https://github.com/actiontech/dble.git
synced 2026-01-23 21:38:34 -06:00
#29 and other SET Syntax response
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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("`", "");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user