From 222feec16a561c84cdf98cb89626886b0aea1561 Mon Sep 17 00:00:00 2001 From: Andrew Khitrin Date: Fri, 24 May 2019 17:46:13 +0300 Subject: [PATCH] Detect node kind with switch + contain Former-commit-id: 3d1bb9ba385206f736fef3da8473a68dcb0c8c28 --- .../ext/oracle/model/plan/OraclePlanNode.java | 136 +++++++++++++----- .../model/plan/PostgrePlanNodeBase.java | 124 +++++++++++----- 2 files changed, 190 insertions(+), 70 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/plan/OraclePlanNode.java b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/plan/OraclePlanNode.java index 0205a0953d..a4bad22745 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/plan/OraclePlanNode.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/plan/OraclePlanNode.java @@ -34,6 +34,7 @@ import java.sql.SQLException; import java.sql.Timestamp; import java.time.Instant; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; @@ -44,6 +45,28 @@ import java.util.Map; public class OraclePlanNode extends AbstractExecutionPlanNode implements DBCPlanCostNode { public final static String CAT_DETAILS = "Details"; + + private final static List allowedKind = new ArrayList<>( + Arrays.asList("result", + "project", + "filter", + "collector", + "index", + "hash", + "foregin", + "aggregate", + "modify", + "inset", + "update", + "delete", + "loop", + "join", + "merge", + "sort", + "merge", + "group", + "materialize", + "function")); private final OracleDataSource dataSource; private String statementId; @@ -85,6 +108,8 @@ public class OraclePlanNode extends AbstractExecutionPlanNode implements DBCPlan private OraclePlanNode parent; protected final List nested = new ArrayList<>(); + + private String aGetString(Map attributes,String name) { return attributes.containsKey(name) ? attributes.get(name).toString() : ""; @@ -127,46 +152,81 @@ public class OraclePlanNode extends AbstractExecutionPlanNode implements DBCPlan } } - @Override + @Override public DBCPlanNodeKind getNodeKind() { - if (operation.toLowerCase().indexOf("result") >= 0) { - return DBCPlanNodeKind.RESULT; - } else if (operation.toLowerCase().indexOf("project") >= 0) { - return DBCPlanNodeKind.SET; - } else if (operation.toLowerCase().indexOf("filter") >= 0) { - return DBCPlanNodeKind.FILTER; - } else if (operation.toLowerCase().indexOf("collector") >= 0) { - return DBCPlanNodeKind.AGGREGATE; - } else if (operation.toLowerCase().indexOf("index") >= 0) { - return DBCPlanNodeKind.INDEX_SCAN; - } else if (operation.toLowerCase().indexOf("hash") >= 0) { - return DBCPlanNodeKind.HASH; - } else if (operation.toLowerCase().indexOf("foregin") >= 0) { - return DBCPlanNodeKind.TABLE_SCAN; - } else if (operation.toLowerCase().indexOf("aggregate") >= 0) { - return DBCPlanNodeKind.AGGREGATE; - } else if (operation.toLowerCase().indexOf("modify") >= 0 || - operation.toLowerCase().indexOf("inset") >= 0 || - operation.toLowerCase().indexOf("update") >= 0 || - operation.toLowerCase().indexOf("delete") >= 0) { - return DBCPlanNodeKind.MODIFY; - } else if (operation.toLowerCase().indexOf("loop") >= 0 || - operation.toLowerCase().indexOf("join") >= 0) { - return DBCPlanNodeKind.JOIN; - } else if (operation.toLowerCase().indexOf("merge") >= 0) { - return DBCPlanNodeKind.MERGE; - } else if (operation.toLowerCase().indexOf("sort") >= 0) { - return DBCPlanNodeKind.SORT; - } else if (operation.toLowerCase().indexOf("merge") >= 0) { - return DBCPlanNodeKind.MERGE; - } else if (operation.toLowerCase().indexOf("group") >= 0) { - return DBCPlanNodeKind.GROUP; - } else if (operation.toLowerCase().indexOf("materialize") >= 0) { - return DBCPlanNodeKind.MATERIALIZE; - } else if (operation.toLowerCase().indexOf("function") >= 0) { - return DBCPlanNodeKind.FUNCTION; + + String op = operation.toLowerCase(); + + for (String kind : allowedKind) { + if (op.contains(kind)) { + + switch (kind) { + + case "result": + return DBCPlanNodeKind.RESULT; + + case "project": + return DBCPlanNodeKind.SET; + + case "filter": + return DBCPlanNodeKind.FILTER; + + case "collector": + return DBCPlanNodeKind.AGGREGATE; + + case "index": + return DBCPlanNodeKind.INDEX_SCAN; + + case "hash": + return DBCPlanNodeKind.HASH; + + case "foregin": + return DBCPlanNodeKind.TABLE_SCAN; + + case "aggregate": + return DBCPlanNodeKind.AGGREGATE; + + case "modify": + return DBCPlanNodeKind.MODIFY; + + case "insert": + return DBCPlanNodeKind.MODIFY; + + case "update": + return DBCPlanNodeKind.MODIFY; + + case "delete": + return DBCPlanNodeKind.MODIFY; + + case "loop": + return DBCPlanNodeKind.JOIN; + + case "join": + return DBCPlanNodeKind.JOIN; + + case "merge": + return DBCPlanNodeKind.MERGE; + + case "sort": + return DBCPlanNodeKind.SORT; + + case "group": + return DBCPlanNodeKind.GROUP; + + case "materialize": + return DBCPlanNodeKind.MATERIALIZE; + + case "function": + return DBCPlanNodeKind.FUNCTION; + + default: + return DBCPlanNodeKind.DEFAULT; + + } + + } } - + return DBCPlanNodeKind.DEFAULT; } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/plan/PostgrePlanNodeBase.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/plan/PostgrePlanNodeBase.java index ea6c829f02..b23ca12097 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/plan/PostgrePlanNodeBase.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/plan/PostgrePlanNodeBase.java @@ -52,6 +52,26 @@ public abstract class PostgrePlanNodeBase> e public static final String ATTR_OBJECT_NAME = "Object name"; + private final static List allowedKind = new ArrayList<>( + Arrays.asList("result", + "project", + "index", + "hash", + "foregin", + "aggregate", + "modify", + "inset", + "update", + "delete", + "loop", + "join", + "merge", + "sort", + "merge", + "group", + "materialize", + "function")); + private PostgreDataSource dataSource; protected NODE parent; protected final List nested = new ArrayList<>(); @@ -203,39 +223,79 @@ public abstract class PostgrePlanNodeBase> e @Override public DBCPlanNodeKind getNodeKind() { - if (nodeType.toLowerCase().indexOf("result") >= 0) { - return DBCPlanNodeKind.RESULT; - } else if (nodeType.toLowerCase().indexOf("project") >= 0) { - return DBCPlanNodeKind.SET; - } else if (nodeType.toLowerCase().indexOf("index") >= 0) { - return DBCPlanNodeKind.INDEX_SCAN; - } else if (nodeType.toLowerCase().indexOf("hash") >= 0) { - return DBCPlanNodeKind.HASH; - } else if (nodeType.toLowerCase().indexOf("foregin") >= 0) { - return DBCPlanNodeKind.TABLE_SCAN; - } else if (nodeType.toLowerCase().indexOf("aggregate") >= 0) { - return DBCPlanNodeKind.AGGREGATE; - } else if (nodeType.toLowerCase().indexOf("modify") >= 0 || - nodeType.toLowerCase().indexOf("inset") >= 0 || - nodeType.toLowerCase().indexOf("update") >= 0 || - nodeType.toLowerCase().indexOf("delete") >= 0) { - return DBCPlanNodeKind.MODIFY; - } else if (nodeType.toLowerCase().indexOf("loop") >= 0 || - nodeType.toLowerCase().indexOf("join") >= 0) { - return DBCPlanNodeKind.JOIN; - } else if (nodeType.toLowerCase().indexOf("merge") >= 0) { - return DBCPlanNodeKind.MERGE; - } else if (nodeType.toLowerCase().indexOf("sort") >= 0) { - return DBCPlanNodeKind.SORT; - } else if (nodeType.toLowerCase().indexOf("merge") >= 0) { - return DBCPlanNodeKind.MERGE; - } else if (nodeType.toLowerCase().indexOf("group") >= 0) { - return DBCPlanNodeKind.GROUP; - } else if (nodeType.toLowerCase().indexOf("materialize") >= 0) { - return DBCPlanNodeKind.MATERIALIZE; - } else if (nodeType.toLowerCase().indexOf("function") >= 0) { - return DBCPlanNodeKind.FUNCTION; + + String op = nodeType.toLowerCase(); + + for (String kind : allowedKind) { + if (op.contains(kind)) { + + switch (kind) { + + case "result": + return DBCPlanNodeKind.RESULT; + + case "project": + return DBCPlanNodeKind.SET; + + case "filter": + return DBCPlanNodeKind.FILTER; + + case "collector": + return DBCPlanNodeKind.AGGREGATE; + + case "index": + return DBCPlanNodeKind.INDEX_SCAN; + + case "hash": + return DBCPlanNodeKind.HASH; + + case "foregin": + return DBCPlanNodeKind.TABLE_SCAN; + + case "aggregate": + return DBCPlanNodeKind.AGGREGATE; + + case "modify": + return DBCPlanNodeKind.MODIFY; + + case "insert": + return DBCPlanNodeKind.MODIFY; + + case "update": + return DBCPlanNodeKind.MODIFY; + + case "delete": + return DBCPlanNodeKind.MODIFY; + + case "loop": + return DBCPlanNodeKind.JOIN; + + case "join": + return DBCPlanNodeKind.JOIN; + + case "merge": + return DBCPlanNodeKind.MERGE; + + case "sort": + return DBCPlanNodeKind.SORT; + + case "group": + return DBCPlanNodeKind.GROUP; + + case "materialize": + return DBCPlanNodeKind.MATERIALIZE; + + case "function": + return DBCPlanNodeKind.FUNCTION; + + default: + return DBCPlanNodeKind.DEFAULT; + + } + + } } + return DBCPlanNodeKind.DEFAULT; } -- GitLab