提交 2c8cbdbf 编写于 作者: S serge-rider

#3640 SQL parameters binding dialog enhancement (hide variables)

上级 0f60d7af
......@@ -443,3 +443,9 @@ editor_binary_hex_status_line_value=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u
dialog_connection_driver=\u0414\u0440\u0430\u0439\u0432\u0435\u0440:
dialog_connection_edit_driver_button=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430
dialog_sql_param_title = \u041F\u0440\u0438\u0432\u044F\u0437\u043A\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432
dialog_sql_param_column_name = \u0418\u043C\u044F
dialog_sql_param_column_value = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435
dialog_sql_param_hide_checkbox = \u0421\u043A\u0440\u044B\u0442\u044C \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u043C
dialog_sql_param_hide_checkbox_tip = \u041D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u044B\u043B\u0438 \u0443\u0441\u0442\u043D\u043E\u0432\u043B\u0435\u043D\u044B \u043A\u043E\u043C\u0430\u043D\u0434\u043E\u0439 @set \u0432 \u0441\u043A\u0440\u0438\u043F\u0442\u0435
dialog_sql_param_hint = \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 Tab \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F. \u0421\u0442\u0440\u043E\u043A\u043E\u0432\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u0432 \u043A\u0430\u0432\u044B\u0447\u043A\u0430\u0445. \u041C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C SQL \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F.
......@@ -692,6 +692,13 @@ public class CoreMessages extends NLS {
public static String dialog_view_sql_button_copy;
public static String dialog_view_sql_button_persist;
public static String dialog_sql_param_title;
public static String dialog_sql_param_column_name;
public static String dialog_sql_param_column_value;
public static String dialog_sql_param_hide_checkbox;
public static String dialog_sql_param_hide_checkbox_tip;
public static String dialog_sql_param_hint;
public static String editor_binary_hex_default_font;
public static String editor_binary_hex_font_style_bold;
public static String editor_binary_hex_font_style_bold_italic;
......
......@@ -684,6 +684,12 @@ dialog_view_classpath_title = System Classpath
dialog_view_sql_button_copy = Copy
dialog_view_sql_button_persist = Persist
dialog_sql_param_title = Bind parameter(s)
dialog_sql_param_column_name = Name
dialog_sql_param_column_value = Value
dialog_sql_param_hide_checkbox = Hide parameters set in script
dialog_sql_param_hide_checkbox_tip = Do not show parameters which were set in script by @set command
dialog_sql_param_hint = Use Tab to switch. String values must be quoted. You can use expressions in values
editor_binary_hex_default_font = default font
editor_binary_hex_font_style_bold = Bold
......
......@@ -609,36 +609,37 @@ public class SQLQueryJob extends DataSourceJob
private boolean fillStatementParameters(final List<SQLQueryParameter> parameters)
{
boolean allSet = true;
for (SQLQueryParameter param : parameters) {
if (param.getValue() == null) {
allSet = false;
}
String paramName = param.getTitle();
if (scriptContext.hasVariable(paramName)) {
Object varValue = scriptContext.getVariable(paramName);
String strValue;
/*if (varValue instanceof String) {
strValue = SQLUtils.quoteString(getExecutionContext().getDataSource(), (String) varValue);
} else */{
strValue = varValue == null ? null : varValue.toString();
}
String strValue = varValue == null ? null : varValue.toString();
param.setValue(strValue);
param.setVariableSet(true);
} else {
param.setVariableSet(false);
}
}
boolean allSet = true;
for (SQLQueryParameter param : parameters) {
if (!param.isVariableSet()) {
allSet = false;
}
}
if (allSet) {
return true;
}
boolean okPressed = true;
okPressed = new UIConfirmation() {
@Override
public Boolean runTask() {
boolean okPressed = new UIConfirmation() {
@Override
public Boolean runTask() {
SQLQueryParameterBindDialog dialog = new SQLQueryParameterBindDialog(
partSite.getShell(),
parameters);
partSite.getShell(),
parameters);
return (dialog.open() == IDialogConstants.OK_ID);
}
}.execute();
if (okPressed) {
// Save values back to script context
for (SQLQueryParameter param : parameters) {
......
......@@ -19,8 +19,11 @@ package org.jkiss.dbeaver.runtime.sql;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.StatusDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.sql.SQLQueryParameter;
import org.jkiss.dbeaver.ui.DBeaverIcons;
......@@ -46,6 +49,7 @@ public class SQLQueryParameterBindDialog extends StatusDialog {
private static Map<String, SQLQueryParameterRegistry.ParameterInfo> savedParamValues = new HashMap<>();
private Button hideIfSetCheck;
private Table paramTable;
public SQLQueryParameterBindDialog(Shell shell, List<SQLQueryParameter> parameters)
{
......@@ -84,10 +88,10 @@ public class SQLQueryParameterBindDialog extends StatusDialog {
@Override
protected Control createDialogArea(Composite parent)
{
getShell().setText("Bind parameter(s)");
getShell().setText(CoreMessages.dialog_sql_param_title);
final Composite composite = (Composite)super.createDialogArea(parent);
final Table paramTable = new Table(composite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
paramTable = new Table(composite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
final GridData gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = 400;
gd.heightHint = 200;
......@@ -97,25 +101,12 @@ public class SQLQueryParameterBindDialog extends StatusDialog {
final TableColumn indexColumn = UIUtils.createTableColumn(paramTable, SWT.LEFT, "#");
indexColumn.setWidth(40);
final TableColumn nameColumn = UIUtils.createTableColumn(paramTable, SWT.LEFT, "Name");
final TableColumn nameColumn = UIUtils.createTableColumn(paramTable, SWT.LEFT, CoreMessages.dialog_sql_param_column_name);
nameColumn.setWidth(100);
final TableColumn valueColumn = UIUtils.createTableColumn(paramTable, SWT.LEFT, "Value");
final TableColumn valueColumn = UIUtils.createTableColumn(paramTable, SWT.LEFT, CoreMessages.dialog_sql_param_column_value);
valueColumn.setWidth(200);
for (SQLQueryParameter param : parameters) {
if (param.getPrevious() != null) {
// Skip duplicates
List<SQLQueryParameter> dups = dupParameters.computeIfAbsent(param.getName(), k -> new ArrayList<>());
dups.add(param);
continue;
}
TableItem item = new TableItem(paramTable, SWT.NONE);
item.setData(param);
item.setImage(DBeaverIcons.getImage(DBIcon.TREE_ATTRIBUTE));
item.setText(0, String.valueOf(param.getOrdinalPosition() + 1));
item.setText(1, param.getTitle());
item.setText(2, CommonUtils.notEmpty(param.getValue()));
}
fillParameterList(isHideIfSet());
final CustomTableEditor tableEditor = new CustomTableEditor(paramTable) {
{
......@@ -156,13 +147,6 @@ public class SQLQueryParameterBindDialog extends StatusDialog {
}
};
/*
hideIfSetCheck = UIUtils.createCheckbox(composite,
"Do not show is all parameters are set",
"Do not show this dialog if all parameters were set as script variable",
getDialogBoundsSettings().getBoolean(PARAM_HIDE_IF_SET), 1);
*/
if (!parameters.isEmpty()) {
UIUtils.asyncExec(() -> {
paramTable.select(0);
......@@ -170,10 +154,43 @@ public class SQLQueryParameterBindDialog extends StatusDialog {
});
}
updateStatus(GeneralUtils.makeInfoStatus("Use Tab to switch. String values must be quoted. You can use expressions in values"));
hideIfSetCheck = UIUtils.createCheckbox(composite,
CoreMessages.dialog_sql_param_hide_checkbox, CoreMessages.dialog_sql_param_hide_checkbox_tip,
isHideIfSet(),
1);
hideIfSetCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
fillParameterList(hideIfSetCheck.getSelection());
}
});
updateStatus(GeneralUtils.makeInfoStatus(CoreMessages.dialog_sql_param_hint));
return composite;
}
private void fillParameterList(boolean hideVariables) {
paramTable.removeAll();
for (SQLQueryParameter param : parameters) {
if (hideVariables && param.isVariableSet()) {
continue;
}
if (param.getPrevious() != null) {
// Skip duplicates
List<SQLQueryParameter> dups = dupParameters.computeIfAbsent(param.getName(), k -> new ArrayList<>());
dups.add(param);
continue;
}
TableItem item = new TableItem(paramTable, SWT.NONE);
item.setData(param);
item.setImage(DBeaverIcons.getImage(DBIcon.TREE_ATTRIBUTE));
item.setText(0, String.valueOf(param.getOrdinalPosition() + 1));
item.setText(1, param.getTitle());
item.setText(2, CommonUtils.notEmpty(param.getValue()));
}
}
@Override
protected void okPressed()
{
......@@ -191,4 +208,5 @@ public class SQLQueryParameterBindDialog extends StatusDialog {
public static boolean isHideIfSet() {
return UIUtils.getDialogSettings(DIALOG_ID).getBoolean(PARAM_HIDE_IF_SET);
}
}
......@@ -25,6 +25,7 @@ public class SQLQueryParameter {
private int ordinalPosition;
private String name;
private String value;
private boolean variableSet;
private final int tokenOffset;
private final int tokenLength;
private SQLQueryParameter previous;
......@@ -88,6 +89,14 @@ public class SQLQueryParameter {
this.value = value;
}
public boolean isVariableSet() {
return variableSet;
}
public void setVariableSet(boolean variableSet) {
this.variableSet = variableSet;
}
public String getTitle() {
if (GeneralUtils.isVariablePattern(name)) {
return GeneralUtils.stripVariablePattern(name);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册