From ad69f4f8f69cfb9ff1906bb9f0801132200613bb Mon Sep 17 00:00:00 2001 From: loro2 <51793898+loro2@users.noreply.github.com> Date: Fri, 2 Aug 2019 10:00:21 +0200 Subject: [PATCH] Add StringBuilder option to Copy as Source panel --- .../OSGI-INF/l10n/bundle.properties | 2 ++ .../plugin.xml | 1 + .../sql/convert/impl/CPPSQLConverter.java | 4 ++- .../sql/convert/impl/DelphiSQLConverter.java | 4 ++- .../sql/convert/impl/JavaSQLConverter.java | 26 ++++++++++++++----- .../convert/impl/SourceCodeSQLConverter.java | 4 +-- 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle.properties b/plugins/org.jkiss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle.properties index 93eea4b6ca..f2bc4dfd40 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle.properties +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/OSGI-INF/l10n/bundle.properties @@ -29,6 +29,8 @@ sql.convert.label.keep.formatting.discription = Keeps original formatting (white sql.convert.label.line.delimiter.name = Line delimiter sql.convert.label.line.delimiter.discription = Delimiter for source code lines. Usually \\n or space sql.convert.label.line.delimiter.delphi.discription = Delimiter for source code lines. Usually #13#10 or space +sql.convert.label.use.string.builder.name = Use StringBuilder +sql.convert.label.use.string.builder.description = Uses StringBuilder instead of String concatenation sql.plan.view.simple.name=Simple sql.plan.view.simple.tip=Simple execution plan presentation diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml b/plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml index 4c0c8ece26..a6dd0d9fc2 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml @@ -56,6 +56,7 @@ + diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/CPPSQLConverter.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/CPPSQLConverter.java index 013b79e11d..fc4b0b095d 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/CPPSQLConverter.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/CPPSQLConverter.java @@ -19,13 +19,15 @@ package org.jkiss.dbeaver.ui.editors.sql.convert.impl; import org.jkiss.utils.CommonUtils; +import java.util.Map; + /** * CPPSQLConverter */ public class CPPSQLConverter extends SourceCodeSQLConverter { @Override - protected void convertSourceLines(StringBuilder result, String[] sourceLines, String lineDelimiter) { + protected void convertSourceLines(StringBuilder result, String[] sourceLines, String lineDelimiter, Map options) { for (int i = 0; i < sourceLines.length; i++) { String line = sourceLines[i]; result.append('"').append(CommonUtils.escapeJavaString(line)).append(lineDelimiter).append('"'); diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/DelphiSQLConverter.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/DelphiSQLConverter.java index f41292447f..835bb0d7d7 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/DelphiSQLConverter.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/DelphiSQLConverter.java @@ -19,13 +19,15 @@ package org.jkiss.dbeaver.ui.editors.sql.convert.impl; import org.jkiss.utils.CommonUtils; +import java.util.Map; + /** * DelphiSQLConverter */ public class DelphiSQLConverter extends SourceCodeSQLConverter { @Override - protected void convertSourceLines(StringBuilder result, String[] sourceLines, String lineDelimiter) { + protected void convertSourceLines(StringBuilder result, String[] sourceLines, String lineDelimiter, Map options) { boolean trailingLineFeed = lineDelimiter.startsWith("#"); for (int i = 0; i < sourceLines.length; i++) { String line = sourceLines[i]; diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/JavaSQLConverter.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/JavaSQLConverter.java index bd31ac1f5b..7448efc985 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/JavaSQLConverter.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/JavaSQLConverter.java @@ -19,20 +19,32 @@ package org.jkiss.dbeaver.ui.editors.sql.convert.impl; import org.jkiss.utils.CommonUtils; +import java.util.Map; + /** * JavaSQLConverter */ public class JavaSQLConverter extends SourceCodeSQLConverter { + public static final String OPTION_USE_STRING_BUILDER = "use-string-builder"; + @Override - protected void convertSourceLines(StringBuilder result, String[] sourceLines, String lineDelimiter) { + protected void convertSourceLines(StringBuilder result, String[] sourceLines, String lineDelimiter, Map options) { + boolean useStringBuilder = CommonUtils.toBoolean(options.get(OPTION_USE_STRING_BUILDER)); + if (useStringBuilder) + result.append("StringBuilder query = new StringBuilder();\n"); for (int i = 0; i < sourceLines.length; i++) { - String line = sourceLines[i]; - result.append('"').append(CommonUtils.escapeJavaString(line)).append(lineDelimiter).append('"'); - if (i < sourceLines.length - 1) { - result.append(" + \n"); - } else { - result.append(";"); + String escapedLine = CommonUtils.escapeJavaString(sourceLines[i]); + if (useStringBuilder) { + result.append("query.append(\"").append(escapedLine).append(lineDelimiter).append("\");\n"); + } + else { + result.append('"').append(escapedLine).append(lineDelimiter).append('"'); + if (i < sourceLines.length - 1) { + result.append(" + \n"); + } else { + result.append(";"); + } } } } diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/SourceCodeSQLConverter.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/SourceCodeSQLConverter.java index 8c96d630ad..89588855e8 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/SourceCodeSQLConverter.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/convert/impl/SourceCodeSQLConverter.java @@ -70,7 +70,7 @@ public abstract class SourceCodeSQLConverter implements ISQLTextConverter { lineDelimiter = " "; // Space } StringBuilder result = new StringBuilder(); - convertSourceLines(result, sourceLines, lineDelimiter); + convertSourceLines(result, sourceLines, lineDelimiter, options); return result.toString(); } catch (BadLocationException e) { log.error(e); @@ -78,6 +78,6 @@ public abstract class SourceCodeSQLConverter implements ISQLTextConverter { } } - protected abstract void convertSourceLines(StringBuilder result, String[] sourceLines, String lineDelimiter); + protected abstract void convertSourceLines(StringBuilder result, String[] sourceLines, String lineDelimiter, Map options); } -- GitLab