提交 046029cb 编写于 作者: S serge-rider

PG: explain plan (text format)

上级 f96edf82
......@@ -96,6 +96,8 @@ public interface PostgreServerExtension
List<PostgrePrivilege> readObjectPermissions(DBRProgressMonitor monitor, PostgreTableBase object, boolean includeNestedObjects) throws DBException;
boolean supportsExplainPlan();
boolean supportsExplainPlanXML();
boolean supportsExplainPlanVerbose();
......
......@@ -141,6 +141,21 @@ public class PostgreServerCockroachDB extends PostgreServerExtensionBase {
return false;
}
@Override
public boolean supportsExplainPlan() {
return false;
}
@Override
public boolean supportsExplainPlanVerbose() {
return false;
}
@Override
public boolean supportsExplainPlanXML() {
return false;
}
@Override
public List<PostgrePrivilege> readObjectPermissions(DBRProgressMonitor monitor, PostgreTableBase table, boolean includeNestedObjects) throws DBException {
try (JDBCSession session = DBUtils.openMetaSession(monitor, table, "Load CockroachDB table grants")) {
......
......@@ -307,6 +307,11 @@ public abstract class PostgreServerExtensionBase implements PostgreServerExtensi
return tablePermissions;
}
@Override
public boolean supportsExplainPlan() {
return true;
}
@Override
public boolean supportsExplainPlanXML() {
return dataSource.isServerVersionAtLeast(9, 0);
......
......@@ -179,7 +179,11 @@ public class PostgrePlanAnalyser extends AbstractExecutionPlan {
curNode.addProp(line);
continue;
} else {
curNode.addProp(line);
if (curNode != null) {
curNode.addProp(line);
} else {
log.debug("Unexpected node line: " + line);
}
continue;
}
curIndent = lineIndent;
......
......@@ -56,9 +56,9 @@ public class PostgreQueryPlaner extends AbstractExecutionPlanSerializer implemen
@Override
public DBCPlan planQueryExecution(@NotNull DBCSession session, @NotNull String query) throws DBCException {
PostgrePlanAnalyser plan = new PostgrePlanAnalyser(
getPlanStyle() == DBCPlanStyle.QUERY,
dataSource.getServerType().supportsExplainPlanVerbose(),
query);
!dataSource.getServerType().supportsExplainPlanXML(),
dataSource.getServerType().supportsExplainPlanVerbose(),
query);
plan.explain(session);
return plan;
}
......@@ -66,11 +66,11 @@ public class PostgreQueryPlaner extends AbstractExecutionPlanSerializer implemen
@NotNull
@Override
public DBCPlanStyle getPlanStyle() {
return dataSource.getServerType().supportsExplainPlanXML() ? DBCPlanStyle.PLAN : DBCPlanStyle.QUERY;
return dataSource.getServerType().supportsExplainPlan() ? DBCPlanStyle.PLAN : DBCPlanStyle.QUERY;
}
@Override
public void serialize(Writer writer, DBCPlan plan) throws IOException {
public void serialize(@NotNull Writer writer, @NotNull DBCPlan plan) throws IOException {
serializeJson(writer, plan, dataSource.getInfo().getDriverName(), new DBCQueryPlannerSerialInfo() {
@Override
......@@ -97,7 +97,7 @@ public class PostgreQueryPlaner extends AbstractExecutionPlanSerializer implemen
}
@Override
public DBCPlan deserialize(Reader planData) throws IOException, InvocationTargetException {
public DBCPlan deserialize(@NotNull Reader planData) throws IOException, InvocationTargetException {
PostgresPlanLoader plan = new PostgresPlanLoader();
plan.deserialize(dataSource, planData);
return plan;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册