OODT-888 replace =+ with StringBuilder to improve concat performance
Project: http://git-wip-us.apache.org/repos/asf/oodt/repo Commit: http://git-wip-us.apache.org/repos/asf/oodt/commit/631cd23c Tree: http://git-wip-us.apache.org/repos/asf/oodt/tree/631cd23c Diff: http://git-wip-us.apache.org/repos/asf/oodt/diff/631cd23c Branch: refs/heads/master Commit: 631cd23cd4bc70e117ad7f22c8d3864f30f09313 Parents: b2227f8 Author: Tom Barber <[email protected]> Authored: Sat Oct 10 15:53:16 2015 +0100 Committer: Tom Barber <[email protected]> Committed: Sat Oct 10 15:53:16 2015 +0100 ---------------------------------------------------------------------- .../index/WorkflowManagerDataSourceIndex.java | 70 +++++++------- .../oodt/cas/cli/printer/StdCmdLinePrinter.java | 98 +++++++------------- 2 files changed, 69 insertions(+), 99 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/oodt/blob/631cd23c/catalog/src/main/java/org/apache/oodt/cas/catalog/struct/impl/index/WorkflowManagerDataSourceIndex.java ---------------------------------------------------------------------- diff --git a/catalog/src/main/java/org/apache/oodt/cas/catalog/struct/impl/index/WorkflowManagerDataSourceIndex.java b/catalog/src/main/java/org/apache/oodt/cas/catalog/struct/impl/index/WorkflowManagerDataSourceIndex.java index 8c619be..0facced 100644 --- a/catalog/src/main/java/org/apache/oodt/cas/catalog/struct/impl/index/WorkflowManagerDataSourceIndex.java +++ b/catalog/src/main/java/org/apache/oodt/cas/catalog/struct/impl/index/WorkflowManagerDataSourceIndex.java @@ -17,34 +17,11 @@ package org.apache.oodt.cas.catalog.struct.impl.index; //JDK imports -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Vector; -import java.util.logging.Level; -import java.util.logging.Logger; - -//SQL imports -import javax.sql.DataSource; - -//OODT imports import org.apache.oodt.cas.catalog.exception.CatalogIndexException; import org.apache.oodt.cas.catalog.exception.QueryServiceException; import org.apache.oodt.cas.catalog.page.IndexPager; import org.apache.oodt.cas.catalog.page.IngestReceipt; -import org.apache.oodt.cas.catalog.query.ComparisonQueryExpression; -import org.apache.oodt.cas.catalog.query.NotQueryExpression; -import org.apache.oodt.cas.catalog.query.QueryExpression; -import org.apache.oodt.cas.catalog.query.QueryLogicalGroup; -import org.apache.oodt.cas.catalog.query.StdQueryExpression; +import org.apache.oodt.cas.catalog.query.*; import org.apache.oodt.cas.catalog.struct.Index; import org.apache.oodt.cas.catalog.struct.QueryService; import org.apache.oodt.cas.catalog.struct.TransactionId; @@ -53,9 +30,23 @@ import org.apache.oodt.cas.catalog.struct.impl.transaction.LongTransactionIdFact import org.apache.oodt.cas.catalog.term.Term; import org.apache.oodt.cas.catalog.term.TermBucket; import org.apache.oodt.commons.database.DatabaseConnectionBuilder; +import org.apache.oodt.commons.util.DateConvert; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.sql.DataSource; + +//SQL imports +//OODT imports //EDA imports -import org.apache.oodt.commons.util.DateConvert; /** * @author bfoster @@ -259,17 +250,17 @@ public class WorkflowManagerDataSourceIndex implements Index, QueryService { } private String getSqlQuery(QueryExpression queryExpression) throws QueryServiceException, UnsupportedEncodingException { - String sqlQuery = null; + StringBuilder sqlQuery = new StringBuilder(); if (queryExpression instanceof QueryLogicalGroup) { QueryLogicalGroup qlg = (QueryLogicalGroup) queryExpression; - sqlQuery = "(" + this.getSqlQuery(qlg.getExpressions().get(0)); + sqlQuery.append("(").append(this.getSqlQuery(qlg.getExpressions().get(0))); String op = qlg.getOperator() == QueryLogicalGroup.Operator.AND ? "INTERSECT" : "UNION"; for (int i = 1; i < qlg.getExpressions().size(); i++) - sqlQuery += ") " + op + " (" + this.getSqlQuery(qlg.getExpressions().get(i)); - sqlQuery += ")"; + sqlQuery.append(") ").append(op).append(" (").append(this.getSqlQuery(qlg.getExpressions().get(i))); + sqlQuery.append(")"); }else if (queryExpression instanceof ComparisonQueryExpression){ ComparisonQueryExpression cqe = (ComparisonQueryExpression) queryExpression; - String operator = null; + String operator; if (cqe.getOperator().equals(ComparisonQueryExpression.Operator.EQUAL_TO)) { operator = "="; } else if (cqe.getOperator().equals(ComparisonQueryExpression.Operator.GREATER_THAN)) { @@ -284,23 +275,28 @@ public class WorkflowManagerDataSourceIndex implements Index, QueryService { throw new QueryServiceException("Invalid ComparisonQueryExpression Operator '" + cqe.getOperator() + "'"); } - sqlQuery = "SELECT DISTINCT workflow_instance_id FROM workflow_instance_metadata WHERE workflow_met_key = '" + cqe.getTerm().getName() + "' AND ("; + sqlQuery.append( + "SELECT DISTINCT workflow_instance_id FROM workflow_instance_metadata WHERE " + "workflow_met_key = '") + .append(cqe.getTerm().getName()).append("' AND ("); for (int i = 0; i < cqe.getTerm().getValues().size(); i++) { String value = cqe.getTerm().getValues().get(i); - sqlQuery += "workflow_met_val " + operator + " '" + URLEncoder.encode(value, "UTF-8") + "'"; + sqlQuery.append("workflow_met_val ").append(operator).append(" '") + .append(URLEncoder.encode(value, "UTF-8")).append("'"); if ((i + 1) < cqe.getTerm().getValues().size()) - sqlQuery += "OR"; + sqlQuery.append("OR"); } - sqlQuery += ")"; + sqlQuery.append(")"); }else if (queryExpression instanceof NotQueryExpression) { NotQueryExpression nqe = (NotQueryExpression) queryExpression; - sqlQuery = "SELECT DISTINCT workflow_instance_id FROM workflow_instance_metadata WHERE NOT (" + this.getSqlQuery(nqe.getQueryExpression()) + ")"; + sqlQuery.append("SELECT DISTINCT workflow_instance_id FROM workflow_instance_metadata WHERE NOT (") + .append(this + .getSqlQuery(nqe.getQueryExpression())).append(")"); }else if (queryExpression instanceof StdQueryExpression) { - sqlQuery = "SELECT DISTINCT workflow_instance_id FROM workflow_instance_metadata"; + sqlQuery.append("SELECT DISTINCT workflow_instance_id FROM workflow_instance_metadata"); }else { throw new QueryServiceException("Invalid QueryExpression '" + queryExpression.getClass().getCanonicalName() + "'"); } - return sqlQuery; + return sqlQuery.toString(); } } http://git-wip-us.apache.org/repos/asf/oodt/blob/631cd23c/cli/src/main/java/org/apache/oodt/cas/cli/printer/StdCmdLinePrinter.java ---------------------------------------------------------------------- diff --git a/cli/src/main/java/org/apache/oodt/cas/cli/printer/StdCmdLinePrinter.java b/cli/src/main/java/org/apache/oodt/cas/cli/printer/StdCmdLinePrinter.java index 36c3fa1..9ebf32b 100644 --- a/cli/src/main/java/org/apache/oodt/cas/cli/printer/StdCmdLinePrinter.java +++ b/cli/src/main/java/org/apache/oodt/cas/cli/printer/StdCmdLinePrinter.java @@ -16,36 +16,19 @@ */ package org.apache.oodt.cas.cli.printer; -//OODT static imports -import static org.apache.oodt.cas.cli.util.CmdLineUtils.asGroupOption; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.determineOptional; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.determineRelevantSubOptions; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.determineRequired; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.determineRequiredSubOptions; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.getFormattedString; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.isGroupOption; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.sortActions; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.sortOptions; -import static org.apache.oodt.cas.cli.util.CmdLineUtils.sortOptionsByRequiredStatus; - -//JDK imports -import java.util.List; -import java.util.Set; -//Apache imports -import org.apache.commons.lang.StringUtils; +import com.google.common.collect.Lists; -//OODT imports +import org.apache.commons.lang.StringUtils; import org.apache.oodt.cas.cli.action.CmdLineAction; -import org.apache.oodt.cas.cli.option.ActionCmdLineOption; -import org.apache.oodt.cas.cli.option.AdvancedCmdLineOption; -import org.apache.oodt.cas.cli.option.CmdLineOption; -import org.apache.oodt.cas.cli.option.GroupCmdLineOption; -import org.apache.oodt.cas.cli.option.GroupSubOption; +import org.apache.oodt.cas.cli.option.*; import org.apache.oodt.cas.cli.option.validator.CmdLineOptionValidator.Result; -//Google imports -import com.google.common.collect.Lists; +import java.util.List; +import java.util.Set; + +import static org.apache.oodt.cas.cli.util.CmdLineUtils.*; + /** * Standard {@link CmdLinePrinter}. @@ -57,13 +40,8 @@ public class StdCmdLinePrinter implements CmdLinePrinter { @Override public String printActionHelp(CmdLineAction action, Set<CmdLineOption> options) { - StringBuffer sb = new StringBuffer(""); - sb.append(getHeader(action)).append("\n"); - sb.append(getDescription(action)).append("\n"); - sb.append(getUsage(action, options)).append("\n"); - sb.append(getExamples(action)).append("\n"); - sb.append(getFooter(action)).append("\n"); - return sb.toString(); + return "" + getHeader(action) + "\n" + getDescription(action) + "\n" + getUsage(action, options) + "\n" + + getExamples(action) + "\n" + getFooter(action) + "\n"; } protected String getHeader(CmdLineAction action) { @@ -71,7 +49,7 @@ public class StdCmdLinePrinter implements CmdLinePrinter { } protected String getDescription(CmdLineAction action) { - StringBuffer sb = new StringBuffer("> DESCRIPTION:\n"); + StringBuilder sb = new StringBuilder("> DESCRIPTION:\n"); if (action.getDetailedDescription() != null) { sb.append(" ").append(action.getDetailedDescription() .replaceAll("^\\s*", "").replaceAll("\\s*$", "")); @@ -86,7 +64,7 @@ public class StdCmdLinePrinter implements CmdLinePrinter { } protected String getUsage(CmdLineAction action, Set<CmdLineOption> options) { - StringBuffer sb = new StringBuffer("> USAGE:\n"); + StringBuilder sb = new StringBuilder("> USAGE:\n"); sb.append(getRequiredSubHeader()).append("\n"); Set<CmdLineOption> requiredOptions = determineRequired(action, options); List<CmdLineOption> sortedRequiredOptions = sortOptions(requiredOptions); @@ -130,7 +108,7 @@ public class StdCmdLinePrinter implements CmdLinePrinter { } protected String getExamples(CmdLineAction action) { - StringBuffer sb = new StringBuffer("> EXAMPLES:\n"); + StringBuilder sb = new StringBuilder("> EXAMPLES:\n"); if (action.getExamples() != null) { sb.append(" ").append(action.getExamples().replaceAll("^\\s*", "") .replaceAll("\\s*$", "")); @@ -166,42 +144,39 @@ public class StdCmdLinePrinter implements CmdLinePrinter { protected String getGroupHelp(CmdLineAction action, GroupCmdLineOption option, String indent) { - String helpString = getOptionHelp(action, option, indent); + StringBuilder helpString = new StringBuilder(getOptionHelp(action, option, indent)); Set<CmdLineOption> subOptions = determineRequiredSubOptions(action, - (GroupCmdLineOption) option); + option); if (subOptions.isEmpty()) { if (!option.getSubOptions().isEmpty()) { - helpString += "\n" + indent + " One of:"; + helpString.append("\n").append(indent).append(" One of:"); for (GroupSubOption subOption : option.getSubOptions()) { - helpString += "\n" - + getOptionHelp(action, subOption.getOption(), " " - + indent); + helpString.append("\n").append(getOptionHelp(action, subOption.getOption(), " " + + indent)); } } } else { for (CmdLineOption subOption : determineRelevantSubOptions(action, option)) { - helpString += "\n"; + helpString.append("\n"); if (subOption instanceof GroupCmdLineOption) { - helpString += getGroupHelp(action, - (GroupCmdLineOption) subOption, " " + indent); + helpString.append(getGroupHelp(action, + (GroupCmdLineOption) subOption, " " + indent)); } else { - helpString += getOptionHelp(action, subOption, " " + indent); + helpString.append(getOptionHelp(action, subOption, " " + indent)); } - helpString += " " - + (subOptions.contains(subOption) ? "(required)" - : "(optional)"); + helpString.append(" ").append(subOptions.contains(subOption) ? "(required)" + : "(optional)"); } } - return helpString; + return helpString.toString(); } @Override public String printActionsHelp(Set<CmdLineAction> actions) { - StringBuffer sb = new StringBuffer(""); + StringBuilder sb = new StringBuilder(""); sb.append("-----------------------------------------------------------------------------------------------------------------\n"); - sb.append("|" + StringUtils.rightPad(" Action", 35) + "|" - + " Description\n"); + sb.append("|").append(StringUtils.rightPad(" Action", 35)).append("|").append(" Description\n"); sb.append("-----------------------------------------------------------------------------------------------------------------\n"); for (CmdLineAction action : sortActions(actions)) { sb.append(" ").append(StringUtils.rightPad(action.getName(), 35)); @@ -213,7 +188,7 @@ public class StdCmdLinePrinter implements CmdLinePrinter { @Override public String printOptionsHelp(Set<CmdLineOption> options) { - StringBuffer sb = new StringBuffer(""); + StringBuilder sb = new StringBuilder(""); List<CmdLineOption> sortedOptions = sortOptionsByRequiredStatus(options); sb.append(getHeader()).append("\n"); for (CmdLineOption option : sortedOptions) { @@ -224,12 +199,11 @@ public class StdCmdLinePrinter implements CmdLinePrinter { } protected String getHeader() { - StringBuffer sb = new StringBuffer(""); - sb.append("-----------------------------------------------------------------------------------------------------------------\n"); - sb.append("|" + StringUtils.rightPad(" Short", 7) + "|" - + StringUtils.rightPad(" Long", 50) + "| Description\n"); - sb.append("-----------------------------------------------------------------------------------------------------------------\n"); - return sb.toString(); + return "" + + "-----------------------------------------------------------------------------------------------------------------\n" + + "|" + StringUtils.rightPad(" Short", 7) + "|" + + StringUtils.rightPad(" Long", 50) + "| Description\n" + + "-----------------------------------------------------------------------------------------------------------------\n"; } protected String getOptionHelp(CmdLineOption option, String indent) { @@ -290,7 +264,7 @@ public class StdCmdLinePrinter implements CmdLinePrinter { @Override public String printOptionValidationErrors(List<Result> results) { - StringBuffer sb = new StringBuffer("Validation Failures:"); + StringBuilder sb = new StringBuilder("Validation Failures:"); for (Result result : results) { sb.append(" - ").append(result.getMessage()).append("\n"); } @@ -300,7 +274,7 @@ public class StdCmdLinePrinter implements CmdLinePrinter { @Override public String printRequiredOptionsMissingError( Set<CmdLineOption> missingOptions) { - StringBuffer sb = new StringBuffer("Missing required options:\n"); + StringBuilder sb = new StringBuilder("Missing required options:\n"); for (CmdLineOption option : missingOptions) { sb.append(" - ").append(option.toString()).append("\n"); } @@ -309,7 +283,7 @@ public class StdCmdLinePrinter implements CmdLinePrinter { @Override public String printActionMessages(List<String> messages) { - StringBuffer sb = new StringBuffer(""); + StringBuilder sb = new StringBuilder(""); for (String message : messages) { sb.append(message); }
