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

#6523 SQL parameters ignore support

上级 be7a12a3
......@@ -1582,7 +1582,7 @@ public class SQLEditor extends SQLEditorBase implements
}
// Transform query parameters
if (sqlQuery != null) {
new SQLQueryJob(
SQLQueryJob queryJob = new SQLQueryJob(
getSite(),
"Plan query",
getExecutionContext(),
......@@ -1590,8 +1590,10 @@ public class SQLEditor extends SQLEditorBase implements
Collections.emptyList(),
this.globalScriptContext,
null,
null)
.transformQueryWithParameters(sqlQuery);
null);
if (!queryJob.transformQueryWithParameters(sqlQuery)) {
return null;
}
}
ExplainPlanViewer planView = null;
......
......@@ -16,11 +16,13 @@
*/
package org.jkiss.dbeaver.ui.editors.sql.dialogs;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.StatusDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.sql.SQLQueryParameter;
......@@ -198,6 +200,21 @@ public class SQLQueryParameterBindDialog extends StatusDialog {
}
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
Button skipButton = UIUtils.createDialogButton(parent, IDialogConstants.IGNORE_LABEL, new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setReturnCode(IDialogConstants.IGNORE_ID);
close();
}
});
skipButton.setToolTipText("Ignore parameters and execute query/script as is");
((GridLayout) parent.getLayout()).numColumns++;
super.createButtonsForButtonBar(parent);
}
@Override
protected void okPressed()
{
......
......@@ -111,6 +111,7 @@ public class SQLQueryJob extends DataSourceJob
private boolean skipConfirmation;
private int fetchSize;
private long readFlags;
private boolean ignoreParameters;
public SQLQueryJob(
@NotNull IWorkbenchPartSite partSite,
......@@ -619,6 +620,10 @@ public class SQLQueryJob extends DataSourceJob
}
public boolean prepareStatementParameters(SQLQuery sqlStatement) {
if (ignoreParameters) {
return true;
}
// Bind parameters
List<SQLQueryParameter> parameters = sqlStatement.getParameters();
if (CommonUtils.isEmpty(parameters)) {
......@@ -632,6 +637,9 @@ public class SQLQueryJob extends DataSourceJob
}
}
if (ignoreParameters) {
return true;
}
// Set values for all parameters
// Replace parameter tokens with parameter values
String query = sqlStatement.getText();
......@@ -670,17 +678,14 @@ public class SQLQueryJob extends DataSourceJob
return true;
}
boolean okPressed = new UIConfirmation() {
@Override
public Boolean runTask() {
SQLQueryParameterBindDialog dialog = new SQLQueryParameterBindDialog(
partSite.getShell(),
parameters);
return (dialog.open() == IDialogConstants.OK_ID);
}
}.execute();
int paramsResult = UITask.run(() -> {
SQLQueryParameterBindDialog dialog = new SQLQueryParameterBindDialog(
partSite.getShell(),
parameters);
return dialog.open();
});
if (okPressed) {
if (paramsResult == IDialogConstants.OK_ID) {
// Save values back to script context
for (SQLQueryParameter param : parameters) {
if (param.isNamed() && scriptContext.hasVariable(param.getVarName())) {
......@@ -688,8 +693,12 @@ public class SQLQueryJob extends DataSourceJob
scriptContext.setVariable(param.getVarName(), strValue);
}
}
return true;
} else if (paramsResult == IDialogConstants.IGNORE_ID) {
ignoreParameters = true;
return true;
}
return okPressed;
return false;
}
private boolean fetchQueryData(DBCSession session, DBCResultSet resultSet, SQLQueryResult result, SQLQueryResult.ExecuteResult executeResult, DBDDataReceiver dataReceiver, boolean updateStatistics)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册