提交 febea3ee 编写于 作者: A Andrew Khitrin

Small improvement for plan save-load API

上级 8a08a087
......@@ -21,7 +21,6 @@ import org.jkiss.dbeaver.ext.oracle.model.OracleDataSource;
import org.jkiss.dbeaver.ext.oracle.model.OracleObjectType;
import org.jkiss.dbeaver.ext.oracle.model.OracleTablePhysical;
import org.jkiss.dbeaver.model.exec.plan.DBCPlanCostNode;
import org.jkiss.dbeaver.model.exec.plan.DBCPlanNodeComplex;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.impl.plan.AbstractExecutionPlanNode;
import org.jkiss.dbeaver.model.meta.Property;
......@@ -41,7 +40,7 @@ import java.util.Map;
/**
* Oracle execution plan node
*/
public class OraclePlanNode extends AbstractExecutionPlanNode implements DBCPlanCostNode, DBCPlanNodeComplex<OraclePlanNode> {
public class OraclePlanNode extends AbstractExecutionPlanNode implements DBCPlanCostNode {
public final static String CAT_DETAILS = "Details";
......@@ -84,7 +83,7 @@ public class OraclePlanNode extends AbstractExecutionPlanNode implements DBCPlan
private String otherXml;
private OraclePlanNode parent;
protected List<OraclePlanNode> nested;
protected final List<OraclePlanNode> nested = new ArrayList<>();
private String aGetString(Map<String,String> attributes,String name) {
return attributes.containsKey(name) ? attributes.get(name).toString() : "";
......@@ -224,10 +223,7 @@ public class OraclePlanNode extends AbstractExecutionPlanNode implements DBCPlan
}
private void addChild(OraclePlanNode node) {
if (this.nested == null) {
createNested();
}
this.nested.add(node);
this.nested.add(node);
}
@Override
......@@ -513,10 +509,5 @@ public class OraclePlanNode extends AbstractExecutionPlanNode implements DBCPlan
}
}
@Override
public void createNested() {
this.nested = new ArrayList<>();
}
}
......@@ -53,7 +53,7 @@ public abstract class PostgrePlanNodeBase<NODE extends PostgrePlanNodeBase> exte
private PostgreDataSource dataSource;
protected NODE parent;
protected List<NODE> nested;
protected final List<NODE> nested = new ArrayList<>();
protected String nodeType;
private String entity;
......
......@@ -21,7 +21,6 @@ import org.jkiss.utils.xml.XMLUtils;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
......@@ -44,9 +43,6 @@ public class PostgrePlanNodeXML extends PostgrePlanNodeBase<PostgrePlanNodeXML>
Element nestedPlansElement = XMLUtils.getChildElement(element, "Plans");
if (nestedPlansElement != null) {
for (Element planElement : XMLUtils.getChildElementList(nestedPlansElement, "Plan")) {
if (nested == null) {
nested = new ArrayList<>();
}
nested.add(new PostgrePlanNodeXML(dataSource, null, planElement));
}
}
......
......@@ -25,14 +25,13 @@ import java.util.Map;
import java.util.Map.Entry;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource;
import org.jkiss.dbeaver.model.exec.plan.DBCPlanNodeComplex;
import org.jkiss.dbeaver.model.impl.plan.AbstractExecutionPlanSerializer;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public class PostgresPlanNodeExternal extends PostgrePlanNodeBase<PostgresPlanNodeExternal> implements DBCPlanNodeComplex<PostgresPlanNodeExternal> {
public class PostgresPlanNodeExternal extends PostgrePlanNodeBase<PostgresPlanNodeExternal> {
private PostgresPlanNodeExternal(PostgreDataSource dataSource, PostgresPlanNodeExternal parent) {
super(dataSource, parent);
......@@ -58,14 +57,6 @@ public class PostgresPlanNodeExternal extends PostgrePlanNodeBase<PostgresPlanN
setAttributes(attributes);
}
@Override
public List<PostgresPlanNodeExternal> getNested() {
return nested;
}
@Override
public void createNested() {
nested = new ArrayList<>();
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org)
* Copyright (C) 2019 Andrew Khitrin (ahitrin@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.model.exec.plan;
import java.util.Collection;
public interface DBCPlanNodeComplex <NODE extends DBCPlanNode> {
Collection<NODE> getNested();
void createNested();
}
package org.jkiss.dbeaver.model.impl.plan;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.exec.plan.DBCPlanNode;
import org.jkiss.dbeaver.model.exec.plan.DBCPlanNodeComplex;
import org.jkiss.dbeaver.model.exec.plan.DBCQueryPlannerDeSerialInfo;
import com.google.gson.JsonArray;
......@@ -27,18 +27,12 @@ public class ExecutionPlanDeserializer<NODE extends DBCPlanNode> {
NODE node = info.createNode(dataSource, nodeObject, parent);
JsonArray childs = nodeObject.getAsJsonArray(AbstractExecutionPlanSerializer.PROP_CHILD);
if (node instanceof DBCPlanNodeComplex<?>) {
DBCPlanNodeComplex<NODE> n = (DBCPlanNodeComplex<NODE>) node;
if (n.getNested() == null) {
n.createNested();
}
if (childs != null) {
childs.forEach((e) -> {
n.getNested().add(loadNode(dataSource, e.getAsJsonObject(), node, info));
});
}
if (childs != null) {
childs.forEach((e) -> {
((Collection<NODE>) node.getNested()).add(loadNode(dataSource, e.getAsJsonObject(), node, info));
});
}
return node;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册