提交 4285a314 编写于 作者: S serge@jkiss.org

Gp explain plan fix


Former-commit-id: 2e686c83
上级 d967473b
......@@ -90,6 +90,16 @@ public class PostgreServerGreenplum extends PostgreServerExtensionBase {
"LOG", "ERRORS");
}
@Override
public boolean supportsExplainPlanXML() {
return false;
}
@Override
public boolean supportsExplainPlanVerbose() {
return false;
}
@Override
public String createWithClause(PostgreTableRegular table, PostgreTableBase tableBase) {
return GreenplumWithClauseBuilder.generateWithClause(table, tableBase);
......
......@@ -381,7 +381,10 @@ public class PostgreDataSource extends JDBCDataSource implements DBSObjectSelect
@Override
public DBCPlan planQueryExecution(@NotNull DBCSession session, @NotNull String query) throws DBCException
{
PostgrePlanAnalyser plan = new PostgrePlanAnalyser(getPlanStyle() == DBCPlanStyle.QUERY, query);
PostgrePlanAnalyser plan = new PostgrePlanAnalyser(
getPlanStyle() == DBCPlanStyle.QUERY,
getServerType().supportsExplainPlanVerbose(),
query);
if (getPlanStyle() == DBCPlanStyle.PLAN) {
plan.explain(session);
}
......@@ -391,7 +394,7 @@ public class PostgreDataSource extends JDBCDataSource implements DBSObjectSelect
@NotNull
@Override
public DBCPlanStyle getPlanStyle() {
return isServerVersionAtLeast(9, 0) ? DBCPlanStyle.PLAN : DBCPlanStyle.QUERY;
return getServerType().supportsExplainPlanXML() ? DBCPlanStyle.PLAN : DBCPlanStyle.QUERY;
}
@Override
......
......@@ -95,4 +95,8 @@ public interface PostgreServerExtension
void initDefaultSSLConfig(DBPConnectionConfiguration connectionInfo, Map<String, String> props);
List<PostgrePrivilege> readObjectPermissions(DBRProgressMonitor monitor, PostgreTableBase object, boolean includeNestedObjects) throws DBException;
boolean supportsExplainPlanXML();
boolean supportsExplainPlanVerbose();
}
......@@ -307,6 +307,16 @@ public abstract class PostgreServerExtensionBase implements PostgreServerExtensi
return tablePermissions;
}
@Override
public boolean supportsExplainPlanXML() {
return dataSource.isServerVersionAtLeast(9, 0);
}
@Override
public boolean supportsExplainPlanVerbose() {
return true;
}
public String createWithClause(PostgreTableRegular table, PostgreTableBase tableBase) {
StringBuilder withClauseBuilder = new StringBuilder();
......
......@@ -45,12 +45,14 @@ public class PostgrePlanAnalyser extends AbstractExecutionPlan {
private static final Log log = Log.getLog(PostgrePlanAnalyser.class);
private boolean oldQuery;
private boolean verbose;
private String query;
private List<DBCPlanNode> rootNodes;
public PostgrePlanAnalyser(boolean oldQuery, String query)
public PostgrePlanAnalyser(boolean oldQuery, boolean verbose, String query)
{
this.oldQuery = oldQuery;
this.verbose = verbose;
this.query = query;
}
......@@ -74,7 +76,7 @@ public class PostgrePlanAnalyser extends AbstractExecutionPlan {
@Override
public String getPlanQueryString() {
if (oldQuery) {
return "EXPLAIN VERBOSE " + query;
return "EXPLAIN " + (verbose ? "VERBOSE " : "") + query;
} else {
return "EXPLAIN (FORMAT XML, ANALYSE) " + query;
}
......
......@@ -18,7 +18,6 @@ package org.jkiss.dbeaver.ext.postgresql.model.plan;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.ext.generic.model.GenericDataSource;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.exec.plan.DBCPlan;
......@@ -37,14 +36,17 @@ public class PostgreQueryPlaner implements DBCQueryPlanner
}
@Override
public DBPDataSource getDataSource() {
public GenericDataSource getDataSource() {
return dataSource;
}
@NotNull
@Override
public DBCPlan planQueryExecution(@NotNull DBCSession session, @NotNull String query) throws DBCException {
PostgrePlanAnalyser plan = new PostgrePlanAnalyser(getPlanStyle() == DBCPlanStyle.QUERY, query);
PostgrePlanAnalyser plan = new PostgrePlanAnalyser(
getPlanStyle() == DBCPlanStyle.QUERY,
true,
query);
plan.explain(session);
return plan;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册