diff --git a/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/SQLScriptContext.java b/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/SQLScriptContext.java index cba99065cf20565b8547ddcc00cb55f0b8559701..0d80b4358165289238aa914543b0de0ea5aa9525 100644 --- a/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/SQLScriptContext.java +++ b/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/SQLScriptContext.java @@ -30,17 +30,14 @@ import org.jkiss.utils.CommonUtils; import java.io.File; import java.io.PrintWriter; import java.io.Writer; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * SQL script execution context */ public class SQLScriptContext implements DBCScriptContext { - private final Map variables = new HashMap<>(); + private final Map variables = new LinkedHashMap<>(); private final Map defaultParameters = new HashMap<>(); private final Map pragmas = new HashMap<>(); private Map statementPragmas; @@ -93,16 +90,16 @@ public class SQLScriptContext implements DBCScriptContext { @Override public Object getVariable(String name) { - Object value = variables.get(name); - if (value == null && parentContext != null) { - value = parentContext.getVariable(name); + VariableInfo variableInfo = variables.get(name); + if (variableInfo == null && parentContext != null) { + return parentContext.getVariable(name); } - return value; + return variableInfo == null ? null : variableInfo.value; } @Override public void setVariable(String name, Object value) { - variables.put(name, value); + variables.put(name, new VariableInfo(name, value, VariableType.VARIABLE)); if (parentContext != null) { parentContext.setVariable(name, value); } @@ -116,9 +113,18 @@ public class SQLScriptContext implements DBCScriptContext { } } + @Override + public List getVariables() { + return new ArrayList<>(variables.values()); + } + public void setVariables(Map variables) { this.variables.clear(); - this.variables.putAll(variables); + for (Map.Entry v : variables.entrySet()) { + this.variables.put( + v.getKey(), + new VariableInfo(v.getKey(), v.getValue(), VariableType.VARIABLE)); + } } public Object getParameterDefaultValue(String name) { @@ -220,6 +226,8 @@ public class SQLScriptContext implements DBCScriptContext { Object varValue = variables.get(parameter.getVarName()); if (varValue == null) { varValue = defaultParameters.get(parameter.getVarName()); + } else { + varValue = ((VariableInfo)varValue).value; } if (varValue != null) { parameter.setValue(CommonUtils.toString(varValue)); @@ -233,9 +241,11 @@ public class SQLScriptContext implements DBCScriptContext { } public Map getAllParameters() { - Map params = new LinkedHashMap<>(); + Map params = new LinkedHashMap<>(defaultParameters.size() + variables.size()); params.putAll(defaultParameters); - params.putAll(variables); + for (Map.Entry v : variables.entrySet()) { + params.put(v.getKey(), v.getValue().value); + } return params; } diff --git a/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/registry/SQLQueryParameterRegistry.java b/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/registry/SQLQueryParameterRegistry.java index 5b4cee34fa57cc2e8e97cdaec3ec068576bc863f..ca6c86658d2f3ef4407fd397f79a27ff295da121 100644 --- a/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/registry/SQLQueryParameterRegistry.java +++ b/plugins/org.jkiss.dbeaver.model.sql/src/org/jkiss/dbeaver/model/sql/registry/SQLQueryParameterRegistry.java @@ -28,9 +28,7 @@ import org.jkiss.utils.xml.XMLException; import org.xml.sax.Attributes; import java.io.*; -import java.util.LinkedHashMap; -import java.util.Locale; -import java.util.Map; +import java.util.*; public class SQLQueryParameterRegistry { @@ -65,6 +63,10 @@ public class SQLQueryParameterRegistry return registry; } + public List getAllParameters() { + return new ArrayList<>(parameterMap.values()); + } + public ParameterInfo getParameter(String name) { return parameterMap.get(name.toUpperCase(Locale.ENGLISH)); diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBCScriptContext.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBCScriptContext.java index 3efeaca38feb2712763b46529adf1987ca5bdc27..1eeaa477ec70f7b2263b5157df7bb4db76518be6 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBCScriptContext.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBCScriptContext.java @@ -17,6 +17,7 @@ package org.jkiss.dbeaver.model.exec; import java.io.PrintWriter; +import java.util.List; /** * Script context. @@ -24,6 +25,34 @@ import java.io.PrintWriter; */ public interface DBCScriptContext { + enum VariableType { + PARAMETER("Parameter"), + VARIABLE("Variable"), + QUERY("Query"); + + private final String title; + + VariableType(String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + } + + class VariableInfo { + public String name; + public Object value; + public VariableType type; + + public VariableInfo(String name, Object value, VariableType type) { + this.name = name; + this.value = value; + this.type = type; + } + } + boolean hasVariable(String name); Object getVariable(String name); @@ -32,6 +61,8 @@ public interface DBCScriptContext { void removeVariable(String name); + List getVariables(); + T getData(String key); void setData(String key, Object value); 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 876d8d29a11b4ca140850b6a89c7f02dbdfdc4dd..c8dde07173c7a6aa797be7ed96cb0ad0d558a07b 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 @@ -93,6 +93,8 @@ command.org.jkiss.dbeaver.ui.editors.sql.show.output.name=Show server output command.org.jkiss.dbeaver.ui.editors.sql.show.output.description=Show server output console command.org.jkiss.dbeaver.ui.editors.sql.show.log.name=Show execution log command.org.jkiss.dbeaver.ui.editors.sql.show.log.description=Show SQL execution log +command.org.jkiss.dbeaver.ui.editors.sql.show.variables.name=Show SQL variables +command.org.jkiss.dbeaver.ui.editors.sql.show.variables.description=Show active SQL variables command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.name=Toggle results panel command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.description=Show/hide results panel diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml b/plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml index 65008f0642f30f64a3c3edd7d6551efae3932d48..b098cde0656a3c83f5a170b0e0977e6ff3608b49 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/plugin.xml @@ -236,6 +236,7 @@ + @@ -282,6 +283,7 @@ + @@ -457,6 +459,9 @@ + + + diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java index bbaea7e27acd4b577ea6d250b9e208e4afab8222..64916d5ead95f4d97bcdfef0910c1b7af42f61a6 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java @@ -101,6 +101,7 @@ import org.jkiss.dbeaver.ui.editors.sql.plan.ExplainPlanViewer; import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationDescriptor; import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationPanelDescriptor; import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationRegistry; +import org.jkiss.dbeaver.ui.editors.sql.variables.SQLVariablesPanel; import org.jkiss.dbeaver.ui.editors.text.ScriptPositionColumn; import org.jkiss.dbeaver.ui.navigator.INavigatorModelView; import org.jkiss.dbeaver.utils.GeneralUtils; @@ -140,12 +141,13 @@ public class SQLEditor extends SQLEditorBase implements private static final String EMBEDDED_BINDING_PREFIX = "-- CONNECTION: "; private static final Pattern EMBEDDED_BINDING_PREFIX_PATTERN = Pattern.compile("--\\s*CONNECTION:\\s*(.+)", Pattern.CASE_INSENSITIVE); - private static Image IMG_DATA_GRID = DBeaverIcons.getImage(UIIcon.SQL_PAGE_DATA_GRID); - private static Image IMG_DATA_GRID_LOCKED = DBeaverIcons.getImage(UIIcon.SQL_PAGE_DATA_GRID_LOCKED); - private static Image IMG_EXPLAIN_PLAN = DBeaverIcons.getImage(UIIcon.SQL_PAGE_EXPLAIN_PLAN); - private static Image IMG_LOG = DBeaverIcons.getImage(UIIcon.SQL_PAGE_LOG); - private static Image IMG_OUTPUT = DBeaverIcons.getImage(UIIcon.SQL_PAGE_OUTPUT); - private static Image IMG_OUTPUT_ALERT = DBeaverIcons.getImage(UIIcon.SQL_PAGE_OUTPUT_ALERT); + private static final Image IMG_DATA_GRID = DBeaverIcons.getImage(UIIcon.SQL_PAGE_DATA_GRID); + private static final Image IMG_DATA_GRID_LOCKED = DBeaverIcons.getImage(UIIcon.SQL_PAGE_DATA_GRID_LOCKED); + private static final Image IMG_EXPLAIN_PLAN = DBeaverIcons.getImage(UIIcon.SQL_PAGE_EXPLAIN_PLAN); + private static final Image IMG_LOG = DBeaverIcons.getImage(UIIcon.SQL_PAGE_LOG); + private static final Image IMG_VARIABLES = DBeaverIcons.getImage(UIIcon.SQL_VARIABLES); + private static final Image IMG_OUTPUT = DBeaverIcons.getImage(UIIcon.SQL_PAGE_OUTPUT); + private static final Image IMG_OUTPUT_ALERT = DBeaverIcons.getImage(UIIcon.SQL_PAGE_OUTPUT_ALERT); // private static final String TOOLBAR_CONTRIBUTION_ID = "toolbar:org.jkiss.dbeaver.ui.editors.sql.toolbar.side"; // private static final String TOOLBAR_GROUP_TOP = "top"; @@ -176,6 +178,7 @@ public class SQLEditor extends SQLEditorBase implements private SQLLogPanel logViewer; private SQLEditorOutputConsoleViewer outputViewer; + private SQLVariablesPanel variablesViewer; private volatile QueryProcessor curQueryProcessor; private final List queryProcessors = new ArrayList<>(); @@ -270,6 +273,10 @@ public class SQLEditor extends SQLEditorBase implements return null; } + public SQLScriptContext getGlobalScriptContext() { + return globalScriptContext; + } + @Nullable public DBPProject getProject() { @@ -911,15 +918,19 @@ public class SQLEditor extends SQLEditorBase implements SWT.LEFT | SWT.CHECK, getSite(), SQLEditorCommands.CMD_SQL_SHOW_OUTPUT, - true) - .setText("Out"); + false); VerticalButton.create( sideToolBar, SWT.LEFT | SWT.CHECK, getSite(), SQLEditorCommands.CMD_SQL_SHOW_LOG, - true) - .setText("Log"); + false); + VerticalButton.create( + sideToolBar, + SWT.LEFT | SWT.CHECK, + getSite(), + SQLEditorCommands.CMD_SQL_SHOW_VARIABLES, + false); /* sideToolBar.add(new GroupMarker(TOOLBAR_GROUP_PANELS)); @@ -1075,6 +1086,7 @@ public class SQLEditor extends SQLEditorBase implements // Extra views //planView = new ExplainPlanViewer(this, resultTabs); logViewer = new SQLLogPanel(sqlExtraPanelFolder, this); + variablesViewer = new SQLVariablesPanel(sqlExtraPanelFolder, this); outputViewer = new SQLEditorOutputConsoleViewer(getSite(), sqlExtraPanelFolder, SWT.NONE); // Create results tab @@ -1365,6 +1377,19 @@ public class SQLEditor extends SQLEditorBase implements null); } + public void showVariablesPanel() { + showExtraView( + SQLEditorCommands.CMD_SQL_SHOW_VARIABLES, + SQLEditorMessages.editors_sql_variables, + SQLEditorMessages.editors_sql_variables_tip, + IMG_VARIABLES, + variablesViewer, + null); + UIUtils.asyncExec(() -> { + variablesViewer.refreshVariables(); + }); + } + public T getExtraPresentationPanel(Class panelClass) { for (CTabItem tabItem : resultTabs.getItems()) { if (tabItem.getData() instanceof SQLEditorPresentationPanel && tabItem.getData().getClass() == panelClass) { diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorCommands.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorCommands.java index 1feb4a34d76f611ca3c32e2f6318d733162ff8d1..20440c08a1d77661ff8d05810209eabe217e7a72 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorCommands.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorCommands.java @@ -41,6 +41,7 @@ public interface SQLEditorCommands String CMD_SQL_SWITCH_PANEL = "org.jkiss.dbeaver.ui.editors.sql.switch.panel"; String CMD_SQL_SHOW_OUTPUT = "org.jkiss.dbeaver.ui.editors.sql.show.output"; String CMD_SQL_SHOW_LOG = "org.jkiss.dbeaver.ui.editors.sql.show.log"; + String CMD_SQL_SHOW_VARIABLES = "org.jkiss.dbeaver.ui.editors.sql.show.variables"; String CMD_SQL_EDITOR_MAXIMIZE_PANEL = "org.jkiss.dbeaver.ui.editors.sql.maximize.result.panel"; String CMD_SQL_EDITOR_CLOSE_TAB = "org.jkiss.dbeaver.ui.editors.sql.close.tab"; String CMD_SQL_ASSIST_TEMPLATES = "org.jkiss.dbeaver.ui.editors.sql.assist.templates"; //$NON-NLS-1$ diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/handlers/SQLEditorHandlerSwitchPanel.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/handlers/SQLEditorHandlerSwitchPanel.java index 814e2392619c0d85e75ea025a03c80b2e5f9c66b..775e937150ebd45045002d3feb4d23de728f56b8 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/handlers/SQLEditorHandlerSwitchPanel.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/handlers/SQLEditorHandlerSwitchPanel.java @@ -48,6 +48,9 @@ public class SQLEditorHandlerSwitchPanel extends AbstractHandler { case SQLEditorCommands.CMD_SQL_SHOW_LOG: editor.showExecutionLogPanel(); break; + case SQLEditorCommands.CMD_SQL_SHOW_VARIABLES: + editor.showVariablesPanel(); + break; } return null; } diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/internal/SQLEditorMessages.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/internal/SQLEditorMessages.java index ec445c6bbbe2f083a09ad4eecbc30880928782bc..f7df50e88e13e8c8c4404ae23b44c85843355917 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/internal/SQLEditorMessages.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/internal/SQLEditorMessages.java @@ -65,6 +65,8 @@ public class SQLEditorMessages extends NLS { public static String editors_sql_error_execution_plan_title; public static String editors_sql_execution_log; public static String editors_sql_execution_log_tip; + public static String editors_sql_variables; + public static String editors_sql_variables_tip; public static String editors_sql_explain_plan; public static String editors_sql_output; public static String editors_sql_output_tip; diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/internal/SQLEditorMessages.properties b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/internal/SQLEditorMessages.properties index 416321195a16ef4c951b46fe4f9d24a47c3b7fe3..597a2bde307dbb9c06c62500b1d16774c3d3fb23 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/internal/SQLEditorMessages.properties +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/internal/SQLEditorMessages.properties @@ -41,6 +41,8 @@ editors_sql_error_execution_plan_message = Can not explain execution plan editors_sql_error_execution_plan_title = Execution plan editors_sql_execution_log = Execution Log editors_sql_execution_log_tip = SQL query execution log +editors_sql_variables = Variables +editors_sql_variables_tip = Active SQL variables editors_sql_explain_plan = Explain Plan editors_sql_job_execute_query = Execute query editors_sql_job_execute_script = Execute script diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/variables/SQLVariablesPanel.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/variables/SQLVariablesPanel.java new file mode 100644 index 0000000000000000000000000000000000000000..ce8dfc459839ade7932e8f56db20a0e4d765e252 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/variables/SQLVariablesPanel.java @@ -0,0 +1,226 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2021 DBeaver Corp and others + * + * 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.ui.editors.sql.variables; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.*; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.texteditor.ITextEditorActionConstants; +import org.jkiss.code.Nullable; +import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.model.exec.DBCExecutionContext; +import org.jkiss.dbeaver.model.exec.DBCScriptContext; +import org.jkiss.dbeaver.model.sql.SQLScriptContext; +import org.jkiss.dbeaver.model.sql.registry.SQLQueryParameterRegistry; +import org.jkiss.dbeaver.ui.UIIcon; +import org.jkiss.dbeaver.ui.UIUtils; +import org.jkiss.dbeaver.ui.editors.StringEditorInput; +import org.jkiss.dbeaver.ui.editors.SubEditorSite; +import org.jkiss.dbeaver.ui.editors.sql.SQLEditor; +import org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase; +import org.jkiss.dbeaver.utils.GeneralUtils; +import org.jkiss.utils.CommonUtils; + +import java.util.List; + +/** + * SQLVariablesPanel + */ +public class SQLVariablesPanel extends Composite { + + static protected final Log log = Log.getLog(SQLVariablesPanel.class); + + private final SQLEditor mainEditor; + private SQLEditorBase valueEditor; + private Table varsTable; + private Button showParametersCheck; + + public SQLVariablesPanel(Composite parent, SQLEditor editor) + { + super(parent, SWT.NONE); + this.mainEditor = editor; + + setLayout(new FillLayout()); + } + + private void createControls() { + SashForm sash = new SashForm(this, SWT.VERTICAL); + + // Variables table + { + Composite varsGroup = UIUtils.createPlaceholder(sash, 1); + + varsTable = new Table(varsGroup, SWT.SINGLE | SWT.FULL_SELECTION); + varsTable.setHeaderVisible(true); + varsTable.setLinesVisible(true); + varsTable.setLayoutData(new GridData(GridData.FILL_BOTH)); + + UIUtils.createTableColumn(varsTable, SWT.LEFT, "Variable"); + UIUtils.createTableColumn(varsTable, SWT.LEFT, "Value"); + UIUtils.createTableColumn(varsTable, SWT.LEFT, "Type"); + + Composite controlPanel = UIUtils.createComposite(varsGroup, 2); + controlPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + ToolBar buttonsBar = new ToolBar(controlPanel, SWT.HORIZONTAL); + buttonsBar.setLayoutData(new GridData(GridData.FILL_VERTICAL)); + + ToolItem addButton = UIUtils.createToolItem(buttonsBar, "Add variable", UIIcon.ADD, new SelectionAdapter() { + + }); + ToolItem removeButton = UIUtils.createToolItem(buttonsBar, "Delete variable", UIIcon.DELETE, new SelectionAdapter() { + + }); + + showParametersCheck = UIUtils.createCheckbox(controlPanel, "Show parameters", "Show query parameters", false, 1); + showParametersCheck.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + refreshVariables(); + } + }); + + varsTable.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + editCurrentVariable(); + } + }); + + //sash.addListener(SWT.Resize, event -> UIUtils.packColumns(varsTable, true)); + } + + // Editor + { + Composite editorGroup = UIUtils.createPlaceholder(sash, 1); + + UIUtils.createControlLabel(editorGroup, "Value"); + + Composite editorPH = new Composite(editorGroup, SWT.NONE); + GridData gd = new GridData(GridData.FILL_BOTH); + gd.verticalIndent = 3; + gd.horizontalSpan = 1; + gd.minimumHeight = 100; + gd.minimumWidth = 100; + editorPH.setLayoutData(gd); + editorPH.setLayout(new FillLayout()); + + valueEditor = new SQLEditorBase() { + @Nullable + @Override + public DBCExecutionContext getExecutionContext() { + return mainEditor.getExecutionContext(); + } + + @Override + public void createPartControl(Composite parent) { + super.createPartControl(parent); + getAction(ITextEditorActionConstants.CONTEXT_PREFERENCES).setEnabled(false); + } + + @Override + public boolean isFoldingEnabled() { + return false; + } + }; + try { + valueEditor.init(new SubEditorSite(mainEditor.getSite()), + new StringEditorInput("Variable value", "", true, GeneralUtils.getDefaultFileEncoding())); + } catch (PartInitException e) { + log.error(e); + } + valueEditor.createPartControl(editorPH); + valueEditor.reloadSyntaxRules(); + + //valueEditor.getEditorControl().setEnabled(false); + + valueEditor.getEditorControlWrapper().setLayoutData(new GridData(GridData.FILL_BOTH)); + } + } + + private void editCurrentVariable() { + int selectionIndex = varsTable.getSelectionIndex(); + StyledText editorControl = valueEditor.getEditorControl(); + if (editorControl == null) { + return; + } + if (selectionIndex >= 0) { + TableItem item = varsTable.getItem(selectionIndex); + DBCScriptContext.VariableInfo variable = (DBCScriptContext.VariableInfo) item.getData(); + + StringEditorInput sqlInput = new StringEditorInput( + "Variable " + variable.name, + CommonUtils.toString(variable.value), + false, + GeneralUtils.DEFAULT_ENCODING + ); + valueEditor.setInput(sqlInput); + valueEditor.reloadSyntaxRules(); + } + } + + public void refreshVariables() { + if (varsTable == null) { + createControls(); + } + + SQLScriptContext context = mainEditor.getGlobalScriptContext(); + + varsTable.removeAll(); + List variables = context.getVariables(); + if (showParametersCheck.getSelection()) { + for (SQLQueryParameterRegistry.ParameterInfo param : SQLQueryParameterRegistry.getInstance().getAllParameters()) { + if (context.hasVariable(param.name)) { + continue; + } + Object parameterValue = context.getParameterDefaultValue(param.name); + if (parameterValue == null) { + parameterValue = param.value; + } + variables.add(new DBCScriptContext.VariableInfo( + param.name, + parameterValue, + DBCScriptContext.VariableType.PARAMETER)); + } + } + for (DBCScriptContext.VariableInfo variable : variables) { + TableItem ti = new TableItem(varsTable, SWT.NONE); + ti.setText(0, variable.name); + ti.setText(1, CommonUtils.toString(variable.value)); + ti.setText(2, variable.type.getTitle()); + ti.setData(variable); + } + + UIUtils.packColumns(varsTable, true); + + valueEditor.setInput(new StringEditorInput( + "Variable", + "", + true, + GeneralUtils.DEFAULT_ENCODING + )); + valueEditor.reloadSyntaxRules(); + } + +} \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.ui/icons/sql/variables.png b/plugins/org.jkiss.dbeaver.ui/icons/sql/variables.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9f913b4c1324915adc1f953afb709eaaa386f1 Binary files /dev/null and b/plugins/org.jkiss.dbeaver.ui/icons/sql/variables.png differ diff --git a/plugins/org.jkiss.dbeaver.ui/icons/sql/variables@2x.png b/plugins/org.jkiss.dbeaver.ui/icons/sql/variables@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..118737c3db1c94d936cf5329e1b931c016cd61e4 Binary files /dev/null and b/plugins/org.jkiss.dbeaver.ui/icons/sql/variables@2x.png differ diff --git a/plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/UIIcon.java b/plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/UIIcon.java index 107aa96bb3215412665dbb5a3a6981a92ae6b94a..5f0466667e34e7b9ba9cf79a996c001902e02f6c 100644 --- a/plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/UIIcon.java +++ b/plugins/org.jkiss.dbeaver.ui/src/org/jkiss/dbeaver/ui/UIIcon.java @@ -190,6 +190,7 @@ public class UIIcon { public static final DBIcon SQL_VALIDATE = new DBIcon("sql_validate", "sql/sql_validate.png"); //$NON-NLS-1$ //$NON-NLS-2$ public static final DBIcon SQL_PREVIEW = new DBIcon("sql_preview", "sql/sql_preview.png"); //$NON-NLS-1$ //$NON-NLS-2$ public static final DBIcon SQL_TEXT = new DBIcon("sql_text", "sql/sql_text.png"); //$NON-NLS-1$ //$NON-NLS-2$ + public static final DBIcon SQL_VARIABLES = new DBIcon("sql_variables", "sql/variables.png"); //$NON-NLS-1$ //$NON-NLS-2$ public static final DBIcon SQL_PAGE_DATA_GRID = new DBIcon("sql/page_data_grid.png"); //$NON-NLS-1$ public static final DBIcon SQL_PAGE_DATA_GRID_LOCKED = new DBIcon("sql/page_data_grid_locked.png"); //$NON-NLS-1$