mirror of
https://github.com/actiontech/dble.git
synced 2026-04-26 08:09:56 -05:00
schema null error
This commit is contained in:
+10
-2
@@ -13,6 +13,7 @@ import com.actiontech.dble.backend.mysql.nio.handler.query.impl.join.JoinHandler
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.query.impl.join.NotInHandler;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.util.CallBackHandler;
|
||||
import com.actiontech.dble.config.ErrorCode;
|
||||
import com.actiontech.dble.config.model.SchemaConfig;
|
||||
import com.actiontech.dble.plan.common.exception.MySQLOutPutException;
|
||||
import com.actiontech.dble.plan.common.item.Item;
|
||||
import com.actiontech.dble.plan.common.item.Item.ItemType;
|
||||
@@ -61,12 +62,19 @@ class JoinNodeHandlerBuilder extends BaseHandlerBuilder {
|
||||
pdVisitor.visit();
|
||||
sql = pdVisitor.getSql().toString();
|
||||
}
|
||||
SchemaConfig schemaConfig;
|
||||
String schemaName = this.session.getSource().getSchema();
|
||||
if (schemaName != null) {
|
||||
schemaConfig = schemaConfigMap.get(schemaName);
|
||||
} else {
|
||||
schemaConfig = schemaConfigMap.entrySet().iterator().next().getValue(); //random schemaConfig
|
||||
}
|
||||
RouteResultsetNode[] rrssArray;
|
||||
// maybe some node is view
|
||||
if (sql == null) {
|
||||
rrssArray = mergeBuilder.construct().getNodes();
|
||||
rrssArray = mergeBuilder.construct(schemaConfig).getNodes();
|
||||
} else {
|
||||
rrssArray = mergeBuilder.constructByStatement(sql, node.getAst()).getNodes();
|
||||
rrssArray = mergeBuilder.constructByStatement(sql, node.getAst(), schemaConfig).getNodes();
|
||||
}
|
||||
this.needCommon = mergeBuilder.getNeedCommonFlag();
|
||||
buildMergeHandler(node, rrssArray);
|
||||
|
||||
+7
-6
@@ -27,6 +27,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class MergeBuilder {
|
||||
|
||||
private boolean needCommonFlag;
|
||||
private PlanNode node;
|
||||
private NonBlockingSession session;
|
||||
@@ -47,19 +48,19 @@ public class MergeBuilder {
|
||||
* @return RouteResultset
|
||||
* @throws SQLException SQLException
|
||||
*/
|
||||
public RouteResultset construct() throws SQLException {
|
||||
public RouteResultset construct(SchemaConfig schemaConfig) throws SQLException {
|
||||
pdVisitor.visit();
|
||||
String sql = pdVisitor.getSql().toString();
|
||||
return constructByQuery(sql);
|
||||
return constructByQuery(sql, schemaConfig);
|
||||
}
|
||||
|
||||
public RouteResultset constructByQuery(String sql) throws SQLException {
|
||||
public RouteResultset constructByQuery(String sql, SchemaConfig schemaConfig) throws SQLException {
|
||||
SQLStatementParser parser = new MySqlStatementParser(sql);
|
||||
SQLSelectStatement select = (SQLSelectStatement) parser.parseStatement();
|
||||
return constructByStatement(sql, select);
|
||||
return constructByStatement(sql, select, schemaConfig);
|
||||
}
|
||||
|
||||
public RouteResultset constructByStatement(String sql, SQLSelectStatement select) throws SQLException {
|
||||
public RouteResultset constructByStatement(String sql, SQLSelectStatement select, SchemaConfig schemaConfig) throws SQLException {
|
||||
ServerSchemaStatVisitor visitor = new ServerSchemaStatVisitor();
|
||||
DruidSingleUnitSelectParser druidParser = new DruidSingleUnitSelectParser();
|
||||
|
||||
@@ -72,7 +73,7 @@ public class MergeBuilder {
|
||||
}
|
||||
}
|
||||
druidParser.setSchemaMap(tableConfigMap);
|
||||
return RouterUtil.routeFromParserComplex(druidParser, tableConfigMap, rrs, select, sql, pool, visitor, session.getSource(), node);
|
||||
return RouterUtil.routeFromParserComplex(schemaConfig, druidParser, tableConfigMap, rrs, select, sql, pool, visitor, session.getSource(), node);
|
||||
|
||||
}
|
||||
|
||||
|
||||
+8
-4
@@ -5,9 +5,11 @@
|
||||
|
||||
package com.actiontech.dble.backend.mysql.nio.handler.builder;
|
||||
|
||||
import com.actiontech.dble.DbleServer;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.builder.sqlvisitor.PushDownVisitor;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler;
|
||||
import com.actiontech.dble.config.ErrorCode;
|
||||
import com.actiontech.dble.config.model.SchemaConfig;
|
||||
import com.actiontech.dble.config.model.TableConfig;
|
||||
import com.actiontech.dble.config.model.TableConfig.TableTypeEnum;
|
||||
import com.actiontech.dble.plan.common.exception.MySQLOutPutException;
|
||||
@@ -52,12 +54,13 @@ class TableNodeHandlerBuilder extends BaseHandlerBuilder {
|
||||
pdVisitor.visit();
|
||||
sql = pdVisitor.getSql().toString();
|
||||
}
|
||||
SchemaConfig schemaConfig = DbleServer.getInstance().getConfig().getSchemas().get(node.getSchema());
|
||||
RouteResultsetNode[] rrssArray;
|
||||
// maybe some node is view
|
||||
if (sql == null) {
|
||||
rrssArray = mergeBuilder.construct().getNodes();
|
||||
rrssArray = mergeBuilder.construct(schemaConfig).getNodes();
|
||||
} else {
|
||||
rrssArray = mergeBuilder.constructByStatement(sql, node.getAst()).getNodes();
|
||||
rrssArray = mergeBuilder.constructByStatement(sql, node.getAst(), schemaConfig).getNodes();
|
||||
}
|
||||
this.needCommon = mergeBuilder.getNeedCommonFlag();
|
||||
buildMergeHandler(node, rrssArray);
|
||||
@@ -75,10 +78,11 @@ class TableNodeHandlerBuilder extends BaseHandlerBuilder {
|
||||
throw new MySQLOutPutException(ErrorCode.ER_QUERYHANDLER, "", "unexpected exception!");
|
||||
List<RouteResultsetNode> rrssList = new ArrayList<>();
|
||||
MergeBuilder mergeBuilder = new MergeBuilder(session, node, needCommon, pdVisitor);
|
||||
SchemaConfig schemaConfig = DbleServer.getInstance().getConfig().getSchemas().get(node.getSchema());
|
||||
if (tableConfig == null || tableConfig.getTableType() == TableTypeEnum.TYPE_GLOBAL_TABLE) {
|
||||
for (Item filter : filters) {
|
||||
node.setWhereFilter(filter);
|
||||
RouteResultsetNode[] rrssArray = mergeBuilder.construct().getNodes();
|
||||
RouteResultsetNode[] rrssArray = mergeBuilder.construct(schemaConfig).getNodes();
|
||||
rrssList.addAll(Arrays.asList(rrssArray));
|
||||
}
|
||||
if (filters.size() == 1) {
|
||||
@@ -89,7 +93,7 @@ class TableNodeHandlerBuilder extends BaseHandlerBuilder {
|
||||
for (Item filter : filters) {
|
||||
node.setWhereFilter(filter);
|
||||
pdVisitor.visit();
|
||||
RouteResultsetNode[] rrssArray = mergeBuilder.construct().getNodes();
|
||||
RouteResultsetNode[] rrssArray = mergeBuilder.construct(schemaConfig).getNodes();
|
||||
rrssList.addAll(Arrays.asList(rrssArray));
|
||||
}
|
||||
if (tryGlobal) {
|
||||
|
||||
@@ -124,10 +124,10 @@ public final class RouterUtil {
|
||||
}
|
||||
|
||||
|
||||
public static RouteResultset routeFromParserComplex(DruidParser druidParser, Map<String, SchemaConfig> schemaMap, RouteResultset rrs, SQLStatement statement,
|
||||
public static RouteResultset routeFromParserComplex(SchemaConfig schemaConfig, DruidParser druidParser, Map<String, SchemaConfig> schemaMap, RouteResultset rrs, SQLStatement statement,
|
||||
String originSql, LayerCachePool cachePool, ServerSchemaStatVisitor visitor,
|
||||
ServerConnection sc, PlanNode node) throws SQLException {
|
||||
druidParser.parser(null, rrs, statement, originSql, cachePool, visitor, sc);
|
||||
druidParser.parser(schemaConfig, rrs, statement, originSql, cachePool, visitor, sc);
|
||||
if (rrs.isFinishedExecute()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user