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